[Mobies-commit] [commit] r3633 - GReAT/trunk/Tools/MetaGME2UMX
ksmyth at redhat1.isis.vanderbilt.edu
ksmyth at redhat1.isis.vanderbilt.edu
Tue Feb 1 12:26:15 CST 2011
Author: ksmyth
Date: Tue Feb 1 12:26:10 2011
New Revision: 3633
Log:
Support Connections with more than one Connector
Modified:
GReAT/trunk/Tools/MetaGME2UMX/MetaGME2UML_2.cpp
Modified: GReAT/trunk/Tools/MetaGME2UMX/MetaGME2UML_2.cpp
==============================================================================
--- GReAT/trunk/Tools/MetaGME2UMX/MetaGME2UML_2.cpp Tue Feb 1 12:05:19 2011 (r3632)
+++ GReAT/trunk/Tools/MetaGME2UMX/MetaGME2UML_2.cpp Tue Feb 1 12:26:10 2011 (r3633)
@@ -1066,68 +1066,64 @@
trans(baseConnections, aclasses, std::mem_fun_ref(&MetaGME::BaseConnection::srcConnection));
trans(baseConnections, aclasses, std::mem_fun_ref(&MetaGME::BaseConnection::dstConnection));
std::set<MetaGME::AssociationClass> aclasses_ = flatten_set(aclasses);
- if (aclasses_.size() == 0)
- continue;
- if (aclasses_.size() > 1)
- {
- throw udm_exception(string("Connection '") + string(connection.name()) + "' has more than one AssociationClass");
- }
- MetaGME::AssociationClass aclass = *aclasses_.begin();
- MetaGME::Connector connector;
- if (Uml::IsDerivedFrom(((MetaGME::AssociationClass_Members_Base)aclass.dstConnection_end()).type(), MetaGME::BaseConnection::meta)) {
- connector = MetaGME::Connector::Cast(aclass.srcConnection_end());
- } else {
- connector = MetaGME::Connector::Cast(aclass.dstConnection_end());
- }
- std::set<MetaGME::ConnectorToDestination> ctodst = connector.dstFCO();
- if (ctodst.size() != 1)
- {
- throw udm_exception(string("Connection '") + string(connection.name()) + "' does not have exactly one destination");
- }
- std::set<MetaGME::SourceToConnector> srctoc = connector.srcFCO();
- if (srctoc.size() != 1)
- {
- throw udm_exception(string("Connection '") + string(connection.name()) + "' does not have exactly one source");
- }
+ for (std::set<MetaGME::AssociationClass>::iterator aclassesIt = aclasses_.begin();
+ aclassesIt != aclasses_.end(); aclassesIt++) {
+ MetaGME::AssociationClass aclass = *aclassesIt;
+ MetaGME::Connector connector;
+ if (Uml::IsDerivedFrom(((MetaGME::AssociationClass_Members_Base)aclass.dstConnection_end()).type(), MetaGME::BaseConnection::meta)) {
+ connector = MetaGME::Connector::Cast(aclass.srcConnection_end());
+ } else {
+ connector = MetaGME::Connector::Cast(aclass.dstConnection_end());
+ }
+ std::set<MetaGME::ConnectorToDestination> ctodst = connector.dstFCO();
+ if (ctodst.size() != 1)
+ {
+ throw udm_exception(string("Connection '") + string(connection.name()) + "' does not have exactly one destination");
+ }
+ std::set<MetaGME::SourceToConnector> srctoc = connector.srcFCO();
+ if (srctoc.size() != 1)
+ {
+ throw udm_exception(string("Connection '") + string(connection.name()) + "' does not have exactly one source");
+ }
- strmap prefMap;
- ConverGeneralPreferenceToMap((string)connection.GeneralPreferences(), prefMap);
+ strmap prefMap;
+ ConverGeneralPreferenceToMap((string)connection.GeneralPreferences(), prefMap);
- MetaGME::BaseFCO dstFco = ctodst.begin()->dstFCO_end();
- std::string dstrolename = GetValueForName("dRefParent",prefMap);
- string dst_assoc_rolename = GetValueForName("dName",prefMap);
- MetaGME::BaseFCO srcFco = srctoc.begin()->srcFCO_end();
- string srcrolename = GetValueForName("sRefParent",prefMap);
- string src_assoc_rolename = GetValueForName("sName",prefMap);
-
- if (dstFco && dstrolename != "")
- {
- std::string dstrrolename = GetValueForName("rdRefParent", prefMap);
- if (dstrrolename == "") {
- dstrrolename = dstrolename + "_rev";
- }
- std::set<MetaGME::Reference> refport_containers = GetRefportContainers(RefByProxy(dstFco), connection);
- if (ctodst.begin()->dstRolename() == "" && srctoc.begin()->srcRolename() == "") { // bidirectional connection
- std::set<MetaGME::Reference> src_refport_containers = GetRefportContainers(RefByProxy(srcFco), connection);
- std::copy(src_refport_containers.begin(), src_refport_containers.end(), set_inserter(refport_containers));
+ MetaGME::BaseFCO dstFco = ctodst.begin()->dstFCO_end();
+ std::string dstrolename = GetValueForName("dRefParent",prefMap);
+ string dst_assoc_rolename = GetValueForName("dName",prefMap);
+ MetaGME::BaseFCO srcFco = srctoc.begin()->srcFCO_end();
+ string srcrolename = GetValueForName("sRefParent",prefMap);
+ string src_assoc_rolename = GetValueForName("sName",prefMap);
+
+ if (dstFco && dstrolename != "")
+ {
+ std::string dstrrolename = GetValueForName("rdRefParent", prefMap);
+ if (dstrrolename == "") {
+ dstrrolename = dstrolename + "_rev";
+ }
+ std::set<MetaGME::Reference> refport_containers = GetRefportContainers(RefByProxy(dstFco), connection);
+ if (ctodst.begin()->dstRolename() == "" && srctoc.begin()->srcRolename() == "") { // bidirectional connection
+ std::set<MetaGME::Reference> src_refport_containers = GetRefportContainers(RefByProxy(srcFco), connection);
+ std::copy(src_refport_containers.begin(), src_refport_containers.end(), set_inserter(refport_containers));
+ }
+ CreateRefportContainerAssociation(connection, dst_assoc_rolename, dstrolename, dstrrolename, refport_containers, cd);
}
- CreateRefportContainerAssociation(connection, dst_assoc_rolename, dstrolename, dstrrolename, refport_containers, cd);
- }
- if (srcFco && srcrolename != "")
- {
- std::string srcrrolename = GetValueForName("rsRefParent", prefMap);
- if (srcrrolename == "") {
- srcrrolename = srcrolename + "_rev";
- }
- std::set<MetaGME::Reference> refport_containers = GetRefportContainers(RefByProxy(srcFco), connection);
- if (ctodst.begin()->dstRolename() == "" && srctoc.begin()->srcRolename() == "") { // bidirectional connection
- std::set<MetaGME::Reference> dst_refport_containers = GetRefportContainers(RefByProxy(dstFco), connection);
- std::copy(dst_refport_containers.begin(), dst_refport_containers.end(), set_inserter(refport_containers));
+ if (srcFco && srcrolename != "")
+ {
+ std::string srcrrolename = GetValueForName("rsRefParent", prefMap);
+ if (srcrrolename == "") {
+ srcrrolename = srcrolename + "_rev";
+ }
+ std::set<MetaGME::Reference> refport_containers = GetRefportContainers(RefByProxy(srcFco), connection);
+ if (ctodst.begin()->dstRolename() == "" && srctoc.begin()->srcRolename() == "") { // bidirectional connection
+ std::set<MetaGME::Reference> dst_refport_containers = GetRefportContainers(RefByProxy(dstFco), connection);
+ std::copy(dst_refport_containers.begin(), dst_refport_containers.end(), set_inserter(refport_containers));
+ }
+ CreateRefportContainerAssociation(connection, src_assoc_rolename, srcrolename, srcrrolename, refport_containers, cd);
}
- CreateRefportContainerAssociation(connection, src_assoc_rolename, srcrolename, srcrrolename, refport_containers, cd);
}
-
}
}
More information about the Mobies-commit
mailing list