From d73523fda67286811232cad65fddbe3a2697e28a Mon Sep 17 00:00:00 2001 From: Andrey Paskal Date: Tue, 23 Dec 2008 17:16:11 +0300 Subject: [PATCH] CVS sync. Original comment:new metadata system making --- src/lib/metadata/ametadata.cpp | 15 +++- src/lib/metadata/ametadata.h | 5 +- src/lib/metadata/ametadataio.h | 4 +- src/lib/metadata/ametadataioxml.cpp | 46 ++++++-- src/lib/metadata/ametadataioxml.h | 2 +- src/lib/metadata/ametadocument.cpp | 25 ++++- src/lib/metadata/ametadocument.h | 24 ++++- src/lib/metadata/ametafield.cpp | 17 ++-- src/lib/metadata/ametafield.h | 14 ++- src/lib/metadata/ametaform.cpp | 13 ++- src/lib/metadata/ametaform.h | 14 +++- src/lib/metadata/ametaobject.cpp | 185 ++++++++++++++++++--------------- src/lib/metadata/ametaobject.h | 73 +++++++++----- src/lib/metadata/ametaobjectgroup.cpp | 113 ++------------------- src/lib/metadata/ametaobjectgroup.h | 76 ++------------ src/test/testametadata.cpp | 73 ++++++++----- src/test/testametadata.h | 4 +- 17 files changed, 351 insertions(+), 352 deletions(-) diff --git a/src/lib/metadata/ametadata.cpp b/src/lib/metadata/ametadata.cpp index 8bf566e..e819efa 100644 --- a/src/lib/metadata/ametadata.cpp +++ b/src/lib/metadata/ametadata.cpp @@ -1,5 +1,5 @@ /**************************************************************************** -** $Id: ametadata.cpp,v 1.3 2008/12/14 10:53:02 leader Exp $ +** $Id: ametadata.cpp,v 1.5 2008/12/20 21:17:49 leader Exp $ ** ** Code file of the Ananas configuration objects of Ananas ** Designer and Engine applications @@ -39,7 +39,7 @@ AMetaData AMetaData_default; * */ AMetaData::AMetaData() -:AMetaObjectGroup( "MetaData", (AMetaObjectGroup *) 0 ) +:AMetaGroup( "MetaData", 0 ) { /* int i = qRegisterMetaType("AMetaDataInfo"); @@ -54,6 +54,17 @@ int id = QMetaType::type("AMetaDataInfo"); myClassPtr = 0; } */ + addChild( &v_info ); + addChild( &v_global ); + + addChild( &v_catalogues ); + addChild( &v_documents ); + addChild( &v_reports ); + addChild( &v_journals ); + addChild( &v_inforegisters ); + addChild( &v_accregisters ); + +// addChild( &v_info ); } diff --git a/src/lib/metadata/ametadata.h b/src/lib/metadata/ametadata.h index 4a2fcf9..b4b18a2 100644 --- a/src/lib/metadata/ametadata.h +++ b/src/lib/metadata/ametadata.h @@ -1,5 +1,5 @@ /**************************************************************************** -** $Id: ametadata.h,v 1.3 2008/12/14 10:53:02 leader Exp $ +** $Id: ametadata.h,v 1.4 2008/12/20 21:17:49 leader Exp $ ** ** Header file of the Ananas configuration objects of Ananas ** Designer and Engine applications @@ -36,6 +36,7 @@ #include "ametaobject.h" #include "ametaobjectgroup.h" +#include "ametadocument.h" #ifdef __BORLANDC__ @@ -66,7 +67,7 @@ * Наследует QObject. *\_ru */ -class AMetaData: public AMetaObjectGroup +class AMetaData: public AMetaGroup { Q_OBJECT //Q_PROPERTY( AMetaDataInfo info READ info SCRIPTABLE true ) diff --git a/src/lib/metadata/ametadataio.h b/src/lib/metadata/ametadataio.h index f515e92..1e904b8 100644 --- a/src/lib/metadata/ametadataio.h +++ b/src/lib/metadata/ametadataio.h @@ -1,5 +1,5 @@ /**************************************************************************** -** $Id: ametadataio.h,v 1.3 2008/12/15 22:22:48 leader Exp $ +** $Id: ametadataio.h,v 1.4 2008/12/19 20:15:50 leader Exp $ ** ** Header file of the Ananas configuration objects of Ananas ** Designer and Engine applications @@ -42,7 +42,7 @@ public: virtual int write( const QString &name, AMetaData *md = 0); virtual QObject *createObject( const QString &name ); //virtual void storeGroup( AMetaObjectGroup *g ); - virtual void storeGroupBegin( AMetaObjectGroup *g ); +// virtual void storeGroupBegin( AMetaObjectGroup *g ); signals: void message( int msg_class, const QString & msg ); diff --git a/src/lib/metadata/ametadataioxml.cpp b/src/lib/metadata/ametadataioxml.cpp index 29d0e72..3012b8f 100644 --- a/src/lib/metadata/ametadataioxml.cpp +++ b/src/lib/metadata/ametadataioxml.cpp @@ -1,5 +1,5 @@ /**************************************************************************** -** $Id: ametadataioxml.cpp,v 1.2 2008/12/13 22:19:15 leader Exp $ +** $Id: ametadataioxml.cpp,v 1.5 2008/12/20 21:17:49 leader Exp $ ** ** Code file of the Ananas configuration objects of Ananas ** Designer and Engine applications @@ -285,22 +285,29 @@ AMetaDataIOXML::write( const QString &name, AMetaData *md ) QFile file( name ); if ( !md ) md = AMetaData::metadata(); -// QDomDocument xml("ananas4_configuration"); QDomNode cur, sub; QDomElement node, rootnode, cfginfo, mdelement, iface, actions; xml.setContent(QString("\n")); xml.appendChild( xml.implementation().createDocumentType("ananas_configuration", QString::null,"ananas-cfg.dtd")); - rootnode = xml.createElement( md_root ); + rootnode = AMetaObjectToXML( md ); +//xml.createElement( md_root ); xml.appendChild( rootnode ); rootnode = xml.documentElement(); +// rootnode.appendChild( AMetaObjectToXML( md ) ); +/* rootnode.appendChild( AMetaObjectToXML( md->info() ) ); rootnode.appendChild( AMetaObjectToXML( md->global() ) ); - - node = xml.createElement( md_info ); + int i; + for ( i = 0; i< md->groupCount(); i++ ){ + node = xml.createElement( md->group( i )->name() ); + rootnode.appendChild( node ); + } +*/ +/* node = xml.createElement( md_info ); rootnode.appendChild( node ); @@ -312,7 +319,7 @@ AMetaDataIOXML::write( const QString &name, AMetaData *md ) node = xml.createElement( md_actions ); rootnode.appendChild( node ); - +*/ if ( !file.open( QIODevice::WriteOnly ) ) return 1; QTextStream ts( &file ); @@ -331,6 +338,7 @@ AMetaDataIOXML::XMLToAMetaObject( QDomElement e, AMetaObject *o ) QDomNode cur; QString s, t; int id; + QVariant v; cur = e.firstChild(); while (!cur.isNull()) { @@ -340,9 +348,12 @@ AMetaDataIOXML::XMLToAMetaObject( QDomElement e, AMetaObject *o ) id = se.attribute( mda_id ).toInt(); o->setId( id ); } - s = se.text(); -// qDebug() << se.tagName() << ":" << s; - if ( !s.isNull() ) o->setText( se.tagName(), s ); + if ( se.hasAttribute( "type" ) ) { + t = se.attribute("type"); + v.clear(); + v = se.text(); + if ( v.convert( QVariant::nameToType( t ) ) ) o->setAttr( se.tagName(), v ); + } cur = cur.nextSibling(); } @@ -357,15 +368,26 @@ AMetaDataIOXML::AMetaObjectToXML( AMetaObject *o ) QDomElement e, se; e = xml.createElement( o->className() ); - for ( i=0; i< o->textCount(); i++ ){ - se = xml.createElement( o->textName( i ) ); - se.appendChild( xml.createTextNode( o->text( i ) ) ); + if ( !o->inherits("AMetaObjectGroup") ){ + if ( !o->name().isEmpty() ) { + e.setAttribute("name", o->name() ); + if ( o->id() > 0 ) e.setAttribute("id", QString::number(o->id()) ); + } + } + for ( i=0; i< o->attrCount(); i++ ){ + se = xml.createElement( o->attrName( i ) ); + se.setAttribute("type", o->attr( i ).typeName() ); + se.appendChild( xml.createTextNode( o->attr( i ).toString() ) ); e.appendChild( se ); } + for ( i=0; i< o->childCount(); i++ ){ + e.appendChild( AMetaObjectToXML( o->child( i ) ) ); + } return e; } + QString AMetaDataIOXML::text() { diff --git a/src/lib/metadata/ametadataioxml.h b/src/lib/metadata/ametadataioxml.h index bae4f59..590f1e4 100644 --- a/src/lib/metadata/ametadataioxml.h +++ b/src/lib/metadata/ametadataioxml.h @@ -1,5 +1,5 @@ /**************************************************************************** -** $Id: ametadataioxml.h,v 1.2 2008/12/13 22:19:15 leader Exp $ +** $Id: ametadataioxml.h,v 1.4 2008/12/20 21:17:49 leader Exp $ ** ** Header file of the Ananas configuration objects of Ananas ** Designer and Engine applications diff --git a/src/lib/metadata/ametadocument.cpp b/src/lib/metadata/ametadocument.cpp index 0de6592..b7678c5 100644 --- a/src/lib/metadata/ametadocument.cpp +++ b/src/lib/metadata/ametadocument.cpp @@ -1,5 +1,5 @@ /**************************************************************************** -** $Id: ametadocument.cpp,v 1.1 2008/12/15 22:22:48 leader Exp $ +** $Id: ametadocument.cpp,v 1.2 2008/12/20 21:17:49 leader Exp $ ** ** Code file of the Ananas configuration objects of Ananas ** Designer and Engine applications @@ -33,9 +33,15 @@ * \class AMetaDocument * */ -AMetaDocument::AMetaDocument() -:AMetaObject("Document") +AMetaDocument::AMetaDocument( AMetaObject *parent ) +:AMetaObject("Document", "", parent ) { + setId( lastId() ); + setName( QString("%1_%2").arg( tr("Document") ).arg( id() ) ); + addChild( &v_fields ); + addChild( &v_tables ); + addChild( &v_forms ); + } @@ -59,3 +65,16 @@ AMetaDocument::forms() { return &v_forms; } + + + +/*! + * \class ADocumentsGroup + * + */ +ADocumentsGroup::ADocumentsGroup() +:AMetaGroup("Documents") +{ + +} + diff --git a/src/lib/metadata/ametadocument.h b/src/lib/metadata/ametadocument.h index 91ff5e8..9b10a54 100644 --- a/src/lib/metadata/ametadocument.h +++ b/src/lib/metadata/ametadocument.h @@ -1,5 +1,5 @@ /**************************************************************************** -** $Id: ametadocument.h,v 1.1 2008/12/15 22:22:48 leader Exp $ +** $Id: ametadocument.h,v 1.2 2008/12/20 21:17:49 leader Exp $ ** ** Header file of the Ananas configuration objects of Ananas ** Designer and Engine applications @@ -34,13 +34,14 @@ #include "ametaobject.h" #include "ametaobjectgroup.h" #include "ametafield.h" +#include "ametaform.h" class AMetaDocument: public AMetaObject { Q_OBJECT public: - AMetaDocument(); + AMetaDocument( AMetaObject *parent = 0 ); public slots: AMetaFields *fields(); @@ -53,4 +54,23 @@ private: AMetaForms v_forms; }; + + +class ADocumentsGroup: public AMetaGroup +{ +Q_OBJECT +public: + ADocumentsGroup(); + + AMetaDocument *newDocument(){ return new AMetaDocument( this );}; + AMetaDocument *document( const QString &name ){ return (AMetaDocument*) child( name );}; + AMetaDocument *document( int idx ){ return (AMetaDocument*) child( idx );}; + int documentCount(){ return childCount(); }; + +public slots: + QString test(){ return QString("DOCUMENTS TEST STRING");}; + + +}; + #endif diff --git a/src/lib/metadata/ametafield.cpp b/src/lib/metadata/ametafield.cpp index e979278..590a3f2 100644 --- a/src/lib/metadata/ametafield.cpp +++ b/src/lib/metadata/ametafield.cpp @@ -1,5 +1,5 @@ /**************************************************************************** -** $Id: ametafield.cpp,v 1.1 2008/12/15 22:22:48 leader Exp $ +** $Id: ametafield.cpp,v 1.2 2008/12/20 21:17:49 leader Exp $ ** ** Code file of the Ananas configuration objects of Ananas ** Designer and Engine applications @@ -34,9 +34,11 @@ * \class AMetaField * */ -AMetaField::AMetaField() -:AMetaObject("MetaField") +AMetaField::AMetaField( AMetaObject *parent ) +:AMetaObject("MetaField","", parent ) { + setId( lastId() ); + setName( QString("%1_%2").arg( tr("Field") ).arg( id() ) ); setFieldType( Unknown ); setFieldSubType( 0 ); setWidth( 0 ); @@ -47,8 +49,9 @@ AMetaField::AMetaField() } -AMetaField::AMetaField( FieldTypes t, int st, int w, int d, bool notnul, bool notneg, bool calcsum ) -:AMetaObject("MetaField") +/* +AMetaField::AMetaField( FieldTypes t, int st, int w, int d, bool notnul, bool notneg, bool calcsum, ) +:AMetaObject("MetaField", "", parent ) { setFieldType( t ); setFieldSubType( st ); @@ -58,7 +61,7 @@ AMetaField::AMetaField( FieldTypes t, int st, int w, int d, bool notnul, bool no setNotNegative( notneg ); setCalcSumm( calcsum ); } - +*/ int AMetaField::fieldType() @@ -169,7 +172,7 @@ AMetaField::setCalcSumm( bool f ) * */ AMetaFields::AMetaFields() -:AMetaObjectGroup("MetaFields") +:AMetaGroup("MetaFields") { } diff --git a/src/lib/metadata/ametafield.h b/src/lib/metadata/ametafield.h index 9e3c5e6..f27d130 100644 --- a/src/lib/metadata/ametafield.h +++ b/src/lib/metadata/ametafield.h @@ -1,5 +1,5 @@ /**************************************************************************** -** $Id: ametafield.h,v 1.1 2008/12/15 22:22:48 leader Exp $ +** $Id: ametafield.h,v 1.2 2008/12/20 21:17:49 leader Exp $ ** ** Header file of the Ananas configuration objects of Ananas ** Designer and Engine applications @@ -49,12 +49,12 @@ Q_PROPERTY( bool calcsumm READ calcSumm SCRIPTABLE true ) public: enum FieldTypes { Unknown, Char, String, Number, Date, Object, Document, Catalogue }; - AMetaField(); + AMetaField( AMetaObject *parent = 0 ); - AMetaField( FieldTypes t, int st = 0, int w = 0, +/* AMetaField( FieldTypes t, int st = 0, int w = 0, int d = 0, bool notnul = false, bool notneg = false, bool calcsum = false ); - +*/ int fieldType(); void setFieldType( FieldTypes t ); @@ -81,11 +81,15 @@ private: }; -class AMetaFields: public AMetaObjectGroup +class AMetaFields: public AMetaGroup { Q_OBJECT public: AMetaFields(); + AMetaField * newField(){ return new AMetaField( this );}; + AMetaField *field( const QString &name ){ return (AMetaField*) child( name );}; + AMetaField *field( int idx ){ return (AMetaField*) child( idx );}; + int fieldCount(){ return childCount(); }; public slots: diff --git a/src/lib/metadata/ametaform.cpp b/src/lib/metadata/ametaform.cpp index 4f98592..23bded5 100644 --- a/src/lib/metadata/ametaform.cpp +++ b/src/lib/metadata/ametaform.cpp @@ -1,5 +1,5 @@ /**************************************************************************** -** $Id: ametaform.cpp,v 1.1 2008/12/15 22:22:48 leader Exp $ +** $Id: ametaform.cpp,v 1.2 2008/12/20 21:17:49 leader Exp $ ** ** Code file of the Ananas configuration objects of Ananas ** Designer and Engine applications @@ -38,3 +38,14 @@ AMetaForm::AMetaForm() :AMetaObject("MetaForm") { } + + +/*! + * \class AMetaForms + * + */ +AMetaForms::AMetaForms() +:AMetaGroup("MetaForms") +{ + +} diff --git a/src/lib/metadata/ametaform.h b/src/lib/metadata/ametaform.h index 0436d21..65f4997 100644 --- a/src/lib/metadata/ametaform.h +++ b/src/lib/metadata/ametaform.h @@ -1,5 +1,5 @@ /**************************************************************************** -** $Id: ametaform.h,v 1.1 2008/12/15 22:22:48 leader Exp $ +** $Id: ametaform.h,v 1.2 2008/12/20 21:17:49 leader Exp $ ** ** Header file of the Ananas configuration objects of Ananas ** Designer and Engine applications @@ -42,4 +42,16 @@ private: }; + +class AMetaForms: public AMetaGroup +{ +Q_OBJECT +public: + AMetaForms(); + +public slots: + + +}; + #endif diff --git a/src/lib/metadata/ametaobject.cpp b/src/lib/metadata/ametaobject.cpp index 7f19273..d4952de 100644 --- a/src/lib/metadata/ametaobject.cpp +++ b/src/lib/metadata/ametaobject.cpp @@ -1,5 +1,5 @@ /**************************************************************************** -** $Id: ametaobject.cpp,v 1.2 2008/12/15 22:22:48 leader Exp $ +** $Id: ametaobject.cpp,v 1.5 2008/12/20 21:17:49 leader Exp $ ** ** Code file of the Ananas configuration objects of Ananas ** Designer and Engine applications @@ -34,6 +34,7 @@ #include #include #include +#include #include "ametaobject.h" #include "ametaobjectgroup.h" @@ -51,18 +52,30 @@ * Наследует QObject. *\_ru */ +int AMetaObject::v_lastId = 101; AMetaObject::AMetaObject(const QString &objectclass, const QString &objectname, - AMetaObjectGroup *parent) + AMetaObject *parent) :QObject( parent ) { setObjectName( objectname ); setClassName( objectclass ); setDescription(""); + setId( 0 ); + if ( parent ) parent->addChild( this ); +// if ( !this->inherits("AMetaObjectGroup") ) setId( lastId() ); } +AMetaObject::~AMetaObject() +{ + AMetaObject *p = ( AMetaObject *) parent(); + if ( p && p->inherits("AMetaObject") ) p->removeChild( this ); +} + + + Q_ULONG AMetaObject::id() { @@ -98,65 +111,62 @@ AMetaObject::name() } -QString -AMetaObject::description() +AMetaObject * +AMetaObject::rootObject() { - return text("description"); + AMetaObject *o = parentMetaObject(); + while ( o->parentMetaObject() ) o = o->parentMetaObject(); + if ( !o->inherits("AMetaData" ) ) o = 0; + return o; } -void -AMetaObject::setDescription( const QString &descr ) -{ - setText( "description", descr ); -} -void -AMetaObject::setAttr( const QString &name, const QVariant &value ) +AMetaObject * +AMetaObject::parentMetaObject() { - if ( value.isNull() && attrExists( name ) ) v_attr.remove( name ); - else v_attr[ name ] = value; + AMetaObject *p = (AMetaObject *) parent(); + if ( !p ) p = v_parent; + else if ( !p->inherits("AMetaObject") ) p = 0; + return p; } void -AMetaObject::setText( const QString &name, const QString &text ) +AMetaObject::setParentMetaObject( AMetaObject * parent ) { - if ( text.isNull() && textExists( name ) ) v_text.remove( name ); - else v_text[ name ] = text; + v_parent = parent; } -void -AMetaObject::setRawdata( const QString &name, const QByteArray &data ) + +QString +AMetaObject::description() { - if ( data.isNull() && rawdataExists( name ) ) v_rawdata.remove( name ); - else v_rawdata[ name ] = data; + return v_description; } - - -QVariant -AMetaObject::attr( const QString &name ) const +void +AMetaObject::setDescription( const QString &descr ) { - return v_attr.value( name, QVariant() ); + v_description = descr; } - -QString -AMetaObject::text( const QString &name ) const +void +AMetaObject::setAttr( const QString &name, const QVariant &value ) { - return v_text.value( name, QString::null ); + if ( value.isNull() && attrExists( name ) ) v_attr.remove( name ); + else v_attr[ name ] = value; } -QByteArray -AMetaObject::rawdata( const QString &name ) const +QVariant +AMetaObject::attr( const QString &name ) const { - return v_rawdata.value( name, QByteArray() ); + return v_attr.value( name, QVariant() ); } @@ -170,91 +180,94 @@ AMetaObject::attr( int idx ) const QString -AMetaObject::text( int idx ) const +AMetaObject::attrName( int idx ) const { - return text( textName( idx ) ); + if ( idx < 0 || idx >= attrCount() ) return QString::null; + return v_attr.keys().at( idx ); } -QByteArray -AMetaObject::rawdata( int idx ) const +bool +AMetaObject::attrExists( const QString &name ) { - return rawdata( rawdataName( idx ) ); + return v_attr.contains( name ); } -QString -AMetaObject::attrName( int idx ) const +int +AMetaObject::attrCount() const { - if ( idx < 0 || idx >= attrCount() ) return QString::null; - return v_attr.keys().at( idx ); + return v_attr.size(); } -QString -AMetaObject::textName( int idx ) const +int +AMetaObject::lastId() { - if ( idx < 0 || idx >= textCount() ) return QString::null; - return v_text.keys().at( idx ); -} - - + static QMutex m; -QString -AMetaObject::rawdataName( int idx ) const -{ - if ( idx < 0 || idx >= rawdataCount() ) return QString::null; - return v_rawdata.keys().at( idx ); + m.lock(); + int res = v_lastId; + v_lastId++; + m.unlock(); + return res; } -bool -AMetaObject::attrExists( const QString &name ) +void +AMetaObject::setLastId( int id ) { - return v_attr.contains( name ); + v_lastId = id; } - -bool -AMetaObject::textExists( const QString &name ) +int +AMetaObject::childCount() { - return v_text.contains( name ); + return v_child.count(); } -bool -AMetaObject::rawdataExists( const QString &name ) +AMetaObject * +AMetaObject::child( int idx ) { - return v_rawdata.contains( name ); + if ( idx < 0 || idx >= childCount() ) return 0; + return v_child.values().at( idx ); } -int -AMetaObject::attrCount() const +AMetaObject * +AMetaObject::child( const QString &name ) { - return v_attr.size(); + return v_child.value( name, 0 ); } -int -AMetaObject::textCount() const +void +AMetaObject::addChild( AMetaObject * c ) { - return v_text.size(); + QString name; + + if ( c ) { + name = c->name(); + if ( name.isEmpty() ) name = c->className(); + v_child.insertMulti( name, c ); + } } -int -AMetaObject::rawdataCount() const + +void +AMetaObject::removeChild( AMetaObject * c ) { - return v_rawdata.size(); + if ( c ) v_child.remove( v_child.key( c ) ); } @@ -266,6 +279,8 @@ AMetaObject::rawdataCount() const AMetaCatalogue::AMetaCatalogue() :AMetaObject("Catalogue") { + setId( lastId() ); + setName( QString("%1_%2").arg( tr("Catalogue") ).arg( id() ) ); } @@ -306,56 +321,56 @@ AMetaDataInfo::operator=(const AMetaDataInfo&) QString AMetaDataInfo::appName() { - return text("name"); + return attr("name").toString(); } void AMetaDataInfo::setAppName( const QString &name ) { - setText( "name", name ); + setAttr( "name", name ); } -long +int AMetaDataInfo::lastId() { - return text( "lastid" ).toLong(); + return attr( "lastid" ).toInt(); } void -AMetaDataInfo::setLastId( long id ) +AMetaDataInfo::setLastId( int id ) { - setText( "lastid", QString::number( id ) ); + setAttr( "lastid", id ); } QString AMetaDataInfo::author() { - return text("author"); + return attr("author").toString(); } void AMetaDataInfo::setAuthor( const QString &name ) { - setText( "author", name ); + setAttr( "author", name ); } QDate AMetaDataInfo::date() { - return QDate::fromString( text("date"), Qt::ISODate ); + return attr("date").toDate(); } void AMetaDataInfo::setDate( QDate d ) { - setText( "date", d.toString( Qt::ISODate ) ); + setAttr( "date", d ); } @@ -374,13 +389,13 @@ AMetaDataGlobal::AMetaDataGlobal() QString AMetaDataGlobal::sourceCode() { - return text("sourcecode"); + return attr("sourcecode").toString(); } void AMetaDataGlobal::setSourceCode( const QString &src ) { - setText( "sourcecode", src ); + setAttr( "sourcecode", src ); } diff --git a/src/lib/metadata/ametaobject.h b/src/lib/metadata/ametaobject.h index 18bb096..7499ea9 100644 --- a/src/lib/metadata/ametaobject.h +++ b/src/lib/metadata/ametaobject.h @@ -1,5 +1,5 @@ /**************************************************************************** -** $Id: ametaobject.h,v 1.2 2008/12/15 22:22:48 leader Exp $ +** $Id: ametaobject.h,v 1.5 2008/12/20 21:17:49 leader Exp $ ** ** Header file of the Ananas configuration objects of Ananas ** Designer and Engine applications @@ -47,7 +47,8 @@ #define RC_OK 0 /**< All right - no errors */ #define RC_ERROR 1 /**< Error while executing method */ -#include +//#include +#include #include class AMetaObjectGroup; @@ -63,52 +64,74 @@ Q_PROPERTY( QString description READ description SCRIPTABLE true ) public: AMetaObject( const QString &objectclass = QString::null, const QString &objectname = QString::null, - AMetaObjectGroup *parent = 0 ); + AMetaObject *parent = 0 ); + ~AMetaObject(); void setClassName( const QString &name ); Q_ULONG id(); void setId( Q_ULONG ); QString className(); QString name(); + AMetaObject *rootObject(); + AMetaObject *parentMetaObject(); + void setParentMetaObject( AMetaObject * parent ); QString description(); void setDescription( const QString &descr ); void setAttr( const QString &name, const QVariant &value ); - void setText( const QString &name, const QString &text ); - void setRawdata( const QString &name, const QByteArray &data ); - QVariant attr( const QString &name ) const; - QString text( const QString &name ) const; - QByteArray rawdata( const QString &name ) const; - QVariant attr( int idx ) const; - QString text( int idx ) const; - QByteArray rawdata( int idx ) const; - QString attrName( int idx ) const; - QString textName( int idx ) const; - QString rawdataName( int idx ) const; - bool attrExists( const QString &name ); - bool textExists( const QString &name ); - bool rawdataExists( const QString &name ); - int attrCount() const; - int textCount() const; - int rawdataCount() const; + + static int lastId(); + static void setLastId( int id ); + + int childCount(); + AMetaObject *child( int idx ); + AMetaObject *child( const QString &name ); + void addChild( AMetaObject * c ); + void removeChild( AMetaObject * c ); public slots: private: + static int v_lastId; + AMetaObject *v_parent; Q_ULONG v_id; QString v_className; - QHash v_attr; - QHash v_text; - QHash v_rawdata; + QString v_description; + QMap v_attr; + QMap v_child; +}; + + +class AMetaGroup: public AMetaObject +{ +Q_OBJECT +public: + AMetaGroup( const QString &groupname, AMetaObject *parent = 0 ) + :AMetaObject( groupname, QString::null, parent ){}; +}; + + + +template +class AMetaGroupA : public AMetaGroup +{ +// Q_OBJECT +public: + + AMetaGroupA( AMetaObject * parent = 0 ) + :AMetaGroup( "", parent ) + { + }; }; +typedef AMetaGroupA AMetaGroupAXXX; class AMetaCatalogue: public AMetaObject @@ -134,8 +157,8 @@ public: QString appName(); void setAppName( const QString &name ); - long lastId(); - void setLastId( long id ); + int lastId(); + void setLastId( int id ); QString author(); void setAuthor( const QString &name ); QDate date(); diff --git a/src/lib/metadata/ametaobjectgroup.cpp b/src/lib/metadata/ametaobjectgroup.cpp index bd2e97a..a17128e 100644 --- a/src/lib/metadata/ametaobjectgroup.cpp +++ b/src/lib/metadata/ametaobjectgroup.cpp @@ -1,5 +1,5 @@ /**************************************************************************** -** $Id: ametaobjectgroup.cpp,v 1.2 2008/12/15 22:22:48 leader Exp $ +** $Id: ametaobjectgroup.cpp,v 1.4 2008/12/20 21:17:49 leader Exp $ ** ** Code file of the Ananas configuration objects of Ananas ** Designer and Engine applications @@ -43,97 +43,9 @@ /*! - * \class AMetaObjectGroup + * \class AMetaGroup * */ -AMetaObjectGroup::AMetaObjectGroup( const QString &groupname ) -:QObject() -{ - setObjectName( groupname ); -} - - - - -AMetaObjectGroup::AMetaObjectGroup( const QString &groupname, AMetaObject *parent ) -:QObject( parent ) -{ - setObjectName( groupname ); -} - - -AMetaObjectGroup::AMetaObjectGroup( const QString &groupname, AMetaObjectGroup *parent ) -:QObject( parent ) -{ - setObjectName( groupname ); -} - - -QString -AMetaObjectGroup::name() -{ - return objectName(); -} - - - -AMetaObject * -AMetaObjectGroup::metaObject( const QString &name ) -{ - return findChild( name ); -} - - - -AMetaObject * -AMetaObjectGroup::metaObject( int idx ) -{ - return v_metaObjects.at( idx ); -} - - -void -AMetaObjectGroup::append( AMetaObject *obj ) -{ - obj->setParent( this ); - v_metaObjects.append( obj ); - connect( obj, SIGNAL(destroyed(QObject*)), this, SLOT(destroyed(QObject *))); -} - - -int -AMetaObjectGroup::count() const -{ - return v_metaObjects.count(); -} - - -void -AMetaObjectGroup::clear() -{ - v_metaObjects.clear(); -} - - -void -AMetaObjectGroup::destroyed( QObject *obj ) -{ - if ( obj->inherits("AMetaObject") ){ - v_metaObjects.removeAll( ( AMetaObject *) obj ); - } -} - - - -/*! - * \class ADocumentsGroup - * - */ -ADocumentsGroup::ADocumentsGroup() -:AMetaObjectGroup("Documents") -{ - -} @@ -142,7 +54,7 @@ ADocumentsGroup::ADocumentsGroup() * */ ACataloguesGroup::ACataloguesGroup() -:AMetaObjectGroup("Catalogues") +:AMetaGroup("Catalogues") { } @@ -154,7 +66,7 @@ ACataloguesGroup::ACataloguesGroup() * */ AReportsGroup::AReportsGroup() -:AMetaObjectGroup("Reports") +:AMetaGroup("Reports") { } @@ -166,7 +78,7 @@ AReportsGroup::AReportsGroup() * */ AJournalsGroup::AJournalsGroup() -:AMetaObjectGroup("Journals") +:AMetaGroup("Journals") { } @@ -178,7 +90,7 @@ AJournalsGroup::AJournalsGroup() * */ AInfoRegistersGroup::AInfoRegistersGroup() -:AMetaObjectGroup("InfoRegisters") +:AMetaGroup("InfoRegisters") { } @@ -190,7 +102,7 @@ AInfoRegistersGroup::AInfoRegistersGroup() * */ AAccRegistersGroup::AAccRegistersGroup() -:AMetaObjectGroup("AccRegisters") +:AMetaGroup("AccRegisters") { } @@ -202,19 +114,10 @@ AAccRegistersGroup::AAccRegistersGroup() * */ AMetaTables::AMetaTables() -:AMetaObjectGroup("MetaTables") +:AMetaGroup("MetaTables") { } -/*! - * \class AMetaForms - * - */ -AMetaForms::AMetaForms() -:AMetaObjectGroup("MetaForms") -{ - -} diff --git a/src/lib/metadata/ametaobjectgroup.h b/src/lib/metadata/ametaobjectgroup.h index 52210a6..6f26d46 100644 --- a/src/lib/metadata/ametaobjectgroup.h +++ b/src/lib/metadata/ametaobjectgroup.h @@ -1,5 +1,5 @@ /**************************************************************************** -** $Id: ametaobjectgroup.h,v 1.2 2008/12/15 22:22:48 leader Exp $ +** $Id: ametaobjectgroup.h,v 1.4 2008/12/20 21:17:49 leader Exp $ ** ** Header file of the Ananas configuration objects of Ananas ** Designer and Engine applications @@ -41,45 +41,7 @@ #include -/*! - *\en - * Metadata object for metadata script access. - *\_en - *\ru - * \brief Объект метаданных для обеспечения доступа из скриптов. - * Наследует QObject. - *\_ru - */ -class AMetaObjectGroup: public QObject -{ -Q_OBJECT -Q_PROPERTY( QString name READ name SCRIPTABLE true ) -public: - AMetaObjectGroup( const QString &groupname ); - AMetaObjectGroup( const QString &groupname, AMetaObject *parent ); - AMetaObjectGroup( const QString &groupname, AMetaObjectGroup *parent ); - - QString name(); -// QMetaObject *metaObject(const QString &objClass, const QString &objName); -// QMetaObject *metaObject(const QString &objClass, const QString &objName); - AMetaObject *metaObject( const QString &name ); - AMetaObject *metaObject( int idx ); - void append( AMetaObject *object ); - int count() const; - void clear(); - -public slots: - QString test(){ return QString("TEST STRING");}; - -private slots: - void destroyed( QObject *obj ); - -private: - QList v_metaObjects; -}; - - -class ACataloguesGroup: public AMetaObjectGroup +class ACataloguesGroup: public AMetaGroup { Q_OBJECT public: @@ -92,21 +54,7 @@ public slots: -class ADocumentsGroup: public AMetaObjectGroup -{ -Q_OBJECT -public: - ADocumentsGroup(); - -public slots: - QString test(){ return QString("DOCUMENTS TEST STRING");}; - - -}; - - - -class AReportsGroup: public AMetaObjectGroup +class AReportsGroup: public AMetaGroup { Q_OBJECT public: @@ -119,7 +67,7 @@ public slots: -class AJournalsGroup: public AMetaObjectGroup +class AJournalsGroup: public AMetaGroup { Q_OBJECT public: @@ -132,7 +80,7 @@ public slots: -class AInfoRegistersGroup: public AMetaObjectGroup +class AInfoRegistersGroup: public AMetaGroup { Q_OBJECT public: @@ -145,7 +93,7 @@ public slots: -class AAccRegistersGroup: public AMetaObjectGroup +class AAccRegistersGroup: public AMetaGroup { Q_OBJECT public: @@ -158,7 +106,7 @@ public slots: -class AMetaTables: public AMetaObjectGroup +class AMetaTables: public AMetaGroup { Q_OBJECT public: @@ -171,15 +119,5 @@ public slots: -class AMetaForms: public AMetaObjectGroup -{ -Q_OBJECT -public: - AMetaForms(); - -public slots: - - -}; #endif diff --git a/src/test/testametadata.cpp b/src/test/testametadata.cpp index 29ee89c..64a0ed1 100644 --- a/src/test/testametadata.cpp +++ b/src/test/testametadata.cpp @@ -1,5 +1,5 @@ /**************************************************************************** -** $Id: testametadata.cpp,v 1.5 2008/12/15 22:22:48 leader Exp $ +** $Id: testametadata.cpp,v 1.8 2008/12/20 21:17:49 leader Exp $ ** ** Tool for automatic running Ananas tests ** @@ -88,9 +88,9 @@ void TestAMetaData::testAMetaObject() o->setAttr("String","String"); o->setAttr("Int", 123456 ); - o->setText("Text", QString::fromUtf8("Проверочный текст")); - o->setRawdata("RAW1", ba ); - o->setRawdata("RAW2", ba ); +// o->setText("Text", QString::fromUtf8("Проверочный текст")); +// o->setRawdata("RAW1", ba ); +// o->setRawdata("RAW2", ba ); // Test attr functions QVERIFY( o->attrCount() == 2 ); @@ -99,40 +99,46 @@ void TestAMetaData::testAMetaObject() QVERIFY( o->attrExists("IntX") == false ); QVERIFY( o->attr("String") == "String" ); QVERIFY( o->attr("Int") == 123456 ); - QVERIFY( o->attr( 0 ) == "String" ); - QVERIFY( o->attr( 1 ) == 123456 ); + QVERIFY( o->attr( 1 ) == "String" ); + QVERIFY( o->attr( 0 ) == 123456 ); QVERIFY( o->attr( -1 ) == QVariant() ); QVERIFY( o->attr( 10 ) == QVariant() ); // Test text functions - QVERIFY( o->textCount() == 1+1 ); - QVERIFY( o->textExists("Text") ); - QVERIFY( o->textExists("Text0") == false ); - QVERIFY( o->text("Text") == QString::fromUtf8("Проверочный текст") ); - QVERIFY( o->text( 1 ) == QString::fromUtf8("Проверочный текст") ); - QVERIFY( o->text( -1 ) == QString::null ); - QVERIFY( o->text( 10 ) == QString::null ); +// QVERIFY( o->textCount() == 1+1 ); +// QVERIFY( o->textExists("Text") ); +// QVERIFY( o->textExists("Text0") == false ); +// QVERIFY( o->text("Text") == QString::fromUtf8("Проверочный текст") ); +// QVERIFY( o->text( 1 ) == QString::fromUtf8("Проверочный текст") ); +// QVERIFY( o->text( -1 ) == QString::null ); +// QVERIFY( o->text( 10 ) == QString::null ); // Test rawdata functions - QVERIFY( o->rawdataCount() == 2 ); - QVERIFY( o->rawdataExists("RAW1") ); - QVERIFY( o->rawdataExists("RAW2") ); - QVERIFY( o->rawdataExists("RAW3") == false ); - QVERIFY( o->rawdata("RAW1") == QString( ba.data() ) ); - QVERIFY( o->rawdata("RAW2") == QString( ba.data() ) ); - QVERIFY( o->rawdata( 0 ) == QString( ba.data() ) ); - QVERIFY( o->rawdata( 1 ) == QString( ba.data() ) ); - QVERIFY( o->rawdata( -1 ) == QByteArray() ); - QVERIFY( o->rawdata( 10 ) == QByteArray() ); +// QVERIFY( o->rawdataCount() == 2 ); +// QVERIFY( o->rawdataExists("RAW1") ); +// QVERIFY( o->rawdataExists("RAW2") ); +// QVERIFY( o->rawdataExists("RAW3") == false ); +// QVERIFY( o->rawdata("RAW1") == QString( ba.data() ) ); +// QVERIFY( o->rawdata("RAW2") == QString( ba.data() ) ); +// QVERIFY( o->rawdata( 0 ) == QString( ba.data() ) ); +// QVERIFY( o->rawdata( 1 ) == QString( ba.data() ) ); +// QVERIFY( o->rawdata( -1 ) == QByteArray() ); +// QVERIFY( o->rawdata( 10 ) == QByteArray() ); delete o; } -void TestAMetaData::testAMetaObjectGroup() +void TestAMetaData::testAMetaGroup() { - AMetaObjectGroup *o = new AMetaObjectGroup( QString::fromUtf8("ИмяОбъекта") ); + AMetaGroup *o = new AMetaGroup( QString::fromUtf8("ИмяОбъекта") ); - QCOMPARE( o->name(), QString::fromUtf8("ИмяОбъекта")); + AMetaGroupAXXX oo; + printf("xxx=%s\n", oo.className().toUtf8().data() ); + + + QCOMPARE( o->className(), QString::fromUtf8("ИмяОбъекта")); + QCOMPARE( o->name(), QString("") ); delete o; + } @@ -140,7 +146,11 @@ void TestAMetaData::testAMetaObjectGroup() void TestAMetaData::testAMetaData() { AMetaData *o = new AMetaData(); - QCOMPARE( o->name(), QString("MetaData") ); + AMetaObject::setLastId( 101 ); + QCOMPARE( o->className(), QString("MetaData") ); + QCOMPARE( AMetaObject::lastId(), 101 ); + QCOMPARE( AMetaObject::lastId(), 102 ); + QCOMPARE( o->childCount(), 8 ); delete o; } @@ -164,7 +174,14 @@ void TestAMetaData::testAMetaDataIOXML() { AMetaDataIOXML *o = new AMetaDataIOXML(); QString xml; - + + AMetaData *md = AMetaData::metadata(); + AMetaDocument *d = md->documents()->newDocument(); + AMetaField *f; + f = d->fields()->newField(); + f = d->fields()->newField(); + +// delete d; QCOMPARE( o->write("test.cfg"), 0 ); QCOMPARE( o->read("test1.cfg"), 0 ); xml = o->text(); diff --git a/src/test/testametadata.h b/src/test/testametadata.h index 939ca8e..e6788a8 100644 --- a/src/test/testametadata.h +++ b/src/test/testametadata.h @@ -1,5 +1,5 @@ /**************************************************************************** -** $Id: testametadata.h,v 1.5 2008/12/15 22:22:48 leader Exp $ +** $Id: testametadata.h,v 1.6 2008/12/20 21:17:49 leader Exp $ ** ** Tool for automatic running Ananas tests ** @@ -43,7 +43,7 @@ private slots: // void toUpper(); void testAMetaObject(); - void testAMetaObjectGroup(); + void testAMetaGroup(); void testAMetaData(); void testAMetaField(); void testAMetaDataIOXML(); -- 1.7.1