Trees | Indices | Help |
---|
|
1 #============================================================================ 2 #Name : virtualbuildarea.py 3 #Part of : Helium 4 5 #Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 6 #All rights reserved. 7 #This component and the accompanying materials are made available 8 #under the terms of the License "Eclipse Public License v1.0" 9 #which accompanies this distribution, and is available 10 #at the URL "http://www.eclipse.org/legal/epl-v10.html". 11 # 12 #Initial Contributors: 13 #Nokia Corporation - initial contribution. 14 # 15 #Contributors: 16 # 17 #Description: 18 #=============================================================================== 19 20 """ 21 This modules helps to recreate a fake synergy project for the 22 ccm toolkit. The fake project can be composed of any real synergy 23 objects. 24 """ 25 26 27 # pylint: disable-msg=E1103 28 29 30 import ccm 31 import xml.dom.minidom 32 import traceback 33 import sys 34 DEBUG_VIRTUALDIR = True 3537 """ Fake directory object. 38 The four parts name will be: <dirname>-1:dir:fakedb#1 39 """109 11041 fpn = "%s-1:dir:fakedb#1" % name 42 ccm.Dir.__init__(self, session, fpn) 43 self.__data = [] 44 self._project = project4547 """ Add an object to the directory. """ 48 if (o.type == 'dir'): 49 if DEBUG_VIRTUALDIR: 50 print "Dir adding %s to %s" % (o, self) 51 vdir = self.getDirNamed(o.name) 52 if vdir == None: 53 # Adding a directory, convert it into a virtual one 54 if DEBUG_VIRTUALDIR: 55 print "Dir not found creating a virtual one" 56 vdir = VirtualDir(self._session, o.name, self._project) 57 self.__data.append(vdir) 58 elif vdir.type == 'project': 59 # this is a project, covert it into a directory 60 self.__data.remove(vdir) 61 self.addChild(vdir.root_dir(), vdir) 62 vdir = self.getDirNamed(o.name) 63 64 # Adding content of the directory into the virtual one 65 for child in o.children(project): 66 vdir.addChild(child, project) 67 elif (o.type == 'project'): 68 # Adding a project 69 if DEBUG_VIRTUALDIR: 70 print "Project adding %s to %s" % (o, self) 71 # check for directory with the same name first 72 vdir = self.getDirNamed(o.name) 73 if vdir == None: 74 # if it is new, just add it 75 if DEBUG_VIRTUALDIR: 76 print "Adding project directly" 77 self.__data.append(o) 78 else: 79 if vdir.type == 'project': 80 if DEBUG_VIRTUALDIR: 81 print "Replacing project by dir %s" % vdir 82 self.__data.remove(vdir) 83 self.addChild(vdir.root_dir(), vdir) 84 vdir = self.getDirNamed(o.name) 85 # if a directory already exist grab the content 86 if DEBUG_VIRTUALDIR: 87 print "Adding childs under %s" % vdir 88 for child in o.root_dir().children(o): 89 vdir.addChild(child, o) 90 else: 91 self.__data.append(o)9294 """ Look for a subdirectory named in its children. 95 The test is done in a case insensitive way. 96 """ 97 for o in self.__data: 98 if (o.name.lower() == name.lower()): 99 return o 100 return None101 105112 """ Create a fake project containing on fake directory. 113 The four part name will be <projectname>-1:project:fakedb#1. 114 """123 124 131116 fpn = "%s-1:project:fakedb#1" % name 117 ccm.Project.__init__(self, session, fpn) 118 self._root_dir = VirtualDir(session, name, self)119133 """ Creating a directory structure using the vpath list given as input. 134 """ 135 vpath = __removeEmptyStrings(vpath) 136 if (root.type == 'project'): 137 root = root.root_dir() 138 if (len(vpath) == 0): 139 return root 140 else: 141 name = vpath.pop(0) 142 root.addChild(VirtualDir(root.session, name, root.virtualproject()), root.virtualproject()) 143 return __createVirtualPath(vpath, root.getDirNamed(name))144146 name = spath.pop(0) 147 if (len(spath) == 0 and dir == None): 148 result = [] 149 for o in project.root_dir().children(project): 150 result.append({'project':project, 'object':o}) 151 return result 152 153 if (dir == None): 154 root_dir = project.root_dir() 155 if (root_dir.name.lower() == name.lower()): 156 return __getObjects(project, spath, root_dir) 157 else: 158 Exception("getObjects: root_dir.name(%s)!=name(%s)" % (root_dir.name, name)) 159 else: 160 for d in dir.children(project): 161 if d.type == 'dir' and d.name.lower() == name.lower(): 162 return __getObjects(project, spath, d) 163 raise Exception("Could not find object %s" % name)164 165 166168 """ Creates a virtual toplevel project using the XML configuration. """ 169 try: 170 dom = xml.dom.minidom.parse(file) 171 #dom = xml.dom.minidom.parseString(input) 172 173 vba = VirtualProject(session, name) 174 virtualBA = dom.documentElement 175 for child in virtualBA.childNodes: 176 if (child.nodeType == xml.dom.Node.ELEMENT_NODE) and (child.nodeName == 'add'): 177 print "add node :%s (%d)" % (child.getAttribute('project'), len(child.childNodes)) 178 pathobject = __createVirtualPath(child.getAttribute('to').split('/'), vba) 179 if len(child.childNodes) == 0: 180 p = session.create(child.getAttribute('project')) 181 pathobject.addChild(p, p) 182 else: 183 project = session.create(child.getAttribute('project')) 184 for subChild in child.childNodes: 185 if (subChild.nodeType == xml.dom.Node.ELEMENT_NODE) and (subChild.nodeName == 'objects'): 186 spath = __removeEmptyStrings(subChild.getAttribute('from').split('/')) 187 for t in __getObjects(project, spath): 188 pathobject.addChild(t['object'], t['project']) 189 virtualBA.unlink() 190 return vba 191 except Exception, e: 192 traceback.print_exc(file = sys.stdout) 193 raise Exception("XML cannot be parsed properly %s" % e)194
Trees | Indices | Help |
---|
Generated by Epydoc 3.0beta1 on Wed Sep 09 13:44:22 2009 | http://epydoc.sourceforge.net |