[Mobies-commit] [commit] r4116 - in UDM/trunk: include src/UdmCopy src/UdmUtil
ksmyth at redhat1.isis.vanderbilt.edu
ksmyth at redhat1.isis.vanderbilt.edu
Wed Oct 3 09:40:11 CDT 2012
Author: ksmyth
Date: Wed Oct 3 09:40:11 2012
New Revision: 4116
Log:
Add FlattenLibrariesAndCopyObjectHierarchy function (-f switch in UdmCopy
Modified:
UDM/trunk/include/UdmUtil.h
UDM/trunk/src/UdmCopy/UdmCopy.cpp
UDM/trunk/src/UdmUtil/UdmUtil.cpp
Modified: UDM/trunk/include/UdmUtil.h
==============================================================================
--- UDM/trunk/include/UdmUtil.h Wed Oct 3 09:39:58 2012 (r4115)
+++ UDM/trunk/include/UdmUtil.h Wed Oct 3 09:40:11 2012 (r4116)
@@ -48,7 +48,9 @@
// returns: 0 if successful
UDM_DLL int reqCopyLinks(Udm::ObjectImpl* p_srcRoot,Udm::ObjectImpl* p_dstRoot, copy_assoc_map& cam, const bool direct = true,const bool simpleLinks = true, const CopyOpts &opts = DefCopyOpts);
UDM_DLL int CopyObjectHierarchy(Udm::ObjectImpl* p_srcRoot, Udm::ObjectImpl* p_dstRoot, Udm::DataNetwork* p_dstBackend, copy_assoc_map &cam, const CopyOpts &opts = DefCopyOpts);
-
+
+ UDM_DLL int FlattenLibrariesAndCopyObjectHierarchy(Udm::Object& srcRoot, Udm::Object& dstRoot, Udm::DataNetwork* dstBackend, UdmUtil::copy_assoc_map &cam);
+
//this utility tries to extract the name-like attribute
//using stupid heuristics and assuming odd things like
//the name of the name attribute is "name". Anyway, it might be useful.
Modified: UDM/trunk/src/UdmCopy/UdmCopy.cpp
==============================================================================
--- UDM/trunk/src/UdmCopy/UdmCopy.cpp Wed Oct 3 09:39:58 2012 (r4115)
+++ UDM/trunk/src/UdmCopy/UdmCopy.cpp Wed Oct 3 09:40:11 2012 (r4116)
@@ -47,8 +47,9 @@
{
}
- void Copy(ObjectImpl *p_srcRoot, ObjectImpl *p_dstRoot, DataNetwork *p_dstBackend, UdmUtil::copy_assoc_map &cam, bool inside_lib = false)
+ int Copy(ObjectImpl *p_srcRoot, ObjectImpl *p_dstRoot, DataNetwork *p_dstBackend, UdmUtil::copy_assoc_map &cam, bool inside_lib = false)
{
+ int ret = 0;
vector<ObjectImpl*> children = p_srcRoot->getChildren(NULL, p_srcRoot->type());
for (vector<ObjectImpl*>::const_iterator i = children.begin(); i != children.end(); i++) {
@@ -117,13 +118,25 @@
}
UdmUtil::CopyOpts opts = { true, inside_lib };
- UdmUtil::CopyObjectHierarchy(p_srcRoot, p_dstRoot, p_dstBackend, cam, opts);
+ if (UdmUtil::CopyObjectHierarchy(p_srcRoot, p_dstRoot, p_dstBackend, cam, opts) != 0)
+ {
+ ret = 1;
+ }
+ return ret;
}
};
int main(int argc, char **argv) {
+ bool flatten = false;
+ if (argc > 2 && strcmp(argv[1], "-f") == 0)
+ {
+ flatten = true;
+ argc--;
+ argv++;
+ }
+
if(argc != 4 && argc != 5) {
cout << "Usage: UdmCopy <indataname> <outdataname> <diagramname> [<metalocator>]" << endl;
cout << " where: <diagramname>: Udm .xml file" << endl;
@@ -186,14 +199,23 @@
UdmCopy cp(udmDataDiagram, metaloc, toDN_ext);
UdmUtil::copy_assoc_map dummy;
- cp.Copy(fromDN.GetRootObject().__impl(), toDN.GetRootObject().__impl(), &toDN, dummy);
+ int ret;
+ if (flatten)
+ ret = UdmUtil::FlattenLibrariesAndCopyObjectHierarchy(fromDN.GetRootObject(), toDN.GetRootObject(), &toDN, dummy);
+ else
+ ret = cp.Copy(fromDN.GetRootObject().__impl(), toDN.GetRootObject().__impl(), &toDN, dummy);
toDN.CloseWithUpdate();
+ if (ret != 0)
+ {
+ cerr << "Copy failed" << endl;
+ exit(-2);
+ }
}
catch(udm_exception u) {
- cout << u.what() << endl;
+ cerr << u.what() << endl;
exit(-1);
}
Modified: UDM/trunk/src/UdmUtil/UdmUtil.cpp
==============================================================================
--- UDM/trunk/src/UdmUtil/UdmUtil.cpp Wed Oct 3 09:39:58 2012 (r4115)
+++ UDM/trunk/src/UdmUtil/UdmUtil.cpp Wed Oct 3 09:40:11 2012 (r4116)
@@ -129,6 +129,27 @@
return ExtractName(ob.__impl(), att_name);
}
+ UDM_DLL int FlattenLibrariesAndCopyObjectHierarchy(Udm::Object& srcRoot, Udm::Object& dstRoot, Udm::DataNetwork* dstBackend, UdmUtil::copy_assoc_map &cam)
+ {
+ std::set<Udm::Object> children = srcRoot.GetChildObjects();
+ for (std::set<Udm::Object> ::iterator childrenIt = children.begin(); childrenIt != children.end(); childrenIt++)
+ {
+ Udm::Object child = *childrenIt;
+ std::string lib_name;
+ if (child.isLibRoot())
+ {
+ if (FlattenLibrariesAndCopyObjectHierarchy(child, dstRoot, dstBackend, cam) != 0)
+ {
+ return 1;
+ }
+ }
+ }
+ if (CopyObjectHierarchy(srcRoot.__impl(), dstRoot.__impl(), dstBackend, cam) != 0)
+ {
+ return 1;
+ }
+ return 0;
+ }
UDM_DLL int CopyObjectHierarchy(Udm::ObjectImpl* p_srcRoot, Udm::ObjectImpl* p_dstRoot, Udm::DataNetwork* p_dstBackend, copy_assoc_map &cam, const CopyOpts &opts)
More information about the Mobies-commit
mailing list