[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