Changeset 8146 for mauRepo


Ignore:
Timestamp:
09/03/12 10:20:19 (8 years ago)
Author:
mnagni
Message:

Stable CEDA_model generation
Starting to implement a fullmoon-like eXistDB free implementation

Location:
mauRepo/xmi2sqlalchemy/trunk
Files:
17 added
16 edited

Legend:

Unmodified
Added
Removed
  • mauRepo/xmi2sqlalchemy/trunk/pom.xml

    r7999 r8146  
    1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    2   <modelVersion>4.0.0</modelVersion> 
    3   <groupId>ndg.services.newmoon</groupId> 
    4   <artifactId>xmi2sqlalchemy</artifactId> 
    5   <version>0.0.1-SNAPSHOT</version> 
    6   <dependencies> 
    7         <dependency> 
    8                 <groupId>org.apache.velocity</groupId> 
    9                 <artifactId>velocity</artifactId> 
    10                 <version>1.7</version> 
    11         </dependency> 
    12         <dependency> 
    13                 <groupId>ndg.services.newmoon</groupId> 
    14                 <artifactId>core</artifactId> 
    15                 <version>1.2.0</version> 
    16         </dependency> 
    17         <dependency> 
    18                 <groupId>org.apache.velocity</groupId> 
    19                 <artifactId>velocity-tools</artifactId> 
    20                 <version>2.0</version> 
    21         </dependency> 
    22   </dependencies> 
    23    
    24         <build> 
     1<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     2        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
     3        <modelVersion>4.0.0</modelVersion> 
     4        <groupId>ndg.services.newmoon</groupId> 
     5        <artifactId>xmi2sqlalchemy</artifactId> 
     6        <version>0.0.1-SNAPSHOT</version> 
     7        <dependencies> 
     8                <dependency> 
     9                        <groupId>org.apache.velocity</groupId> 
     10                        <artifactId>velocity</artifactId> 
     11                        <version>1.7</version> 
     12                </dependency> 
     13                <dependency> 
     14                        <groupId>ndg.services.newmoon</groupId> 
     15                        <artifactId>core</artifactId> 
     16                        <version>1.2.0</version> 
     17                </dependency> 
     18                <dependency> 
     19                        <groupId>org.apache.velocity</groupId> 
     20                        <artifactId>velocity-tools</artifactId> 
     21                        <version>2.0</version> 
     22                </dependency> 
     23                <dependency> 
     24                        <groupId>net.sf.saxon</groupId> 
     25                        <artifactId>saxon-xqj</artifactId> 
     26                        <version>9.1.0.8</version> 
     27                </dependency> 
     28        </dependencies> 
     29 
     30        <build> 
    2531                <resources> 
    2632                        <resource> 
  • mauRepo/xmi2sqlalchemy/trunk/src/main/java/ndg/services/newmoon/UMLElementsArchive.java

    r8060 r8146  
    847847        } 
    848848 
     849        public ClassModel getClassModelByClassName(String className) { 
     850                return getClassModelByUMLClass(getUMLClassByName(className)); 
     851        } 
    849852} 
  • mauRepo/xmi2sqlalchemy/trunk/src/main/java/ndg/services/newmoon/UmlToRDBM.java

    r8085 r8146  
    3535 
    3636import java.io.File; 
     37import java.io.FileNotFoundException; 
    3738import java.io.IOException; 
    3839import java.io.InputStream; 
    39 import java.util.Arrays; 
     40import java.util.Collection; 
    4041import java.util.HashMap; 
    4142import java.util.HashSet; 
     
    4647import java.util.concurrent.Future; 
    4748 
     49import ndg.services.newmoon.NewmoonManager.NM_PARAM; 
    4850import ndg.services.newmoon.collect.AttributeModel; 
    4951import ndg.services.newmoon.collect.ClassModel; 
    5052import ndg.services.newmoon.collect.CollectClasses; 
    5153import ndg.services.newmoon.collect.SuperAttribute; 
     54import ndg.services.newmoon.exception.NM_ParamException; 
     55import ndg.services.newmoon.gml.ValidateXMIModel; 
    5256import ndg.services.newmoon.velocity.python.GenerateClasses; 
    5357import ndg.services.newmoon.velocity.python.GenerateFromClassModel; 
    5458import ndg.services.newmoon.velocity.python.GenerateTables; 
     59import ndg.services.newmoon.xmiModel.UMLClass; 
    5560import ndg.services.newmoon.xmiModel.UMLModel; 
    5661 
    5762import org.apache.commons.collections.CollectionUtils; 
     63import org.apache.commons.collections.ListUtils; 
    5864import org.apache.commons.io.FileUtils; 
    5965import org.apache.commons.io.IOUtils; 
     
    6672 * 
    6773 */ 
    68 public class UmlToRDBM { 
    69  
     74public class UmlToRDBM extends XMIParserAbstract { 
     75         
    7076        private final Logger logger = LoggerFactory.getLogger(UmlToRDBM.class); 
    7177         
    72         public void execute(Map<NewmoonManager.NM_PARAM, String> params) { 
    73                 try { 
    74                         File baseDir = new File(params.get(NewmoonManager.NM_PARAM.EXECUTION_DIR)); 
    75                          
    76                         InputStream inputXML = FileUtils.openInputStream(new File(baseDir, params.get(NewmoonManager.NM_PARAM.XMI_DOC))); 
    77                         InputStream inputAddClass = FileUtils.openInputStream(new File(baseDir, "CEDA_Model/AdditionalClasses.txt")); 
    78  
     78        public void execute(Map<NewmoonManager.NM_PARAM, String> params) throws NewmoonException { 
     79                File baseDir = null; 
     80                InputStream inputXML = null; 
     81                File outDir = null; 
     82                try { 
     83                        baseDir = new File(getParam(params, NewmoonManager.NM_PARAM.EXECUTION_DIR)); 
     84                        inputXML = openInputStream(params, NewmoonManager.NM_PARAM.XMI_DOC, baseDir); 
     85                        outDir = new File(baseDir, getParam(params, NewmoonManager.NM_PARAM.OUTPUT_DIR)); 
     86                        outDir.mkdir();                  
     87                } catch (NM_ParamException ex) { 
     88                        throw new NewmoonException("Not valid parameter", ex); 
     89                } 
     90                 
     91                InputStream inputAddClass = null; 
     92                InputStream constraints = null; 
     93                Set<String> additionalClasses = null; 
     94                try { 
     95                        inputAddClass = openInputStream(params, NewmoonManager.NM_PARAM.XMI_ADD_CLASSES, baseDir); 
     96                        additionalClasses = NmParserHelper.getCSVFromInputStream(inputAddClass); 
     97                } catch (NM_ParamException ex) { 
     98                        if (logger.isWarnEnabled()) { 
     99                                logger.warn("Additional Classes file not loaded");       
     100                        } 
     101                } 
     102                 
     103                try { 
     104                        constraints = openInputStream(params, NewmoonManager.NM_PARAM.XMI_ADD_CONSTRAINTS, baseDir);                     
     105                } catch (NM_ParamException ex) { 
     106                        if (logger.isWarnEnabled()) { 
     107                                logger.warn("Not valid parameter", ex);  
     108                        } 
     109                } 
     110                 
     111                try { 
    79112                        UMLElementsArchive umlArchive = new UMLElementsArchive(); 
    80113                        NmParser xmiParser = new NmParser(inputXML, null, umlArchive);           
     
    83116                         
    84117                        /*  I try to generate just what I need */ 
    85                         UMLModel umlModel = myModel.get(); 
    86                          
    87                         File outDir = new File(baseDir, params.get(NewmoonManager.NM_PARAM.OUTPUT_DIR)); 
    88                         outDir.mkdir(); 
     118                        UMLModel umlModel = myModel.get();                       
    89119                         
    90120                        //Generates the ClassModels 
     
    92122                        List<ClassModel> cms = cc.execute(); 
    93123                        umlArchive.getClassModel().addAll(cms); 
     124                 
     125                        applyConstrains(constraints, umlArchive); 
    94126                         
    95127                        //Update the ClassModels substituting the SuperAttributes when necessary 
    96128                        substitutesSuperAttributes(cms); 
     129                                 
    97130                         
    98131                        //Generates the python classes 
     
    101134 
    102135                        //Generates the sqlalchemy tables 
    103                         GenerateTables gen2 = new GenerateTables(outDir, umlArchive, NmParserHelper.getCSVFromInputStream(inputAddClass)); 
     136                        GenerateTables gen2 = new GenerateTables(outDir, umlArchive, additionalClasses); 
    104137                        gen2.execute(umlModel); 
    105138                } catch (Exception e) { 
     
    109142                        e.printStackTrace(); 
    110143                        fail("Not yet implemented"); // TODO 
     144                } 
     145        } 
     146         
     147        private void applyConstrains(InputStream constraints, UMLElementsArchive umlArchive) { 
     148                try { 
     149                        List<String> rules = IOUtils.readLines(constraints); 
     150                        String[] template; 
     151                        for (String rule : rules) { 
     152                                template = StringUtils.split(rule, ":"); 
     153                                if (template.length != 3) { 
     154                                        logger.error("Constraint rule not appliable: " + rule); 
     155                                        continue; 
     156                                } 
     157                                ClassModel target = umlArchive.getClassModelByClassName(template[0]); 
     158                                ClassModel constrain = umlArchive.getClassModelByClassName(template[2]); 
     159                                for (AttributeModel am : target.getAttributeModel()) { 
     160                                        if (am.getName().equals(template[1])) { 
     161                                                am.setAssociatedType(constrain); 
     162                                        } 
     163                                } 
     164                        } 
     165                } catch (IOException ex) { 
     166                        logger.error("Cannot apply constraints", ex); 
    111167                } 
    112168        } 
     
    151207                        } 
    152208                        Iterator<AttributeModel> iterAttr = cm.getAttributeModel().iterator(); 
    153                         Set<SuperAttribute> sas = new HashSet<SuperAttribute>(); 
     209                        Set<AttributeModel> sas = new HashSet<AttributeModel>(); 
     210                        //Done in this way because seems I cannot trust the iterAttr.remove() method 
     211                        Set<AttributeModel> toRemove = new HashSet<AttributeModel>(); 
     212                        AttributeModel attr = null; 
    154213                        while (iterAttr.hasNext()) { 
    155                                 AttributeModel attr = iterAttr.next(); 
     214                                attr = iterAttr.next(); 
    156215                                if (attr == null  
    157216                                                || attr.getAssociatedType() == null  
     
    163222                                } 
    164223 
    165                                 SuperAttribute sa = new SuperAttribute(attr);                    
    166                                 sa.getSubTypes().addAll(pc.get(attr.getAssociatedType())); 
    167                                 iterAttr.remove(); 
    168                                 sas.add(sa); 
    169224                                if (!classUsers.containsKey(attr.getAssociatedType())) { 
    170225                                        classUsers.put(attr.getAssociatedType(), new HashSet<ClassModel>()); 
    171226                                }                                
    172227                                classUsers.get(attr.getAssociatedType()).add(cm); 
    173                         } 
     228                                 
     229                                SuperAttribute sa = new SuperAttribute(attr);                    
     230                                sa.getSubTypes().addAll(pc.get(attr.getAssociatedType())); 
     231                                toRemove.add(attr); 
     232                                sas.add(sa);                             
     233                        } 
     234                        sas.addAll(ListUtils.removeAll(cm.getAttributeModel(), toRemove)); 
     235                        cm.getAttributeModel().clear(); 
    174236                        cm.getAttributeModel().addAll(sas); 
    175237                } 
  • mauRepo/xmi2sqlalchemy/trunk/src/main/java/ndg/services/newmoon/collect/AttributeModel.java

    r8085 r8146  
    4545 */ 
    4646public class AttributeModel {    
    47         private final ClassModel associatedType; 
     47        private ClassModel associatedType; 
    4848        private final String name;       
    4949        private final Integer lowerBound; 
     
    9090        }        
    9191         
     92        /** 
     93         * @param associatedType the associatedType to set 
     94         */ 
     95        public void setAssociatedType(ClassModel associatedType) { 
     96                this.associatedType = associatedType; 
     97        } 
     98 
    9299        public boolean hasMultiplicity() { 
    93100                if (upperBound == null || collectionType == null) { 
     
    162169        @Override 
    163170        public boolean equals(Object obj) { 
    164                 if (this == obj) 
     171                if (this == obj) { 
    165172                        return true; 
    166                 if (obj == null) 
    167                         return false; 
    168                 if (getClass() != obj.getClass()) 
    169                         return false; 
     173                } 
     174                         
     175                if (obj == null) { 
     176                        return false; 
     177                } 
     178                         
     179                if (!AttributeModel.class.isInstance(obj)) { 
     180                        return false; 
     181                } 
     182                         
    170183                AttributeModel other = (AttributeModel) obj; 
    171184                if (associatedType == null) { 
    172                         if (other.associatedType != null) 
    173                                 return false; 
    174                 } else if (!associatedType.equals(other.associatedType)) 
    175                         return false; 
    176                 if (lenght != other.lenght) 
    177                         return false; 
     185                        if (other.associatedType != null) { 
     186                                return false; 
     187                        }                                
     188                } else if (!associatedType.equals(other.associatedType)) { 
     189                        return false; 
     190                } 
     191                         
     192                if (lenght != other.lenght) { 
     193                        return false; 
     194                } 
     195                         
    178196                if (lowerBound == null) { 
    179                         if (other.lowerBound != null) 
    180                                 return false; 
    181                 } else if (!lowerBound.equals(other.lowerBound)) 
    182                         return false; 
     197                        if (other.lowerBound != null) { 
     198                                return false; 
     199                        }                                
     200                } else if (!lowerBound.equals(other.lowerBound)) { 
     201                        return false; 
     202                } 
     203                         
    183204                if (name == null) { 
    184205                        if (other.name != null) 
     
    187208                        return false; 
    188209                if (upperBound == null) { 
    189                         if (other.upperBound != null) 
    190                                 return false; 
    191                 } else if (!upperBound.equals(other.upperBound)) 
    192                         return false; 
     210                        if (other.upperBound != null) { 
     211                                return false; 
     212                        }                                
     213                } else if (!upperBound.equals(other.upperBound)) { 
     214                        return false; 
     215                }                        
    193216                return true; 
    194217        } 
  • mauRepo/xmi2sqlalchemy/trunk/src/main/java/ndg/services/newmoon/velocity/python/GenerateTables.java

    r8085 r8146  
    110110                this.baseDir = baseDir; 
    111111                this.umlArchive = umlArchive; 
    112                 this.additionalClasses.addAll(additionalClasses); 
     112                if (additionalClasses != null) { 
     113                        this.additionalClasses.addAll(additionalClasses);        
     114                } 
    113115        } 
    114116         
     
    140142                        try { 
    141143                                getVcontext().put(contextName.name(), item); 
     144                                sb.append("\t"); 
    142145                                sb.append(NmVelocity.getInstance().fillTemplate(getVcontext(), templateName)); 
    143146                        } catch (Exception e) { 
     
    182185                sqlTablesWriter.append("from sqlalchemy.orm import relationship, mapper\n");                     
    183186                sqlTablesWriter.append("from sqlalchemy.orm.util import class_mapper\n"); 
    184                 sqlTablesWriter.append("from sqlalchemy.dialects.postgresql import TEXT\n");             
     187                sqlTablesWriter.append("from sqlalchemy.dialects.postgresql import TEXT\n");                     
    185188 
    186189                sqlTablesWriter.flush(); 
     
    196199                sqlTablesWriter.append("    return connection.execute(seq)\n"); 
    197200                sqlTablesWriter.append("\n\n"); 
     201                sqlTablesWriter.append("def doTables(metadata):\n");             
    198202                sqlTablesWriter.append(sqlTablesStrBuffer.toString()); 
    199                 sqlTablesWriter.append("\n\n"); 
     203                sqlTablesWriter.append("\n\n");          
    200204                sqlTablesWriter.close(); 
    201205        } 
  • mauRepo/xmi2sqlalchemy/trunk/src/main/java/ndg/services/newmoon/velocity/python/NmVelocityHelper.java

    r8085 r8146  
    301301                return xmiToSQLMaps;             
    302302        } 
     303         
     304        public static void showAttribute(AttributeModel attribute) { 
     305                AttributeModel am = attribute; 
     306        } 
    303307} 
  • mauRepo/xmi2sqlalchemy/trunk/src/main/java/ndg/services/newmoon/xmiModel/adapter/UMLClassDataTypeAdapter.java

    r7998 r8146  
    151151         * @see ndg.services.newmoon.xmiModel.UMLClassDataType#getUmlPackage() 
    152152         */ 
    153         @Override 
    154153        public UMLModel getUmlPackage() { 
    155154                if (umlModel instanceof UMLPackage) 
  • mauRepo/xmi2sqlalchemy/trunk/src/main/resources/velocity/python/association.vm

    r8084 r8146  
    33#set ($ln = ${associationTable.leftTable.associatedClass.name.toLowerCase()}) 
    44#set ($totalName = "#associationTableName($associationTable)") 
    5 ${totalName}_table = Table('#associationTableName($associationTable)', metadata, 
    6 ${tab}Column('left_node_id', Integer, ForeignKey(${rn}_table.c.id)), 
    7 ${tab}Column('right_node_id', Integer, ForeignKey(${ln}_table.c.id)) 
     5 
     6${tab}${totalName}_table = Table('#associationTableName($associationTable)', metadata, 
     7${tab}${tab}Column('left_node_id', Integer, ForeignKey(${rn}_table.c.id)), 
     8${tab}${tab}Column('right_node_id', Integer, ForeignKey(${ln}_table.c.id)) 
    89) 
  • mauRepo/xmi2sqlalchemy/trunk/src/main/resources/velocity/python/mapping.vm

    r8040 r8146  
    77${tab}if (target.${tm}_id is None): 
    88${tab}${tab}target.${tm}_id = next_id(connection, '${tm}_id_seq') 
    9 ##foreach( $parent in $tableModel.inherited) 
    10 ##set ($tp = $parent.associatedClass.name.toLowerCase()) 
    11 ##${tab}target.${tp}_id = next_id(connection, '${tp}_id_seq') 
    12 ##${tab}target.${tm}_${tp}_id = target.${tp}_id 
    13 ##end  
    149#end 
    1510 
    1611#if(!$tableModel.associatedClass.name.equals('EARootClass')) 
    17 mapper($tableModel.associatedClass.name, #tableName($tableModel)  
     12${tab}mapper($tableModel.associatedClass.name, #tableName($tableModel)  
    1813, properties  = {#relationColumns($tableModel)}) 
    1914#end 
  • mauRepo/xmi2sqlalchemy/trunk/src/main/resources/velocity/python/notSortableMapping_1.vm

    r8006 r8146  
    11## notSortableMapping_1.vm 
    22 
    3 mapper($tableModel.associatedClass.name, #tableName($tableModel)) 
     3${tab}mapper($tableModel.associatedClass.name, #tableName($tableModel)) 
    44 
  • mauRepo/xmi2sqlalchemy/trunk/src/main/resources/velocity/python/notSortableMapping_2.vm

    r7974 r8146  
    33##Rememeber that I have arbitrarily removed the "identicalAttributes" macro (see mapping.vm for the original version) 
    44#if($tableModel.relationship.size() > 0) 
    5 class_mapper(${tableModel.associatedClass.name}).add_properties({#relationColumns($tableModel)}) 
     5${tab}class_mapper(${tableModel.associatedClass.name}).add_properties({#relationColumns($tableModel)}) 
    66#end 
    77 
  • mauRepo/xmi2sqlalchemy/trunk/src/main/resources/velocity/python/pythonClass.vm

    r8085 r8146  
    1515${stereotype.name}#elseif($superclasses.size() > 0) 
    1616#foreach( $classModel in $vh.getOrderedParents($cm)) 
    17 ##${classModel.associatedClass.name}#if($foreach.hasNext),#end 
    1817${vh.getMappedClass(${classModel.associatedClass})}#if($foreach.hasNext),#end 
    1918#end 
     
    5352#macro (getter $attr) 
    5453#set ( $methodName = "$display.capitalize( $attr.name )") 
    55 #if($attr.getParentName() || $attr.subTypes) 
    5654${tab}@property 
    57 ${tab}def ${attr.name}(self): 
     55${tab}def ${attr.name}(self):    
    5856#if($attr.getParentName()) 
    5957${tab}${tab}return self._${attr.getParentName().toLowerCase()}.${attr.name} 
    6058#elseif($attr.subTypes) 
     59#if($attr.hasMultiplicity()) 
     60${tab}${tab}ret = [] 
    6161#foreach($type in $attr.subTypes) 
    6262#set ( $assoClass = "$type.associatedClass.name.toLowerCase()") 
    63 ${tab}${tab}if(self._${attribute.name}_$assoClass is not None): 
     63${tab}${tab}for item in self._${attribute.name}_$assoClass: 
     64${tab}${tab}${tab}ret.append(item) 
     65#end 
     66${tab}${tab}return ret 
     67#else 
     68#foreach($type in $attr.subTypes) 
     69#set ( $assoClass = "$type.associatedClass.name.toLowerCase()") 
     70${tab}${tab}if(has_value(self._${attribute.name}_$assoClass)): 
    6471${tab}${tab}${tab}return self._${attribute.name}_$assoClass 
    6572#end 
    66 ${tab}${tab}return None 
    67 #end 
     73${tab}${tab}return #initAttributeLeft($attr)     
     74#end     
    6875#end 
    6976#end 
     
    7279#foreach($stype in $attr.subTypes) 
    7380#if(!$stype.equals($type)) 
    74 ${tab}${tab}${tab}self._${attr.name}_${stype.associatedClass.name.toLowerCase()}#initAttributeLeft($stype) 
     81${tab}${tab}${tab}self._${attr.name}_${stype.associatedClass.name.toLowerCase()} =#initAttributeLeft($stype) 
    7582#end 
    7683#end 
     
    7885 
    7986#macro(initAttributeLeft $attrL) 
    80 #if($attrL.hasMultiplicity()) = [] 
    81 #else = None 
     87#if($attrL.hasMultiplicity()) [] 
     88#else None 
    8289#end 
    8390#end 
     
    8592#macro (setter $attr) 
    8693#set ( $methodName = "$display.capitalize( $attr.name )") 
    87 #if($attr.getParentName() || $attr.subTypes) 
    8894${tab}@${attr.name}.setter 
    89 ${tab}def ${attr.name}(self, value): 
     95${tab}def ${attr.name}(self, value):     
    9096#if($attr.getParentName()) 
    9197${tab}${tab}${tab}self._${attr.getParentName().toLowerCase()}.${attr.name} = value 
    9298#elseif($attr.subTypes) 
     99#if($attr.hasMultiplicity()) 
     100${tab}${tab}if isinstance(value, list): 
     101#foreach($type in $attr.subTypes) 
     102#set ( $assoClass = "$type.associatedClass.name") 
     103#set ( $assoClassL = "$type.associatedClass.name.toLowerCase()") 
     104${tab}${tab}${tab}self._${attr.name}_${assoClassL}[:] 
     105#end 
     106${tab}${tab}${tab}for item in value: 
     107${tab}${tab}${tab}${tab}valueClass = "%s.%s" % (type(item).__module__,type(item).__name__) 
     108#foreach($type in $attr.subTypes) 
     109#set ( $assoClass = "$type.associatedClass.name") 
     110#set ( $assoClassL = "$type.associatedClass.name.toLowerCase()") 
     111${tab}${tab}${tab}${tab}if valueClass == "${vh.getMappedModule($type.associatedClass)}.${assoClass}": 
     112${tab}${tab}${tab}${tab}${tab}self._${attr.name}_${assoClassL}.append(item) 
     113${tab}${tab}${tab}${tab}${tab}continue 
     114#end 
     115#else 
    93116${tab}${tab}valueClass = "%s.%s" % (type(value).__module__,type(value).__name__) 
    94117#foreach($type in $attr.subTypes) 
     
    96119#set ( $assoClassL = "$type.associatedClass.name.toLowerCase()") 
    97120${tab}${tab}if valueClass == "${vh.getMappedModule($type.associatedClass)}.${assoClass}": 
    98 ${tab}${tab}${tab}self._${attr.name}_$assoClassL = value 
    99 #saSetter($type, $attr) 
    100 #end 
    101 #end 
    102 #end 
    103 #end 
     121${tab}${tab}${tab}self._${attr.name}_${assoClassL} = value 
     122#saSetter($type, $attr)  
     123#end     
     124#end 
     125#end 
     126#end 
     127 
     128 
     129 
    104130 
    105131#macro ( dogettersetter $attributes) 
    106132#foreach($attribute in $attributes) 
    107  
     133#if($attribute.getParentName() || $attribute.subTypes) 
     134${vh.showAttribute($attribute)} 
    108135#getter($attribute) 
    109136 
    110 #setter($attribute) 
     137#setter($attribute)      
     138#end 
    111139#end 
    112140#end 
     
    120148#macro( subTypes $attribute) 
    121149#foreach($type in $attribute.subTypes) 
    122 ${tab}${tab}self._${attribute.name}_${type.associatedClass.name.toLowerCase()}#initAttributeLeft($attribute) 
     150${tab}${tab}self._${attribute.name}_${type.associatedClass.name.toLowerCase()} =#initAttributeLeft($attribute) 
    123151#end 
    124152#end 
     
    135163#subTypes($attribute) 
    136164#else 
    137 ${tab}${tab}self.${attribute.name}#initAttributeLeft($attribute) 
     165${tab}${tab}self.${attribute.name} =#initAttributeLeft($attribute) 
    138166#end 
    139167#end 
     
    142170 
    143171#importing($imports) 
     172from ascore.utils import has_value, collectionProofHash 
    144173 
    145174''' 
     
    177206${tab}${tab}return (#enlistKeys($attributes)) 
    178207 
    179 ${tab}def __eq__(x, y): 
     208${tab}def __eq__(self, y): 
    180209${tab}${tab}''' 
    181210${tab}${tab}Cannot compare classes which do not define a "__key" attribute  
    182211${tab}${tab}''' 
    183 ${tab}${tab}if hasattr(x, '_%s__key' % (type(x).__name__)) and hasattr(y, '_%s__key' % (type(y).__name__)): 
    184 ${tab}${tab}${tab}return x.__key() == y.__key() 
    185 ${tab}${tab}return id(x) == id(y) 
     212${tab}${tab}if hasattr(self, '_%s__key' % (type(self).__name__)) and hasattr(y, '_%s__key' % (type(y).__name__)): 
     213${tab}${tab}${tab}return self.__key() == y.__key() 
     214${tab}${tab}return id(self) == id(y) 
    186215 
    187216${tab}def __hash__(self): 
    188 ${tab}${tab}return hash(self.__key()) 
    189 #end 
     217${tab}${tab}return collectionProofHash(self.__key()) 
     218#end 
  • mauRepo/xmi2sqlalchemy/trunk/src/main/resources/velocity/python/sqlAlchemyTables.vm

    r8084 r8146  
    6969${tab}extend_existing=False,) 
    7070#end 
    71  
    72 #table($tableModel) 
    73   
    74   
     71${tab}#table($tableModel) 
  • mauRepo/xmi2sqlalchemy/trunk/src/test/java/ngn/services/newmoon/DOMParser.java

    r8084 r8146  
    11package ngn.services.newmoon; 
    22 
    3 import static org.junit.Assert.fail; 
    4  
    5 import java.io.File; 
    63import java.io.InputStream; 
    7 import java.net.URL; 
    84import java.util.HashMap; 
    95import java.util.Map; 
    106import java.util.Scanner; 
    11 import java.util.concurrent.Future; 
    127 
     8import ndg.services.newmoon.NewmoonException; 
    139import ndg.services.newmoon.NewmoonManager; 
    1410import ndg.services.newmoon.NmParser; 
    15 import ndg.services.newmoon.UMLElementsArchive; 
    1611import ndg.services.newmoon.UmlToRDBM; 
    17 import ndg.services.newmoon.collect.CollectClasses; 
    18 import ndg.services.newmoon.velocity.python.GenerateClasses; 
    19 import ndg.services.newmoon.velocity.python.GenerateFromClassModel; 
    2012import ndg.services.newmoon.velocity.python.GenerateModuleHelper; 
    21 import ndg.services.newmoon.velocity.python.GenerateTables; 
    22 import ndg.services.newmoon.xmiModel.UMLClass; 
    23 import ndg.services.newmoon.xmiModel.UMLModel; 
    2413 
    25 import org.apache.commons.io.FileUtils; 
    26 import org.apache.commons.io.IOUtils; 
    27 import org.junit.Assert; 
    2814import org.junit.Test; 
    2915 
     
    7258                params.put(NewmoonManager.NM_PARAM.EXECUTION_DIR, GenerateModuleHelper.class.getClassLoader().getResource(".").getPath()); 
    7359                params.put(NewmoonManager.NM_PARAM.XMI_DOC, "CEDA_Model/CEDA_Model.xml"); 
     60                params.put(NewmoonManager.NM_PARAM.XMI_ADD_CLASSES, "CEDA_Model/AdditionalClasses.txt"); 
     61                params.put(NewmoonManager.NM_PARAM.XMI_ADD_CONSTRAINTS, "CEDA_Model/constraints.txt");           
    7462                params.put(NewmoonManager.NM_PARAM.OUTPUT_DIR, "encode"); 
    7563                 
    7664                UmlToRDBM umlToDB = new UmlToRDBM(); 
    77                 umlToDB.execute(params); 
     65                try { 
     66                        umlToDB.execute(params); 
     67                } catch (NewmoonException e) { 
     68                        e.printStackTrace(); 
     69                } 
    7870        } 
    7971} 
  • mauRepo/xmi2sqlalchemy/trunk/src/test/java/ngn/services/newmoon/TestsTester.java

    r8084 r8146  
    1212import java.util.concurrent.Future; 
    1313 
     14import ndg.services.newmoon.NewmoonException; 
    1415import ndg.services.newmoon.NewmoonManager; 
    1516import ndg.services.newmoon.NmParser; 
     
    8485                params.put(NewmoonManager.NM_PARAM.XMI_DOC, "sTests/" + name + ".xml"); 
    8586                params.put(NewmoonManager.NM_PARAM.OUTPUT_DIR, name); 
     87                if (name.equalsIgnoreCase("TestModel13")) { 
     88                        params.put(NewmoonManager.NM_PARAM.XMI_ADD_CONSTRAINTS, "sTests/Test13Constraints.txt");         
     89                } 
     90                                 
    8691                 
    8792                UmlToRDBM umlToDB = new UmlToRDBM(); 
    88                 umlToDB.execute(params); 
     93                try { 
     94                        umlToDB.execute(params); 
     95                } catch (NewmoonException e) { 
     96                        // TODO Auto-generated catch block 
     97                        e.printStackTrace(); 
     98                } 
    8999        } 
    90100} 
  • mauRepo/xmi2sqlalchemy/trunk/src/test/resources/CEDA_Model/CEDA_Model.xml

    r8017 r8146  
    11<?xml version="1.0" encoding="windows-1252"?> 
    2 <!DOCTYPE XMI SYSTEM "UML_EA.dtd"> 
     2 
    33<XMI xmi.version="1.1" xmlns:UML="omg.org/UML1.3" timestamp="2011-12-14 13:21:25"> 
    44        <XMI.header> 
Note: See TracChangeset for help on using the changeset viewer.