[Mobies-commit] [commit] r3961 - in UDM/trunk: include src/UdmBase src/UdmDom
endre at redhat1.isis.vanderbilt.edu
endre at redhat1.isis.vanderbilt.edu
Mon Nov 21 05:05:42 CST 2011
Author: endre
Date: Mon Nov 21 05:05:42 2011
New Revision: 3961
Log:
retrieve 3958, does not work for UdmDll.
Modified:
UDM/trunk/include/UdmBase.h
UDM/trunk/include/UdmDom.h
UDM/trunk/src/UdmBase/UdmBase.cpp
UDM/trunk/src/UdmDom/UdmDom.cpp
Modified: UDM/trunk/include/UdmBase.h
==============================================================================
--- UDM/trunk/include/UdmBase.h Mon Nov 21 04:08:09 2011 (r3960)
+++ UDM/trunk/include/UdmBase.h Mon Nov 21 05:05:42 2011 (r3961)
@@ -2699,11 +2699,44 @@
#ifdef UDM_RVALUE
Object(Object&& a) : impl(a.impl) { UDM_ASSERT(impl != NULL); a.impl = NULL; }
#endif
- ~Object();
+ ~Object()
+ {
+#ifdef UDM_RVALUE
+ if (impl)
+#endif
+ {
+ UDM_ASSERT(impl != NULL);
+ impl->release();
+#ifdef _DEBUG
+ impl = NULL;
+#endif
+ }
+ }
+
+ const Object &operator =(const Object &a)
+ {
+
+ UDM_ASSERT(a.impl != NULL);
+ ObjectImpl *t = a.impl->clone();
+
+ UDM_ASSERT(impl != NULL);
+ impl->release();
+
+ impl = t;
+ return a;
+ }
- const Object &operator =(const Object &a);
#ifdef UDM_RVALUE
- Object& operator=(Object&& a);
+ Object& operator=(Object&& a)
+ {
+ if (this != &a) {
+ if (impl != NULL)
+ impl->release();
+ impl = a.impl;
+ a.impl = NULL;
+ }
+ return *this;
+ }
#endif
static Object Cast(const Object &a, const ::Uml::Class &meta) { return __Cast(a, meta); }
@@ -2776,12 +2809,70 @@
a.bs_Classes().bs_end
a.bs_Classes().as_end
*/
- set<Object> getAssociation(const ::Uml::AssociationRole &meta, int mode = TARGETFROMPEER) const;
- void setAssociation(const ::Uml::AssociationRole &meta, const set<Object> &a, int mode = TARGETFROMPEER);
+ set<Object> getAssociation(const ::Uml::AssociationRole &meta, int mode = TARGETFROMPEER) const
+ {
+ set<Object> ret;
+
+ vector<ObjectImpl*> a = impl->getAssociation(meta, mode);
+ vector<ObjectImpl*>::const_iterator i = a.begin();
+ while( i != a.end() )
+ {
+ ret.insert(*i);
+ ++i;
+ }
- void connectTo(const ::Uml::AssociationRole &meta, const Object &target, const vector<Object> &refs = vector<Object>());
- void disconnectFrom(const ::Uml::AssociationRole &meta, const Object &peer);
- vector<Object> getConnectingChain(const ::Uml::AssociationRole &meta, const Object &peer) const;
+ return ret;
+ }
+
+
+
+ void setAssociation(const ::Uml::AssociationRole &meta, const set<Object> &a, int mode = TARGETFROMPEER)
+ {
+ vector<ObjectImpl*> b;
+
+ set<Object>::const_iterator i = a.begin();
+ while( i != a.end() )
+ {
+ b.push_back((*i).impl);
+ ++i;
+ }
+
+ impl->setAssociation(meta, b, mode);
+ }
+
+ void connectTo(const ::Uml::AssociationRole &meta, const Object &target, const vector<Object> &refs = vector<Object>())
+ {
+ vector<ObjectImpl*> refs_impl;
+
+ vector<Object>::const_iterator i = refs.begin();
+ while ( i != refs.end() )
+ {
+ refs_impl.push_back((*i).impl);
+ ++i;
+ }
+
+ impl->connectTo(meta, target.impl, refs_impl);
+ }
+
+ void disconnectFrom(const ::Uml::AssociationRole &meta, const Object &peer)
+ {
+ impl->disconnectFrom(meta, peer.impl);
+ }
+
+ vector<Object> getConnectingChain(const ::Uml::AssociationRole &meta, const Object &peer) const
+ {
+ vector<Object> ret;
+
+ vector<ObjectImpl*> a = impl->getConnectingChain(meta, peer.impl);
+ vector<ObjectImpl*>::const_iterator i = a.begin();
+ while( i != a.end() )
+ {
+ ret.push_back(*i);
+ ++i;
+ }
+
+ return ret;
+ }
// --- type
@@ -3214,53 +3305,168 @@
public:
//made public for CORBA to reach the inside Static DN
- DataNetwork *testdn() const;
+ DataNetwork *testdn() const
+ {
+ if(dn) return dn;
+ throw udm_exception("Missing data network");
+ }
- SmartDataNetwork(const UdmDiagram &metainfo, UdmProject * pr = NULL);
+ SmartDataNetwork(const UdmDiagram &metainfo, UdmProject * pr = NULL) :
+ DataNetwork(metainfo, pr)
+ {
+ dn = NULL;
+ str_based = false;
+ }
- ~SmartDataNetwork();
+ ~SmartDataNetwork()
+ {
+ delete dn;
+ }
- SmartDataNetwork & operator=(SmartDataNetwork &a);
- SmartDataNetwork & operator=(DataNetwork &a);
+ SmartDataNetwork & operator=(SmartDataNetwork &a)
+ {
+ if (dn && a.dn)
+ {
+ *dn = *(a.dn);
+ }
+ else
+ {
+ throw udm_exception("Either the source or the destination SmartDataNetwork does not exist.");
+ }
+ return *this;
+ };
+
+ SmartDataNetwork & operator=(DataNetwork &a)
+ {
+ if (dn )
+ {
+ *dn = a;
+ }
+ else
+ {
+ throw udm_exception("The destination SmartDataNetwork does not exist.");
+ }
+ return *this;
+ };
virtual void CreateNew(const string &systemname,
- const string &metalocator, const ::Uml::Class &rootclass,
- enum BackendSemantics sem = CHANGES_PERSIST_ALWAYS);
+ const string &metalocator, const ::Uml::Class &rootclass,
+ enum BackendSemantics sem = CHANGES_PERSIST_ALWAYS) {
+ if(dn) throw udm_exception("DataNetwork is already open");
+ std::auto_ptr<DataNetwork> dn1(CreateBackend(systemname, metaroot, pr));
+ if(!dn1.get()) throw udm_exception("Cannot deduce Udm backend type from " + systemname + "\n"
+ "Available backends: " + DumpBackendNames().c_str());
+ dn1->CreateNew(systemname, metalocator, rootclass, sem);
+ dn = dn1.release();
+ }
virtual void OpenExisting(const string &systemname,
- const string &metalocator = "",
- enum BackendSemantics sem = CHANGES_PERSIST_ALWAYS);
- virtual void CloseWithUpdate();
- virtual void CloseNoUpdate();
- virtual void SaveAs(string systemname);
- virtual void CloseAs(string systemname);
-
- bool isOpen();
-
- // transaction control
- virtual void CommitEditSequence();
- virtual void AbortEditSequence();
-
- // basic access
- Object GetRootObject() const;
- virtual Object ObjectById(Object::uniqueId_type t);
-
- const ::Uml::Diagram &GetRootMeta() const;
-
- virtual bool IsTypeSafe();
-
- virtual UdmProject* GetProject();
- virtual void setStaticUdmProject(StaticUdmProject* _pr);
- virtual void resetStaticUdmProject();
+ const string &metalocator = "",
+ enum BackendSemantics sem = CHANGES_PERSIST_ALWAYS) {
+ if(dn) throw udm_exception("DataNetwork is already open");
+ std::auto_ptr<DataNetwork> dn1(CreateBackend(systemname, metaroot,pr));
+ if(!dn1.get()) throw udm_exception("Cannot deduce Udm backend type from " + systemname + "\n"
+ "Available backends: " + DumpBackendNames().c_str());
+ dn1->OpenExisting(systemname, metalocator, sem);
+ dn = dn1.release();
+ }
+ virtual void CloseWithUpdate()
+ {
+ testdn()->CloseWithUpdate();
+
+ if (str_based)
+ {
+ str = dn->Str();
+ str_based = false;
+ }
+ delete dn;
+ dn = NULL;
+ }
+
+ virtual void CloseNoUpdate()
+ {
+ testdn()->CloseNoUpdate();
+
+ if (str_based)
+ {
+ str = dn->Str();
+ str_based = false;
+ }
+
+ delete dn;
+ dn = NULL;
+ }
+ virtual void SaveAs(string systemname) { testdn()->SaveAs(systemname); }
+ virtual void CloseAs(string systemname)
+ {
+ testdn()->CloseAs(systemname);
+ if (str_based)
+ {
+ str = dn->Str();
+ str_based = false;
+ }
+
+ delete dn;
+ dn = NULL;
+ }
+
+ bool isOpen() { return dn ? dn->isOpen() : false; }
+// transaction control
+ virtual void CommitEditSequence() { testdn()->CommitEditSequence(); }
+ virtual void AbortEditSequence() { testdn()->AbortEditSequence(); }
+
+// basic access
+ Object GetRootObject() const { return testdn()->GetRootObject(); }
+ virtual Object ObjectById(Object::uniqueId_type t) {
+ return testdn()->ObjectById(t);
+ }
+ const ::Uml::Diagram &GetRootMeta() const {
+ return testdn()->GetRootMeta();
+ }
+ virtual bool IsTypeSafe() { return testdn()->IsTypeSafe();};
+
+ virtual UdmProject* GetProject()
+ {
+ return testdn()->GetProject();
+ };
+
+ virtual void setStaticUdmProject(StaticUdmProject* _pr)
+ {
+ testdn()->setStaticUdmProject(_pr);
+ };
+
+ virtual void resetStaticUdmProject()
+ {
+ testdn()->resetStaticUdmProject();
+ };
+
//string support
virtual void CreateNewToString(const string &metalocator, const ::Uml::Class &rootclass,
- enum Udm::BackendSemantics sem = Udm::CHANGES_PERSIST_ALWAYS);
+ enum Udm::BackendSemantics sem = Udm::CHANGES_PERSIST_ALWAYS)
+ {
+ if(dn) throw udm_exception("DataNetwork is already open");
+ std::auto_ptr<DataNetwork> dn1(CreateBackend("string_dom.xml", metaroot, pr));//the name can be anything, which ends in .xml. String backend is supported only by DOM
+ if(dn1.get() == NULL) throw udm_exception(string("Cannot deduce Udm backend type .xml from available backends: ") + DumpBackendNames().c_str());
+
+ dn1->CreateNewToString(metalocator, rootclass,sem);
+ dn = dn1.release();
+ str_based = true;
+ };
virtual void OpenExistingFromString(string &str,
- const string &metalocator,
- enum Udm::BackendSemantics sem = Udm::CHANGES_PERSIST_ALWAYS);
- virtual const string & Str();
- virtual set<Object> GetAllInstancesOf(const ::Uml::Class& meta);
+ const string &metalocator,
+ enum Udm::BackendSemantics sem = Udm::CHANGES_PERSIST_ALWAYS)
+ {
+ if(dn) throw udm_exception("DataNetwork is already open");
+ std::auto_ptr<DataNetwork> dn1(CreateBackend("string_dom.xml", metaroot, pr));//the name can be anything, which ends in .xml. String backend is supported only by DOM
+ if(dn1.get() == NULL) throw udm_exception(string("Cannot deduce Udm backend type .xml from available backends: ") + DumpBackendNames().c_str());
+
+ dn1->OpenExistingFromString(str,metalocator,sem);
+ dn = dn1.release();
+ str_based = true;
+ };
+ virtual const string & Str(){return str;};
+ virtual set<Object> GetAllInstancesOf(const ::Uml::Class& meta){return testdn()->GetAllInstancesOf(meta);};
};
Modified: UDM/trunk/include/UdmDom.h
==============================================================================
--- UDM/trunk/include/UdmDom.h Mon Nov 21 04:08:09 2011 (r3960)
+++ UDM/trunk/include/UdmDom.h Mon Nov 21 05:05:42 2011 (r3961)
@@ -128,14 +128,14 @@
// multiple roles in its container simultaneously (but always at least one)
// otherwise, a new role assignment removes prior role
static bool MultiRolesEnabled() { return multiroles; }
- static bool EnableMultiRoles(bool p) { multiroles = p; return p; }
+ static bool EnableMultiRoles(bool p) { multiroles = p; return p;}
UDM_DLL Object ObjectById(Object::uniqueId_type id);
- static Udm::DataNetwork *factory(const Udm::UdmDiagram &meta, Udm::UdmProject* project = NULL)
+ static Udm::DataNetwork *factory(const Udm::UdmDiagram &meta, Udm::UdmProject* project = NULL)
{
return new DomDataNetwork(meta, project);
- }
+ }
static const string FindFile(const string file_name);
@@ -154,13 +154,33 @@
struct str_xsd_storage
{
+
typedef map<const string, const string> str_str_map;
static UDM_DLL str_str_map static_xsd_container;
+ static void StoreXsd(const string key, const string & xsd_str)
+ {
+ str_str_map::value_type item(key, xsd_str);
+ pair<str_str_map::const_iterator, bool> ins_res = static_xsd_container.insert(item);
+ if (!ins_res.second && (xsd_str!=ins_res.first->second)) // only if it differs from the stored one Kalmar
+ throw udm_exception(string("An XSD by that name is already stored with a different content: ") + key);
+
+
+ };
+
+ static void RemoveXsd(const string key)
+ {
+
+ static_xsd_container.erase(key);
+
+ }
+ static void ClearXsdStorage()
+ {
+
+ static_xsd_container.clear();
+
+ }
- static void StoreXsd(const string &key, const string &xsd_str);
- static void RemoveXsd(const string &key);
- static void ClearXsdStorage();
};
Modified: UDM/trunk/src/UdmBase/UdmBase.cpp
==============================================================================
--- UDM/trunk/src/UdmBase/UdmBase.cpp Mon Nov 21 04:08:09 2011 (r3960)
+++ UDM/trunk/src/UdmBase/UdmBase.cpp Mon Nov 21 05:05:42 2011 (r3961)
@@ -119,46 +119,7 @@
const ::Uml::CompositionChildRole NULLCHILDROLE;
const ::Uml::CompositionParentRole NULLPARENTROLE;
-
- UDM_DLL Object::~Object()
- {
-#ifdef UDM_RVALUE
- if (impl)
-#endif
- {
- UDM_ASSERT(impl != NULL);
- impl->release();
-#ifdef _DEBUG
- impl = NULL;
-#endif
- }
- }
-
- UDM_DLL const Object & Object::operator =(const Object &a)
- {
- UDM_ASSERT(a.impl != NULL);
- ObjectImpl *t = a.impl->clone();
-
- UDM_ASSERT(impl != NULL);
- impl->release();
-
- impl = t;
- return a;
- }
-
-#ifdef UDM_RVALUE
- UDM_DLL Object& Object::operator=(Object&& a)
- {
- if (this != &a) {
- if (impl != NULL)
- impl->release();
- impl = a.impl;
- a.impl = NULL;
- }
- return *this;
- }
-#endif
-
+
UDM_DLL ObjectImpl *Object::__Cast(const Object &a, const ::Uml::Class &meta)
{
if(a && !Uml::IsDerivedFrom(a.type(), meta) )
@@ -199,69 +160,6 @@
return parent.impl->createChild(role, Uml::SafeTypeContainer::GetSafeType(meta));
}
- UDM_DLL set<Object> Object::getAssociation(const ::Uml::AssociationRole &meta, int mode) const
- {
- set<Object> ret;
-
- vector<ObjectImpl*> a = impl->getAssociation(meta, mode);
- vector<ObjectImpl*>::const_iterator i = a.begin();
- while( i != a.end() )
- {
- ret.insert(*i);
- ++i;
- }
-
- return ret;
- }
-
- UDM_DLL void Object::setAssociation(const ::Uml::AssociationRole &meta, const set<Object> &a, int mode)
- {
- vector<ObjectImpl*> b;
-
- set<Object>::const_iterator i = a.begin();
- while( i != a.end() )
- {
- b.push_back((*i).impl);
- ++i;
- }
-
- impl->setAssociation(meta, b, mode);
- }
-
- UDM_DLL void Object::connectTo(const ::Uml::AssociationRole &meta, const Object &target, const vector<Object> &refs)
- {
- vector<ObjectImpl*> refs_impl;
-
- vector<Object>::const_iterator i = refs.begin();
- while ( i != refs.end() )
- {
- refs_impl.push_back((*i).impl);
- ++i;
- }
-
- impl->connectTo(meta, target.impl, refs_impl);
- }
-
- UDM_DLL void Object::disconnectFrom(const ::Uml::AssociationRole &meta, const Object &peer)
- {
- impl->disconnectFrom(meta, peer.impl);
- }
-
- UDM_DLL vector<Object> Object::getConnectingChain(const ::Uml::AssociationRole &meta, const Object &peer) const
- {
- vector<Object> ret;
-
- vector<ObjectImpl*> a = impl->getConnectingChain(meta, peer.impl);
- vector<ObjectImpl*>::const_iterator i = a.begin();
- while( i != a.end() )
- {
- ret.push_back(*i);
- ++i;
- }
-
- return ret;
- }
-
UDM_DLL Object Object::archetype() const
{
return impl->getArchetype();
@@ -2012,170 +1910,6 @@
}
- DataNetwork* SmartDataNetwork::testdn() const
- {
- if(dn) return dn;
- throw udm_exception("Missing data network");
- }
-
- SmartDataNetwork::SmartDataNetwork(const UdmDiagram &metainfo, UdmProject * pr) :
- DataNetwork(metainfo, pr)
- {
- dn = NULL;
- str_based = false;
- }
-
- SmartDataNetwork::~SmartDataNetwork()
- {
- delete dn;
- }
-
- SmartDataNetwork & SmartDataNetwork::operator=(SmartDataNetwork &a)
- {
- if (dn && a.dn)
- *dn = *(a.dn);
- else
- throw udm_exception("Either the source or the destination SmartDataNetwork does not exist.");
- return *this;
- }
-
- SmartDataNetwork & SmartDataNetwork::operator=(DataNetwork &a)
- {
- if (dn)
- *dn = a;
- else
- throw udm_exception("The destination SmartDataNetwork does not exist.");
- return *this;
- };
-
- void SmartDataNetwork::CreateNew(const string &systemname,
- const string &metalocator, const ::Uml::Class &rootclass,
- enum BackendSemantics sem)
- {
- if (dn)
- throw udm_exception("DataNetwork is already open");
-
- std::auto_ptr<DataNetwork> dn1(CreateBackend(systemname, metaroot, pr));
- if (!dn1.get())
- throw udm_exception("Cannot deduce Udm backend type from " + systemname + "\n"
- "Available backends: " + DumpBackendNames().c_str());
- dn1->CreateNew(systemname, metalocator, rootclass, sem);
- dn = dn1.release();
- }
-
- void SmartDataNetwork::OpenExisting(const string &systemname,
- const string &metalocator,
- enum BackendSemantics sem) {
- if (dn)
- throw udm_exception("DataNetwork is already open");
-
- std::auto_ptr<DataNetwork> dn1(CreateBackend(systemname, metaroot,pr));
- if (!dn1.get())
- throw udm_exception("Cannot deduce Udm backend type from " + systemname + "\n"
- "Available backends: " + DumpBackendNames().c_str());
- dn1->OpenExisting(systemname, metalocator, sem);
- dn = dn1.release();
- }
-
- void SmartDataNetwork::CloseWithUpdate()
- {
- testdn()->CloseWithUpdate();
-
- if (str_based)
- {
- str = dn->Str();
- str_based = false;
- }
-
- delete dn;
- dn = NULL;
- }
-
- void SmartDataNetwork::CloseNoUpdate()
- {
- testdn()->CloseNoUpdate();
-
- if (str_based)
- {
- str = dn->Str();
- str_based = false;
- }
-
- delete dn;
- dn = NULL;
- }
-
- void SmartDataNetwork::SaveAs(string systemname)
- {
- testdn()->SaveAs(systemname);
- }
-
- void SmartDataNetwork::CloseAs(string systemname)
- {
- testdn()->CloseAs(systemname);
-
- if (str_based)
- {
- str = dn->Str();
- str_based = false;
- }
-
- delete dn;
- dn = NULL;
- }
-
- bool SmartDataNetwork::isOpen() { return dn ? dn->isOpen() : false; }
-
- void SmartDataNetwork::CommitEditSequence() { testdn()->CommitEditSequence(); }
- void SmartDataNetwork::AbortEditSequence() { testdn()->AbortEditSequence(); }
-
- Object SmartDataNetwork::GetRootObject() const { return testdn()->GetRootObject(); }
- Object SmartDataNetwork::ObjectById(Object::uniqueId_type t) { return testdn()->ObjectById(t); }
-
- const ::Uml::Diagram& SmartDataNetwork::GetRootMeta() const { return testdn()->GetRootMeta(); }
- bool SmartDataNetwork::IsTypeSafe() { return testdn()->IsTypeSafe(); }
-
- UdmProject* SmartDataNetwork::GetProject() { return testdn()->GetProject(); }
- void SmartDataNetwork::setStaticUdmProject(StaticUdmProject* _pr) { testdn()->setStaticUdmProject(_pr); }
- void SmartDataNetwork::resetStaticUdmProject() { testdn()->resetStaticUdmProject(); }
-
- void SmartDataNetwork::CreateNewToString(const string &metalocator, const ::Uml::Class &rootclass,
- enum Udm::BackendSemantics sem)
- {
- if (dn)
- throw udm_exception("DataNetwork is already open");
-
- //the name can be anything, which ends in .xml. String backend is supported only by DOM
- std::auto_ptr<DataNetwork> dn1(CreateBackend("string_dom.xml", metaroot, pr));
- if (dn1.get() == NULL)
- throw udm_exception(string("Cannot deduce Udm backend type .xml from available backends: ") + DumpBackendNames().c_str());
-
- dn1->CreateNewToString(metalocator, rootclass, sem);
- dn = dn1.release();
- str_based = true;
- }
-
- void SmartDataNetwork::OpenExistingFromString(string &str,
- const string &metalocator,
- enum Udm::BackendSemantics sem)
- {
- if (dn)
- throw udm_exception("DataNetwork is already open");
-
- //the name can be anything, which ends in .xml. String backend is supported only by DOM
- std::auto_ptr<DataNetwork> dn1(CreateBackend("string_dom.xml", metaroot, pr));
- if (dn1.get() == NULL)
- throw udm_exception(string("Cannot deduce Udm backend type .xml from available backends: ") + DumpBackendNames().c_str());
-
- dn1->OpenExistingFromString(str,metalocator,sem);
- dn = dn1.release();
- str_based = true;
- }
-
- const string & SmartDataNetwork::Str() {return str; }
- set<Object> SmartDataNetwork::GetAllInstancesOf(const ::Uml::Class& meta) { return testdn()->GetAllInstancesOf(meta); }
-
-
//the map for static metadepository
map<string, const UdmDiagram*>* MetaDepository::meta_dep = NULL;
Modified: UDM/trunk/src/UdmDom/UdmDom.cpp
==============================================================================
--- UDM/trunk/src/UdmDom/UdmDom.cpp Mon Nov 21 04:08:09 2011 (r3960)
+++ UDM/trunk/src/UdmDom/UdmDom.cpp Mon Nov 21 05:05:42 2011 (r3961)
@@ -4363,22 +4363,5 @@
};
- void str_xsd_storage::StoreXsd(const string &key, const string &xsd_str)
- {
- str_str_map::value_type item(key, xsd_str);
- pair<str_str_map::const_iterator, bool> ins_res = static_xsd_container.insert(item);
- if (!ins_res.second && (xsd_str!=ins_res.first->second)) // only if it differs from the stored one Kalmar
- throw udm_exception(string("An XSD by that name is already stored with a different content: ") + key);
- }
-
- void str_xsd_storage::RemoveXsd(const string &key)
- {
- static_xsd_container.erase(key);
- }
-
- void str_xsd_storage::ClearXsdStorage()
- {
- static_xsd_container.clear();
- }
}
More information about the Mobies-commit
mailing list