[Mobies-commit] [commit] r4192 - in GReAT/trunk/Tools/MetaGME2UMX: . MetaGME2UMX Interpreters
ksmyth at redhat3.isis.vanderbilt.edu
ksmyth at redhat3.isis.vanderbilt.edu
Fri Sep 20 13:44:06 CDT 2013
Author: ksmyth
Date: Fri Sep 20 13:44:05 2013
New Revision: 4192
Log:
MetaGME2UML: Put Folder (FCO) in RootFolder if it (or any of its proxies) or equivalents has InRootFolder()==true
Modified:
GReAT/trunk/Tools/MetaGME2UMX/MetaGME2UML.cpp
GReAT/trunk/Tools/MetaGME2UMX/MetaGME2UML.h
GReAT/trunk/Tools/MetaGME2UMX/MetaGME2UML_2.cpp
GReAT/trunk/Tools/MetaGME2UMX/MetaGME2UMX Interpreters/UdmApp.h
Modified: GReAT/trunk/Tools/MetaGME2UMX/MetaGME2UML.cpp
==============================================================================
--- GReAT/trunk/Tools/MetaGME2UMX/MetaGME2UML.cpp Tue Sep 3 11:48:39 2013 (r4191)
+++ GReAT/trunk/Tools/MetaGME2UMX/MetaGME2UML.cpp Fri Sep 20 13:44:05 2013 (r4192)
@@ -408,7 +408,6 @@
}
}
-#if _MSC_VER >= 1300
template <class TYPE, class PROXY_TYPE>
TYPE getRefByProxy( const MetaGME::BaseFCO& proxy) {
TYPE refByProxy;
@@ -429,29 +428,6 @@
const MetaGME::BaseFCO& refByProxy= ( ap!=Udm::null) ? ap : ( mp!=Udm::null) ? mp : ( fp!=Udm::null) ? fp : ( cp!=Udm::null) ? cp : ( rp!=Udm::null) ? rp : (sp!=Udm::null) ? sp :fco;
return refByProxy;
}
-#else
-// Vc6 does not support specification of template arguments for template functions
-// so they must be included in the function argument list.
-template <class TYPE, class PROXY_TYPE>
-TYPE getRefByProxy( const MetaGME::BaseFCO& proxy, TYPE type, PROXY_TYPE proxy_type) {
- TYPE refByProxy;
- if ( proxy.type() == PROXY_TYPE::meta) {
- PROXY_TYPE typedProxy= PROXY_TYPE::Cast( proxy);
- refByProxy= typedProxy.ref();
- }
- return refByProxy;
-}
-MetaGME::BaseFCO RefByProxy( const MetaGME::BaseFCO& fco) {
- MetaGME::Atom ap= getRefByProxy( fco, MetaGME::Atom(), MetaGME::AtomProxy());
- MetaGME::Model mp= getRefByProxy( fco, MetaGME::Model(), MetaGME::ModelProxy());
- MetaGME::FCO fp= getRefByProxy( fco, MetaGME::FCO(), MetaGME::FCOProxy());
- MetaGME::Connection cp= getRefByProxy( fco, MetaGME::Connection(), MetaGME::ConnectionProxy());
- MetaGME::Reference rp= getRefByProxy( fco, MetaGME::Reference(), MetaGME::ReferenceProxy());
- MetaGME::Set sp= getRefByProxy( fco, MetaGME::Set(), MetaGME::SetProxy());
- const MetaGME::BaseFCO& refByProxy= ( ap!=0) ? ap : ( mp!=0) ? mp : ( fp!=0) ? fp : ( cp!=0) ? cp : ( rp!=0) ? rp : (sp!=0) ? sp :fco;
- return refByProxy;
-}
-#endif
void MetaGME2UML::MakeImplIntf( const MetaGME::BaseFCO& b, const MetaGME::BaseFCO& d, bool impl, bool intf)
{
@@ -682,51 +658,51 @@
RecurseOnBases( base, visitedBases);
}
-#if _MSC_VER >= 1300
template <class TYPE, class PROXY_TYPE>
-void MetaGME2UML::checkProxies( const MetaGME::BaseFCO& base, std::set< MetaGME::BaseFCO>& visitedBases) {
- if ( base.type() == TYPE::meta) {
- TYPE typedBase= TYPE::Cast( base);
- std::set< PROXY_TYPE> proxies= typedBase.src();
- for( std::set< PROXY_TYPE>::const_iterator it= proxies.begin(); it!= proxies.end(); ++it) {
- RecurseOnBases( *it, visitedBases);
-// std::for_each( proxies.begin(), proxies.end(), std::bind2nd( this->RecurseOnBases, visitedBases));
- }
+void GetProxies(const MetaGME::BaseFCO& base, std::set<MetaGME::BaseFCO>& ret)
+{
+ if (base.type() == TYPE::meta)
+ {
+ std::set<PROXY_TYPE> proxies = TYPE::Cast(base).src();
+ std::copy(proxies.begin(), proxies.end(), set_inserter(ret));
}
}
-template <class TYPE, class PROXY_TYPE>
-void MetaGME2UML::checkRefByProxies( const MetaGME::BaseFCO& proxy, std::set< MetaGME::BaseFCO>& visitedBases) {
- if ( proxy.type() == PROXY_TYPE::meta) {
- PROXY_TYPE typedProxy= PROXY_TYPE::Cast( proxy);
- TYPE refByProxy= typedProxy.ref();
- RecurseOnBases( refByProxy, visitedBases);
- }
+set<MetaGME::BaseFCO> GetProxies(const MetaGME::BaseFCO& base)
+{
+ std::set<MetaGME::BaseFCO> ret;
+
+ GetProxies<MetaGME::Atom, MetaGME::AtomProxy>(base, ret);
+ GetProxies<MetaGME::Model, MetaGME::ModelProxy>(base, ret);
+ GetProxies<MetaGME::FCO, MetaGME::FCOProxy>(base, ret);
+ GetProxies<MetaGME::Connection, MetaGME::ConnectionProxy>(base, ret);
+ GetProxies<MetaGME::Reference, MetaGME::ReferenceProxy>(base, ret);
+ GetProxies<MetaGME::Set, MetaGME::SetProxy>(base, ret);
+
+ return ret;
}
-#else
-// Vc6 does not support specification of template arguments for template functions
-// so they must be included in the function argument list.
+
+
template <class TYPE, class PROXY_TYPE>
-void checkProxies( const MetaGME::BaseFCO& base, std::set< MetaGME::BaseFCO>& visitedBases, const TYPE& type, const PROXY_TYPE& proxy_type, MetaGME2UML* pMetaGme2Uml) {
+void MetaGME2UML::checkProxies( const MetaGME::BaseFCO& base, std::set< MetaGME::BaseFCO>& visitedBases) {
if ( base.type() == TYPE::meta) {
TYPE typedBase= TYPE::Cast( base);
std::set< PROXY_TYPE> proxies= typedBase.src();
for( std::set< PROXY_TYPE>::const_iterator it= proxies.begin(); it!= proxies.end(); ++it) {
- pMetaGme2Uml->RecurseOnBases( *it, visitedBases);
+ RecurseOnBases( *it, visitedBases);
// std::for_each( proxies.begin(), proxies.end(), std::bind2nd( this->RecurseOnBases, visitedBases));
}
}
}
template <class TYPE, class PROXY_TYPE>
-void checkRefByProxies( const MetaGME::BaseFCO& proxy, std::set< MetaGME::BaseFCO>& visitedBases, TYPE type, PROXY_TYPE proxy_type, MetaGME2UML* pMetaGme2Uml) {
+void MetaGME2UML::checkRefByProxies( const MetaGME::BaseFCO& proxy, std::set< MetaGME::BaseFCO>& visitedBases) {
if ( proxy.type() == PROXY_TYPE::meta) {
PROXY_TYPE typedProxy= PROXY_TYPE::Cast( proxy);
TYPE refByProxy= typedProxy.ref();
- pMetaGme2Uml->RecurseOnBases( refByProxy, visitedBases);
+ RecurseOnBases( refByProxy, visitedBases);
}
}
-#endif
void MetaGME2UML::RecurseOnBases( const MetaGME::BaseFCO& base, std::set< MetaGME::BaseFCO>& visitedBases)
{
@@ -775,7 +751,6 @@
RecurseOnBases( currBase, visitedBases); // recursive call
}
}
-#if _MSC_VER >= 1300
// 3. find all proxys that refer to "base"
checkProxies< MetaGME::Atom, MetaGME::AtomProxy>( base, visitedBases);
checkProxies< MetaGME::Model, MetaGME::ModelProxy>( base, visitedBases);
@@ -791,24 +766,7 @@
checkRefByProxies< MetaGME::Connection, MetaGME::ConnectionProxy>( base, visitedBases);
checkRefByProxies< MetaGME::Reference, MetaGME::ReferenceProxy>( base, visitedBases);
checkRefByProxies< MetaGME::Set, MetaGME::SetProxy>( base, visitedBases);
-#else
-
- // 3. find all proxys that refer to "base"
- ::checkProxies( base, visitedBases, MetaGME::Atom(), MetaGME::AtomProxy(), this);
- ::checkProxies( base, visitedBases, MetaGME::Model(), MetaGME::ModelProxy(), this);
- ::checkProxies( base, visitedBases, MetaGME::FCO(), MetaGME::FCOProxy(), this);
- ::checkProxies( base, visitedBases, MetaGME::Connection(), MetaGME::ConnectionProxy(), this);
- ::checkProxies( base, visitedBases, MetaGME::Reference(), MetaGME::ReferenceProxy(), this);
- ::checkProxies( base, visitedBases, MetaGME::Set(), MetaGME::SetProxy(), this);
- // 4. if base is a proxy, figure out if the referred baseFCOs have any bases
- ::checkRefByProxies( base, visitedBases, MetaGME::Atom(), MetaGME::AtomProxy(), this);
- ::checkRefByProxies( base, visitedBases, MetaGME::Model(), MetaGME::ModelProxy(), this);
- ::checkRefByProxies( base, visitedBases, MetaGME::FCO(), MetaGME::FCOProxy(), this);
- ::checkRefByProxies( base, visitedBases, MetaGME::Connection(), MetaGME::ConnectionProxy(), this);
- ::checkRefByProxies( base, visitedBases, MetaGME::Reference(), MetaGME::ReferenceProxy(), this);
- ::checkRefByProxies( base, visitedBases, MetaGME::Set(), MetaGME::SetProxy(), this);
-#endif
vector<MetaGME::ContainedInPar> fcos;
for(map_CIP2CIP::iterator emi=equivMap.begin(); emi!=equivMap.end(); emi++)
{ if( (*emi).second == base)
@@ -850,6 +808,31 @@
}
}
+// requires: fco is not a proxy
+static bool InRootFolder(MetaGME::BaseFCO fco)
+{
+ std::set<MetaGME::BaseFCO> proxies = GetProxies(fco);
+ for (std::set<MetaGME::BaseFCO>::iterator proxiesIt = proxies.begin(); proxiesIt != proxies.end(); proxiesIt++)
+ {
+ if (proxiesIt->InRootFolder())
+ return true;
+ }
+ return false;
+}
+
+static bool BaseInRootFolder(MetaGME::ContainedInPar kind)
+{
+ if (kind.type() == MetaGME::Folder::meta)
+ {
+ return MetaGME::Folder::Cast(kind).InRootFolder();
+ }
+ if (Uml::IsDerivedFrom(kind.type(), MetaGME::BaseFCO::meta))
+ {
+ return InRootFolder(MetaGME::BaseFCO::Cast(kind));
+ }
+ return false;
+}
+
void MetaGME2UML::CreateClasses(MetaGME::ParadigmSheet ps, UmlGME::ClassDiagram cd)
{ vector<MetaGME::ContainedInPar> cips = ps.ContainedInPar_kind_children();
for(vector<MetaGME::ContainedInPar>::iterator i=cips.begin(); i!=cips.end();i++)
@@ -886,6 +869,13 @@
mapMetaGME2UmlGME_Class[cip] = cl;
}
+
+ vector<MetaGME::ContainedInPar> fcos;
+ for(map_CIP2CIP::iterator emi=equivMap.begin(); emi!=equivMap.end(); emi++)
+ { if( (*emi).second == cip)
+ fcos.push_back((*emi).first);
+ }
+
if(type == "Folder")
{ MetaGME::Folder mo = MetaGME::Folder::Cast(cip);
cl.name() = mo.name();
@@ -894,7 +884,10 @@
intf.Stereotype() = "Folder";
cl.IsAbstract() = false;
cl.Attributes() = "name : String[0..1]\n";
- if(mo.InRootFolder()) CreateRootFolderAssociation(intf);
+ bool inRootFolder = mo.InRootFolder();
+ inRootFolder |= std::any_of(fcos.begin(), fcos.end(), BaseInRootFolder);
+ if (inRootFolder)
+ CreateRootFolderAssociation(intf);
}
else // either Model, Atom, FCO, Set, Reference, Connection
{ MetaGME::BaseFCO mo = MetaGME::BaseFCO::Cast(cip);
@@ -903,15 +896,16 @@
cl.Stereotype() = type;
impl.Stereotype() = type;
intf.Stereotype() = type;
- if(mo.InRootFolder()) CreateRootFolderAssociation(intf);
+
+ bool inRootFolder = mo.InRootFolder();
+ inRootFolder |= InRootFolder(mo);
+ inRootFolder |= std::any_of(fcos.begin(), fcos.end(), BaseInRootFolder);
+
+ if (inRootFolder)
+ CreateRootFolderAssociation(intf);
AddAttribute(mo,impl);
}
- vector<MetaGME::ContainedInPar> fcos;
- for(map_CIP2CIP::iterator emi=equivMap.begin(); emi!=equivMap.end(); emi++)
- { if( (*emi).second == cip)
- fcos.push_back((*emi).first);
- }
for(vector<MetaGME::ContainedInPar>::iterator fi = fcos.begin(); fi!=fcos.end(); fi++)
{ MetaGME::ContainedInPar slave = *fi;
mapMetaGME2UmlGME_Class[slave] = cl;
Modified: GReAT/trunk/Tools/MetaGME2UMX/MetaGME2UML.h
==============================================================================
--- GReAT/trunk/Tools/MetaGME2UMX/MetaGME2UML.h Tue Sep 3 11:48:39 2013 (r4191)
+++ GReAT/trunk/Tools/MetaGME2UMX/MetaGME2UML.h Fri Sep 20 13:44:05 2013 (r4192)
@@ -47,7 +47,10 @@
//#include "hash_map"
#include <map>
+#include <iterator>
+template<class Cont>
+std::insert_iterator<Cont> set_inserter(Cont& s) { return std::inserter(s, s.begin()); }
struct stringicmp;
@@ -130,9 +133,7 @@
void MakeImplIntf(const MetaGME::BaseFCO& base, const MetaGME::BaseFCO& derived, bool impl, bool intf);
void GetUMLCounterParts(MetaGME::BaseFCO base, MetaGME::BaseFCO derived, UmlGME::Class &cbase, UmlGME::Class &cderived);
void RecurseOnBases(const MetaGME::BaseFCO& base);
-#if _MSC_VER < 1300
-public:
-#endif
+
void RecurseOnBases(const MetaGME::BaseFCO& base, std::set< MetaGME::BaseFCO>&visitedBases);
protected:
template <class TYPE, class PROXY_TYPE>
Modified: GReAT/trunk/Tools/MetaGME2UMX/MetaGME2UML_2.cpp
==============================================================================
--- GReAT/trunk/Tools/MetaGME2UMX/MetaGME2UML_2.cpp Tue Sep 3 11:48:39 2013 (r4191)
+++ GReAT/trunk/Tools/MetaGME2UMX/MetaGME2UML_2.cpp Fri Sep 20 13:44:05 2013 (r4192)
@@ -986,9 +986,6 @@
//cms.dstRolename() = "";
}
-template<class Cont>
-std::insert_iterator<Cont> set_inserter(Cont& s) { return std::inserter(s, s.begin()); }
-
template <class In, class Out, class Fn>
std::set<Out>& trans(const std::set<In>& input, std::set<Out>& output, const Fn f) {
std::transform(input.begin(), input.end(), set_inserter(output), f);
Modified: GReAT/trunk/Tools/MetaGME2UMX/MetaGME2UMX Interpreters/UdmApp.h
==============================================================================
--- GReAT/trunk/Tools/MetaGME2UMX/MetaGME2UMX Interpreters/UdmApp.h Tue Sep 3 11:48:39 2013 (r4191)
+++ GReAT/trunk/Tools/MetaGME2UMX/MetaGME2UMX Interpreters/UdmApp.h Fri Sep 20 13:44:05 2013 (r4192)
@@ -2,12 +2,7 @@
//
//////////////////////////////////////////////////////////////////////
-#if !defined(AFX_UDMAPP_H__296A93EB_6DB6_4179_AA0B_A3D799FB3A1C__INCLUDED_)
-#define AFX_UDMAPP_H__296A93EB_6DB6_4179_AA0B_A3D799FB3A1C__INCLUDED_
-
-#if _MSC_VER > 1000
#pragma once
-#endif // _MSC_VER > 1000
// Udm includes
#include "UdmBase.h"
@@ -33,4 +28,3 @@
};
-#endif // !defined(AFX_UDMAPP_H__296A93EB_6DB6_4179_AA0B_A3D799FB3A1C__INCLUDED_)
More information about the Mobies-commit
mailing list