Changeset 603

Show
Ignore:
Timestamp:
10/25/05 11:56:37 (3 years ago)
Author:
slmm
Message:

Updated export plugin to handle tagged values. I tested a class and an
attribute tagged with some values against ArchGenXML. I must say I am delighted
to see this work :-) Next stop world domination! ;-)

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/gaphor/data/plugins/kidexport/exportmodel.py

    r573 r603  
    1111        template = kid.Template(file=self.template) 
    1212        isinstance(template, kid.XMLSerializer) 
    13         print template.serialize() 
     13        f = open(filename, 'w') 
     14        f.write(template.serialize()) 
     15        f.close() 
  • trunk/gaphor/data/plugins/kidexport/xmi.kid

    r573 r603  
    3737        attributes[value]=data 
    3838    return attributes 
     39     
     40from gaphor.misc.uniqueid import generate_id 
     41 
     42 
     43def getTagDefinitions(): 
     44    items = [] 
     45    for node in elements: 
     46        if hasattr(node, 'taggedValue'): 
     47            for tag in node.taggedValue: 
     48                items.append(tag) 
     49    return items 
     50     
     51 
    3952?> 
    4053 
     
    5568      isRoot = 'false' isLeaf = 'false' isAbstract = 'false' 
    5669      py:attrs="{'xmi.id':topLevelPackage.id, 'name':topLevelPackage.name}"> 
     70      <UML:ModelElement.taggedValue 
     71            py:replace="processModelElementTaggedValue(topLevelPackage)"/> 
    5772       
    5873      <UML:Classifier.feature py:def="processClassifierFeature(item)"> 
     74       
     75        <UML:Namespace.ownedElement> 
     76          <UML:Class py:for="cls in [a.typeValue for a in item.ownedAttribute if a.typeValue]" 
     77            visibility='public' isSpecification='false' isRoot='false' isAbstract='false' 
     78            isActive='false' 
     79            py:attrs="{'xmi.id': cls.id, 'name':cls.value}"/> 
     80        </UML:Namespace.ownedElement> 
    5981 
    6082        <UML:Attribute xmi.id = 'I48de81cbm106d41f950cmm7f35' name = 'someAttribute' 
     
    6385          py:for="attribute in [a for a in item.ownedAttribute if a.typeValue]" 
    6486          py:attrs="{'xmi.id':attribute.id, 'name':attribute.name}"> 
     87          <UML:ModelElement.taggedValue 
     88            py:replace="processModelElementTaggedValue(attribute)"/> 
    6589          <UML:StructuralFeature.type> 
    6690            <UML:Class xmi.idref = 'I48de81cbm106d41f950cmm7f24' 
    67               py:attrs="{'xmi.id':attribute.typeValue.id}"/> 
     91              py:attrs="{'xmi.idref':attribute.typeValue.id}"/> 
    6892          </UML:StructuralFeature.type> 
    6993        </UML:Attribute> 
     
    99123        </UML:Method> 
    100124         
     125         
     126         
    101127      </UML:Classifier.feature> 
     128       
     129      <UML:ModelElement.taggedValue 
     130            py:def="processModelElementTaggedValue(node)" 
     131            py:for="taggedValue in node.taggedValue" 
     132            py:content="processTaggedValue(taggedValue)"> 
     133      </UML:ModelElement.taggedValue> 
     134       
     135      <UML:TagDefinition py:def="processTagDefinition(tagDefinition)" 
     136        xmi.id = 'I5bd6b6fm106dbda4889mm7f24' name = 'someTag' 
     137        py:attrs="{'xmi.id':tagDefinition.id+'ref', 'name':tagDefinition.value.split('=')[0]}"     
     138          isSpecification = 'false'> 
     139          <UML:TagDefinition.multiplicity> 
     140            <UML:Multiplicity xmi.id = 'I5bd6b6fm106dbda4889mm7f23' 
     141              py:attrs="{'xmi.id':tagDefinition.id+'multi'}"> 
     142              <UML:Multiplicity.range> 
     143                <UML:MultiplicityRange xmi.id = 'I5bd6b6fm106dbda4889mm7f22' lower = '1' 
     144                  upper = '1' 
     145                  py:attrs="{'xmi.id':tagDefinition.id+'multirange'}"/> 
     146              </UML:Multiplicity.range> 
     147            </UML:Multiplicity> 
     148          </UML:TagDefinition.multiplicity> 
     149        </UML:TagDefinition> 
     150       
     151       
     152      <UML:TaggedValue py:def="processTaggedValue(taggedValue)" 
     153          xmi.id = 'I5bd6b6fm106dbda4889mm7f21' isSpecification = 'false' 
     154          py:attrs="{'xmi.id':taggedValue.id}"> 
     155            <UML:TaggedValue.dataValue  
     156              py:content="taggedValue.value.split('=')[-1]">someTagValue</UML:TaggedValue.dataValue> 
     157            <UML:TaggedValue.type> 
     158              <UML:TagDefinition xmi.idref = 'I5bd6b6fm106dbda4889mm7f24' 
     159                py:attrs="{'xmi.idref':taggedValue.id+'ref'}"/> 
     160            </UML:TaggedValue.type> 
     161          </UML:TaggedValue> 
    102162 
    103163      <UML:Abstraction py:def="processImplementation(abstraction)" 
     
    119179        xmi.id = 'I48de81cbm106d41f950cmm7eb4' isSpecification = 'false' 
    120180        py:attrs="{'xmi.id':generalization.id}"> 
     181        <UML:ModelElement.taggedValue 
     182            py:replace="processModelElementTaggedValue(generalization)"/> 
    121183        <UML:Generalization.child> 
    122184          <UML:Class xmi.idref = 'I48de81cbm106d41f950cmm7ec7'  
     
    134196        isAbstract = 'false' 
    135197        py:attrs="{'xmi.id':interface.id, 'name':interface.name}"> 
     198        <UML:ModelElement.taggedValue 
     199            py:replace="processModelElementTaggedValue(interface)"/> 
    136200        <UML:Classifier.feature py:replace="processClassifierFeature(interface)"/> 
    137201      </UML:Interface> 
     
    144208        py:attrs="{'xmi.id':cls.id, 'name':cls.name,  
    145209                   'isAbstract':cls.isAbstract and 'true' or 'false'}"> 
     210          <UML:ModelElement.taggedValue 
     211            py:replace="processModelElementTaggedValue(cls)"/> 
    146212 
    147213        <UML:ModelElement.stereotype py:if="cls.appliedStereotype"> 
     
    170236          isAbstract = 'false' 
    171237          py:attrs="{'xml.id':stereotype.id, 'name':stereotype.name}"> 
     238          <UML:ModelElement.taggedValue 
     239            py:replace="processModelElementTaggedValue(stereotype)"/> 
    172240        <UML:Stereotype.baseClass py:content="stereotype.ownedAttribute.type.name">Class</UML:Stereotype.baseClass> 
    173241      </UML:Stereotype> 
     
    177245          isSpecification = 'false' isRoot = 'false' isLeaf = 'false' isAbstract = 'false' 
    178246          py:attrs="{'xmi.idref':package.id, 'name':package.name}"> 
     247          <UML:ModelElement.taggedValue 
     248            py:replace="processModelElementTaggedValue(package)"/> 
    179249        <UML:Namespace.ownedElement> 
    180250          <packageContent py:for="item in getPackageChildNodes(package=package)"  
     
    189259        isRoot = 'false' isLeaf = 'false' isAbstract = 'false' 
    190260        py:attrs="{'xmi.id':association.id, 'name':association.name}"> 
     261        <UML:ModelElement.taggedValue 
     262            py:replace="processModelElementTaggedValue(association)"/> 
    191263        <UML:Association.connection> 
    192264          <UML:AssociationEnd xmi.id = 'I48de81cbm106d41f950cmm7d35' visibility = 'public' 
     
    218290      <UML:Namespace.ownedElement> 
    219291        <packageContent py:for="item in getPackageChildNodes(package=topLevelPackage)"  
    220           py:replace="modelProcessNode(item)"/>   
    221          
    222          
    223        
    224         <UML:Class xmi.id = 'I48de81cbm106d41f950cmm7cb9' name = 'ClassWithWorkflow' 
    225           visibility = 'public' isSpecification = 'false' isRoot = 'false' isLeaf = 'false' 
    226           isAbstract = 'false' isActive = 'false'> 
    227           <UML2:BehavioredClassifier.ownedBehavior> 
    228             <UML2:StateMachine xmi.id = 'I48de81cbm106d41f950cmm7ca6' name = 'State_Machine_1' 
    229               visibility = 'public' isSpecification = 'false' isRoot = 'false' isLeaf = 'false' 
    230               isAbstract = 'false' isActive = 'false'> 
    231               <UML2:StateMachine.region> 
    232                 <UML2:Region xmi.id = 'I48de81cbm106d41f950cmm7ca5' name = 'TopRegion_1' 
    233                   visibility = 'public' isSpecification = 'false'> 
    234                   <UML2:Region.subvertex> 
    235                     <UML2:Pseudostate xmi.id = 'I48de81cbm106d41f950cmm7c9d' name = 'start' 
    236                       visibility = 'public' isSpecification = 'false' kind = 'initial'> 
    237                       <UML2:Vertex.outgoing> 
    238                         <UML2:Transition xmi.idref = 'I48de81cbm106d41f950cmm7c8d'/> 
    239                       </UML2:Vertex.outgoing> 
    240                     </UML2:Pseudostate> 
    241                     <UML2:State xmi.id = 'I48de81cbm106d41f950cmm7c98' name = 'middle' visibility = 'public' 
    242                       isSpecification = 'false'> 
    243                       <UML2:Vertex.incoming> 
    244                         <UML2:Transition xmi.idref = 'I48de81cbm106d41f950cmm7c8d'/> 
    245                       </UML2:Vertex.incoming> 
    246                     </UML2:State> 
    247                   </UML2:Region.subvertex> 
    248                   <UML2:Region.transition> 
    249                     <UML2:Transition xmi.id = 'I48de81cbm106d41f950cmm7c8d' name = 'gotoMiddle' 
    250                       visibility = 'public' isSpecification = 'false' kind = 'external'> 
    251                       <UML2:Transition.source> 
    252                         <UML2:Pseudostate xmi.idref = 'I48de81cbm106d41f950cmm7c9d'/> 
    253                       </UML2:Transition.source> 
    254                       <UML2:Transition.target> 
    255                         <UML2:State xmi.idref = 'I48de81cbm106d41f950cmm7c98'/> 
    256                       </UML2:Transition.target> 
    257                     </UML2:Transition> 
    258                   </UML2:Region.transition> 
    259                 </UML2:Region> 
    260               </UML2:StateMachine.region> 
    261             </UML2:StateMachine> 
    262           </UML2:BehavioredClassifier.ownedBehavior> 
    263         </UML:Class> 
     292          py:replace="modelProcessNode(item)"/>  
     293         
     294 
     295        <UML:TagDefinition py:for="tagDef in getTagDefinitions()" 
     296          py:replace="processTagDefinition(tagDef)"/> 
     297         
    264298      </UML:Namespace.ownedElement> 
    265299    </UML:Model>