Ignore:
Timestamp:
23/11/11 09:37:57 (8 years ago)
Author:
mnagni
Message:

This commit is Just before the refactoring to the new get/set approach

Location:
mauRepo/xmi2sqlalchemy/trunk
Files:
15 edited

Legend:

Unmodified
Added
Removed
  • mauRepo/xmi2sqlalchemy/trunk/.project

    r7974 r7996  
    2727                <nature>org.maven.ide.eclipse.maven2Nature</nature> 
    2828                <nature>org.python.pydev.pythonNature</nature> 
     29                <nature>com.nwire.studio.tools.nwireNature</nature> 
    2930        </natures> 
    3031</projectDescription> 
  • mauRepo/xmi2sqlalchemy/trunk/src/main/java/ndg/services/newmoon/NmParser.java

    r7974 r7996  
    334334        }        
    335335         
    336         /* 
    337         private void processAssociations() { 
    338                 List<UMLAssociation> associations = helper.getAllUMLAssociations(); 
    339                 for (UMLAssociation association : associations) { 
    340                         UML_Element firstType = helper.findElementByID(association.getFirstAssociationEnd().getType());          
    341                         UML_Element secondType = helper.findElementByID(association.getSecondAssociationEnd().getType()); 
    342                         if (association.getSecondAssociationEnd().isNavigable()) { 
    343                                 if (firstType instanceof UMLClass) { 
    344                                         ((UMLClass) firstType).getAssociationEnds().add(association.getSecondAssociationEnd()); 
    345                                 } 
    346                         } 
    347                         if (association.getFirstAssociationEnd().isNavigable()) { 
    348                                 if (secondType instanceof UMLClass) { 
    349                                         ((UMLClass) secondType).getAssociationEnds().add(association.getFirstAssociationEnd()); 
    350                                 } 
    351                         } 
    352                 } 
    353         } 
    354         */ 
    355          
    356336        private UMLPackage processPackage(Node node, UMLModel umlModel) throws NewmoonException { 
    357337                //Process the Package element 
  • mauRepo/xmi2sqlalchemy/trunk/src/main/java/ndg/services/newmoon/UMLElementsArchive.java

    r7978 r7996  
    762762         *         to "*", <code>false</code> otherwise 
    763763         * */ 
     764        public boolean isVoidable(UMLAttribute umlAttribute) { 
     765                for (UMLStereotype stereotype : umlAttribute.getUmlStereotypes()) { 
     766                        if (stereotype.getName().equalsIgnoreCase(Dictionary.VOIDABLE)) 
     767                                return true; 
     768                } 
     769                return false; 
     770        }        
     771         
     772        /** 
     773         * Verifies if the given parameter has multiplicity greater than 1. Please 
     774         * note that this is not the Attribute class type multiplicity, which is 
     775         * calculated on the overall use among the models which compone this model 
     776         *  
     777         * @param umlAttribute 
     778         *            the attribute to evaluate 
     779         * @return <code>true</code> if the multiplicity is greater than 1 or equal 
     780         *         to "*", <code>false</code> otherwise 
     781         * */ 
    764782        public boolean hasMolteplicity(UMLAssociationEnd umlAssociationEnd) { 
    765783                String lowerBound = null; 
  • mauRepo/xmi2sqlalchemy/trunk/src/main/java/ndg/services/newmoon/velocity/python/GenerateFromTemplate.java

    r7974 r7996  
    163163                                UMLElementsArchive.getInstance().getTaggedValue(valueTagged, Dictionary.UPPER_BOUND), "1"); 
    164164                boolean hasMultiplicity = false; 
    165  
    166                 if (valueTagged instanceof UMLAttribute) 
     165                boolean voidable = false; 
     166                 
     167                if (UMLAttribute.class.isAssignableFrom(valueTagged.getClass())) { 
    167168                        hasMultiplicity = UMLElementsArchive.getInstance().hasMolteplicity((UMLAttribute) valueTagged); 
    168                 if (valueTagged instanceof UMLAssociationEnd) 
     169                        voidable = UMLElementsArchive.getInstance().isVoidable((UMLAttribute) valueTagged);      
     170                } 
     171                if (UMLAssociationEnd.class.isAssignableFrom(valueTagged.getClass())) 
    169172                        hasMultiplicity = UMLElementsArchive.getInstance().hasMolteplicity((UMLAssociationEnd) valueTagged); 
    170173 
    171174                upperBound = hasMultiplicity ? "*" : "1"; 
    172175                return new AttributeModel(attributeType, valueTagged.getName(), enumLike, lowerBound, upperBound, 
    173                                 length); 
     176                                length, voidable); 
    174177        } 
    175178         
  • mauRepo/xmi2sqlalchemy/trunk/src/main/java/ndg/services/newmoon/velocity/python/GenerateTables.java

    r7978 r7996  
    195195                updateImportToSQLTables(attributeType); 
    196196                TableModel parent = getTableModel(attributeOwner); 
    197                 AttributeModel am = extractSimpleAttribute(type, valueTagged, attributeOwner);           
     197                AttributeModel am = extractSimpleAttribute(type, valueTagged, attributeOwner); 
     198                 
     199                /* Voidable should be manage with a "status" more than with a NULL column */ 
     200                boolean nullable = am.getLowerBound().equals("0") || am.isVoidable(); 
     201                 
    198202                if (!child.isSkipIt() && !am.isMapped()) { 
    199203                        // adds relations between the child table and a notSQL-type 
    200204                        // attribute 
    201                         Relationship rl = new Relationship(parent, child, valueTagged.getName(), am.getLowerBound().equals("0")); 
     205                        Relationship rl = new Relationship(parent, child, valueTagged.getName(), nullable); 
    202206 
    203207                        if (am.hasMultiplicity() && parent.equals(child)) { 
     
    268272                 
    269273                applyTemplate(tbs, CONTEXT.tableModel, sqlTablesStrBuffer, mapperTemplateFile); 
     274                 
     275                Set<TableModel> nsSimple = new HashSet<TableModel>(); 
     276                Iterator<TableModel> iter = notSortable.iterator(); 
     277                while (iter.hasNext()) { 
     278                        TableModel tm = iter.next(); 
     279                        if (tm.getInherited().size() == 0) { 
     280                                nsSimple.add(tm); 
     281                                iter.remove();   
     282                        } 
     283                } 
     284                 
     285                applyTemplate(nsSimple, CONTEXT.tableModel, sqlTablesStrBuffer, notSortableMapperTemplateFile_1); 
    270286                applyTemplate(notSortable, CONTEXT.tableModel, sqlTablesStrBuffer, notSortableMapperTemplateFile_1); 
     287                applyTemplate(nsSimple, CONTEXT.tableModel, sqlTablesStrBuffer, notSortableMapperTemplateFile_2); 
    271288                applyTemplate(notSortable, CONTEXT.tableModel, sqlTablesStrBuffer, notSortableMapperTemplateFile_2); 
    272289                //-------------------------------------// 
     
    332349                        checkTableAttributeOverriding(tb); 
    333350                } 
    334                  
    335                 iterator = tableModels.iterator(); 
    336                 while (iterator.hasNext()) { 
    337                         cleanDisabled(iterator.next()); 
    338                 } 
    339351        } 
    340352 
     
    355367                        } 
    356368                } 
    357                 /* 
    358                 for (ForeignKey fk : tb.getFk()) { 
    359                         ovm.clear(); 
    360                         for (TableModel inherited : tb.getInherited()) { 
    361                                 for (ForeignKey inhFk : inherited.getFk()) { 
    362                                         if(inhFk.getParentAttributeName().equals(fk.getParentAttributeName())) { 
    363                                                 ovm.add(tb); 
    364                                                 ovm.add(inherited); 
    365                                         } 
    366                                 }        
    367                         } 
    368                         if (!ovm.isEmpty()) { 
    369                                 tb.getOa().add(new OverriddenAttribute(ovm, fk.getParentAttributeName())); 
    370                         } 
    371                 }*/ 
    372         } 
    373          
    374         private void cleanDisabled(TableModel tb){ 
    375                 Iterator<Relationship> iterator = tb.getRelationship().iterator(); 
    376                 while (iterator.hasNext()) { 
    377                         Relationship rl = iterator.next(); 
    378                         if (rl.isDisabled()) 
    379                                 iterator.remove(); 
    380                 } 
    381369        } 
    382370         
     
    387375                        LoopFinder lf = new LoopFinder(rl, tableModels.size()); 
    388376                        lf.search(); 
    389                         if (rl.isDisabled()) 
    390                                 iterator.remove(); 
    391377                } 
    392378                 
     
    493479                 * --child Column('parent_id', ForeignKey('parent.id')) mapper(child, 
    494480                 * relationship(ParentType, 'child_field')) 
    495                  *  
    496                  * which creates a circular reference 
    497                  *  
    498                  * is necessary to modify the relation type to a many-to-many type and for 
     481                 *    
     482                 * if there is a reciprocal one-to-many reference is necessary to modify  
     483                 * the relation type to a many-to-many type and for 
    499484                 * this is necessary 1) to delete the foreignkey from both 2) delete the 
    500485                 * relation on the child 3) create a third (association) table 4) modify 
     
    503488                private void checkReciprocalReference(Relationship rl) { 
    504489                        // if the table has a self-reference is ok 
    505                         if (rl.getFromTable().equals(rl.getToTable())) 
    506                                 return; 
    507                                          
    508                         /* Otherwise could remove relationships already updated */ 
    509                         if (rl.getBackrefName() != null) 
    510                                 return; 
    511  
    512                          
    513                         // Processes just the relation because the AttributeModel contains just 
    514                         // "primitives" 
    515                         detachRelationship(rl); 
    516                 } 
    517         } 
    518  
    519         private void detachRelationship(Relationship rl) { 
    520                 if (associationTable.contains(new AssociationTable(rl.getFromTable(), rl.getToTable())) 
    521                                  || associationTable.contains(new AssociationTable(rl.getToTable(), rl.getFromTable()))) 
    522                         return; 
    523                  
    524                 // remove the child\parent foreign key 
    525                 removeFKFromTableModel(rl); 
    526  
    527 //              // create the third (association) table 
    528                 associationTable.add(new AssociationTable(rl)); 
    529  
    530                 // modify the parent relationship 
    531                 updateRelationToManyToMany(rl.getToTable(), rl);         
    532         } 
    533  
    534         private void removeFKFromTableModel(Relationship rl) { 
    535                 removeFKFromTableModel(rl.getToTable(), rl.getName(), rl.getFromTable()); 
     490                        if (!rl.getFromTable().equals(rl.getToTable())  
     491                                        && !rl.isManyToMany()) { 
     492                                if (associationTable.contains(new AssociationTable(rl.getFromTable(), rl.getToTable())) 
     493                                                 || associationTable.contains(new AssociationTable(rl.getToTable(), rl.getFromTable()))) 
     494                                        return; 
     495 
     496                                // validate the relationship 
     497                                updateRelationToManyToMany(rl.getToTable(), rl); 
     498                        } 
     499                } 
     500        } 
     501 
     502        private void updateRelationToManyToMany(TableModel child, Relationship onParent) { 
     503                Iterator<Relationship> onChildIterator = child.getRelationship().iterator(); 
     504                while (onChildIterator.hasNext()) { 
     505                        Relationship onChild = onChildIterator.next(); 
     506                        //Are the tables referring one to another? 
     507                        if (onParent.getToTable().equals(onChild.getFromTable())){ 
     508                                //Are both the relations one-to-many?  
     509                                if (onParent.isManyToOne() && onChild.isManyToOne()) { 
     510                                        onParent.setRelationType(RELATION_TYPE.MANY_TO_MANY); 
     511                                        onParent.setBackrefName(onChild.getName()); 
     512                                        //Remove the reciprocal one-to-many foreign keys 
     513                                        removeFKFromTables(onParent, onChild); 
     514                                        onChildIterator.remove(); 
     515                                        associationTable.add(new AssociationTable(onChild));                                     
     516                                } else { 
     517                                        //is a "simple" loop reference. Has to solve with the "use_alter" SqlAlchemy's ForeignKey option 
     518                                        useAlterInFKFromTableModel(onParent, onChild); 
     519                                } 
     520                        }                        
     521                } 
     522        } 
     523 
     524        private void removeFKFromTables(Relationship onParent, Relationship onChild) { 
     525                removeFKFromTableModel(onParent.getFromTable(), onChild.getName(), onParent.getToTable()); 
     526                removeFKFromTableModel(onParent.getToTable(), onParent.getName(), onParent.getFromTable()); 
     527        } 
     528         
     529        private void useAlterInFKFromTableModel(Relationship onParent, Relationship onChild) { 
     530                useAlterInFKFromTableModel(onParent.getFromTable(), onChild.getName(), onParent.getToTable()); 
     531                useAlterInFKFromTableModel(onParent.getToTable(), onParent.getName(), onParent.getFromTable()); 
    536532        } 
    537533         
     
    547543        } 
    548544 
     545        private void useAlterInFKFromTableModel(TableModel model, String attrName, TableModel fromModel) { 
     546                Iterator<ForeignKey> fkchilditerator = model.getFk().iterator(); 
     547                while (fkchilditerator.hasNext()) { 
     548                        ForeignKey cfk = fkchilditerator.next(); 
     549                        if (cfk.getParentAttributeName().equals(attrName) && cfk.getTableModel().equals(fromModel)) { 
     550                                cfk.setUseAlter(true); 
     551                                return; 
     552                        } 
     553                } 
     554        } 
     555         
    549556        private void updateRelationToManyToMany(TableModel child, TableModel onParent) { 
    550557                for (Relationship rl : child.getRelationship()) { 
     
    555562                } 
    556563        }        
    557          
    558         private void updateRelationToManyToMany(TableModel child, Relationship onParent) { 
    559                 for (Relationship rl : child.getRelationship()) { 
    560                         if (onParent.getToTable().equals(rl.getFromTable())) { 
    561                                 onParent.setRelationType(RELATION_TYPE.MANY_TO_MANY); 
    562                                 onParent.setBackrefName(rl.getName()); 
    563                                 removeFKFromTableModel(onParent.getFromTable(), rl.getName(), onParent.getToTable()); 
    564                                 rl.setDisabled(true); 
    565                                 return; 
    566                         } 
    567                 } 
    568         } 
    569564         
    570565        private List<TableModel> sortTableModels() { 
     
    575570                while (iter.hasNext()) { 
    576571                        tb = iter.next(); 
    577                         if (tb.getRelationship().size() == 0) { 
     572                        if (tb.getRelationship().size() == 0 && tb.getInherited().size() == 0) { 
    578573                                finalTable.add(tb); 
    579574                                notSortable.remove(tb); 
    580575                        } 
    581576                } 
    582                  
    583  
    584577 
    585578                int index = -1; 
    586                 while (finalTable.size() < tableModels.size() && index < 200) { 
     579                while (finalTable.size() < tableModels.size()) { 
     580                        index = finalTable.size(); 
    587581                        if (logger.isDebugEnabled()) 
    588582                                logger.debug("finalTable.size() : tableModels.size() - " + String.valueOf(finalTable.size()) + ":" + String.valueOf(tableModels.size())); 
    589583                        updateFinalTable(finalTable); 
    590                         index++; 
     584                         
     585                        //is possible more optimization? 
     586                        if (index == finalTable.size()) 
     587                                break; 
    591588                }                        
    592589                return finalTable; 
  • mauRepo/xmi2sqlalchemy/trunk/src/main/java/ndg/services/newmoon/velocity/python/support/AttributeModel.java

    r7974 r7996  
    5151        private final String upperBound; 
    5252        private final int lenght; 
     53        private final boolean voidable; 
    5354        /** 
    5455         * @param associatedClass 
     
    6061         */ 
    6162        public AttributeModel(UMLClass associatedClass, String name, boolean enumLike, String lowerBound, 
    62                         String upperBound, int lenght) { 
     63                        String upperBound, int lenght, boolean voidable) { 
    6364                super(); 
    6465                this.associatedClass = associatedClass; 
     
    6869                this.upperBound = upperBound; 
    6970                this.lenght = lenght; 
     71                this.voidable = voidable;                
    7072        } 
    7173        /** 
     
    100102        } 
    101103         
     104        /** 
     105         * @return the voidable 
     106         */ 
     107        public boolean isVoidable() { 
     108                return voidable; 
     109        } 
    102110        /** 
    103111         * @return the name 
  • mauRepo/xmi2sqlalchemy/trunk/src/main/java/ndg/services/newmoon/velocity/python/support/ForeignKey.java

    r7974 r7996  
    3939        private final TableModel tableModel; 
    4040        private final String parentAttributeName; 
     41        private boolean useAlter = false; 
    4142 
    4243        /** 
     
    6162        public TableModel getTableModel() { 
    6263                return tableModel; 
     64        } 
     65         
     66        /** 
     67         * @return the useAlter 
     68         */ 
     69        public boolean isUseAlter() { 
     70                return useAlter; 
     71        } 
     72 
     73        /** 
     74         * @param useAlter the useAlter to set 
     75         */ 
     76        public void setUseAlter(boolean useAlter) { 
     77                this.useAlter = useAlter; 
    6378        } 
    6479 
  • mauRepo/xmi2sqlalchemy/trunk/src/main/java/ndg/services/newmoon/velocity/python/support/Relationship.java

    r7974 r7996  
    4545        private RELATION_TYPE relationType = null; 
    4646        private String backrefName = null; 
    47         private boolean disabled = false; 
    4847         
    4948        /** 
     
    120119                this.relationType = relationType; 
    121120        } 
    122          
    123         public boolean isDisabled() { 
    124                 return disabled; 
    125         } 
    126          
    127         public void setDisabled(boolean disabled) { 
    128                 this.disabled = disabled; 
    129         } 
    130121 
    131122        /* (non-Javadoc) 
  • mauRepo/xmi2sqlalchemy/trunk/src/main/java/ndg/services/newmoon/xmiModel/v11/Dictionary.java

    r7974 r7996  
    5959        String LOWER_BOUND = "lowerBound";       
    6060        String LENGTH = "length"; 
     61        String VOIDABLE = "voidable"; 
    6162} 
  • mauRepo/xmi2sqlalchemy/trunk/src/main/resources/global_library.vm

    r7974 r7996  
    1 #macro( tableName $tableName) 
    2 $tableName.toLowerCase()_table#end 
    31 
    4  
    5 #macro( identicalAttributes $tableModel) 
    6 #if($tableModel.oa.size() > 0) 
    7         #foreach( $oa in $tableModel.oa) 
    8                 '${oa.attributeName}': [#tableName($tableModel.associatedClass.name).c.${oa.attributeName} 
    9                 #foreach( $ovAttTable in $oa.models) 
    10                         , #tableName($ovAttTable.associatedClass.name).c.${oa.attributeName} 
    11                 #end]  
    12                 #if($foreach.hasNext),#end                       
    13                 #end 
    14         #end 
    15 #end 
     2#macro( tableName $tableModel) 
     3$tableModel.associatedClass.name.toLowerCase()_table#end 
    164 
    175#macro( relationColumns $tableModel) 
     
    2816'${relation.name}': relationship(${tt},  
    2917secondary=${tt.toLowerCase()}_${ft.toLowerCase()}_table, 
    30 ##primaryjoin=#tableName($tmn).c.${tmn.toLowerCase()}_id==${tt.toLowerCase()}_${ft.toLowerCase()}_table.c.left_node_id, 
    31 ##secondaryjoin=#tableName($tmn).c.${tmn.toLowerCase()}_id==${tt.toLowerCase()}_${ft.toLowerCase()}_table.c.right_node_id, 
    3218#if ($relation.backrefName) backref='${relation.backrefName}' #end 
    33 ##backref='left_nodes' 
    3419#elseif($relation.isOneToMany()) 
    3520'${relation.name}': relationship(${tt} 
    3621#elseif($relation.isOneToOne()) 
    37 '${relation.name}': relationship(${tt}, uselist=False, backref='${tmn.toLowerCase()}_table_${relation.name}'#end 
     22'${relation.name}': relationship(${tt}, uselist=False#end 
    3823#if($tt == $tmn) 
    3924, remote_side=[#tableName($tmn).c.${tmn.toLowerCase()}_id] 
     
    4126#end 
    4227#if($relation.isOneToOne() || $relation.isOneToMany()) 
    43 , primaryjoin=${tt.toLowerCase()}_table.c.${ft.toLowerCase()}_${relation.name}==${tmn.toLowerCase()}_table.c.${tmn.toLowerCase()}_id#end 
     28, primaryjoin=${tt.toLowerCase()}_table.c.${ft.toLowerCase()}_${relation.name}==${tmn.toLowerCase()}_table.c.${tmn.toLowerCase()}_id 
     29#end 
    4430)#end 
    4531 
    4632 
    47 #macro( checkNullable $lowerBound) 
    48 #if($lowerBound != '0') 
    49 , nullable=False#else 
    50 , nullable=True#end 
     33#macro( inheritedClasses $tableModel) 
     34#set ($tln = ${tableModel.associatedClass.name.toLowerCase()}) 
     35#if($tableModel.inherited.size() > 0) 
     36        #foreach( $parent in $tableModel.inherited) 
     37                #set ($pn = ${parent.associatedClass.name}) 
     38                , polymorphic_on=${tln}_table.c.t_type, inherits=${pn}, polymorphic_identity='${tln}'#break#end 
     39#else    
    5140#end 
     41#end 
  • mauRepo/xmi2sqlalchemy/trunk/src/main/resources/velocity/python/mapping.vm

    r7978 r7996  
    66${tab}if (target.${tm}_id is None): 
    77${tab}${tab}target.${tm}_id = next_id(connection, '${tm}_id_seq') 
    8 ##if($tableModel.hasChildren) 
    9 ##${tab}target.${tm}_type = '${tm}' 
    10 ##end 
    118#foreach( $parent in $tableModel.inherited) 
    129#set ($tp = $parent.associatedClass.name.toLowerCase()) 
    13 ##${tab}target.${tp}_type = '${tp}' 
    1410${tab}target.${tp}_id = next_id(connection, '${tp}_id_seq') 
    1511${tab}target.${tm}_${tp}_id = target.${tp}_id 
     
    1713#end 
    1814 
    19 #macro( joinClass $class, $parents) 
     15#macro( joinInheritedClasses $tableModel) 
    2016#if($tableModel.inherited.size() > 0) 
    2117#foreach( $parent in $parents).join(${parent.associatedClass.name.toLowerCase()}_table)#end 
     
    2319#end 
    2420 
    25 #macro( generateProperties $tableModel) 
    26         #if($tableModel.relationship.size() > 0 && $tableModel.oa.size() > 0) 
    27 , properties  = { 
    28 #identicalAttributes($tableModel), #relationColumns($tableModel)} 
    29         #elseif($tableModel.relationship.size() > 0) 
    30 , properties  ={ 
    31 #relationColumns($tableModel)} 
    32         #elseif($tableModel.oa.size() > 0) 
    33 , properties  = { 
    34 #identicalAttributes($tableModel)} 
     21#macro( identicalAttributes $tableModel) 
     22#if($tableModel.oa.size() > 0) 
     23        #foreach( $oa in $tableModel.oa) 
     24                '${oa.attributeName}': [#tableName($tableModel.associatedClass.name).c.${oa.attributeName} 
     25                #foreach( $ovAttTable in $oa.models) 
     26                        , #tableName($ovAttTable.associatedClass.name).c.${oa.attributeName} 
     27                #end]  
     28                #if($foreach.hasNext),#end                       
     29                #end 
    3530        #end 
    3631#end 
    3732 
    38 mapper($tableModel.associatedClass.name, #tableName($tableModel.associatedClass.name)#joinClass($tableModel.associatedClass.name, $tableModel.inherited)  
     33#macro( generateProperties $tableModel) 
     34        #if($tableModel.relationship.size() > 0 && $tableModel.oa.size() > 0) 
     35, properties  = {#identicalAttributes($tableModel), #relationColumns($tableModel)} 
     36        #elseif($tableModel.relationship.size() > 0) 
     37, properties  = {#relationColumns($tableModel)} 
     38##      #elseif($tableModel.oa.size() > 0) 
     39##, properties  = {#identicalAttributes($tableModel)} 
     40        #end 
     41#end 
     42 
     43mapper($tableModel.associatedClass.name, #tableName($tableModel)#inheritedClasses($tableModel)  
    3944#generateProperties($tableModel)) 
    4045 
    41 #if($tableModel.inherited.size() > 0 || $tableModel.hasChildren) 
    42 #beforeInsertListener($tableModel) 
    43  
    44 event.listen($tableModel.associatedClass.name, 'before_insert', ${tableModel.associatedClass.name}_before_insert_listener) 
    45 #end 
  • mauRepo/xmi2sqlalchemy/trunk/src/main/resources/velocity/python/notSortableMapping_1.vm

    r7974 r7996  
    11## notSortableMapping_1.vm 
    22 
    3 mapper(${tableModel.associatedClass.name}, ${tableModel.associatedClass.name.toLowerCase()}_table) 
     3mapper($tableModel.associatedClass.name, #tableName($tableModel)#inheritedClasses($tableModel)) 
    44 
  • mauRepo/xmi2sqlalchemy/trunk/src/main/resources/velocity/python/sqlAlchemyTables.vm

    r7978 r7996  
    99 
    1010#macro( column $simpleAttribute) 
    11 Column('${simpleAttribute.name}', #attributeType($simpleAttribute) #checkNullable($simpleAttribute.lowerBound)), 
     11Column('${simpleAttribute.name}', #attributeType($simpleAttribute) #checkNullable($simpleAttribute)), 
    1212#end 
    1313 
     
    2626#end 
    2727 
     28#macro(checkUseAlter $fk, $fkName) 
     29#if($fk.useAlter) 
     30, use_alter=True, name='fk_${fkName}'#end 
     31#end 
     32 
    2833#macro( fk $foreignKey, $tableModel) 
    2934#set ($fkName = ${foreignKey.tableModel.associatedClass.name.toLowerCase()}) 
    30 Column('${fkName}_${foreignKey.parentAttributeName}', Integer, ForeignKey('${fkName}.${fkName}_id')), 
     35Column('${fkName}_${foreignKey.parentAttributeName}', Integer, ForeignKey('${fkName}.${fkName}_id'#checkUseAlter($foreignKey, $fkName))), 
    3136#end 
     37 
     38#macro( primaryKey $tableModel) 
     39#set ($tn = ${tableModel.associatedClass.name.toLowerCase()}) 
     40${tab}Column('${tn}_id', Integer, Sequence('${tn}_id_seq'), primary_key=True), 
     41#if($tableModel.inherited && $tableModel.inherited.size() > 0) 
     42        #foreach( $parent in $tableModel.inherited) 
     43                #set ($pn = ${parent.associatedClass.name.toLowerCase()}) 
     44                ${tab}Column('${pn}_id', Integer, ForeignKey('${pn}.${pn}_id')),#end 
     45#end 
     46#end 
     47 
     48#macro(checkNullable $simpleAttribute) 
     49#if($simpleAttribute.lowerBound != '0' && !$simpleAttribute.voidable) 
     50, nullable=False#else 
     51, nullable=True#end 
     52#end 
     53 
     54 
    3255 
    3356#macro( table $tableModel) 
    3457#set ($associatedCN = ${tableModel.associatedClass.name.toLowerCase()}) 
    3558${associatedCN}_table = Table('${associatedCN}', metadata, 
    36 ${tab}Column('${associatedCN}_id', Integer, Sequence('${associatedCN}_id_seq'), primary_key=True), 
     59#primaryKey($tableModel) 
    3760#foreach( $foreignKey in $tableModel.fk) 
    3861${tab}#fk($foreignKey, $tableModel) 
     
    4164${tab}#column($simpleAttribute) 
    4265#end 
    43 ##if($tableModel.hasChildren) 
    44 ##${tab}Column('${tableModel.associatedClass.name.toLowerCase()}_type', String(30), nullable=False), 
    45 ##end 
    46 #inheritanceColumn($tableModel) 
     66Column('t_type', String(30), nullable=False, default='${associatedCN}'), 
     67##inheritanceColumn($tableModel) 
    4768${tab}extend_existing=False,) 
    4869#end 
  • mauRepo/xmi2sqlalchemy/trunk/src/main/resources/xmiToSQLMap.properties

    r7974 r7996  
    77Vector=ARRAY 
    88Number=NUMERIC 
    9 #Date=DATE 
    10 #DateTime=DateTime 
     9Date=DATE 
     10DateTime=DateTime 
  • mauRepo/xmi2sqlalchemy/trunk/src/test/resources/removeAll

    r7974 r7996  
    4040mo_project_mo_project, mo_result_mo_result, om_observation_om_observation, mo_project_mo_observation, 
    4141mo_observation_mo_observationcollection, ci_citation_md_identifier, ceda_project_ceda_observation, 
    42 ceda_observation_ceda_observationcollection 
     42ceda_observation_ceda_observationcollection, ci_individual, ci_party, ci_responsiblepartyinfo 
    4343CASCADE; 
    4444 
Note: See TracChangeset for help on using the changeset viewer.