/* -*- C++ -*- * * Copyright (C) 2006 Trolltech AS. All rights reserved. * Author: Thiago Macieira * * Licensed under the Academic Free License version 2.1 * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef QDBUSINTROSPECTION_H #define QDBUSINTROSPECTION_H #include #include #include #include #include #include #include "qdbustype.h" #include "qdbusmacros.h" class QDBUS_EXPORT QDBusIntrospection { public: // forward declarations struct Argument; struct Method; struct Signal; struct Property; struct Interface; struct Object; struct ObjectTree; // typedefs typedef QMap Annotations; typedef QList Arguments; typedef QMultiMap Methods; typedef QMultiMap Signals; typedef QMap Properties; typedef QMap > Interfaces; typedef QMap > Objects; public: // the structs struct Argument { QDBusType type; QString name; inline bool operator==(const Argument& other) const { return name == other.name && type == other.type; } }; struct Method { QString name; Arguments inputArgs; Arguments outputArgs; Annotations annotations; inline bool operator==(const Method& other) const { return name == other.name && annotations == other.annotations && inputArgs == other.inputArgs && outputArgs == other.outputArgs; } }; struct Signal { QString name; Arguments outputArgs; Annotations annotations; inline bool operator==(const Signal& other) const { return name == other.name && annotations == other.annotations && outputArgs == other.outputArgs; } }; struct Property { enum Access { Read, Write, ReadWrite }; QString name; QDBusType type; Access access; Annotations annotations; inline bool operator==(const Property& other) const { return access == other.access && name == other.name && annotations == other.annotations && type == other.type; } }; struct Interface: public QSharedData { QString name; QString introspection; Annotations annotations; Methods methods; Signals signals_; Properties properties; inline bool operator==(const Interface &other) const { return name == other.name; } }; struct Object: public QSharedData { QString service; QString path; QString introspection; QStringList interfaces; QStringList childObjects; }; struct ObjectTree: public Object { Interfaces interfaceData; Objects childObjectData; }; public: static Interface parseInterface(const QString &xml); static Interfaces parseInterfaces(const QString &xml); static Object parseObject(const QString &xml, const QString &service = QString(), const QString &path = QString()); static ObjectTree parseObjectTree(const QString &xml, const QString &service, const QString &path); private: QDBusIntrospection(); }; #endif