You are viewing a plain text version of this content. The canonical link for it is here.
Posted to general@gump.apache.org by aj...@apache.org on 2004/06/10 02:08:24 UTC

cvs commit: gump/python/gump/loader loader.py

ajack       2004/06/09 17:08:24

  Modified:    python/gump/model Tag: CleanUp project.py object.py
                        depend.py module.py property.py workspace.py
                        profile.py
               python/gump/utils Tag: CleanUp work.py
               python/gump/loader Tag: CleanUp loader.py
  Added:       python/gump/utils Tag: CleanUp domutils.py
  Log:
  EOD...
  
  Revision  Changes    Path
  No                   revision
  No                   revision
  1.85.2.2  +69 -67    gump/python/gump/model/project.py
  
  Index: project.py
  ===================================================================
  RCS file: /home/cvs/gump/python/gump/model/project.py,v
  retrieving revision 1.85.2.1
  retrieving revision 1.85.2.2
  diff -u -r1.85.2.1 -r1.85.2.2
  --- project.py	8 Jun 2004 21:36:35 -0000	1.85.2.1
  +++ project.py	10 Jun 2004 00:08:23 -0000	1.85.2.2
  @@ -33,12 +33,13 @@
   from gump.model.depend import *
   from gump.model.cp import *
   from gump.utils.note import transferAnnotations, Annotatable
  +from gump.utils.domutils import *
   
   
   class Project(NamedModelObject, Statable, Resultable, Dependable, Positioned):
       """A single project"""
  -    def __init__(self,xml,workspace):
  -    	NamedModelObject.__init__(self,xml.getName(),xml,workspace)
  +    def __init__(self,name,xml,owner):
  +    	NamedModelObject.__init__(self,name,xml,owner)
       	
       	Statable.__init__(self)
       	Resultable.__init__(self)
  @@ -47,7 +48,7 @@
       	
       	# Navigation
           self.module=None # Module has to claim ownership
  -        self.workspace=workspace
  +        self.workspace=None
       	
       	self.home=None
       	self.basedir=None
  @@ -82,15 +83,15 @@
           self.built=0
           
       def hasAnt(self):
  -        if hasattr(self,'ant') and self.ant: return True
  +        if self.ant: return True
           return False
           
       def hasMaven(self):
  -        if hasattr(self,'maven') and self.maven: return True
  +        if self.maven: return True
           return False
           
       def hasScript(self):
  -        if hasattr(self,'script') and self.script: return True
  +        if self.script: return True
           return False
       
       def getAnt(self):
  @@ -119,8 +120,7 @@
           desc=str(self.xml.description) or self.getModule().getDescription()    
           if len(desc) > limit:
               desc=desc[:limit]
  -            desc+='...'
  -        
  +            desc+='...'        
           return desc
           
       def getMetadataLocation(self):
  @@ -235,15 +235,13 @@
       #
       # We have a potential clash between the <project package attribute and
       # the <project <package element. The former indicates a packages install
  -    # the latter the (Java) package name for the project contents. As such
  -    # we test the attribute for type.
  +    # the latter the (Java) package name for the project contents. 
       #                                      
       def isPackaged(self):
           return self.isPackageMarked() or self.honoraryPackage
       
       def isPackageMarked(self):
  -        if not hasattr(self.xml,'package'): return False
  -        return (type(self.xml.package) in types.StringTypes)
  +        return hasAttribute(self.element,'package')
                     
       def setHonoraryPackage(self,honorary):
           self.honoraryPackage=honorary
  @@ -258,6 +256,9 @@
           if not self.inModule():
               self.addWarning("Not in a module")
               return
  +            
  +        # Import overrides from DOM
  +        transferInfo(self.element, self, {})        
       
           #
           # Packaged Projects don't need the full treatment..
  @@ -265,22 +266,22 @@
           packaged=self.isPackaged()
   
           # Import any <ant part [if not packaged]
  -        if hasattr(self.xml,'ant') and not packaged:
  -            self.ant = Ant(self.xml.ant,self)
  +        if hasChild(self.element,'ant') and not packaged:
  +            self.ant = Ant(getChild(self.element,'ant'),self)
               
               # Copy over any XML errors/warnings
               # :TODO:#1: transferAnnotations(self.xml.ant, self)
           
           # Import any <maven part [if not packaged]
  -        if hasattr(self.xml,'maven') and not packaged:
  -            self.maven = Maven(self.xml.maven,self)
  +        if hasChild(self.element,'maven') and not packaged:
  +            self.maven = Maven(getChild(self.element,'maven'),self)
               
               # Copy over any XML errors/warnings
               # :TODO:#1: transferAnnotations(self.xml.maven, self)
               
           # Import any <script part [if not packaged]
  -        if hasattr(self.xml,'script') and not packaged:
  -            self.script = Script(self.xml.script,self)
  +        if hasChild(self.element,'script') and not packaged:
  +            self.script = Script(getChild(self.element,'script'),self)
               
               # Copy over any XML errors/warnings
               # :TODO:#1: transferAnnotations(self.xml.script, self)
  @@ -289,7 +290,7 @@
           # if one is set
           self.basedir = os.path.abspath(os.path.join(	\
                               self.getModule().getWorkingDirectory() or dir.base,	\
  -                            self.xml.transfer('basedir','')))
  +                            getValue(self.element,'basedir','')))
            
           # Compute home directory
           if self.isPackaged():
  @@ -298,28 +299,26 @@
                   self.home=os.path.abspath(
                       os.path.join(
                           workspace.pkgdir,
  -                        self.xml.transfer('package')))
  +                        getValue(self.element,'package')))
               else:
                   self.home=os.path.abspath(workspace.pkgdir)
  -        elif hasattr(self.xml,'home') and isinstance(self.xml.home,Single) \
  -                and self.xml.home:
  -            if hasattr(self.xml.home,'nested'):
  +        elif hasChild(self.element,'home'):
  +            home=getChild(self.element,'home')
  +            if hasAttribute(home,'nested'):
  +                nested=getValue(home,'nested')
                   self.home=os.path.abspath(
  -                    os.path.join(
  -                        self.getModule().getWorkingDirectory(),
  -                        self.xml.home.transfer('nested')))
  -            elif hasattr(self.xml.home,'parent'):
  +                    os.path.join(self.getModule().getWorkingDirectory(),nested))
  +            elif hasAttribute(home,'parent'):
  +                nested=getValue(home,'parent')    
                   self.home=os.path.abspath(
  -                    os.path.join(
  -                        workspace.getBaseDirectory(),
  -                        self.xml.home.transfer('parent')))
  +                    os.path.join(workspace.getBaseDirectory(),parent))
               else:
                   message=('Unable to complete project.home for %s [not nested/parent] : %s') \
                               % (self.name, self.xml.home)
                   self.addError(message)
                   log.warning(message)
                   self.home=None        
  -        elif not hasattr(self.xml,'home') or not self.xml.home:
  +        else:
               if self.module:
                   module=self.getModule()    
                   self.home=os.path.abspath(module.getWorkingDirectory())
  @@ -328,29 +327,32 @@
                               os.path.join(
                                   workspace.getBaseDirectory(),
                                   self.name))
  -        else:
  -            message='Unable to complete project.home for: ' + self.name 
  -            self.addError(message)
  -            self.home=None
  +        # Forget how this could be possible...
  +        #else:
  +        #    message='Unable to complete project.home for: ' + self.name 
  +        #    self.addError(message)
  +        #    self.home=None
   
           # Extract license 
  -        if hasattr(self.xml,'license'):
  -            if hasattr(self.xml.license,'name'):
  -                self.license = self.xml.license.name
  +        if hasChild(self.element,'license'):
  +            license=getChild('license')
  +            if hasAttribute(license,'name'):
  +                self.license = getValue(license,'name')
               else:
                   self.addError('Missing \'name\' on <license')
           
           #
           # Resolve jars (outputs)
           #
  -        if hasattr(self.xml,'jar'):
  -            for j in self.xml.jar:
  -                if self.home and j.getName():
  -                    jar=Jar(j,self)
  -                    jar.setPath(os.path.abspath(os.path.join(self.home,j.name)))
  -                    self.addJar(jar)
  -                else:
  -                    self.addError('Missing \'name\' on <jar')
  +        for jdom in getChildren(self.element,'jar'):
  +            name=getValue(jdom,'name')
  +            if self.home and name:
  +                jar=Jar(j,name,self)
  +                jar.complete()
  +                jar.setPath(os.path.abspath(os.path.join(self.home,j.name)))
  +                self.addJar(jar)
  +            else:
  +                self.addError('Missing \'name\' on <jar')
                   
           #
           # Fix 'ids' on all Jars which don't have them
  @@ -383,23 +385,23 @@
                           jar.setId(newId)
           
           # Grab all the work
  -        for w in self.xml.work:
  +        for w in getChildren(self.element,'work'):
               work=Work(w,self)
               self.works.append(work)
   
           # Grab all the mkdirs
  -        for m in self.xml.mkdir:
  +        for m in getChildren(self.element,'mkdir'):
               mkdir=Mkdir(m,self)
               self.mkdirs.append(mkdir)
   
           # Grab all the deleted
  -        for d in self.xml.delete:
  +        for d in getChildren(self.element,'delete'):
               delete=Delete(d,self)
               self.deletes.append(delete)
   
           # Grab all the reports (junit for now)
  -        if self.xml.junitreport:
  -            report=JunitReport(self.xml.junitreport,self)
  +        if hasChild(self.element,'junitreport'):
  +            report=JunitReport(getChild(self.element,'junitreport'),self)
               self.reports.append(report)
   
           # Build Dependencies Map [including depends from <ant|maven/<property/<depend
  @@ -441,13 +443,13 @@
                   for xmldepend in badDepends:
                       self.changeState(STATE_FAILED,REASON_CONFIG_FAILED)
                       self.addError("Bad Dependency. Project: " \
  -                            + xmldepend.project + " unknown to *this* workspace")
  +                            + getValue(xmldepend,'project') + " unknown to *this* workspace")
   
                   for xmloption in badOptions:                
                       self.addWarning("Bad *Optional* Dependency. Project: " \
  -                            + xmloption.project + " unknown to *this* workspace")
  +                            + getValue(xmloption,'project') + " unknown to *this* workspace")
           else:
  -            self.addInfo("This is a packaged project, location: " + str(self.home))        
  +            self.addInfo("This is a packaged project, location: " + self.home)        
                                       
           # Copy over any XML errors/warnings
           # :TODO:#1: transferAnnotations(self.xml, self)  
  @@ -460,46 +462,46 @@
   
       def importDependencies(self,workspace):        
           badDepends=[]
  -        # Walk the XML parts converting
  -        for xmldepend in self.xml.depend:
  -            dependProjectName=xmldepend.project
  +        # Walk the DOM parts converting
  +        for ddom in getChildren(self.element,'depend'):
  +            dependProjectName=getValue(ddom,'project')
               if workspace.hasProject(dependProjectName):
                   dependProject=workspace.getProject(dependProjectName)
                   
                   # Import the dependency
  -                dependency=importXMLDependency(self, dependProject, xmldepend, 0)
  +                dependency=importDomDependency(self, dependProject, ddom, 0)
                                   
                   # Add a dependency
                   self.addDependency(dependency)
               else:
  -                badDepends.append(xmldepend)    
  +                badDepends.append(ddom)    
                   
           # Walk the XML parts converting
           badOptions=[]
  -        for xmloption in self.xml.option:
  -            optionProjectName=xmloption.project
  +        for odom in getChildren(self.element,'option'):
  +            optionProjectName=getValue(odom,'project')
               if workspace.hasProject(optionProjectName):
                   optionProject=workspace.getProject(optionProjectName)
                                   
                   # Import the dependency
  -                dependency=importXMLDependency(self, optionProject, xmloption, 1)
  +                dependency=importDomDependency(self, optionProject, odom, 1)
                                   
                   # Add a dependency
                   self.addDependency(dependency)                    
               else:
  -                badOptions.append(xmloption)
  +                badOptions.append(odom)
   
           return (badDepends, badOptions)
           
       def hasBaseDirectory(self):
  -        if hasattr(self,'basedir'): return True
  +        if self.basedir: return True
           return False
           
       def getBaseDirectory(self):
            return self.basedir
            
       def hasHomeDirectory(self):
  -        if hasattr(self,'home'): return True
  +        if self.home: return True
           return False
           
       def getHomeDirectory(self):
  @@ -509,7 +511,7 @@
           return hasattr(self,'module') and self.module
           
       def setModule(self,module):
  -        if hasattr(self,'module') and self.module:
  +        if self.module:
               raise RuntimeError, 'Project [' + self.name + '] already has a module set'
           self.module=module
           
  @@ -523,7 +525,7 @@
       def hasBuildCommand(self):
           hasBuild=0
           # I.e has an <ant or <script element
  -        if self.xml.ant or self.xml.script or self.xml.maven: hasBuild=1    
  +        if self.ant or self.script or self.maven: hasBuild=1    
           return hasBuild      
           
       def dump(self, indent=0, output=sys.stdout):
  
  
  
  1.24.2.3  +33 -18    gump/python/gump/model/object.py
  
  Index: object.py
  ===================================================================
  RCS file: /home/cvs/gump/python/gump/model/object.py,v
  retrieving revision 1.24.2.2
  retrieving revision 1.24.2.3
  diff -u -r1.24.2.2 -r1.24.2.3
  --- object.py	9 Jun 2004 19:28:44 -0000	1.24.2.2
  +++ object.py	10 Jun 2004 00:08:23 -0000	1.24.2.3
  @@ -25,6 +25,7 @@
   from gump.utils.file import *
   from gump.utils.owner import *
   from gump.utils.xmlutils import xmlize
  +from gump.utils.domutils import *
   
   from gump.model.state import *
   from gump.model.propagation import *
  @@ -50,6 +51,10 @@
   
           # The XML model
       	self.dom=dom
  +    	if dom.nodeType==xml.dom.Node.DOCUMENT_NODE:
  +    	    self.element=dom.documentElement
  +        else:
  +            self.element=self.dom
       	
       	self.debug=False
       	self.verbose=False
  @@ -59,8 +64,8 @@
       def __del__(self):
           Annotatable.__del__(self)
           Workable.__del__(self)
  -        FileHolder.__del__(self)
  -        Propogatable.__del__(self)
  +        #FileHolder.__del__(self)
  +        #Propogatable.__del__(self)
           Ownable.__del__(self)
           
           # No longer need this...
  @@ -141,9 +146,11 @@
               
           return states
           
  -    def getObjectForTag(self,tag,name=None):
  +    def getObjectForTag(self,tag,dom,name=None):
           pass
           
  +    def resolve(self): 
  +        pass
                                   
   class NamedModelObject(ModelObject):
       """Context for a single entity"""
  @@ -180,7 +187,6 @@
           output.write(getIndent(indent)+'Name: ' + self.name + '\n')
           ModelObject.dump(self,indent+1,output)
   
  -          
   class Positioned:
       def __init__(self): 
           self.posn=-1
  @@ -243,10 +249,19 @@
   
   # represents a <jar/> element
   class Jar(NamedModelObject):
  -    def __init__(self,xml,owner):
  -    	NamedModelObject.__init__(self,xml.getName(),xml,owner)
  +    def __init__(self,name,dom,owner):
  +    	NamedModelObject.__init__(self,name,dom,owner)
  +    	self.id=None
  +    	self.type=None
       	
  -    	self.id = self.xml.id
  +    def complete(self):
  +        if self.isComplete(): return    
  +        
  +        # Import overrides from DOM
  +        transferInfo( self.element, self, {})    
  +        
  +        # Done, don't redo
  +        self.setComplete(True)    
       	
       def setPath(self,path):
           self.path=path
  @@ -265,11 +280,11 @@
           return self.id
           
       def getType(self):
  -        return self.xml.transfer('type')
  +        return self.type
   
   class Resolvable(ModelObject):
  -    def __init__(self,xml,owner):
  -        ModelObject.__init__(self,xml,owner)                
  +    def __init__(self,dom,owner):
  +        ModelObject.__init__(self,dom,owner)                
           
       def getResolvedPath(self):  
           path=None
  @@ -286,21 +301,21 @@
                 
   # represents a <junitreport/> element
   class JunitReport(Resolvable):
  -    def __init__(self,xml,owner):
  -        Resolvable.__init__(self,xml,owner)    
  +    def __init__(self,dom,owner):
  +        Resolvable.__init__(self,dom,owner)    
       
   # represents a <mkdir/> element
   class Mkdir(Resolvable):
  -    def __init__(self,xml,owner):
  -        Resolvable.__init__(self,xml,owner)    
  +    def __init__(self,dom,owner):
  +        Resolvable.__init__(self,dom,owner)    
   
   # represents a <delete/> element
   class Delete(Resolvable): 
  -    def __init__(self,xml,owner):
  -        Resolvable.__init__(self,xml,owner)    
  +    def __init__(self,dom,owner):
  +        Resolvable.__init__(self,dom,owner)    
   
   # represents a <work/> element
   class Work(Resolvable): 
  -    def __init__(self,xml,owner):
  -        Resolvable.__init__(self,xml,owner)    
  +    def __init__(self,dom,owner):
  +        Resolvable.__init__(self,dom,owner)    
           
  
  
  
  1.27.2.2  +12 -12    gump/python/gump/model/depend.py
  
  Index: depend.py
  ===================================================================
  RCS file: /home/cvs/gump/python/gump/model/depend.py,v
  retrieving revision 1.27.2.1
  retrieving revision 1.27.2.2
  diff -u -r1.27.2.1 -r1.27.2.2
  --- depend.py	8 Jun 2004 21:36:35 -0000	1.27.2.1
  +++ depend.py	10 Jun 2004 00:08:23 -0000	1.27.2.2
  @@ -40,26 +40,28 @@
   def inheritDescription(inherit):
       return inheritDescriptions.get(inherit,'Unknown Inherit:' + str(inherit))
              
  -def importXMLDependency(ownerProject,dependProject,xmldepend,optional):
  +def importDomDependency(ownerProject,dependProject,ddom,optional):
           
       # Is this a runtime dependency?
  -    runtime = hasattr(xmldepend,'runtime')
  +    runtime = hasAttribute(ddom,'runtime')
           
       # Inheritence
       inherit=INHERIT_NONE
  -    if hasattr(xmldepend,'inherit'):
  -        if 'runtime' == xmldepend.inherit:
  +    if hasAttribute(ddom,'inherit'):
  +        inherit=getValue('inherit')
  +        if 'runtime' == inherit:
               inherit=INHERIT_RUNTIME
  -        elif 'all' == xmldepend.inherit:
  +        elif 'all' == inherit:
               inherit=INHERIT_ALL
  -        elif 'hard' == xmldepend.inherit:
  +        elif 'hard' == inherit:
               inherit=INHERIT_HARD
  -        elif 'jars' == xmldepend.inherit:
  +        elif 'jars' == inherit:
               inherit=INHERIT_JARS
  -        elif 'none' == xmldepend.inherit:
  +        elif 'none' == inherit:
               inherit=INHERIT_NONE
           
  -    ids	=	xmldepend.transfer('ids','')
  +    ids	=	getValue(ddom,'ids','')
  +    
       annotation = None # 'Expressed Dependency'
       
       # :TODO: I hate this line of code!!!!
  @@ -67,11 +69,9 @@
       # to acess the delegate. We do so to check for existence
       # but w/o value. Not good. Really gotta re-write that XML
       # loading/merging stuff.
  -    noclasspath=hasattr(xmldepend,'noclasspath') and not (None==xmldepend.noclasspath.delegate)    
  +    noclasspath=hasValue(ddom,'noclasspath')    
           
  -    #
       # Construct the dependency
  -    #        
       return ProjectDependency( 	ownerProject,	\
                                   dependProject,	\
                                   inherit,		\
  
  
  
  1.45.2.3  +85 -88    gump/python/gump/model/module.py
  
  Index: module.py
  ===================================================================
  RCS file: /home/cvs/gump/python/gump/model/module.py,v
  retrieving revision 1.45.2.2
  retrieving revision 1.45.2.3
  diff -u -r1.45.2.2 -r1.45.2.3
  --- module.py	9 Jun 2004 19:28:44 -0000	1.45.2.2
  +++ module.py	10 Jun 2004 00:08:23 -0000	1.45.2.3
  @@ -26,6 +26,7 @@
   from gump.model.object import NamedModelObject, Resultable, Positioned
   from gump.utils import getIndent
   from gump.utils.note import transferAnnotations, Annotatable
  +from gump.utils.domutils import *
   
   class ModuleCvs(ModelObject):
       def __init__(self,xml,repository):
  @@ -152,21 +153,11 @@
           
       def getGroup(self):
           return self.group
  -         
  -def createUnnamedModule(workspace):
  -    #
  -    # Create an Unnamed Module (for projects not in modules)
  -    #
  -    from gump.model.rawmodel import XMLModule
  -    unnamedXML=XMLModule({'name':'Anonymous'})
  -    unnamedModule=Module(unnamedXML,workspace)
  -    unnamedModule.complete(workspace)
  -    return unnamedModule
           
   class Module(NamedModelObject, Statable, Resultable, Positioned):
       """Set of Modules (which contain projects)"""
  -    def __init__(self,xml,workspace):
  -    	NamedModelObject.__init__(self,xml.getName(),xml,workspace)
  +    def __init__(self,name,xml,owner):
  +    	NamedModelObject.__init__(self,name,xml,owner)
               	
       	Statable.__init__(self)
       	Resultable.__init__(self)
  @@ -174,8 +165,7 @@
       	
       	self.totalDepends=[]
       	self.totalDependees=[]
  -    	
  -    	self.workspace=workspace 
  +    
       	self.projects={}
       	
       	self.repository=None
  @@ -191,27 +181,31 @@
       	self.affected		=	0
           	
           # Extract settings
  -        self.tag=xml.transfer('tag')
  +        self.tag=None
  +                
  +        # 
  +        self.workdir=None
  +        
  +    def resolve(self):
  +        print 'RESOLVE MODULE:'+`self`   
  +        for pdom in getChildren(self.element,'project'):
  +            project=Project(getValue(pdom,'name'),pdom,self)
  +            print 'PROJECT:'+`project`
  +            self.addProject(project)
  +                
   
       # provide default elements when not defined in xml
       def complete(self,workspace):
         
           if self.isComplete(): return
  -           
  -        #if self.getName() == 'broken1':
  -        #    print "------------------------------------------------------------------------"
  -        #    print "COMPLETE MODULE"
  -        #    self.xml.dump()
  -        #    print "------------------------------------------------------------------------"        
  -        #    print "COMPLETE MODULE"
  -        #    dump(self.xml)
  -        #    print "------------------------------------------------------------------------"
  -        #    from gump.utils.xmlutils import xmlize
  -        #    print xmlize('module',self.xml)
  -        #    print "COMPLETED MODULE"
  -        #    print "------------------------------------------------------------------------"        
  -        
  -        packaged=0
  +
  +        # Defaults
  +        self.workdir=self.getName()
  +             
  +        # Import overrides from DOM
  +        transferInfo( self.element, self, {'srcdir':'workdir'})
  +                            
  +        packaged=False
                   
           # Claim ownership & check for packages
           # ###################################################
  @@ -219,49 +213,37 @@
           # well be considered packages, no need to update from CVS
           # since we won't be building.
           packageCount=0
  -        allPackaged=1
  +        allPackaged=True
                           
  -        #print 'PROJECTs:'+`self.xml.project`
  -        for xmlproject in self.xml.project:
  -            #print 'PROJECT:'+`xmlproject`
  -            if workspace.hasProject(xmlproject.name):
  -                
  -                #
  -                # The project pretty much better be in the
  -                # workspace, but avoid crashing...
  -                #
  -                project=workspace.getProject(xmlproject.name)
  -                
  -                if not project.inModule():
  -                    #
  -                    # Claim ownership
  -                    #
  -                    self.addProject(project)
  -                else:
  -                    workspace.addError('Duplicate project [' + xmlproject.name + '] in [' \
  -                            + project.getModule().getName() + '] and now [' + self.getName() + ']')
  -                
  +        for project in self.getProjects():
  +          
  +            if not project.inModule():
                   #
  -                # Check for packaged
  +                # Claim ownership
                   #
  -                if not project.isPackaged():
  -                    allPackaged=0  
  -                else:
  -                    self.addInfo('Packaged Project: ' + project.getName())
  -                    packageCount+=1                
  +                self.addProject(project)
               else:
  -                log.error(':TODO: No such project in w/s ['+ `xmlproject.name` +'] on [' \
  -                      + self.getName() + ']')
  +                workspace.addError('Duplicate project [' + project.getName() + '] in [' \
  +                        + project.getModule().getName() + '] and now [' + self.getName() + ']')
                   
  +            #
  +            # Check for packaged
  +            #
  +            if not project.isPackaged():
  +                allPackaged=False
  +            else:
  +                self.addInfo('Packaged Project: ' + project.getName())
  +                packageCount+=1                
  +       
               # Must be one to be all
  -            if not packageCount: allPackaged=0
  +            if not packageCount: allPackaged=False
       
               #
               # Give this module a second try,  if some are packaged, and
               # check if the others have no outputs, then call them good.
               #
               if packageCount and not allPackaged:
  -                allPackaged=1
  +                allPackaged=True
                   for project in self.getProjects():
                       if not project.isPackaged():
                           if not project.hasOutputs():
  @@ -275,39 +257,38 @@
                               project.changeState(STATE_COMPLETE,REASON_PACKAGE)    
                               packageCount+=1
                           else:    
  -                            allPackaged=0  
  +                            allPackaged=False
                               if packageCount:
                                   self.addWarning('Incomplete \'Packaged\' Module. Project: ' + \
                                           project.getName() + ' is not packaged')  
                  
  -            # If packages module, accept it... 
  -            if allPackaged:
  -                packaged=1
  -                self.setPackaged(1)                
  -                self.changeState(STATE_COMPLETE,REASON_PACKAGE)  
  -                self.addInfo("\'Packaged\' Module. (Packaged projects: " + \
  -                                    str(packageCount) + '.)')                                            
  +        # If packages module, accept it... 
  +        if allPackaged:
  +            packaged=True
  +            self.setPackaged(True)
  +            self.changeState(STATE_COMPLETE,REASON_PACKAGE)  
  +            self.addInfo("\'Packaged\' Module. (Packaged projects: " + \
  +                                    `packageCount` + '.)')                                            
   
       
           # Determine source directory
  -        self.workdir=self.xml.transfer('srcdir') or self.xml.getName()
           self.absWorkingDir=	\
                   os.path.abspath(
  -                        os.path.join(workspace.getBaseDirectory(),	\
  +                        os.path.join(workspace.getBaseDirectory(),	
                                   self.workdir))
           
           self.absSrcCtlDir=	\
                    os.path.abspath(
  -                         os.path.join(	workspace.getSourceControlStagingDirectory(), \
  -                                            self.name)) # todo allow override              
  +                         os.path.join(	workspace.getSourceControlStagingDirectory(), 
  +                                            self.getName())) # todo allow override              
                                  
           # :TODO: Consolidate this code, less cut-n-paste but also
           # check the 'type' of the repository is appropriate for the
           # use (eg. type='cvs' if referenced by CVS).
           if not packaged:
               # We have a CVS entry, expand it...
  -            if self.xml.cvs:
  -                repoName=self.xml.cvs.repository
  +            if hasChild(self.dom,'cvs'):
  +                repoName=getValue(getChild(self.dom,'cvs'),'repository')
                   if repoName:
                       if workspace.hasRepository(repoName):
                           # It references this repository...
  @@ -317,35 +298,37 @@
                           self.cvs=ModuleCvs(self.xml.cvs,repo)
                       else:
                           self.changeState(STATE_FAILED,REASON_CONFIG_FAILED)               
  -                        self.addError('No such repository in w/s ['+ str(repoName) +'] on [' \
  +                        self.addError('No such repository ['+ str(repoName) +'] in workspace on [' \
                                   + self.getName() + ']')
                               
  -            elif self.xml.svn:                
  -                repoName=self.xml.svn.repository
  +            elif hasChild(self.dom,'svn'):
  +                rdom=getChild(self.dom,'svn')
  +                repoName=getValue(rdom,'repository')
                   if repoName:
                       if workspace.hasRepository(repoName):
                           # It references this repository...
                           repo=workspace.getRepository(repoName)
                           self.repository=repo
                           repo.addModule(self)
  -                        self.svn=ModuleSvn(self.xml.svn,repo)
  +                        self.svn=ModuleSvn(rdom,repo)
                       else:
                           self.changeState(STATE_FAILED,REASON_CONFIG_FAILED)               
  -                        self.addError('No such repository in w/s ['+ str(repoName) +'] on [' \
  +                        self.addError('No such repository ['+ str(repoName) +'] in workspace on [' \
                                   + self.getName() + ']')                 
                                                   
  -            elif self.xml.artifacts:                
  -                repoName=self.xml.artifacts.repository
  +            elif hasChild(self.dom,'artifact'):
  +                adom=getChild(self.dom,'artifact')
  +                repoName=getValue(adom,'repository')
                   if repoName:
                       if workspace.hasRepository(repoName):
                           # It references this repository...
                           repo=workspace.getRepository(repoName)	
                           self.repository=repo	
                           repo.addModule(self)
  -                        self.artifacts=ModuleArtifacts(self.xml.artifacts,repo)
  +                        self.artifacts=ModuleArtifacts(adom,repo)
                       else:
                           self.changeState(STATE_FAILED,REASON_CONFIG_FAILED)               
  -                        self.addError('No such repository in w/s ['+ str(repoName) +'] on [' \
  +                        self.addError('No such repository ['+ str(repoName) +'] in workspace on [' \
                                   + self.getName() + ']')                 
   
           # For prettiness
  @@ -359,6 +342,8 @@
       def addProject(self,project):
           project.setModule(self)
           self.projects[project.getName()]=project
  +        
  +        self.getOwner().addProject(project)
                        
       def getProject(self,projectname):
           return self.projects[projectname]
  @@ -427,9 +412,9 @@
           fogFactor=0
           fogFactors=0
           for project in self.getProjects():
  -                projectFOGFactor = project.getFOGFactor()
  -                fogFactor += projectFOGFactor
  -                fogFactors += 1
  +            projectFOGFactor = project.getFOGFactor()
  +            fogFactor += projectFOGFactor
  +            fogFactors += 1
                   
           if not fogFactors:
               fogFactors=1 # 0/1 is better than 0/0
  @@ -491,7 +476,19 @@
                       self.affected += 1            
           
           return self.affected    
  -    
  +          
  +    def getObjectForTag(self,tag,dom,name=None):
  +        print 'Module: Instantiate for Tag: ', tag, ' Name: ', name    	
  +        
  +        object=None
  +      
  +        if 'project' == tag:
  +            from gump.model.project import Project
  +            object=Project(name,dom,self)
  +            self.addProject(object)
  +
  +        return object                                          
  +        
       def dump(self, indent=0, output=sys.stdout):
           output.write(getIndent(indent)+'Module : ' + self.name + '\n')
           NamedModelObject.dump(self, indent+1, output)
  
  
  
  1.22.2.3  +21 -20    gump/python/gump/model/property.py
  
  Index: property.py
  ===================================================================
  RCS file: /home/cvs/gump/python/gump/model/property.py,v
  retrieving revision 1.22.2.2
  retrieving revision 1.22.2.3
  diff -u -r1.22.2.2 -r1.22.2.3
  --- property.py	9 Jun 2004 19:28:44 -0000	1.22.2.2
  +++ property.py	10 Jun 2004 00:08:23 -0000	1.22.2.3
  @@ -19,13 +19,14 @@
   """
   
   from gump.model.object import *
  +from gump.utils.domutils import *
   
   # represents a <property/> element
   class Property(NamedModelObject):
       
  -    def __init__(self,xml,parent):
  -    	NamedModelObject.__init__(self,xml.getName(),xml,parent)
  -    	self.value=xml.transfer('value','*Unset*')
  +    def __init__(self,name,dom,parent):
  +    	NamedModelObject.__init__(self,name,dom,parent)
  +    	self.value=getValue(dom,'value','*Unset*')
       	
       def setValue(self,value):
           self.value = value
  @@ -42,9 +43,10 @@
           responsibleParty=workspace
           if not parent==workspace: responsibleParty=parent.getOwner()
           
  -        reference=self.xml.transfer('reference')
  +        reference=getValue(self.element,'reference')
           if reference=='home':
  -            if not workspace.hasProject(self.xml.project):
  +            project=getValue(self.element,'project')            
  +            if not workspace.hasProject(project):
                   responsibleParty.addError('Cannot resolve homedir of *unknown* [' + self.xml.project + ']')                
               else:
                   self.setValue(workspace.getProject(self.xml.project).getHomeDirectory())
  @@ -92,14 +94,14 @@
               else:
                   responsibleParty.addError('No project specified.')      
                                   
  -        elif hasattr(self.xml,'path'):
  +        elif hasAttribute(self.element,'path'):
               #
               # If a property on a project..
               #
               if not parent==workspace: 
                   relativeProject=None
                   # If on a referenced project
  -                if hasattr(self.xml,'project'):
  +                if hasAttribute(self.element,'project'):
                       if not workspace.hasProject(self.xml.project):
                           responsibleParty.addError('Cannot resolve relative to *unknown* [' + self.xml.project + '] for ' + \
                                       self.getName())                
  @@ -115,7 +117,7 @@
                       # Path relative to module's srcdir (doesn't work in workspace)
                       #        
                       self.value=os.path.abspath(os.path.join(	\
  -                            relativeProject.getModule().getWorkingDirectory(),	\
  +                            relativeProject.getModule().getWorkingDirectory(),
                               self.xml.path))
               else:
                   responsibleParty.addError('Can\'t have path on property on workspace: ' + \
  @@ -166,8 +168,8 @@
       def getProperties(self):
           return self.properties.values()
               
  -    def importProperty(self,xmlproperty):
  -        self.addProperty(Property(xmlproperty,self.getOwner()))
  +    def importProperty(self,pdom):
  +        self.addProperty(Property(getValue(pdom,'name'),pdom,self.getOwner()))
               
       def completeProperties(self,workspace):   
           for property in self.getProperties(): 
  @@ -204,21 +206,20 @@
       def getSysProperties(self):
           return self.sysproperties.getProperties()
           
  -    def importProperty(self,xmlproperty):
  -        self.properties.importProperty(xmlproperty)
  +    def importProperty(self,domproperty):
  +        self.properties.importProperty(domproperty)
           
  -    def importSysProperty(self,xmlproperty):
  -        self.sysproperties.importProperty(xmlproperty)
  +    def importSysProperty(self,domproperty):
  +        self.sysproperties.importProperty(domproperty)
                   
       def importProperties(self,dom):
           """ Import all properties (from DOM to model). """
  -        for element in dom.getElementsByName('property'):
  -                self.importProperty(element)
  +        for element in getChildren(dom,'property'):
  +            self.importProperty(element)
                   
  -        if hasattr(xml,'sysproperty'):
  -            for xmlproperty in xml.sysproperty:
  -                self.importSysProperty(xmlproperty)
  -            
  +        for element in getChildren(dom,'sysproperty'):
  +            self.importSysProperty(element)
  +                            
       def completeProperties(self,workspace=None):        
           # The only entity not to pass the workspace,
           # can be the workspace itself.
  
  
  
  1.51.2.3  +89 -233   gump/python/gump/model/workspace.py
  
  Index: workspace.py
  ===================================================================
  RCS file: /home/cvs/gump/python/gump/model/workspace.py,v
  retrieving revision 1.51.2.2
  retrieving revision 1.51.2.3
  diff -u -r1.51.2.2 -r1.51.2.3
  --- workspace.py	9 Jun 2004 19:28:44 -0000	1.51.2.2
  +++ workspace.py	10 Jun 2004 00:08:23 -0000	1.51.2.3
  @@ -28,23 +28,23 @@
   from gump.model.repository import Repository
   from gump.model.server import Server
   from gump.model.tracker import Tracker
  -from gump.model.module import Module, createUnnamedModule
  +from gump.model.module import Module
   from gump.model.project import Project, ProjectSummary
   from gump.model.profile import Profile
   from gump.model.object import NamedModelObject, Resultable
   from gump.model.property import PropertyContainer
   from gump.model.stats import Statable, Statistics
   from gump.utils.note import transferAnnotations, Annotatable
  -from gump.utils.listener import Listener, Event
  +from gump.utils.domutils import transferInfo
   
   import gump.core.config
   
  -#
  -#
  -#
  -
   class Workspace(NamedModelObject, PropertyContainer, Statable, Resultable):
  -    """Gump Workspace"""
  +    """
  +            
  +    Gump Workspace: Contains where/what ... lots of good stuff
  +            
  +    """
       def __init__(self,name,dom):
                   
       	NamedModelObject.__init__(self,name,dom)   
  @@ -64,10 +64,7 @@
           self.projects={}
           self.profiles={}
           self.servers={}
  -        self.trackers={}
  -        
  -        #
  -    	PropertyContainer.importProperties(self,self.xml)    	
  +        self.trackers={}        
                       
           # Set times
           self.initializeTimes()
  @@ -75,8 +72,6 @@
           # Where the merged XML was put
           self.mergeFile=None
           
  -        self.listener=ModelListener()
  -        
       def initializeTimes(self):
           # Store timezone
           self.timezone=str(time.tzname)    
  @@ -112,8 +107,7 @@
           self.endDateTimeUtc=time.strftime(setting.utcdatetimeformat, \
                                               time.gmtime())
           self.endDateTime=time.strftime(setting.datetimeformat, \
  -                                            time.localtime())
  -                                            
  +                                            time.localtime())                                            
           
       def getTimezone(self):
           return self.timezone
  @@ -133,8 +127,7 @@
       def getChildren(self):
           return self.getModules() 
       
  -    # Repository Interface
  -    
  +    # Repository Interface    
       def hasRepository(self,rname):
           return self.repositories.has_key(rname)
           
  @@ -147,9 +140,7 @@
       def getSortedRepositories(self):
           return self.sortedRepositories
   
  -
  -    # Server Interface
  -    
  +    # Server Interface    
       def hasServer(self,rname):
           return self.servers.has_key(rname)
           
  @@ -162,9 +153,7 @@
       def getSortedServers(self):
           return self.sortedServers
   
  -
  -    # Tracker Interface
  -    
  +    # Tracker Interface    
       def hasTracker(self,rname):
           return self.trackers.has_key(rname)
           
  @@ -177,9 +166,7 @@
       def getSortedTrackers(self):
           return self.sortedTrackers
   
  -
  -    # Profile Interface
  -        
  +    # Profile Interface        
       def hasProfile(self,mname):
           return self.profiles.has_key(mname)
           
  @@ -192,11 +179,13 @@
       def getSortedProfiles(self):
           return self.sortedProfiles   
                   
  -    # Module Interface
  -        
  +    # Module Interface        
       def hasModule(self,mname):
           return self.modules.has_key(mname)
           
  +    def addModule(self,module):
  +        self.modules[module.getName()]=module
  +        
       def getModule(self,mname):
           return self.modules.get(mname,None)
   
  @@ -206,13 +195,15 @@
       def getSortedModules(self):
           return self.sortedModules   
                   
  -                
       # All projects in the workspace (also available
  -    # through the owned moduleS)
  +    # through the owning modules)
                   
       def hasProject(self,pname):
           return self.projects.has_key(pname)
           
  +    def addProject(self,project):
  +        self.projects[project.getName()]=project
  +        
       def getProject(self,pname):
           return self.projects[pname]
                   
  @@ -222,143 +213,72 @@
       def getSortedProjects(self):
           return self.sortedProjects       
           
  -    def complete(self, xmlprofiles, xmlrepositories, \
  -                    xmlmodules, xmlprojects,	\
  -                    xmlservers, xmltrackers):        
  +    def complete(self):        
           if self.isComplete(): return
           
  -        #
  -        # provide default elements when not defined in xml
  -        # expand those in XML
  -        #
  -        if not hasattr(self.xml,'banner-image'):
  -            self.bannerImage=default.bannerimage
  -        else:
  -            self.bannerImage=getattr(self.xml,'banner-image')
  -            
  -        if not hasattr(self.xml,'banner-link'): 
  -            self.bannerLink="http://gump.apache.org"
  -        else:
  -            self.bannerLink=getattr(self.xml,'banner-link')
  -
  -        self.completeDirectories()
  -        
  -        # Allow per workspace overrides
  -        self.logurl = self.xml.transfer('logurl',default.logurl)
  -            
  -        # Keep some details private, if requested...
  -        self.private=hasattr(self.xml,'private')
  -            
  -        # Sending e-mail address
  -        self.email = self.xml.transfer('email', default.email)            
  -        # Gump List...
  -        self.mailinglist = self.xml.transfer('mailinglist',default.mailinglist)        
  -        # Mail server
  -        self.mailserver = self.xml.transfer('mailserver',default.mailserver)
  -            
  -        # Get mailport as an int
  -        self.mailport = int(self.xml.transfer('mailport',default.mailport))
  -            
  -        # Mail subject prefix
  -        self.prefix = self.xml.transfer('prefix',default.prefix)
  -            
  -        # Mail .sig
  -        self.signature = self.xml.transfer('signature',default.signature)        
  -      
  -        #
  -        # Import all profiles
  -        #  
  -        for xmlprofile in xmlprofiles.values(): 
  -            profile=Profile(xmlprofile,self)
  -            profileName=profile.getName()
  -            if profileName in self.profiles:
  -                # Duplicate, uh oh...
  -                self.addError("Duplicate profile name [" + profileName + "]")
  -            else:        
  -                profile.complete(self)
  -                self.profiles[profileName] = profile
  -        
  -            self.listener.handleEvent(ModelEvent())
  -
  -        #
  -        # Import all repositories
  -        #  
  -        for xmlrepository in xmlrepositories.values(): 
  -            repository=Repository(xmlrepository,self)
  -            repoName=repository.getName()
  -            if repoName in self.repositories:
  -                # Duplicate, uh oh...
  -                self.addError("Duplicate repository name [" + repoName + "]")
  -            else:        
  -                repository.complete(self)
  -                self.repositories[repoName] = repository
  -        
  -            self.listener.handleEvent(ModelEvent())
  -
  -        #
  -        # Import all servers
  -        #  
  -        for xmlserver in xmlservers.values(): 
  -            server=Server(xmlserver,self)
  -            serverName=server.getName()
  -            if serverName in self.servers:
  -                # Duplicate, uh oh...
  -                self.addError("Duplicate server name [" + serverName + "]")
  -            else:        
  -                server.complete(self)
  -                self.servers[serverName] = server
  -        
  -            self.listener.handleEvent(ModelEvent())
  -
  -        #
  -        # Import all trackers
  -        #  
  -        for xmltracker in xmltrackers.values(): 
  -            tracker=Tracker(xmltracker,self)
  -            trackerName=tracker.getName()
  -            if trackerName in self.trackers:
  -                # Duplicate, uh oh...
  -                self.addError("Duplicate tracker name [" + trackerName + "]")
  -            else:        
  -                tracker.complete(self)
  -                self.trackers[trackerName] = tracker
  -        
  -            self.listener.handleEvent(ModelEvent())
  -
  -        #
  -        # Import all modules
  -        #  
  -        for xmlmodule in xmlmodules.values(): 
  -            module=Module(xmlmodule,self)
  -            moduleName=module.getName()
  -            if moduleName in self.modules:
  -                # Duplicate, uh oh...
  -                self.addError("Duplicate Module name [" + moduleName + "]")
  -            else:        
  -                self.modules[moduleName] = module
  -        
  -            self.listener.handleEvent(ModelEvent())
  +        # Set defaults...        
  +        self.basedir=''
  +        self.bannerImnage=default.bannerimage
  +        self.bannerLink="http://gump.apache.org"
  +        
  +        self.tmpdir=''
  +        self.logdir=''
  +        self.jardir=''
  +        self.cvsdir=''
  +        self.pkgdir=''
  +        
  +        self.private=False
  +        self.email = default.email     
  +        self.mailinglist = default.mailinglist  
  +        self.mailserver = default.mailserver
  +        self.mailport = int(default.mailport)
  +        self.prefix=default.prefix
  +        self.signature=default.signature
  +        
  +        # Import overrides from DOM
  +        transferInfo(	self.element, 
  +                        self, 
  +                        {	'banner-image':'bannerImage',
  +                            'banner-link' :'bannerLink'})
  +    
  +        if not self.basedir:
  +            raise RuntimeError, "A workspace cannot operate without a 'basedir'."
  +            
  +        if not self.tmpdir: self.tmpdir=os.path.join(self.getBaseDirectory(),"tmp")
  +        if not self.logdir: self.logdir=os.path.join(self.getBaseDirectory(),"log")
  +        if not self.jardir: self.jardir=os.path.join(self.getBaseDirectory(),"repo") 
  +        if not self.cvsdir: self.cvsdir=os.path.join(self.getBaseDirectory(),"cvs")
  +        if not self.pkgdir: self.pkgdir=self.getBaseDirectory()
               
  +        # Construct dirs on demand         
  +        if not os.path.exists(self.tmpdir): os.makedirs(self.tmpdir)    
  +        if not os.path.exists(self.logdir): os.makedirs(self.logdir)
  +        if not os.path.exists(self.jardir): os.makedirs(self.jardir)
  +        if not os.path.exists(self.cvsdir): os.makedirs(self.cvsdir)
  +    
           #
  -        # Import all projects
  -        #  
  -        for xmlproject in xmlprojects.values(): 
  -            project=Project(xmlproject,self)
  -            projectName=project.getName()
  -            if projectName in self.projects:
  -                # Duplicate, uh oh...
  -                self.addError("Duplicate Project name [" + projectName + "]")
  -            else:        
  -                self.projects[projectName] = project 
  -        
  -            self.listener.handleEvent(ModelEvent())
  +    	PropertyContainer.importProperties(self,self.element)    	
  +    	
  +        # Complete all profiles
  +        for profile in self.profiles.values(): 
  +            profile.complete(self)
  +            
  +        # Complete all repositories
  +        for repository in self.repositories.values(): 
  +            repository.complete(self)
  +
  +        # Complete all servers
  +        for server in self.servers.values(): 
  +            server.complete(self)
  +
  +        # Complete all trackers
  +        for tracker in self.trackers.values(): 
  +            tracker.complete(self)
   
           # Complete the modules
           for module in self.getModules():
               module.complete(self)
           
  -            self.listener.handleEvent(ModelEvent())
  -            
           #
           # Check repositories, now modules have been imported,
           # so we can report those unused ones.
  @@ -366,42 +286,27 @@
           for repository in self.getRepositories(): 
               repository.check(self)           
           
  -            self.listener.handleEvent(ModelEvent()) 
  -        
           #
           # Check servers.
           #
           for server in self.getServers(): 
               server.check(self)            
           
  -            self.listener.handleEvent(ModelEvent())
  -        
           #
           # Check Trackers.
           #
           for tracker in self.getTrackers(): 
               tracker.check(self)           
           
  -            self.listener.handleEvent(ModelEvent()) 
  -        
           # Complete the projects   
           haveUnnamedModule=0
           for project in self.getProjects():
               # Projects needs a module (even if pseudo)
               if not project.inModule():
  -                if not haveUnnamedModule:
  -                    # A container for projects outside of
  -                    # modules
  -                    unnamedModule=createUnnamedModule(self)
  -                    self.addModule(unnamedModule)
  -                    haveUnnamedModule=1
  -        
  -                unnamedModule.addProject(project)
  +                log.error('Project not in module. ' + project.getName())
               
               # Complete the project
               project.complete(self)   
  -        
  -            self.listener.handleEvent(ModelEvent())
                                                                
           # Complete the properies
           self.completeProperties()
  @@ -418,40 +323,10 @@
           
           # Copy over any XML errors/warnings
           # :TODO:#1: transferAnnotations(self.xml, self)  
  -                
  -        self.listener.handleEvent(ModelEvent())
               
           self.setComplete(1)
   
  -    def completeDirectories(self):
  -            
  -        if self.xml.basedir:
  -            self.basedir=self.xml.basedir
  -        else:
  -            raise RuntimeError, "A workspace cannot operate without a 'basedir'."
  -            
  -        # Construct tmp on demand
  -        self.tmpdir=self.xml.transfer('tmpdir',os.path.join(self.getBaseDirectory(),"tmp"))            
  -        if not os.path.exists(self.tmpdir): 
  -            os.makedirs(self.tmpdir)    
  -    
  -        # Construct logdir on demand
  -        self.logdir=self.xml.transfer('logdir',os.path.join(self.getBaseDirectory(),"log"))        
  -        if not os.path.exists(self.logdir): os.makedirs(self.logdir)
  -    
  -        # Construct repository dir on demand
  -        self.jardir=self.xml.transfer('jardir',os.path.join(self.getBaseDirectory(),"repo"))   
  -        if not os.path.exists(self.jardir): os.makedirs(self.jardir)
  -    
  -        # Construct CVS directory on demand
  -        self.cvsdir=self.xml.transfer('cvsdir',os.path.join(self.getBaseDirectory(),"cvs"))
  -        if not os.path.exists(self.cvsdir): os.makedirs(self.cvsdir)
  -    
  -        # Package Dir Ought Exist
  -        self.pkgdir=self.xml.transfer('pkgdir',self.getBaseDirectory())
           
  -        if not hasattr(self.xml,'deliver'):
  -            self.scratchdir=self.xml.transfer('scratchdir',os.path.join(self.getBaseDirectory(),"scratch"))
      
       def setDatedDirectories(self,date=None):
           
  @@ -496,16 +371,16 @@
           NamedModelObject.dump(self, indent+1, output)
           
           for profile in self.profiles.values():
  -            profile.dump(indent+1,output)
  +            profile.dump(indent+2,output)
               
           for repo in self.repositories.values():
  -            repo.dump(indent+1,output)
  +            repo.dump(indent+2,output)
           
           for module in self.getModules():
  -            module.dump(indent+1,output)
  +            module.dump(indent+2,output)
           
           for project in self.getProjects():
  -            project.dump(indent+1,output)
  +            project.dump(indent+2,output)
   
       def isNotify(self):
           return hasattr(self.xml,'nag')
  @@ -568,22 +443,18 @@
       def getSourceControlStagingDirectory(self):
           return self.cvsdir
   
  -    def getObjectForTag(self,tag,name=None):
  -        print "***************** Instantiate for ", tag, name    	
  +    def getObjectForTag(self,tag,dom,name=None):
  +        print 'Instantiate for Tag: ', tag, ' Name: ', name    	
           
           object=None
           
           if 'profile' == tag:
  -            if self.profiles.has_key(name):
  -                object=self.profiles[name]
  +            if self.hasProfile(name):
  +                object=self.getProfile(name)
               else:
  -                object=Profile(name)
  +                object=Profile(name,dom,self)
                   self.profiles[name]=object            
  -        
  -        # Who I am...
  -        if object and hasattr(object,'setWorkspace'):
  -            object.setWorkspace(self)
  -            
  +
           return object
           
           #self.repositories={}
  @@ -600,19 +471,4 @@
           
       def getKeyBase(self):
           return 'workspace:'+ self.name        
  -    
  -            
  -class ModelEvent(Event):
  -    def __init__(self):		pass
  -
  -class ModelListener(Listener):
  -    def __init__(self):  	pass
  -    
  -    #
  -    # Called with events
  -    #
  -    def notify(self,event):
  -        pass
  -        #print '.',
  -        
               
  
  
  
  1.5.2.1   +25 -3     gump/python/gump/model/profile.py
  
  Index: profile.py
  ===================================================================
  RCS file: /home/cvs/gump/python/gump/model/profile.py,v
  retrieving revision 1.5
  retrieving revision 1.5.2.1
  diff -u -r1.5 -r1.5.2.1
  --- profile.py	3 Jun 2004 19:06:12 -0000	1.5
  +++ profile.py	10 Jun 2004 00:08:23 -0000	1.5.2.1
  @@ -32,8 +32,8 @@
   
   class Profile(NamedModelObject):
       """Gump Profile"""
  -    def __init__(self,xml,workspace):
  -    	NamedModelObject.__init__(self,xml.getName(),xml,workspace) 
  +    def __init__(self,name,dom,workspace):
  +    	NamedModelObject.__init__(self,name,dom,workspace) 
       	
       def complete(self,workspace):        
           if self.isComplete(): return
  @@ -44,7 +44,29 @@
           # :TODO: Until we document the profile
           # add these to workspace transferAnnotations(self.xml, self)  
                   
  -        self.setComplete(1)                
  +        self.setComplete(1)  
  +        
  +    def getObjectForTag(self,tag,dom,name=None):
  +        print 'Profile: Instantiate for Tag: ', tag, ' Name: ', name    	
  +        
  +        object=None
  +        
  +        if 'module' == tag:
  +            from gump.model.module import Module
  +            object=Module(name,dom,self)
  +            self.addModule(object)
  +        elif 'project' == tag:
  +            from gump.model.project import Project
  +            object=Project(name,dom,self)
  +            self.addProject(object)
  +
  +        return object
  +                      
  +    def addModule(self,module):
  +        self.getOwner().addModule(module)
  +                      
  +    def addProject(self,project):
  +        self.getOwner().addProject(project)
       
       def dump(self, indent=0, output=sys.stdout):
           output.write(getIndent(indent)+'Profile : ' + self.name + '\n')   
  
  
  
  No                   revision
  No                   revision
  1.15.4.3  +1 -1      gump/python/gump/utils/work.py
  
  Index: work.py
  ===================================================================
  RCS file: /home/cvs/gump/python/gump/utils/work.py,v
  retrieving revision 1.15.4.2
  retrieving revision 1.15.4.3
  diff -u -r1.15.4.2 -r1.15.4.3
  --- work.py	9 Jun 2004 19:28:44 -0000	1.15.4.2
  +++ work.py	10 Jun 2004 00:08:23 -0000	1.15.4.3
  @@ -220,7 +220,7 @@
           self.worklist=WorkList(self)
                   
       def __del__(self):
  -        # No such @ present ... Stateful.__del__(self)
  +        # None @ present ... Stateful.__del__(self)
           self.worklist=None
           
       def getWorkList(self):
  
  
  
  No                   revision
  
  Index: work.py
  ===================================================================
  RCS file: /home/cvs/gump/python/gump/utils/work.py,v
  retrieving revision 1.15.4.2
  retrieving revision 1.15.4.3
  diff -u -r1.15.4.2 -r1.15.4.3
  --- work.py	9 Jun 2004 19:28:44 -0000	1.15.4.2
  +++ work.py	10 Jun 2004 00:08:23 -0000	1.15.4.3
  @@ -220,7 +220,7 @@
           self.worklist=WorkList(self)
                   
       def __del__(self):
  -        # No such @ present ... Stateful.__del__(self)
  +        # None @ present ... Stateful.__del__(self)
           self.worklist=None
           
       def getWorkList(self):
  
  
  
  No                   revision
  
  Index: work.py
  ===================================================================
  RCS file: /home/cvs/gump/python/gump/utils/work.py,v
  retrieving revision 1.15.4.2
  retrieving revision 1.15.4.3
  diff -u -r1.15.4.2 -r1.15.4.3
  --- work.py	9 Jun 2004 19:28:44 -0000	1.15.4.2
  +++ work.py	10 Jun 2004 00:08:23 -0000	1.15.4.3
  @@ -220,7 +220,7 @@
           self.worklist=WorkList(self)
                   
       def __del__(self):
  -        # No such @ present ... Stateful.__del__(self)
  +        # None @ present ... Stateful.__del__(self)
           self.worklist=None
           
       def getWorkList(self):
  
  
  
  1.1.2.1   +161 -0    gump/python/gump/utils/Attic/domutils.py
  
  
  
  
  No                   revision
  No                   revision
  1.1.2.2   +17 -13    gump/python/gump/loader/Attic/loader.py
  
  Index: loader.py
  ===================================================================
  RCS file: /home/cvs/gump/python/gump/loader/Attic/loader.py,v
  retrieving revision 1.1.2.1
  retrieving revision 1.1.2.2
  diff -u -r1.1.2.1 -r1.1.2.2
  --- loader.py	9 Jun 2004 19:28:45 -0000	1.1.2.1
  +++ loader.py	10 Jun 2004 00:08:24 -0000	1.1.2.2
  @@ -27,7 +27,6 @@
   from gump.utils.note import transferAnnotations, Annotatable
   from gump.utils.timing import TimeStampSet
   
  -
   class ObjectKey:
       def __init__(self,tag,name):
           self.name=name
  @@ -57,7 +56,6 @@
       def getName(self):
           return self.name
           
  -
   class XmlLoader:
       def __init__(self,basedir='.',cache=True):
           self.annotations=[]
  @@ -105,6 +103,10 @@
                 
           dom=xml.dom.minidom.parse(file)
           
  +        # We normalize the thing, 'cos we don't care about
  +        # pieces of text (just text as one value)
  +        dom.normalize()
  +        
           # Do tag validation (if requested)        
           xtag=dom.documentElement.tagName
           if tag:
  @@ -248,27 +250,29 @@
                       parent=task.getParentTask()
                   if parent:
                       parentObject=parent.getResult().getObject()
  -                    
  +                
  +                # Allow context instantiation, or we are root
                   if parentObject:
  -                    object=parentObject.getObjectForTag(element.tagName,name)
  +                    object=parentObject.getObjectForTag(element.tagName,dom,name)
                   else:
  -                    if name:
  -                        object=cls(name,dom)
  -                    else:
  -                        object.cls(dom)
  +                    if name: object=cls(name,dom)
  +                    else:    object.cls(dom)
                       rootObject=object
                  
                   if object:
  +                    # Resolve entities...
  +                    object.resolve()                    
                       task.getResult().setObject(object)
               
  -
  -        # Cook the raw model...                    
  -        rootObject.complete(dom)
  +        if rootObject:
  +            # Cook the raw model...                    
  +            rootObject.complete()
                
           # Copy over any XML errors/warnings
           #if isinstance(object,Annotatable):
           #    transferAnnotations(parser, object)
  -                     #object.complete()
  +        
  +        return rootObject
           
       def performTasks(self):
           worker=XmlWorker()
  @@ -285,4 +289,4 @@
       import sys
       from gump.model.workspace import Workspace
       loader=ModelLoader()
  -    loader.loadFile(sys.argv[1] or 'workspace.xml',Workspace)
  \ No newline at end of file
  +    loader.loadFile(sys.argv[1] or 'workspace.xml',Workspace).dump()
  \ No newline at end of file
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: general-unsubscribe@gump.apache.org
For additional commands, e-mail: general-help@gump.apache.org