Changeset 2677


Ignore:
Timestamp:
03/08/10 13:30:16 (2 years ago)
Author:
mswertz
Message:

Prepared for multi-column xref_labels.
Cleaned out models to accomodate this.
Note: this is not complete yet!

Location:
molgenis/3.3/src/org/molgenis
Files:
30 edited

Legend:

Unmodified
Added
Removed
  • molgenis/3.3/src/org/molgenis/generators/DataTypeGen.java.ftl

    r2592 r2677  
    7474        <#assign type_label = field.getType().toString()> 
    7575        <#if type_label == "user" || type_label="xref" || type_label="mref"> 
    76                         <#assign xref_entity = model.getEntity(JavaName(field.XRefEntity))> 
     76                        <#assign xref_entity = field.xrefEntity> 
    7777import ${xref_entity.namespace}.${JavaName(xref_entity)};                        
    7878        </#if>   
     
    9797        public ${type(field)} get${JavaName(field)}(); 
    9898        public void set${JavaName(field)}(${type(field)} _${name(field)}); 
    99                         <#if type_label == "user" || type_label == "xref" || type_label == "mref" || type_label == "enum" > 
    100                                 <#if type_label == "enum"> 
     99                <#if type_label == "enum"> 
    101100        public java.util.List<ValueLabel> get${JavaName(field)}Options(); 
    102                                 </#if> 
    103                                 <#if type_label == "user" || type_label="xref"> 
    104         //public void set${JavaName(field)}(${JavaName(field.XRefEntity)} _${name(field)});                              
    105         public String get${JavaName(field)}Label(); 
    106         public void set${JavaName(field)}Label(String label);            
    107                                 <#elseif type_label == "mref"> 
    108         //public void set${JavaName(field)}(List<${JavaName(field.XRefEntity)}> _${name(field)}List);    
    109         public java.util.List<String> get${JavaName(field)}Labels(); 
    110         public void set${JavaName(field)}Labels(java.util.List<String> labels);                                                  
    111                                 </#if> 
    112                         </#if>   
    113  
    114                         <#if type_label == "file" || type_label=="image" > 
     101                <#elseif type_label="xref">                      
     102                        <#if field.xrefLabelNames[0] != field.xrefFieldName><#list field.xrefLabelNames as label> 
     103        public String get${JavaName(field)}_${label}(); 
     104        public void set${JavaName(field)}_${label}(String ${name(field)}_${label}); 
     105                        </#list></#if>           
     106                <#elseif type_label == "mref">   
     107                        <#if field.xrefLabelNames[0] != field.xrefFieldName><#list field.xrefLabelNames as label> 
     108        public java.util.List<String> get${JavaName(field)}_${label}(); 
     109        public void set${JavaName(field)}_${label}(java.util.List<String> ${name(field)}_${label}List);  
     110                        </#list></#if>                                           
     111                <#elseif type_label == "file" || type_label=="image" > 
    115112        public File get${JavaName(field)}File(); 
    116          
    117113        public void set${JavaName(field)}File(File file); 
    118114                        </#if> 
     
    126122                <#assign type_label = field.getType().toString()> 
    127123        private ${type(field)} _${name(field)} = ${default(field)}; 
    128                 <#if type_label == "user" || type_label == "xref" || type_label == "mref" || type_label == "enum"> 
    129                         <#if type_label == "enum"> 
     124                <#if type_label == "enum"> 
     125        private String _${name(field)}_label = null; 
    130126        private java.util.List<ValueLabel> _${name(field)}_options = new ArrayList<ValueLabel>(); 
    131                         </#if> 
    132                         <#if type_label == "mref"> 
    133         private java.util.List<String> _${name(field)}_labels = new ArrayList<String>(); 
    134         private java.util.List<${JavaName(field.getXRefEntity())}> _${name(field)}_objects= new ArrayList<${JavaName(field.getXRefEntity())}>();                                         
    135                         <#else> 
    136         private String _${name(field)}_label = null; 
    137                                 <#if type_label == "xref"> 
    138         private  ${JavaName(field.getXRefEntity())} _${name(field)}_object = null;                               
    139                                 </#if> 
    140                         </#if> 
    141                 </#if> 
    142                 <#if type_label == "file" || type_label=="image" > 
     127                <#elseif type_label == "xref"> 
     128                        <#if field.xrefLabelNames[0] != field.xrefFieldName><#list field.xrefLabelNames as label> 
     129        private String _${name(field)}_${label} = null;                                          
     130                        </#list></#if> 
     131        private  ${JavaName(field.xrefEntity)} _${name(field)}_object = null;                            
     132                <#elseif type_label == "mref"> 
     133                        <#if field.xrefLabelNames[0] != field.xrefFieldName><#list field.xrefLabelNames as label> 
     134        private java.util.List<String> _${name(field)}_${label} = new ArrayList<String>(); 
     135                        </#list></#if>   
     136        private java.util.List<${JavaName(field.xrefEntity)}> _${name(field)}_objects= new ArrayList<${JavaName(field.xrefEntity)}>();                                           
     137                <#elseif type_label == "file" || type_label=="image" > 
    143138        private File _${name(field)}_file = null; 
    144139                </#if> 
     
    154149         
    155150        <#list entity.getFields() as f> 
    156                 <#assign type_label = f.getType().toString()> 
    157                 <#if type_label == "enum"> 
     151                <#if f.type == "enum"> 
    158152                //options for enum ${JavaName(f)} 
    159153                        <#list f.getEnumOptions() as option> 
     
    210204                <#if type_label == "xref"> 
    211205                if(this._${name(field)}_object != null) 
    212                         return this._${name(field)}_object.get${JavaName(field.getXRefField())}(); 
     206                        return this._${name(field)}_object.get${JavaName(field.xrefField)}(); 
    213207                <#elseif type_label == "mref"> 
    214208                if(this._${name(field)}_objects != null && this._${name(field)}_objects.size() > 0) 
    215209                { 
    216210                        ${type(field)} result = ${default(field)}; 
    217                         for(${JavaName(field.getXRefEntity())} o: _${name(field)}_objects) result.add(o.get${JavaName(field.getXRefField())}()); 
     211                        for(${JavaName(field.xrefEntity)} o: _${name(field)}_objects) result.add(o.get${JavaName(field.xrefField)}()); 
    218212                        //this should be smarter, like a List that automatically syncs... 
    219213                        //and this also doesn't give an informative error why it is not modifiable 
     
    232226                <#if type_label == "mref"> 
    233227                //check what type the elements in the list are made off because List<E> has same erasure 
    234                 //if ${JavaName(field.getXRefEntity())} then tye should go in the object list 
    235                 if( _${name(field)} != null && _${name(field)}.size()>0 && _${name(field)} instanceof ${JavaName(field.getXRefEntity())}) 
     228                //if ${JavaName(field.xrefEntity)} then tye should go in the object list 
     229                if( _${name(field)} != null && _${name(field)}.size()>0 && _${name(field)} instanceof ${JavaName(field.xrefEntity)}) 
    236230                { 
    237231                        this._${name(field)}_objects = _${name(field)}; 
    238232                        //need to copy ids to this._${name(field)} because get${JavaName(field)} does this. 
    239233                        //this._${name(field)} = ${default(field)}; 
    240                         //for(${JavaName(field.getXRefEntity())} o: _${name(field)}_objects) result.add(o.get${JavaName(field.getXRefField())}());       
     234                        //for(${JavaName(field.xrefEntity)} o: _${name(field)}_objects) result.add(o.get${JavaName(field.xrefField)}());         
    241235                } 
    242236                //else make list empty 
    243237                else 
    244238                { 
    245                         this._${name(field)}_objects = new java.util.ArrayList<${JavaName(field.getXRefEntity())}>(); 
     239                        this._${name(field)}_objects = new java.util.ArrayList<${JavaName(field.xrefEntity)}>(); 
    246240                 
    247241                        if(this._${name(field)} != null) 
     
    259253        } 
    260254         
     255        <#-- data type specific methods --> 
    261256        <#if type_label =="date"> 
    262257        /** 
     
    268263                this.set${JavaName(field)}(string2date(datestring)); 
    269264        }        
    270         </#if>   
    271          
    272         <#if type_label == "user" || type_label == "xref" || type_label == "mref">/** 
    273          * Get a pretty label for cross reference ${JavaName(field)} to <a href="${JavaName(field.getXRefEntity())}.html#${JavaName(field.getXRefField())}">${JavaName(field.getXRefEntity())}.${JavaName(field.getXRefField())}</a>. 
    274          */<#elseif type_label == "enum">/** 
     265        <#elseif type_label == "enum" >   
     266        /** 
    275267         * Get tha label for enum ${JavaName(field)}. 
    276          */</#if> 
    277         <#if type_label == "user" || type_label == "xref" || type_label == "enum" >       
     268         */ 
    278269        public String get${JavaName(field)}Label() 
    279270        { 
    280                 <#if type_label != "enum">if(this._${name(field)}_object != null) 
    281                         return this._${name(field)}_object.get${JavaName(field.getXRefLabelString())}().toString();</#if> 
    282271                return this._${name(field)}_label; 
    283272        } 
    284273         
    285         <#if type_label == "xref"> 
    286         /** 
    287          * Set the ${field.description}. Automatically calls this.set${JavaName(field)}(${name(field)}.get${JavaName(field.getXRefField())}); 
     274        /** 
     275         * ${JavaName(field)} is enum. This method returns all available enum options. 
     276         */ 
     277        public java.util.List<ValueLabel> get${JavaName(field)}Options() 
     278        { 
     279                return _${name(field)}_options; 
     280        }        
     281         
     282        <#elseif type_label == "xref"> 
     283        /** 
     284         * Set the ${field.description}. Automatically calls this.set${JavaName(field)}(${name(field)}.get${JavaName(field.xrefField)}); 
    288285         * @param _${name(field)} 
    289286         */ 
    290         public void set${JavaName(field)}(${JavaName(field.getXRefEntity())} ${name(field)}) 
    291         { 
    292                 this.set${JavaName(field)}(${name(field)}.get${JavaName(field.getXRefField())}()); 
    293         }        
    294         </#if> 
     287        public void set${JavaName(field)}(${JavaName(field.xrefEntity)} ${name(field)}) 
     288        { 
     289                this.set${JavaName(field)}(${name(field)}.get${JavaName(field.xrefField)}()); 
     290        }        
     291          
     292<#if field.xrefLabelNames[0] != field.xrefFieldName><#list field.xrefLabelNames as label> 
     293        /** 
     294         * Get a pretty label ${label} for cross reference ${JavaName(field)} to ${JavaName(field.xrefEntity)}.${JavaName(field.xrefField)}. 
     295         */ 
     296        public String get${JavaName(field)}_${label}() 
     297        {                        
     298                return _${name(field)}_${label}; 
     299        }                
     300         
     301        /** 
     302         * Set a pretty label for cross reference ${JavaName(field)} to <a href="${JavaName(field.xrefEntity)}.html#${JavaName(field.xrefField)}">${JavaName(field.xrefEntity)}.${JavaName(field.xrefField)}</a>. 
     303         */ 
     304        public void set${JavaName(field)}_${label}(String ${name(field)}_${label}) 
     305        { 
     306                _${name(field)}_${label} = ${name(field)}_${label}; 
     307                //clear the object cache 
     308                _${name(field)}_object = null; 
     309        }                
     310</#list></#if> 
     311          
    295312         
    296313        <#elseif type_label="mref"> 
    297         public java.util.List<String> get${JavaName(field)}Labels() 
     314<#if field.xrefLabelNames[0] != field.xrefFieldName><#list field.xrefLabelNames as label>        
     315        /** 
     316         * Get a pretty label for cross reference ${JavaName(field)} to <a href="${JavaName(field.xrefEntity)}.html#${JavaName(field.xrefField)}">${JavaName(field.xrefEntity)}.${JavaName(field.xrefField)}</a>. 
     317         */ 
     318        public java.util.List<String> get${JavaName(field)}_${label}() 
    298319        { 
    299320                if(this._${name(field)}_objects != null && this._${name(field)}_objects.size() > 0) 
    300321                { 
    301322                        java.util.List<String> result = new java.util.ArrayList<String>(); 
    302                         for(${JavaName(field.getXRefEntity())} o: _${name(field)}_objects) result.add(o.get${JavaName(field.getXRefLabelString())}().toString()); 
     323                        for(${JavaName(field.xrefEntity)} o: _${name(field)}_objects) result.add(o.get${JavaName(label)}().toString()); 
    303324                        //this should be smarter, like a List that automatically syncs... 
    304325                        //and this also doesn't give an informative error why it is not modifiable 
    305326                        return java.util.Collections.unmodifiableList(result); 
    306327                }                
    307                 return  _${name(field)}_labels; 
    308         }        
    309         </#if> 
    310          
    311         <#if type_label == "enum"> 
    312         /** 
    313          * ${JavaName(field)} is enum. This method returns all available enum options. 
    314          */ 
    315         </#if>   
    316         <#if type_label == "enum" > 
    317         public java.util.List<ValueLabel> get${JavaName(field)}Options() 
    318         { 
    319                 return _${name(field)}_options; 
    320         } 
    321         </#if> 
    322          
    323         <#if type_label == "user" || type_label == "xref" > 
    324         /** 
    325          * Set a pretty label for cross reference ${JavaName(field)} to <a href="${JavaName(field.getXRefEntity())}.html#${JavaName(field.getXRefField())}">${JavaName(field.getXRefEntity())}.${JavaName(field.getXRefField())}</a>. 
    326          */ 
    327         public void set${JavaName(field)}Label(String label) 
    328         { 
    329                 _${name(field)}_label = label; 
    330                 //deprecates the object cache 
    331                 _${name(field)}_object = null; 
    332         } 
    333         <#elseif type_label="mref"> 
    334         public void set${JavaName(field)}Labels(java.util.List<String> labels) 
    335         { 
    336                 _${name(field)}_labels = labels; 
    337                 //deprecates the object cache 
     328                return  _${name(field)}_${label}; 
     329        } 
     330         
     331        public void set${JavaName(field)}_${label}(java.util.List<String> ${name(field)}_${label}) 
     332        { 
     333                _${name(field)}_${label} = ${name(field)}_${label}; 
     334                //clear the object cache 
    338335                _${name(field)}_objects = null; 
    339         }        
    340         </#if>   
    341  
    342         <#if type_label == "file"  || type_label=="image" > 
     336        }                
     337</#list></#if>           
     338         
     339        <#elseif type_label == "file"  || type_label=="image" > 
    343340        /** 
    344341         * get${JavaName(field)}() is a textual pointer to a file. get${JavaName(field)}AttachedFile() can be used to retrieve the full paht to this file. 
     
    357354                _${name(field)}_file = file; 
    358355        } 
    359                 </#if> 
    360 <#--</#if>      --> 
    361         </#foreach>      
     356        </#if> 
     357 
     358</#foreach>      
    362359 
    363360        /** 
     
    370367                if (name.toLowerCase().equals("${name(field)?lower_case}")) 
    371368                        return get${JavaName(field)}(); 
    372                 <#if field.type == "xref" || field.type == "enum" >      
    373                 if(name.toLowerCase().equals("${name(field)?lower_case}_${name(field.getXRefLabelString())?lower_case}")) 
     369                <#if field.type == "enum" >      
     370                if(name.toLowerCase().equals("${name(field)?lower_case}_label")) 
    374371                        return get${JavaName(field)}Label(); 
    375                 </#if> 
    376                 <#if field.type == "mref"> 
    377                 if(name.toLowerCase().equals("${name(field)?lower_case}_${name(field.getXRefLabelString())?lower_case}")) 
    378                         return get${JavaName(field)}Labels();            
     372                <#elseif field.type == "xref" || field.type == "mref"> 
     373<#if field.xrefLabelNames[0] != field.xrefFieldName><#list field.xrefLabelNames as label>        
     374                if(name.toLowerCase().equals("${name(field)?lower_case}_${label?lower_case}")) 
     375                        return get${JavaName(field)}_${label}(); 
     376</#list></#if>                   
    379377                </#if> 
    380378        </#foreach>              
     
    413411                </#if>                   
    414412                <#if f.type == "xref">                   
    415                         //set label for field ${JavaName(f)} 
    416                         this.set${JavaName(f)}Label(tuple.getString("${name(f)}_${name(f.getXRefLabelString())}"));                              
     413                        <#if f.xrefLabelNames[0] != f.xrefFieldName><#list f.xrefLabelNames as label>            
     414                        //set label ${label} for xref field ${JavaName(f)} 
     415                        this.set${JavaName(f)}_${label}(tuple.getString("${name(f)}_${name(label)}"));   
     416                        </#list></#if>                   
    417417                </#if>                           
    418418                </#if> 
     
    438438                                this.set${JavaName(f)}( values );                        
    439439                        } 
    440                         //set label for field ${JavaName(f)}     
    441                         if( tuple.getObject("${name(f)}_${name(f.getXRefLabelString())}")!= null )  
     440                        <#if f.xrefLabelNames[0] != f.xrefFieldName><#list f.xrefLabelNames as label> 
     441                        //set labels ${label} for mref field ${JavaName(f)}      
     442                        if( tuple.getObject("${name(f)}_${name(label)}")!= null )  
    442443                        { 
    443444                                java.util.List<String> values = new ArrayList<String>(); 
    444                                 java.util.List<Object> mrefs = tuple.getList("${name(f)}_${name(f.getXRefLabelString())}"); 
     445                                java.util.List<Object> mrefs = tuple.getList("${name(f)}_${name(label)}"); 
    445446                                if(mrefs != null) for(Object ref: mrefs) 
    446447                                { 
    447448                                        values.add(ref.toString()); 
    448449                                }                                                        
    449                                 this.set${JavaName(f)}Labels( values );                  
    450                         }                                                
    451                         <#elseif f.name?lower_case != "type" || !entity.hasAncestor()> 
     450                                this.set${JavaName(f)}_${label}( values );                       
     451                        }        
     452                        </#list></#if>                                   
     453                <#elseif f.name?lower_case != "type" || !entity.hasAncestor()> 
    452454                        //set ${JavaName(f)} 
    453455                        <#if f.type == "xref">   
    454                         if( strict || tuple.get${settertype(f)}("${name(f)}_${name(f.getXRefField())}") != null) this.set${JavaName(f)}(tuple.get${settertype(f)}("${name(f)}_${name(f.getXRefField())}"));              
    455                         if( tuple.get${settertype(f)}("${name(entity)}.${name(f)}_${name(f.getXRefField())}") != null) this.set${JavaName(f)}(tuple.get${settertype(f)}("${name(entity)}.${name(f)}_${name(f.getXRefField())}")); 
     456                        if( strict || tuple.get${settertype(f)}("${name(f)}_${name(f.xrefField)}") != null) this.set${JavaName(f)}(tuple.get${settertype(f)}("${name(f)}_${name(f.xrefField)}"));                
     457                        if( tuple.get${settertype(f)}("${name(entity)}.${name(f)}_${name(f.xrefField)}") != null) this.set${JavaName(f)}(tuple.get${settertype(f)}("${name(entity)}.${name(f)}_${name(f.xrefField)}")); 
    456458                        //alias of xref 
    457459                        if( tuple.getObject("${name(f)}") != null) this.set${JavaName(f)}(tuple.get${settertype(f)}("${name(f)}")); 
    458460                        if( tuple.getObject("${name(entity)}.${name(f)}") != null) this.set${JavaName(f)}(tuple.get${settertype(f)}("${name(entity)}.${name(f)}")); 
    459461                        //set label for field ${JavaName(f)} 
    460                         if( strict || tuple.getObject("${name(f)}_${name(f.getXRefLabelString())}") != null) this.set${JavaName(f)}Label(tuple.getString("${name(f)}_${name(f.getXRefLabelString())}"));                         
    461                         if( tuple.getObject("${name(entity)}.${name(f)}_${name(f.getXRefLabelString())}") != null ) this.set${JavaName(f)}Label(tuple.getString("${name(entity)}.${name(f)}_${name(f.getXRefLabelString())}"));                          
     462                                <#if f.xrefLabelNames[0] != f.xrefFieldName><#list f.xrefLabelNames as label> 
     463                        if( strict || tuple.getObject("${name(f)}_${name(label)}") != null) this.set${JavaName(f)}_${label}(tuple.getString("${name(f)}_${name(label)}"));                       
     464                        if( tuple.getObject("${name(entity)}.${name(f)}_${name(label)}") != null ) this.set${JavaName(f)}_${label}(tuple.getString("${name(entity)}.${name(f)}_${name(label)}"));                                
     465                                </#list></#if> 
    462466                        <#elseif f.type == "nsequence"> 
    463467                        if( strict || tuple.getNSequence("${name(f)}") != null)this.set${JavaName(f)}(tuple.getNSequence("${name(f)}")); 
     
    496500                <#else> 
    497501                result+= "${name(field)}='" + get${JavaName(field)}()+"'<#if field_has_next> </#if>"; 
    498                 <#if field.type == "xref"> 
    499                 result+= " ${name(field)}_${name(field.getXRefLabelString())}='" + get${JavaName(field)}Label()+"' "; 
    500                 </#if> 
    501                 <#if field.type == "mref"> 
    502                 result+= " ${name(field)}_${name(field.getXRefLabelString())}='" + get${JavaName(field)}Labels()+"' "; 
    503                 </#if> 
    504                 <#--if field.type == "xref" || field.type == "enum"> 
    505                 if(verbose) result+= " ${name(field)}_options='" + get${JavaName(field)}Options()+"'<#if field_has_next> </#if>"; 
    506                 </#if--> 
     502                        <#if field.type == "xref" || field.type == "mref"> 
     503                                <#if field.xrefLabelNames[0] != field.xrefFieldName><#list field.xrefLabelNames as label> 
     504                result+= " ${name(field)}_${name(label)}='" + get${JavaName(field)}_${label}()+"' "; 
     505                                </#list></#if> 
     506                        </#if> 
    507507                </#if> 
    508508</#list> 
     
    535535                fields.add("${name(field)}"); 
    536536                <#if field.type="xref" || field.type="mref"> 
    537                 fields.add("${name(field)}_${name(field.getXRefLabelString())}"); 
     537                        <#if field.xrefLabelNames[0] != field.xrefFieldName><#list field.xrefLabelNames as label> 
     538                fields.add("${name(field)}_${name(label)}"); 
     539                        </#list></#if> 
    538540                </#if> 
    539541        </#list>                 
  • molgenis/3.3/src/org/molgenis/generators/R/REntityGen.R.ftl

    r2269 r2677  
    4242                         
    4343    <#list skey_fields as f><#if f.type == "xref"> 
    44     <#assign session_var = ".MOLGENIS$session." + RName(f.getXRefEntity()) + "."+ RName(f.getXRefField())> 
    45     <#assign xref_entity = model.getEntity(f.getXRefEntity())> 
     44    <#assign session_var = ".MOLGENIS$session." + RName(f.xrefEntity) + "."+ RName(f.xrefField)> 
     45    <#assign xref_entity = f.xrefEntity> 
    4646    #add missing xref values from session parameters (optional) 
    47     if(.usesession && is.null(data_frame$${RName(f)}__${RName(f.getXRefField())}) && !is.null(${session_var}))     
     47    if(.usesession && is.null(data_frame$${RName(f)}__${RName(f.xrefField)}) && !is.null(${session_var}))     
    4848    { 
    4949        data_frame$${RName(f)} = ${session_var} 
     
    6464 
    6565#freely find ${JavaName(entity)}  
    66 find.${RName(entity)} <- function( <#list allFields(entity) as f><#if f.type="xref">${RName(f)}_${RName(f.getXRefField())}=NULL<#if f.getXRefLabelString()?exists && f.getXRefField() != f.getXRefLabelString()>, ${RName(f)}_${RName(f.getXRefLabelString())}=NULL</#if><#else>${RName(f)}=NULL</#if> <#if f_has_next>, </#if></#list>, .usesession = T, .verbose=T ) 
     66find.${RName(entity)} <- function( <#list allFields(entity) as f><#if f.type="xref">${RName(f)}_${RName(f.xrefField)}=NULL<#if f.xrefLabelNames[0] != f.xrefFieldName><#list f.xrefLabelNames as label>, ${RName(f)}_${RName(label)}=NULL</#list></#if><#else>${RName(f)}=NULL</#if> <#if f_has_next>, </#if></#list>, .usesession = T, .verbose=T ) 
    6767{ 
    6868        #add session parameters 
    6969    <#list skey_fields as f><#if f.type == "xref"> 
    70     <#assign session_var = ".MOLGENIS$session." + RName(f.getXRefEntity()) + "."+ RName(f.getXRefField())> 
    71     <#assign xref_entity = model.getEntity(f.getXRefEntity())> 
    72     if(.usesession && is.null(${RName(f)}_${RName(f.getXRefField())}) && !is.null(${session_var}))     
     70    <#assign session_var = ".MOLGENIS$session." + RName(f.xrefEntity) + "."+ RName(f.xrefField)> 
     71    <#assign xref_entity = f.xrefEntity> 
     72    if(.usesession && is.null(${RName(f)}_${RName(f.xrefField)}) && !is.null(${session_var}))     
    7373    { 
    74         ${RName(f)}_${RName(f.getXRefField())} = ${session_var} 
    75         cat("Using ${RName(f)}_${RName(f.getXRefField())} (${RName(pkey(xref_entity))}='",${session_var},"'", sep="") 
     74        ${RName(f)}_${RName(f.xrefField)} = ${session_var} 
     75        cat("Using ${RName(f)}_${RName(f.xrefField)} (${RName(pkey(xref_entity))}='",${session_var},"'", sep="") 
    7676<#list skeys(xref_entity) as skey><#list key_fields(skey) as f>         
    7777                cat(", ${RName(f)}='",.MOLGENIS$session.${RName(xref_entity)}.${RName(f)},"'", sep="") 
     
    9191#add data.frame of ${JavaName(entity)} or each column individually 
    9292#note: each column must have the same length 
    93 add.${RName(entity)} <- function(.data_frame=NULL<#list allFields(entity) as f><#if f.type="xref">, ${RName(f)}_${RName(f.getXRefField())}=NULL<#if f.getXRefLabelString()?exists && f.getXRefField() != f.getXRefLabelString()>, ${RName(f)}_${RName(f.getXRefLabelString())}=NULL</#if><#elseif !f.auto>, ${RName(f)}=NULL</#if></#list>, .usesession = T, .verbose=T ) 
     93add.${RName(entity)} <- function(.data_frame=NULL<#list allFields(entity) as f><#if f.type="xref">, ${RName(f)}_${RName(f.xrefField)}=NULL<#if f.type="xref">${RName(f)}_${RName(f.xrefField)}=NULL<#if f.xrefLabelNames[0] != f.xrefFieldName><#list f.xrefLabelNames as label>, ${RName(f)}_${RName(label)}=NULL</#list></#if></#if><#elseif !f.auto>, ${RName(f)}=NULL</#if></#list>, .usesession = T, .verbose=T ) 
    9494{ 
    9595        .data_frame = .create.${RName(entity)}(.data_frame, mget(ls(),environment()), .usesession = .usesession, .verbose = .verbose) 
     
    111111        #add session parameters 
    112112    <#list skey_fields as f><#if f.type == "xref"> 
    113     <#assign session_var = ".MOLGENIS$session." + RName(f.getXRefEntity()) + "."+ RName(f.getXRefField())> 
    114     <#assign xref_entity = model.getEntity(f.getXRefEntity())> 
     113    <#assign session_var = ".MOLGENIS$session." + RName(f.xrefEntity) + "."+ RName(f.xrefField)> 
     114    <#assign xref_entity = f.xrefEntity> 
    115115    if(is.null(${RName(f)}) && !is.null(${session_var}))     
    116116    { 
  • molgenis/3.3/src/org/molgenis/generators/csv/CsvReaderGen.java.ftl

    r2568 r2677  
    4646<#list allFields(entity) as f> 
    4747        <#if f.type=="xref" || f.type=="mref"> 
    48         <#assign xref_entity = model.getEntity(f.getXRefEntity())> 
     48        <#assign xref_entity = f.xrefEntity> 
    4949${imports(model, xref_entity, "")} 
    5050        </#if> 
     
    5757{ 
    5858        <#assign has_xrefs=false /> 
    59         <#list allFields(entity) as f><#if (f.type == 'xref' || f.type == 'mref') && f.getXRefLabelString() != f.getXRefField()><#assign has_xrefs=true> 
    60         //foreign key map for field '${name(f)}' (${name(f.getXRefEntity())}.${name(f.getXRefLabelString())} -> ${name(f.getXRefEntity())}.${name(f.getXRefField())})                    
     59        <#list allFields(entity) as f><#if (f.type == 'xref' || f.type == 'mref') && f.getXrefLabelNames()[0] != f.xrefFieldName><#assign has_xrefs=true> 
     60        //foreign key map for field '${name(f)}' (${name(f.xrefEntity)}.${csv(f.xrefLabelNames)} -> ${name(f.xrefEntity)}.${name(f.xrefField)})                  
    6161        final Map<String,Integer> ${name(f)}Keymap = new TreeMap<String,Integer>(); 
    6262        </#if></#list>   
     
    6969                //cache for imported objects 
    7070                final List<${JavaName(entity)}> ${name(entity)}List = new ArrayList<${JavaName(entity)}>(BATCH_SIZE); 
    71                                 final IntegerWrapper total = new IntegerWrapper(0); 
     71                final IntegerWrapper total = new IntegerWrapper(0); 
    7272                reader.setMissingValues(missingValues); 
    7373                reader.parse(new CsvReaderListener() 
     
    8181                                object.set(tuple, false);                                
    8282                                //only override values that have been set. 
    83                                 ${name(entity)}List.add(object); 
    84                                 <#--need proper secundary key usage!--> 
    85                                 <#list allFields(entity) as f><#if (f.type == 'xref') && f.getXRefLabelString() != f.getXRefField()> 
    86                                 //foreign key '${name(f)}' (${name(f.getXRefEntity())}.${name(f.getXRefLabelString())} -> ?) 
    87                                 if(object.get${JavaName(f)}Label() != null) ${name(f)}Keymap.put(object.get${JavaName(f)}Label(), null);         
    88                                 </#if><#if (f.type == 'mref') && f.getXRefLabelString() != f.getXRefField()> 
    89                                 if(object.get${JavaName(f)}Labels() != null) for(String mref_label: object.get${JavaName(f)}Labels()) ${name(f)}Keymap.put(mref_label, null);    
    90                                 </#if></#list>                                   
     83                                ${name(entity)}List.add(object);                 
    9184                                 
    9285                                //add in batches 
     
    9487                                { 
    9588                                        //resolve foreign keys 
    96                                         resolveForeignKeys(db, ${name(entity)}List); 
     89                                        //is this not done elsewhere already? resolveForeignKeys(db, ${name(entity)}List); 
    9790                                         
    9891                                        <#if entity.xref_label?exists> 
    99                                         //update objects in the database using secundary key '${entity.xrefLabel}' defined in xref_label 
    100                                         db.update(${name(entity)}List,dbAction,"${entity.xref_label}"); 
     92                                        //update objects in the database using secundary key(s) '${csv(entity.xrefLabelNames)}' defined in xref_label 
     93                                        db.update(${name(entity)}List,dbAction, "${entity.xref_label}"); 
    10194                                        <#elseif entity.getAllKeys()?size &gt; 1> 
    10295                                        //update objects in the database using secundary key(<#list entity.getAllKeys()[1].fields as field><#if field_index != 0>,</#if>${field.name}</#list>) '${entity.getAllKeys()[1].fields[0].name}' 
     
    117110                if(!${name(entity)}List.isEmpty()){ 
    118111                        //resolve remaing foreign keys 
    119                         resolveForeignKeys(db, ${name(entity)}List); 
     112                        //is this not done in mapper? resolveForeignKeys(db, ${name(entity)}List); 
    120113                        <#if entity.xref_label?exists> 
    121114                        //update objects in the database using secundary key '${entity.xrefLabel}' defined in xref_label 
     
    137130        }        
    138131         
    139         private void resolveForeignKeys(Database db, List<${JavaName(entity)}> ${name(entity)}List) throws Exception 
     132<#--    private void resolveForeignKeys(Database db, List<${JavaName(entity)}> ${name(entity)}List) throws Exception 
    140133        { 
    141                 <#list allFields(entity) as f><#if (f.type == 'xref' || f.type == 'mref') && f.getXRefLabelString() != f.getXRefField()> 
    142                 //resolve foreign key '${name(f)}' xref_labels to id (${name(f.getXRefEntity())}.${name(f.getXRefLabelString())} -> ${name(f.getXRefEntity())}.${name(f.getXRefField())}) 
     134                <#list allFields(entity) as f><#if (f.type == 'xref' || f.type == 'mref') && f.xrefLabels[0] != f.getXRefField()> 
     135                //resolve foreign key '${name(f)}' xref_labels to id (${name(f.getXRefEntity())}.${csv(f.getXRefLabelString())} -> ${name(f.getXRefEntity())}.${name(f.getXRefField())}) 
     136                 
     137                / 
     138                 
    143139                List<${JavaName(f.XRefEntity)}> ${name(f)}List = db.query(${JavaName(f.getXRefEntity())}.class).in("${f.getXRefLabelString()}",new ArrayList<Object>(${name(f)}Keymap.keySet())).find(); 
    144140                for(${JavaName(f.XRefEntity)} xref :  ${name(f)}List) 
     
    175171                ${name(f)}Keymap.clear(); 
    176172                </#if></#list>   
    177         } 
     173        }--> 
    178174} 
    179175 
  • molgenis/3.3/src/org/molgenis/generators/db/JDBCDatabaseGen.java.ftl

    r2393 r2677  
    2323import javax.sql.DataSource; 
    2424 
     25import org.molgenis.MolgenisOptions; 
    2526import org.molgenis.framework.db.DatabaseException; 
    2627import org.molgenis.framework.db.jdbc.DataSourceWrapper; 
     
    4546                this.setup(); 
    4647        } 
     48         
     49        public JDBCDatabase(MolgenisOptions options) 
     50        { 
     51                super(options); 
     52                this.setup(); 
     53        } 
     54         
     55        public JDBCDatabase() 
     56        { 
     57                super(new MolgenisOptions()); 
     58                this.setup(); 
     59        } 
    4760 
    4861        public JDBCDatabase(String propertiesFilePath) throws FileNotFoundException, IOException, DatabaseException 
  • molgenis/3.3/src/org/molgenis/generators/db/JDBCMetaDatabaseGen.java.ftl

    r2382 r2677  
    2929package ${package}; 
    3030 
     31import java.util.Arrays; 
     32 
    3133import org.molgenis.framework.db.DatabaseException; 
    3234import org.molgenis.model.elements.Entity; 
     
    5658                        <#list entity.getFields() as field><#if field.name?lower_case != "type"> 
    5759                        Field ${name(entity)}_${name(field)}_field = new Field(${name(entity)}_entity, "${field.name}", Field.Type.getType("${field.type}")); 
    58                         <#if field.type == "xref" || field.type == "mref">${name(entity)}_${name(field)}_field.setXRefVariables("${field.XRefEntity}", "${field.XRefField}","${field.XRefLabelString}");</#if> 
     60                        <#if field.auto> 
     61                        ${name(entity)}_${name(field)}_field.setAuto(true); 
     62                        </#if> 
     63                        <#if field.type == "xref" || field.type == "mref">${name(entity)}_${name(field)}_field.setXRefVariables("${field.xrefEntityName}", "${field.xrefFieldName}",Arrays.asList(new String[]{${csv(field.xrefLabelNames)}}));</#if> 
    5964                        ${name(entity)}_entity.addField(${name(entity)}_${name(field)}_field); 
    6065                        </#if></#list> 
     
    6368                        </#list></#if></#list> 
    6469                         
    65                         <#list entities as entity><#if !entity.abstract> 
     70                        <#list entities as entity><#if !entity.abstract && !entity.association> 
    6671                        Entity ${name(entity)}_entity = new Entity("${entity.name}",this.getDatabase());<#if entity.hasImplements()> 
    6772                        ${name(entity)}_entity.setImplements(new String[]{${csv(entity.implements)}});</#if><#if entity.hasAncestor()> 
     
    6974                        <#list entity.getFields() as field><#if field.name?lower_case != "type"> 
    7075                        Field ${name(entity)}_${name(field)}_field = new Field(${name(entity)}_entity, "${field.name}", Field.Type.getType("${field.type}")); 
    71                         <#if field.type == "xref" || field.type == "mref">${name(entity)}_${name(field)}_field.setXRefVariables("${field.XRefEntity}", "${field.XRefField}","${field.XRefLabelString}");</#if> 
     76                        <#if field.auto> 
     77                        ${name(entity)}_${name(field)}_field.setAuto(true); 
     78                        </#if> 
     79                        <#if field.type == "xref" || field.type == "mref">${name(entity)}_${name(field)}_field.setXRefVariables("${field.xrefEntityName}", "${field.xrefFieldName}",Arrays.asList(new String[]{${csv(field.xrefLabelNames)}}));</#if> 
    7280                        ${name(entity)}_entity.addField(${name(entity)}_${name(field)}_field); 
    7381                        </#if></#list> 
  • molgenis/3.3/src/org/molgenis/generators/db/MapperCommons.subclass_per_table.java.ftl

    r2571 r2677  
    4040                return "SELECT <#list viewFields(entity) as f>${SqlName(f.entity)}.${SqlName(f)}<#if f_has_next>" 
    4141                          +", </#if></#list>"<#list viewFields(entity,"xref") as f> 
    42                           +", xref${f_index}.${SqlName(f.getXRefLabelString())} AS ${SqlName(f)}_${SqlName(f.getXRefLabelString())}"</#list> 
     42                          <#list f.xrefLabelNames as label>+", xref${f_index}.${SqlName(label)} AS ${SqlName(f)}_${SqlName(label)}" 
     43                          </#list></#list> 
    4344                          +" FROM ${SqlName(entity)} "<#list superclasses(entity)?reverse as superclass><#if name(superclass) != name(entity)> 
    4445                          +" INNER JOIN ${SqlName(superclass)} ON (${SqlName(entity)}.${SqlName(pkey(entity))} = ${SqlName(superclass)}.${SqlName(pkey(entity))})"</#if></#list> 
    4546                          <#list viewFields(entity,"xref") as f> 
    46                           <#assign xref_entity = model.getEntity(f.getXRefEntity())/>  
    47                           <#assign xref_field = xref_entity.getField(f.getXRefField())/> 
    48                           <#assign xref_label = xref_entity.getAllField(f.getXRefLabelString()) /><#--can be from supertype!!--> 
    49                           <#if name(xref_field.entity) != name(xref_label.entity)>+" LEFT JOIN ${SqlName(xref_label.entity)} AS xref${f_index} ON ${SqlName(f.getEntity())}.${SqlName(f)}=xref${f_index}.${SqlName(xref_field)}" 
    50                           <#else>+" LEFT JOIN ${SqlName(f.getXRefEntity())} AS xref${f_index} ON ${SqlName(f.getEntity())}.${SqlName(f)}=xref${f_index}.${SqlName(xref_field)}"</#if></#list>; 
     47                          <#assign xref_entity = f.xrefEntity />  
     48                          <#assign xref_field = f.xrefField /> 
     49                          <#list f.xrefLabels as labelField><#--can be from supertype!!--> 
     50                          <#if name(xref_field.entity) != name(labelField.entity)>+" LEFT JOIN ${SqlName(labelField.entity)} AS xref${f_index} ON ${SqlName(f.getEntity())}.${SqlName(f)}=xref${f_index}.${SqlName(xref_field)}" 
     51                          <#else>+" LEFT JOIN ${SqlName(f.xrefEntity)} AS xref${f_index} ON ${SqlName(f.getEntity())}.${SqlName(f)}=xref${f_index}.${SqlName(xref_field)}"</#if></#list></#list>; 
    5152        }        
    5253 
     
    5657                          +" FROM ${SqlName(entity)} "<#list superclasses(entity)?reverse as superclass><#if name(superclass) != name(entity)> 
    5758                          +" INNER JOIN ${SqlName(superclass)} ON (${SqlName(entity)}.${SqlName(pkey(entity))} = ${SqlName(superclass)}.${SqlName(pkey(entity))})"</#if></#list><#list viewFields(entity,"xref") as f> 
    58                           <#assign xref_entity = model.getEntity(f.getXRefEntity())/>  
    59                           <#assign xref_field = xref_entity.getField(f.getXRefField())/> 
    60                           <#assign xref_label = xref_entity.getAllField(f.getXRefLabelString()) /><#--can be from supertype!!--> 
    61                           <#if name(xref_field.entity) != name(xref_label.entity)>+" LEFT JOIN ${SqlName(xref_label.entity)} AS xref${f_index} ON ${SqlName(f.getEntity())}.${SqlName(f)}=xref${f_index}.${SqlName(xref_field)}" 
    62                           <#else>+" LEFT JOIN ${SqlName(f.getXRefEntity())} AS xref${f_index} ON ${SqlName(f.getEntity())}.${SqlName(f)}=xref${f_index}.${SqlName(xref_field)}"</#if></#list>; 
     59                          <#assign xref_entity = f.xrefEntity/>  
     60                          <#assign xref_field = f.xrefField/> 
     61                          <#list f.xrefLabels as labelField><#--can be from supertype!!--> 
     62                          <#if name(xref_field.entity) != name(labelField.entity)>+" LEFT JOIN ${SqlName(labelField.entity)} AS xref${f_index} ON ${SqlName(f.getEntity())}.${SqlName(f)}=xref${f_index}.${SqlName(xref_field)}" 
     63                          <#else>+" LEFT JOIN ${SqlName(f.xrefEntity)} AS xref${f_index} ON ${SqlName(f.getEntity())}.${SqlName(f)}=xref${f_index}.${SqlName(xref_field)}"</#if></#list></#list>; 
    6364        } 
    6465         
     
    7172                </#list>         
    7273                <#list viewFields(entity,"xref") as f>           
    73                 <#assign xref_entity = model.getEntity(f.getXRefEntity())/>  
    74                 <#assign xref_field = xref_entity.getField(f.getXRefField())/> 
    75                 <#assign xref_label = xref_entity.getAllField(f.getXRefLabelString()) /><#--can be from supertype!!--> 
     74                <#assign xref_entity = f.xrefEntity/>  
     75                <#assign xref_field = f.xrefField/> 
    7676                //alias for query on id field of xref entity 
    7777                if("${name(f)}_${name(xref_field)}".equalsIgnoreCase(fieldName)) return "${SqlName(f.entity)}.${SqlName(f)}"; 
    78                 //alias for query on label of the xref entity 
    79                 if("${name(f)}_${name(xref_label)}".equalsIgnoreCase(fieldName)) return "xref${f_index}.${SqlName(xref_label)}"; 
     78                //alias(es) for query on label of the xref entity 
     79                        <#list f.xrefLabelNames as label> 
     80                if("${name(f)}_${name(label)}".equalsIgnoreCase(fieldName)) return "xref${f_index}.${SqlName(label)}"; 
     81                        </#list> 
    8082                </#list>                                 
    8183                return fieldName; 
     
    8890                <#assign type= f.type> 
    8991                <#if type == "user" || type == "xref" || type == "mref">                 
    90                 <#assign type = model.getEntity(f.getXRefEntity()).getField(f.getXRefField()).getType()/> 
     92                <#assign type = f.xrefField.type/> 
    9193                if("${name(f)}".equalsIgnoreCase(fieldName) || "${name(f.entity)}.${name(f)}".equalsIgnoreCase(fieldName)) return Type.${type?upper_case}; 
    9294                if("${name(f)}_${name(xref_label)}".equalsIgnoreCase(fieldName) || "${name(f.entity)}.${name(f)}_${name(xref_label)}".equalsIgnoreCase(fieldName)) return Type.STRING; 
     
    102104        { 
    103105<#assign has_xrefs=false>                
    104 <#list allFields(entity) as f><#if f.type == 'xref' && f.getXRefLabelString() != f.getXRefField()><#assign has_xrefs=true>       
    105                 //create foreign key map for field '${name(f)}' (${name(f.getXRefEntity())}.${name(f.getXRefLabelString())} -> ${name(f.getXRefEntity())}.${name(f.getXRefField())})                     
    106                 final java.util.Map<String,Integer> ${name(f)}Keymap = new java.util.TreeMap<String,Integer>(); 
     106<#list allFields(entity) as f><#if f.type == 'xref' &&   f.xrefLabelNames[0] != f.xrefFieldName><#assign has_xrefs=true>         
     107                //create foreign key map for field '${name(f)}' to ${name(f.xrefEntity)}.${name(f.xrefField)} using ${csv(f.xrefLabelNames)})    
     108                //we will use a hash of the values to ensure that entities are only queried once         
     109                final java.util.Map<String,QueryRule> ${name(f)}Rules = new java.util.TreeMap<String,QueryRule>(); 
    107110</#if></#list>   
    108111<#if has_xrefs>          
    109                 //find all keys to be mapped     
     112                //create all query rules         
    110113                for(${JavaName(entity)} object: entities) 
    111114                { 
    112 <#list allFields(entity) as f><#if f.type == 'xref' && f.getXRefLabelString() != f.getXRefField()> 
    113                         //foreign key '${name(f)}' (${name(f.getXRefEntity())}.${name(f.getXRefLabelString())} -> ?) 
    114                         if(object.get${JavaName(f)}Label() != null) ${name(f)}Keymap.put(object.get${JavaName(f)}Label(), null);         
     115<#list allFields(entity) as f><#if f.type == 'xref' && f.xrefLabelNames[0] != f.xrefFieldName> 
     116                <#if f.xrefLabelNames?size &gt; 1> 
     117                        //create xref rule filtering on the combination of labels ${csv(f.xrefLabelNames)} 
     118                        { 
     119                                List<QueryRule> rules = new ArrayList<QueryRule>(); 
     120                                String key = ""; 
     121                                <#list f.xrefLabelNames as label> 
     122                                rules.add(new QueryRule("${f.name}_${label}", Operator.EQUALS, object.get${JavaName(f)}_${label}()));    
     123                                key +=  object.get${JavaName(f)}_${label}(); 
     124                                </#list>                         
     125                                QueryRule complexRule = new QueryRule(rules); 
     126                                nestedRule.or(true); 
     127                                ${name(f)}Rules.put(key, nestedRule); 
     128                        } 
     129                <#else> 
     130                        //create xref rule filtering on the label ${csv(f.xrefLabelNames)} 
     131                        { 
     132                                QueryRule xrefFilter = new QueryRule("${f.name}_${f.xrefLabelNames[0]}", Operator.EQUALS, object.get${JavaName(f)}_${f.xrefLabelNames[0]}()); 
     133                                xrefFilter.setOr(true); 
     134                                ${name(f)}Rules.put(object.get${JavaName(f)}_${f.xrefLabelNames[0]}(), xrefFilter); 
     135                        } 
     136                </#if>   
    115137</#if></#list> 
    116138                } 
    117139 
    118 <#list allFields(entity) as f><#if f.type == 'xref' && f.getXRefLabelString() != f.getXRefField()> 
    119                 //resolve foreign key '${name(f)}' (${name(f.getXRefEntity())}.${name(f.getXRefLabelString())} -> ${name(f.getXRefEntity())}.${name(f.getXRefField())}) 
    120                 List<${JavaName(f.XRefEntity)}> ${name(f)}List = getDatabase().query(${JavaName(f.getXRefEntity())}.class).in("${f.getXRefLabelString()}",new ArrayList<Object>(${name(f)}Keymap.keySet())).find(); 
    121                 for(${JavaName(f.XRefEntity)} xref :  ${name(f)}List) 
    122                 { 
    123                         ${name(f)}Keymap.put(xref.get${JavaName(f.getXRefLabelString())}().toString(), xref.get${JavaName(f.getXRefField())}()); 
    124                 }                
     140<#list allFields(entity) as f><#if f.type == 'xref' && f.xrefLabelNames[0] != f.xrefFieldName> 
     141                //resolve foreign key field '${name(f)}' to ${name(f.xrefEntity)}.${name(f.xrefField)} using ${csv(f.xrefLabelNames)}) 
     142                final java.util.Map<String,Integer> ${name(f)}_Labels_to_IdMap = new java.util.TreeMap<String,Integer>(); 
     143                <#list f.xrefLabelNames as label> 
     144                 
     145                List<${JavaName(f.xrefEntity)}> ${name(f)}List = getDatabase().find(${JavaName(f.xrefEntity)}.class, (QueryRule[])${name(f)}Rules.values().toArray()); 
     146                for(${JavaName(f.xrefEntity)} xref :  ${name(f)}List) 
     147                { 
     148                        String key = ""; 
     149                        <#list f.xrefLabelNames as label> 
     150                        key +=  xref.get${JavaName(label)}(); 
     151                        </#list>                 
     152                        ${name(f)}_Labels_to_IdMap.put(key, xref.get${JavaName(f.xrefField)}()); 
     153                } 
     154                </#list>                 
    125155</#if></#list> 
    126156 
     
    129159                { 
    130160                        ${JavaName(entity)} object = entities.get(i);            
    131                         <#list allFields(entity) as f><#if f.type == 'xref'  && f.getXRefLabelString() != f.getXRefField()> 
    132                         if(object.get${JavaName(f)}Label() != null)  
    133                         { 
    134                                 if(${name(f)}Keymap.get(object.get${JavaName(f)}Label()) == null) throw new DatabaseException("Cannot find ${f.getXRefEntity()} for ${name(f)}_${name(f.getXRefLabelString())} '"+object.get${JavaName(f)}Label()+"'"); 
    135                                 object.set${JavaName(f)}(${name(f)}Keymap.get(object.get${JavaName(f)}Label())); 
     161                        <#list allFields(entity) as f><#if f.type == 'xref'  && f.xrefLabelNames[0] != f.xrefFieldName> 
     162                        //update object using label fields ${csv(f.xrefLabelNames)} 
     163                        { 
     164                                String key = ""; 
     165                                <#list f.xrefLabelNames as label> 
     166                                key +=  object.get${JavaName(f)}_${label}(); 
     167                                object.set${JavaName(f)}(${name(f)}_Labels_to_IdMap.get(key)); 
     168                                </#list> 
    136169                        } 
    137170                        </#if></#list>   
    138                         entities.set(i, object);                                                         
     171                                                 
    139172                } 
    140173</#if>           
     
    172205                        }                        
    173206                } 
    174                 else if("${field.name}_${field.getXRefLabelString()}".equalsIgnoreCase(rule.getField())) 
     207                <#list field.xrefLabelNames as label> 
     208                else if("${field.name}_${label}".equalsIgnoreCase(rule.getField())) 
    175209                { 
    176210                        // replace with id filter based on the many-to-many links in 
    177211                        // ${field.getMrefName()} 
    178212                        List<${JavaName(field.getMrefName())}> mref_mapping_entities = db.find(${JavaName(field.getMrefName())}.class, new QueryRule( 
    179                                         "${SqlName(field.getXRefEntity())}_${SqlName(field.getXRefLabelString())}", rule.getOperator(), rule.getValue())); 
     213                                        "${SqlName(field.xrefEntity)}_${SqlName(label)}", rule.getOperator(), rule.getValue())); 
    180214                        if (mref_mapping_entities.size() > 0) 
    181215                        { 
     
    190224                        } 
    191225                } 
     226                </#list> 
    192227                <#assign else = true>                            
    193228                </#if> 
  • molgenis/3.3/src/org/molgenis/generators/db/MapperMrefs.java.ftl

    r2665 r2677  
    2424                                //assign ids 
    2525                                List<Integer> ids = new ArrayList<Integer>(); 
    26                                 List<String> labels = new ArrayList<String>(); 
     26                                <#if f.xrefLabelNames[0] != f.xrefFieldName><#list f.xrefLabelNames as label> 
     27                                List<String> ${label}List = new ArrayList<String>(); 
     28                                </#list></#if> 
    2729                                for(${JavaName(mref_entity)} ref: existing_mrefs) 
    2830                                { 
    2931                                        ids.add(ref.get${JavaName(mref_remote_field)}()); 
    30                                         labels.add(ref.get${JavaName(mref_remote_field)}Label()); 
     32                                        <#if f.xrefLabelNames[0] != f.xrefFieldName><#list f.xrefLabelNames as label> 
     33                                        ${label}List.add(ref.get${JavaName(mref_remote_field)}_${label}()); 
     34                                        </#list></#if> 
    3135                                }        
    3236                                entity.set${JavaName(f)}(ids); 
    33                                 entity.set${JavaName(f)}Labels(labels); 
    34                                 //put it back (grrr) 
    35                                 entities.set(i,entity);                          
     37                                <#if f.xrefLabelNames[0] != f.xrefFieldName><#list f.xrefLabelNames as label> 
     38                                entity.set${JavaName(f)}_${label}(${label}List); 
     39                                </#list></#if>                   
    3640                        } 
    3741                } 
     
    5458                        { 
    5559                                //retrieve currently known mrefs 
    56                                 QueryRule rule = new QueryRule( "${name(mref_local_field)}", QueryRule.Operator.EQUALS, entity.get${JavaName(f)}() ); 
    57                                 List<${mref_entity}> existing_mrefs = getDatabase().find( ${mref_entity}.class, rule ); 
     60                                QueryRule rule = new QueryRule( "${mref_local_field}", QueryRule.Operator.EQUALS, entity.get${JavaName(pkey(entity))}() ); 
     61                                List<${JavaName(mref_entity)}> existing_mrefs = getDatabase().find( ${JavaName(mref_entity)}.class, rule ); 
    5862 
    5963                                // check for removals 
     
    7175                                for (Integer ref : entity.get${JavaName(f)}()) 
    7276                                { 
    73  
    74                                         ${mref_entity} new_mref = new ${mref_entity}(); 
    75                                         new_mref.set${JavaName(mref_local_field)}( entity.get${JavaName(pkey(entity))}() ); 
    76                                         new_mref.set${JavaName(mref_remote_field)}( ref ); 
    77                                         if (!existing_mrefs.contains( new_mref )) 
     77                                        if(!existing_ids.contains(ref)) 
    7878                                        { 
    79                                                 ${JavaName(mref_entity)} new_mref1 = new ${JavaName(mref_entity)}(); 
    80                                                 new_mref1.set${JavaName(mref_local_field)}( entity.get${JavaName(pkey(entity))}() ); 
    81                                                 new_mref1.set${JavaName(mref_remote_field)}( ref ); 
    82                                                 toAdd.add( new_mref1 ); 
     79                                                ${JavaName(mref_entity)} new_mref = new ${JavaName(mref_entity)}(); 
     80                                                new_mref.set${JavaName(mref_local_field)}( entity.get${JavaName(pkey(entity))}() ); 
     81                                                new_mref.set${JavaName(mref_remote_field)}( ref ); 
     82                                                toAdd.add( new_mref ); 
    8383                                        } 
    8484                                } 
     
    105105                        { 
    106106                                //retrieve currently known mrefs 
    107                                 QueryRule rule = new QueryRule( "${name(mref_local_field)}", QueryRule.Operator.EQUALS, entity.get${JavaName(f)}() ); 
    108                                 List<${mref_entity}> existing_mrefs = getDatabase().find( ${mref_entity}.class, rule ); 
     107                                QueryRule rule = new QueryRule( "${name(mref_local_field)}", QueryRule.Operator.EQUALS, entity.get${JavaName(pkey(entity))}() ); 
     108                                List<${JavaName(mref_entity)}> existing_mrefs = getDatabase().find( ${JavaName(mref_entity)}.class, rule ); 
    109109 
    110110                                // check for removals 
  • molgenis/3.3/src/org/molgenis/generators/db/MultiqueryMapperGen.java.ftl

    r2664 r2677  
    6060<#list entity.getAllFields() as f> 
    6161        <#if f.type=="xref" || f.type=="mref"> 
    62                 <#assign xref_entity = model.getEntity(f.getXRefEntity())>  
     62                <#assign xref_entity = f.xrefEntity>  
    6363import ${xref_entity.getNamespace()}.${JavaName(xref_entity)}; 
    6464                <#if f.type=="mref"><#assign mref_entity = model.getEntity(f.mrefName)> 
  • molgenis/3.3/src/org/molgenis/generators/doc/DotDocGen.java.ftl

    r2630 r2677  
    6262                                        </#if> 
    6363                 
    64                         label = "{<#if entity.abstract>Interface:</#if>${JavaName(entity)}<#if entity.hasImplements()>\n implements ${csv(entity.getImplements())}</#if><#if entity.hasAncestor()>\n extends ${name(entity.getAncestor())}</#if>|<#list entity.implementedFields as f><#if !f.system>${name(f)} : ${f.type}<#if f.type=="xref" || f.type="mref">-&gt;${name(f.getXRefEntity())}</#if><#if !f.nillable>*</#if>\l</#if></#list>}" 
     64                        label = "{<#if entity.abstract>Interface:</#if>${JavaName(entity)}<#if entity.hasImplements()>\n implements ${csv(entity.getImplements())}</#if><#if entity.hasAncestor()>\n extends ${name(entity.getAncestor())}</#if>|<#list entity.implementedFields as f><#if !f.system>${name(f)} : ${f.type}<#if f.type=="xref" || f.type="mref">-&gt;${name(f.xrefEntity)}</#if><#if !f.nillable>*</#if>\l</#if></#list>}" 
    6565                ] 
    6666 
     
    9393                                        </#if> 
    9494                 
    95                         label = "{<#if entity.abstract>Interface:</#if>${JavaName(entity)}<#if entity.hasImplements()>\n implements ${csv(entity.getImplements())}</#if><#if entity.hasAncestor()>\n extends ${name(entity.getAncestor())}</#if>|<#list entity.implementedFields as f><#if !f.system>${name(f)} : ${f.type}<#if f.type=="xref" || f.type="mref">-&gt;${name(f.getXRefEntity())}</#if><#if !f.nillable>*</#if>\l</#if></#list>}" 
     95                        label = "{<#if entity.abstract>Interface:</#if>${JavaName(entity)}<#if entity.hasImplements()>\n implements ${csv(entity.getImplements())}</#if><#if entity.hasAncestor()>\n extends ${name(entity.getAncestor())}</#if>|<#list entity.implementedFields as f><#if !f.system>${name(f)} : ${f.type}<#if f.type=="xref" || f.type="mref">-&gt;${name(f.xrefEntity)}</#if><#if !f.nillable>*</#if>\l</#if></#list>}" 
    9696                ] 
    9797</#if></#list> 
     
    131131                <#list entity.fields as f> 
    132132                        <#if f.type=="xref"> 
    133                 "${JavaName(entity)}" -> "${JavaName(f.XRefEntity)}" [ 
     133                "${JavaName(entity)}" -> "${JavaName(f.xrefEntity)}" [ 
    134134                        headlabel = "<#if f.nillable>0..</#if>1" 
    135135                        taillabel = "*" 
     
    156156                <#list entity.fields as f > 
    157157                        <#if f.type=="mref">     
    158                 "${JavaName(f.XRefEntity)}" -> "${JavaName(entity)}"[ 
     158                "${JavaName(f.xrefEntity)}" -> "${JavaName(entity)}"[ 
    159159                        ] 
    160160                                        <#assign mref_names = mref_names + [f.getMrefName()]> 
  • molgenis/3.3/src/org/molgenis/generators/doc/DotDocMinimalGen.java.ftl

    r1975 r2677  
    113113        <#if !entity.system> 
    114114                <#list entity.fields as f> 
    115                         <#if f.type=="xref" && entities?seq_contains(model.getEntity(f.getXRefEntity())) && !model.getEntity(f.getXRefEntity()).system> 
    116                 "${name(entity)}" -> "${f.getXRefEntity()}" 
     115                        <#if f.type=="xref" && entities?seq_contains(f.xrefEntity) && !f.xrefEntity.system> 
     116                "${name(entity)}" -> "${f.xrefEntity}" 
    117117                        </#if> 
    118118                </#list> 
     
    134134        <#if !entity.system> 
    135135                <#list entity.fields as f > 
    136                         <#if f.type=="mref" && entities?seq_contains(model.getEntity(f.getXRefEntity())) && !model.getEntity(f.getXRefEntity()).system>  
     136                        <#if f.type=="mref" && entities?seq_contains(f.xrefEntity) && !f.xrefEntity.system>      
    137137                                <#if !mref_names?seq_contains(f.getMrefName())> 
    138                 "${f.getXRefEntity()}" -> "${name(entity)}" 
     138                "${f.xrefEntity}" -> "${name(entity)}" 
    139139                                        <#assign mref_names = mref_names + [f.getMrefName()]> 
    140140                                </#if>   
  • molgenis/3.3/src/org/molgenis/generators/doc/EntityModelDocGen.java.ftl

    r2268 r2677  
    4040                <td ${color}> 
    4141<#if field.type=="xref"> 
    42 references(${field.getXRefEntity()}.${field.getXRefField()}), 
     42references(${field.xrefEntityName}.${field.xrefFieldName}), 
    4343<#elseif field.type=="mref"> 
    44 references-many(${field.getXRefEntity()}.${field.getXRefField()}),</#if> 
     44references-many(${field.xrefEntityName}.${field.xrefFieldName}),</#if> 
    4545<#if field.isNillable()><#else>not null, </#if> 
    4646<#if field.isAuto()>auto, <#else></#if> 
  • molgenis/3.3/src/org/molgenis/generators/doc/FileFormatDocGen.java.ftl

    r2561 r2677  
     1<#include "GeneratorHelper.ftl"> 
    12<#function csv items> 
    23        <#local result = ""> 
     
    1617<#macro render_field field> 
    1718        <tr> 
    18                 <td width="150">${field.name?lower_case}<#if field.type == "xref" || field.type =="mref">_${field.getXRefLabelString()?lower_case}</#if></td> 
     19                <td width="150">${field.name?lower_case}<#if field.type == "xref" || field.type =="mref">_${csv(field.xrefLabelNames)}</#if></td> 
    1920                <td width="50">${field.type}</td> 
    2021                <td width="20"><#if !field.isNillable() && !field.isAuto()>Y<#else>&nbsp;</#if></td> 
    21                 <td><#if field.description != "">${field.description}.<br/></#if><#if field.type == "xref" || field.type =="mref"> Requires a matching value in column '${field.getXRefLabelString()?lower_case}' in <a href="#${field.getXRefEntity()}_entity">${field.getXRefEntity()?lower_case}.txt</a> for each reference  
     22                <td><#if field.description != "">${field.description}.<br/></#if><#if field.type == "xref" || field.type =="mref"> Requires a matching value in column(s) '${csv(field.xrefLabelNames)?lower_case}' in <a href="#${name(field.xrefEntity)}_entity">${name(field.xrefEntity)}.txt</a> for each reference  
    2223                <#if field.type="mref">. <br/>More than one reference can be added separated by '|', for example: ref1|ref2|ref3.</#if></#if>.</td> 
    2324        </tr>    
  • molgenis/3.3/src/org/molgenis/generators/doc/ObjectModelDocGen.java.ftl

    r2630 r2677  
    2626<#assign attributes = false> 
    2727<#assign inherited_attributes = false> 
     28<#assign unique_constraints = false> 
    2829<#list entity.fields as field> 
    2930<#if field.type == "xref" || field.type=="mref"> 
     
    3536<#list entity.inheritedFields as field> 
    3637<#if !field.system><#assign inherited_attributes = true></#if> 
     38</#list> 
     39<#list entity.keys as key> 
     40<#assign unique_constraints= true> 
    3741</#list> 
    3842<#if inherited_attributes> 
     
    7579<td ${color}> 
    7680<b>${field.name}</b>: <#if field.type=="xref"> 
    77 ${field.getXRefEntity()} (<#if field.nillable>0<#else>1</#if>..1) 
     81${field.xrefEntity.name} (<#if field.nillable>0<#else>1</#if>..1) 
    7882<#elseif field.type=="mref"> 
    79 ${field.getXRefEntity()} (<#if field.nillable>0<#else>1</#if>..n)</#if> 
     83${field.xrefEntity.name} (<#if field.nillable>0<#else>1</#if>..n)</#if> 
    8084</td> 
    8185</tr> 
     
    8387</#if> 
    8488</#list> 
     89</table> 
     90</#if> 
     91<#if unique_constraints> 
     92<p> 
     93<u>Constraints:</u> 
     94<table>  
     95<#list entity.keys as key> 
     96<tr> 
     97<td ${color}> 
     98<b>unique(${csv(key.fields)})</b>:  
     99</td> 
     100</tr> 
     101<tr><td style="padding-left: 50px;"> 
     102<#if key.description?exists>${key.description}<#elseif key.fields?size &gt; 1>The combination of fields ${csv(key.fields)} is unique within an ${entity.name}<#else>Field ${csv(key.fields)} is unique within an ${entity.name}</#if>. 
     103</td></tr> 
     104</#list> 
     105</p> 
    85106</table> 
    86107</#if> 
  • molgenis/3.3/src/org/molgenis/generators/doc/TableDocGen.java.ftl

    r1851 r2677  
    102102                ENUM options: ${csv( field.getEnumOptions() )} 
    103103<#elseif field.type=="xref"> 
    104                 References(${field.getXRefEntity()}) 
     104                References(${field.xrefEntityName}) 
    105105<#elseif field.type=="mref"> 
    106                 References(${field.getXRefEntity()}) via linktable.      
     106                References(${field.xrefEntityName}) via linktable.       
    107107<#else> 
    108108                &nbsp; 
  • molgenis/3.3/src/org/molgenis/generators/doc/TextUmlGen.java.ftl

    r2561 r2677  
    5454 
    5555association 
    56   navigable role ${field.name}: ${field.XRefField}[*]; 
     56  navigable role ${field.name}: ${field.xrefField}[*]; 
    5757  role : ${entity.name}[1];  
    5858end; 
     
    6060 
    6161association 
    62   navigable role ${field.name}: ${field.XRefField}[*]; 
     62  navigable role ${field.name}: ${field.xrefField}[*]; 
    6363  role : ${entity.name}[*];  
    6464end; 
  • molgenis/3.3/src/org/molgenis/generators/fieldtypes/MrefField.java

    r2315 r2677  
    1010        public String getJavaPropertyType() throws MolgenisModelException 
    1111        { 
    12                 Entity e_ref = this.getEntityByName(f.getXRefEntity()); 
    13                 Field f_ref = e_ref.getField(f.getXRefField()); 
     12                Entity e_ref = f.getXrefEntity(); 
     13                Field f_ref = f.getXrefField(); 
    1414                return "java.util.List<"+getFieldType(f_ref).getJavaPropertyType()+">"; 
    1515        } 
     
    1818        public String getJavaPropertyDefault() throws MolgenisModelException 
    1919        { 
    20                 Entity e_ref = this.getEntityByName(f.getXRefEntity()); 
    21                 Field f_ref = e_ref.getField(f.getXRefField()); 
     20                Entity e_ref = f.getXrefEntity(); 
     21                Field f_ref = f.getXrefField(); 
    2222                //if(f.getDefaultValue() == null || f.getDefaultValue() == "") "new java.util.ArrayList<"+getFieldType(f_ref).getJavaPropertyType(f_ref)+">()"; 
    2323                //FIXME can there be defaults here? 
     
    2828        public String getJavaSetterType() throws MolgenisModelException 
    2929        { 
    30                 Entity e_ref = this.getEntityByName(f.getXRefEntity()); 
    31                 Field f_ref = e_ref.getField(f.getXRefField()); 
     30                Entity e_ref = f.getXrefEntity(); 
     31                Field f_ref = f.getXrefField(); 
    3232                return "new java.util.ArrayList<"+getFieldType(f_ref).getJavaSetterType()+">()"; 
    3333        } 
     
    3737        { 
    3838                //FIXME this function should be never called??? 
    39                 return getFieldType(getEntityByName(f.getXRefEntity()).getField(f.getXRefField())).getMysqlType(); 
     39                return getFieldType(f.getXrefField()).getMysqlType(); 
    4040        } 
    4141 
     
    4343        public String getHsqlType() throws MolgenisModelException 
    4444        { 
    45                 return getFieldType(getEntityByName(f.getXRefEntity()).getField(f.getXRefField())).getHsqlType(); 
     45                return getFieldType(f.getXrefField()).getHsqlType(); 
    4646        } 
    4747 
  • molgenis/3.3/src/org/molgenis/generators/fieldtypes/XrefField.java

    r2315 r2677  
    1111        public String getJavaPropertyType() throws MolgenisModelException 
    1212        { 
    13                 Entity e_ref = this.getEntityByName(f.getXRefEntity()); 
    14                 Field f_ref = e_ref.getField(f.getXRefField()); 
     13                Entity e_ref = f.getXrefEntity(); 
     14                Field f_ref = f.getXrefField(); 
    1515                return getFieldType(f_ref).getJavaPropertyType(); 
    1616        } 
     
    2727        { 
    2828                 
    29                 return getFieldType(getEntityByName(f.getXRefEntity()).getField(f.getXRefField())).getJavaSetterType(); 
     29                return getFieldType(f.getXrefField()).getJavaSetterType(); 
    3030        } 
    3131         
     
    3434        { 
    3535                 
    36                 return getFieldType(getEntityByName(f.getXRefEntity()).getField(f.getXRefField())).getMysqlType(); 
     36                return getFieldType(f.getXrefField()).getMysqlType(); 
    3737        } 
    3838 
     
    4040        public String getHsqlType() throws MolgenisModelException 
    4141        { 
    42                 return getFieldType(getEntityByName(f.getXRefEntity()).getField(f.getXRefField())).getHsqlType(); 
     42                return getFieldType(f.getXrefField()).getHsqlType(); 
    4343        } 
    4444} 
  • molgenis/3.3/src/org/molgenis/generators/server/SoapApiGen.java.ftl

    r2324 r2677  
    6363        @WebResult(name = "${name(entity)}List") 
    6464        public List<${JavaName(entity)}> find${JavaName(entity)}(<#list allFields(entity) as f><#assign type_label = f.getType().toString()>      
    65                 @WebParam(name = "${name(f)}") ${type(f)} ${name(f)}<#if (type_label == "user" || type_label == "xref" || type_label == "mref" || type_label == "enum") && f.getXRefLabelString() != "" >, 
    66                 @WebParam(name = "${name(f)}_${f.getXRefLabelString()}") ${type(f)} ${name(f)}_${f.getXRefLabelString()}</#if><#if f_has_next>,</#if></#list>) 
     65                @WebParam(name = "${name(f)}") ${type(f)} ${name(f)}<#if (type_label == "xref" || type_label == "mref") && f.xrefLabelNames[0] != f.xrefFieldName >, 
     66                <#list f.xrefLabelNames as label>@WebParam(name = "${name(f)}_${label}") ${type(f)} ${name(f)}_${label}</#list></#if><#if f_has_next>,</#if></#list>) 
    6767        { 
    6868                try 
     
    8484        @WebResult(name = "${name(entity)}Csv") 
    8585        public String find${JavaName(entity)}Csv(<#list allFields(entity) as f><#assign type_label = f.getType().toString()>      
    86                 @WebParam(name = "${name(f)}") ${type(f)} ${name(f)}<#if (type_label == "user" || type_label == "xref" || type_label == "mref" || type_label == "enum") && f.getXRefLabelString() != "" >, 
    87                 @WebParam(name = "${name(f)}_${f.getXRefLabelString()}") ${type(f)} ${name(f)}_${f.getXRefLabelString()}</#if><#if f_has_next>,</#if></#list>) 
     86                @WebParam(name = "${name(f)}") ${type(f)} ${name(f)}<#if (type_label == "user" || type_label == "xref" || type_label == "mref" ) && f.xrefLabelNames[0] != f.xrefFieldName >, 
     87                <#list f.xrefLabelNames as label>@WebParam(name = "${name(f)}_${label}") ${type(f)} ${name(f)}_${label}</#list></#if><#if f_has_next>,</#if></#list>) 
    8888        { 
    8989                try 
  • molgenis/3.3/src/org/molgenis/generators/sql/MySqlAlterSubclassPerTableGen.mysql.ftl

    r2133 r2677  
    111111<#list entities as entity><#if !entity.isAbstract()> 
    112112<#list dbFields(entity) as f><#if f.type == "xref"> 
    113 ALTER TABLE ${SqlName(entity)} ADD FOREIGN KEY (${SqlName(f)}) REFERENCES ${SqlName(model.getEntity(f.XRefEntity))} (${SqlName(f.XRefField)}) ON DELETE RESTRICT; 
     113ALTER TABLE ${SqlName(entity)} ADD FOREIGN KEY (${SqlName(f)}) REFERENCES ${SqlName(f.xrefEntity)} (${SqlName(f.xrefField)}) ON DELETE RESTRICT; 
    114114</#if></#list> 
    115115</#if></#list> 
  • molgenis/3.3/src/org/molgenis/generators/sql/MySqlCreateSubclassPerTableGen.mysql.ftl

    r1931 r2677  
    7373<#list entities as entity><#if !entity.isAbstract()> 
    7474<#list dbFields(entity) as f><#if f.type == "xref"> 
    75 ALTER TABLE ${SqlName(entity)} ADD FOREIGN KEY (${SqlName(f)}) REFERENCES ${SqlName(model.getEntity(f.XRefEntity))} (${SqlName(f.XRefField)}) ON DELETE RESTRICT; 
     75ALTER TABLE ${SqlName(entity)} ADD FOREIGN KEY (${SqlName(f)}) REFERENCES ${SqlName(f.xrefEntity)} (${SqlName(f.xrefField)}) ON DELETE RESTRICT; 
    7676</#if></#list> 
    7777</#if></#list> 
  • molgenis/3.3/src/org/molgenis/model/MolgenisModel.java

    r2381 r2677  
    3232 
    3333                        model = MolgenisModelParser.parseDbSchema(options.model_database); 
     34                         
     35                        logger.debug("read: " + model); 
    3436 
    3537                        //if (!options.exclude_system) Model.createSystemTables(model); 
     
    3941                        model = MolgenisModelParser.parseUiSchema(options.path + options.model_userinterface, model); 
    4042                        //if (options.force_molgenis_package == true) model.setName("molgenis"); 
     43                         
     44                        logger.debug("validated: " + model); 
    4145                } 
    4246                catch (MolgenisModelException e) 
     
    133137                        if (field.getType().toString() == "xref") 
    134138                        { 
    135                                 dependencies.add(field.getXRefEntity()); // xref fields 
     139                                dependencies.add(field.getXrefEntityName()); // xref fields 
    136140                                // including all children, it can relate to that 
    137141                                // dependencies.addAll(model.getEntity(field.getXRefEntity()) 
     
    140144                                // model.getEntity(field.getXRefEntity()).getParents()); 
    141145 
    142                                 Entity xrefEntity = model.getEntity(field.getXRefEntity()); 
     146                                Entity xrefEntity = field.getXrefEntity(); 
    143147 
    144148                                // also all subclasses have this xref!!!! 
  • molgenis/3.3/src/org/molgenis/model/MolgenisModelParser.java

    r2594 r2677  
    122122                if (xref_label != null && !xref_label.equals("")) 
    123123                { 
    124                         entity.setXrefLabel(element.getAttribute("xref_label")); 
     124                        List<String> xref_labels = new ArrayList<String>(); 
     125                        xref_labels.addAll(Arrays.asList(xref_label.split(","))); 
     126                        entity.setXrefLabels(xref_labels); 
    125127                } 
    126128 
     
    196198                                keys.add(f); 
    197199                        } 
     200                         
     201                        //description 
     202                        String key_description = null; 
     203                        if (elem.hasAttribute("description")) key_description = elem.getAttribute("description"); 
    198204 
    199205                        // check if keys 
     
    203209                        try 
    204210                        { 
    205                                 entity.addKey(keys, elem.getAttribute("subclass").equals("true"), null); 
     211                                entity.addKey(keys, elem.getAttribute("subclass").equals("true"), key_description); 
    206212                                // might be duplicate key 
    207213                        } 
     
    464470                                                        + entity.getName() + "'"); 
    465471 
    466                         field.setXRefVariables(xref_entity, xref_field, xref_label); 
     472                        List<String> xref_labels = Arrays.asList(xref_label.split(",")); 
     473                         
     474                        field.setXRefVariables(xref_entity, xref_field, xref_labels); 
    467475 
    468476                        // optional custom naming instead of default 
     
    744752                        } 
    745753                } 
    746                 logger.debug("read: " + model); 
    747754 
    748755                return model; 
     
    860867 
    861868                        // ACTIONS 
    862                         form.setActions(new ArrayList<String>()); 
    863                         String actions = element.getAttribute("actions"); 
    864                         if (actions != null && actions != "") 
    865                         { 
    866                                 String[] actionArr = actions.split(","); 
    867                                 for (String action : actionArr) 
    868                                 { 
    869                                         form.getActions().add(action.trim()); 
     869                        form.setCommands(new ArrayList<String>()); 
     870                        String commands = element.getAttribute("commands"); 
     871                        if (commands != null && commands != "") 
     872                        { 
     873                                String[] commandArray = commands.split(","); 
     874                                for (String command : commandArray) 
     875                                { 
     876                                        form.getCommands().add(command.trim()); 
    870877                                } 
    871878                        } 
     
    10861093                                        try 
    10871094                                        { 
    1088                                                 field.setXRefVariables(field.getXRefEntity(), "id", "id"); 
     1095                                                field.setXrefLabelNames(Arrays.asList(new String[]{"id"})); 
    10891096                                        } 
    10901097                                        catch (Exception e) 
  • molgenis/3.3/src/org/molgenis/model/MolgenisModelValidator.java

    r2611 r2677  
    88import org.apache.log4j.Logger; 
    99import org.molgenis.MolgenisOptions; 
     10import org.molgenis.framework.db.DatabaseException; 
    1011import org.molgenis.model.elements.Entity; 
    1112import org.molgenis.model.elements.Field; 
     
    5859                                if (f.getType().equals(Field.Type.XREF_SINGLE) || f.getType().equals(Field.Type.XREF_MULTIPLE)) 
    5960                                { 
    60                                         if (f.getXRefLabelString() == null || f.getXRefLabelString().equals(f.getXRefField())) 
    61                                         { 
    62                                                 Entity xref_entity = model.getEntity(f.getXRefEntity()); 
    63                                                 f.setXrefLabel(xref_entity.getXrefLabel()); 
     61                                        if (!f.getXrefLabelsTemp().get(0).equals(f.getXrefFieldName())) 
     62                                        { 
     63                                                // Entity xref_entity = 
     64                                                // model.getEntity(f.getXRefEntity()); 
     65                                                // f.setXrefLabels(xref_entity.getXrefLabels()); 
    6466                                        } 
    6567                                } 
     
    133135 
    134136                                        // retrieve the references to the entity+field 
    135                                         Entity xref_entity_to = model.getEntity(xref_field_from.getXRefEntity()); 
    136                                         Field xref_field_to = xref_entity_to.getField(xref_field_from.getXRefField()); 
     137                                        Entity xref_entity_to = xref_field_from.getXrefEntity(); 
     138                                        Field xref_field_to = xref_field_from.getXrefField(); 
    137139 
    138140                                        // TODO: check whether this link is already present 
     
    164166                                                                false, false, false, null); 
    165167                                                field.setXRefVariables(xref_entity_to.getName(), xref_field_to.getName(), xref_field_from 
    166                                                                 .getXRefLabelString()); 
     168                                                                .getXrefLabelsTemp()); 
    167169                                                linktable.addField(field); 
    168170                                                unique.add(field); 
     
    174176                                                                        false, false, false, null); 
    175177 
    176                                                         field.setXRefVariables(xref_entity_from.getName(), key.getName(), ""); 
     178                                                        // null xreflabel 
     179                                                        field.setXRefVariables(xref_entity_from.getName(), key.getName(), null); 
    177180 
    178181                                                        linktable.addField(field); 
     
    233236                                        try 
    234237                                        { 
    235                                                 referenced = model.getEntity(field.getXRefEntity()); 
     238                                                referenced = field.getXrefEntity(); 
    236239                                        } 
    237240                                        catch (Exception e) 
     
    295298                                if (field.getType() == Field.Type.XREF_SINGLE || field.getType() == Field.Type.XREF_MULTIPLE) 
    296299                                { 
    297                                         String xref_entity_name = field.getXRefEntity(); 
    298                                         String xref_field_name = field.getXRefField(); 
    299                                         String xref_label_name = field.getXRefLabelString(); 
     300                                        String xref_entity_name = field.getXrefEntityName(); 
     301                                        String xref_field_name = field.getXrefFieldName(); 
     302                                        List<String> xref_label_names = field.getXrefLabelsTemp(); 
    300303 
    301304                                        Entity xref_entity = model.getEntity(xref_entity_name); 
     
    304307                                                        + "' does not exist for field " + entityname + "." + fieldname); 
    305308 
    306                                         if (!xref_entity.getName().equals(field.getXRefEntity())) throw new MolgenisModelException( 
     309                                        if (!xref_entity.getName().equals(field.getXrefEntityName())) throw new MolgenisModelException( 
    307310                                                        "xref entity '" + xref_entity_name + "' does not exist for field " + entityname + "." 
    308311                                                                        + fieldname + " (note: entity names are case-sensitive)"); 
     
    316319                                                        + "' does not exist for field " + entityname + "." + fieldname); 
    317320 
    318                                         Field xref_label = xref_entity.getAllField(xref_label_name); 
    319                                         if (xref_label == null) throw new MolgenisModelException("xref label '" + xref_label_name 
    320                                                         + "' does not exist for field " + entityname + "." + fieldname); 
    321  
    322                                         if (xref_label.isNillable()) throw new MolgenisModelException("'" + xref_label_name 
    323                                                         + "' cannot be used as xref label for field '" + entityname + "." + fieldname 
    324                                                         + "' because it can be null (nullable='true')"); 
     321                                        for (String xref_label_name : xref_label_names) 
     322                                        { 
     323                                                Field xref_label = null; 
     324                                                // test if label is defined as {entity}.{field} 
     325                                                if (xref_label_name.contains(".")) 
     326                                                { 
     327                                                        try 
     328                                                        { 
     329                                                                xref_label = model.findField(xref_label_name); 
     330                                                        } 
     331                                                        catch (DatabaseException e) 
     332                                                        { 
     333                                                        } 
     334                                                        ; 
     335                                                } 
     336                                                // else assume {entity} == xref_entity 
     337                                                else 
     338                                                { 
     339                                                        xref_label = xref_entity.getAllField(xref_label_name); 
     340                                                } 
     341                                                if (xref_label == null) throw new MolgenisModelException("xref label '" + xref_label_name 
     342                                                                + "' does not exist for field " + entityname + "." + fieldname); 
     343 
     344                                                if (xref_label.isNillable()) throw new MolgenisModelException("'" + xref_label_names 
     345                                                                + "' cannot be used as xref label for field '" + entityname + "." + fieldname 
     346                                                                + "' because it can be null (nullable='true')"); 
     347 
     348                                                // TODO check if the labels are unique 
     349                                        } 
    325350 
    326351                                        if (xref_field.getType().equals(Field.Type.TEXT)) throw new MolgenisModelException("xref field '" 
     
    385410 
    386411                        if (autocount > 1) throw new MolgenisModelException( 
    387                                         "there can be only one auto column and it must be the primary key for entity '" + entityname + "'"); 
     412                                        "there should be only one auto column and it must be the primary key for entity '" + entityname 
     413                                                        + "'"); 
     414 
     415                        if (!entity.isAbstract() && autocount < 1) 
     416                        { 
     417                                throw new MolgenisModelException( 
     418                                                "there should be one auto column for each root entity and it must be the primary key for entity '" 
     419                                                                + entityname + "'"); 
     420                        } 
    388421                } 
    389422 
     
    430463 
    431464                                                        field.setSystem(true); 
    432                                                         field.setXRefVariables(iface.getName(), key.getName(), key.getName()); 
     465                                                        field.setXRefVariables(iface.getName(), key.getName(), null); 
    433466                                                        field.setHidden(true); 
    434467 
     
    436469                                                                        + " to " + entity.getName()); 
    437470                                                        entity.addField(field); 
    438                                                         entity.addKey(field, iface.getKeys().get(0).getDescription()); 
     471                                                        // entity.addKey(field, 
     472                                                        // iface.getKeys().get(0).getDescription()); 
    439473                                                } 
    440474                                        } 
     
    482516 
    483517                                                        field.setSystem(true); 
    484                                                         field.setXRefVariables(parent.getName(), key.getName(), ""); 
     518                                                        field.setXRefVariables(parent.getName(), key.getName(), null); 
    485519                                                        field.setHidden(true); 
    486520 
     
    591625                if (options.db_driver.contains("hsql")) keywords.addAll(Arrays.asList(HSQL_KEYWORDS)); 
    592626 
    593                 if (model.getName().contains(" "))  
     627                if (model.getName().contains(" ")) 
    594628                { 
    595629                        throw new MolgenisModelException("model name '" + model.getName() 
    596630                                        + "' illegal: it cannot contain spaces. Use 'label' if you want to show a name with spaces."); 
    597631                } 
    598                  
    599 //              if(!containsOnlyLetters(model.getName())) 
    600 //              { 
    601 //                      throw new MolgenisModelException("model name '" + model.getName() 
    602 //                                      + "' illegal: it can only contain letters, no numbers or dots"); 
    603 //              } 
     632 
     633                // if(!containsOnlyLetters(model.getName())) 
     634                // { 
     635                // throw new MolgenisModelException("model name '" + model.getName() 
     636                // + "' illegal: it can only contain letters, no numbers or dots"); 
     637                // } 
    604638 
    605639                for (Module m : model.getModules()) 
     
    610644                                                + "' illegal: it cannot contain spaces. Use 'label' if you want to show a name with spaces."); 
    611645                        } 
    612 //                      if(!containsOnlyLetters(m.getName())) 
    613 //                      { 
    614 //                              throw new MolgenisModelException("module name '" + m.getName() 
    615 //                                              + "' illegal: it can only contain letters, no numbers or dots"); 
    616 //                      } 
    617                          
     646                        // if(!containsOnlyLetters(m.getName())) 
     647                        // { 
     648                        // throw new MolgenisModelException("module name '" + m.getName() 
     649                        // + "' illegal: it can only contain letters, no numbers or dots"); 
     650                        // } 
     651 
    618652                } 
    619653 
     
    653687                                if (f.getType().equals(Field.Type.XREF_SINGLE) || f.getType().equals(Field.Type.XREF_MULTIPLE)) 
    654688                                { 
    655                                         String xref_entity = f.getXRefEntity(); 
     689                                        String xref_entity = f.getXrefEntityName(); 
    656690                                        if (xref_entity != null 
    657691                                                        && (keywords.contains(xref_entity.toUpperCase()) || keywords.contains(xref_entity 
     
    708742                        } 
    709743                } 
    710                  
    711                 for(UISchema screen: model.getUserinterface().getAllChildren()) 
    712                 { 
    713                         if(screen.getName().contains(" ")) 
    714                         { 
    715                                 throw new MolgenisModelException("ui element '"+screen.getName()+"illegal: it cannot contain spaces. If you want to have a name with spaces use the 'label' attribute"); 
     744 
     745                for (UISchema screen : model.getUserinterface().getAllChildren()) 
     746                { 
     747                        if (screen.getName().contains(" ")) 
     748                        { 
     749                                throw new MolgenisModelException( 
     750                                                "ui element '" 
     751                                                                + screen.getName() 
     752                                                                + "illegal: it cannot contain spaces. If you want to have a name with spaces use the 'label' attribute"); 
    716753                        } 
    717754                } 
     
    733770                                        { 
    734771                                                // correct for uppercase/lowercase typo's 
    735                                                 Entity xrefEntity = model.getEntity(f.getXRefEntity()); 
     772                                                Entity xrefEntity = f.getXrefEntity(); 
    736773                                                f.setXRefEntity(xrefEntity.getName()); 
    737774 
    738                                                 String xrefField = xrefEntity.getAllField(f.getXRefField()).getName(); 
    739                                                 String xrefLabel = xrefEntity.getAllField(f.getXRefLabelString()).getName(); 
    740                                                 if (xrefLabel == null) xrefLabel = xrefField; 
    741                                                 f.setXRefVariables(xrefEntity.getName(), xrefField, xrefLabel); 
     775                                                String xrefField = f.getXrefField().getName(); 
     776 
     777                                                List<String> xrefLabels = f.getXrefLabelsTemp(); 
     778                                                List<String> correctedXrefLabels = new ArrayList<String>(); 
     779                                                for (String xrefLabel : xrefLabels) 
     780                                                { 
     781                                                        correctedXrefLabels.add(xrefEntity.getAllField(xrefLabel).getName()); 
     782                                                } 
     783                                                f.setXRefVariables(xrefEntity.getName(), xrefField, correctedXrefLabels); 
    742784                                        } 
    743785                                        catch (Exception exception) 
     
    869911                        return " ERROR[STRING EMPTY] "; 
    870912        } 
    871          
     913 
    872914        private static boolean containsOnlyLetters(String name) 
    873915        { 
  • molgenis/3.3/src/org/molgenis/model/elements/DBSchema.java

    r2317 r2677  
    3838        private List<Module> modules = new ArrayList<Module>(); 
    3939         
     40        private Model model; 
     41         
     42        public Model getModel() 
     43        { 
     44                return model; 
     45        } 
     46 
     47        public void setModel(Model model) 
     48        { 
     49                this.model = model; 
     50        } 
     51 
    4052        // constructor(s) 
    4153        /** 
     
    4759         *            tree. 
    4860         */ 
    49         public DBSchema(String name, DBSchema parent) 
     61        public DBSchema(String name, DBSchema parent, Model model) 
    5062        { 
    5163                super(name, parent); 
     64                this.model = model; 
    5265        } 
    5366 
  • molgenis/3.3/src/org/molgenis/model/elements/Entity.java

    r2630 r2677  
    6565        /** Trigger type */ 
    6666        private String decorator; 
    67          
    68         /** Default label to be used for Xrefs */ 
    69         private String xrefLabel; 
     67 
     68        /** Default label(s) to be used for Xrefs */ 
     69        private List<String> xrefLabels; 
    7070 
    7171        // constructor(s) 
     
    9999        public Entity(String name, String label, DBSchema parent) 
    100100        { 
    101                 super(name, parent); 
     101                super(name, parent, parent.getModel()); 
    102102 
    103103                this.label = label; 
     
    129129        public Entity(String name, String label, DBSchema parent, boolean system) 
    130130        { 
    131                 super(name, parent); 
     131                super(name, parent, parent.getModel()); 
    132132 
    133133                // this.name = name; 
     
    497497        public Vector<Field> getImplementedFields() throws MolgenisModelException 
    498498        { 
    499                 Vector<Field> all_fields = new Vector<Field>(); 
     499                Map<String, Field> all_fields = new LinkedHashMap<String, Field>(); 
    500500 
    501501                // first fields of the interfaces 
     
    506506                        { 
    507507                                ifaceField.setEntity(this); 
    508                                 all_fields.add(ifaceField); 
     508                                all_fields.put(ifaceField.getName().toLowerCase(), ifaceField); 
    509509                        } 
    510510                } 
     
    513513                for (Field f : getFields()) 
    514514                { 
    515                         if (!all_fields.contains(f)) 
    516                         { 
    517                                 all_fields.add(f); 
    518                         } 
    519                         else 
    520                         // replace with local variant 
    521                         { 
    522                                 all_fields.set(all_fields.indexOf(f), f); 
    523                         } 
    524                 } 
    525  
    526                 return all_fields; 
    527         } 
    528          
     515                        all_fields.put(f.getName().toLowerCase(), f); 
     516                } 
     517 
     518                return new Vector(all_fields.values()); 
     519        } 
     520 
    529521        public boolean hasSuperclassField(String fieldname) throws MolgenisModelException 
    530522        { 
    531523                Vector<Field> fields = getAncestor().getAllFields(); 
    532                 for(Field f : fields) { 
    533                         if(f.getName().equals(fieldname)) { 
     524                for (Field f : fields) 
     525                { 
     526                        if (f.getName().equals(fieldname)) 
     527                        { 
    534528                                return true; 
    535529                        } 
     
    540534        public Vector<Field> getInheritedFields() throws MolgenisModelException 
    541535        { 
    542                 Map <String,Field> all_fields = new LinkedHashMap<String,Field>(); 
     536                Map<String, Field> all_fields = new LinkedHashMap<String, Field>(); 
    543537 
    544538                // second fields of the interfaces 
     
    548542                        for (Field ifaceField : ifaceFields) 
    549543                        { 
    550                                 //ifaceField.setEntity(this); 
    551                                         all_fields.put(ifaceField.getName(), ifaceField); 
     544                                // ifaceField.setEntity(this); 
     545                                all_fields.put(ifaceField.getName().toLowerCase(), ifaceField); 
    552546                        } 
    553547                } 
     
    558552                        for (Field f : getAncestor().getAllFields()) 
    559553                        { 
    560                                 all_fields.put(f.getName(), f); 
     554                                all_fields.put(f.getName().toLowerCase(), f); 
    561555                        } 
    562556                } 
     
    564558                // skip self... 
    565559                return new Vector(all_fields.values()); 
    566                  
    567         } 
    568          
     560 
     561        } 
     562 
    569563        /** 
    570564         * @throws MolgenisModelException 
     
    572566        public Vector<Field> getAllFields() throws MolgenisModelException 
    573567        { 
    574                 Map <String,Field> all_fields = new LinkedHashMap<String,Field>(); 
     568                Map<String, Field> all_fields = new LinkedHashMap<String, Field>(); 
    575569 
    576570                // second fields of the interfaces 
     
    581575                        { 
    582576                                ifaceField.setEntity(this); 
    583                                         all_fields.put(ifaceField.getName(), ifaceField); 
     577                                all_fields.put(ifaceField.getName().toLowerCase(), ifaceField); 
    584578                        } 
    585579                } 
     
    590584                        for (Field f : getAncestor().getAllFields()) 
    591585                        { 
    592                                 all_fields.put(f.getName(), f); 
     586                                all_fields.put(f.getName().toLowerCase(), f); 
    593587                        } 
    594588                } 
     
    597591                for (Field f : getFields()) 
    598592                { 
    599                         all_fields.put(f.getName(), f); 
     593                        all_fields.put(f.getName().toLowerCase(), f); 
    600594                } 
    601595                return new Vector(all_fields.values()); 
     
    862856                for (Field field : getAllFields()) 
    863857                { 
    864                         //logger.debug("testing: " + this.getName()+ "."+field.getName()); 
     858                        // logger.debug("testing: " + this.getName()+ "."+field.getName()); 
    865859 
    866860                        if (name.equalsIgnoreCase(field.getName())) 
     
    10401034                { 
    10411035                        Entity parent_entity = (Entity) getParent().get(this.parents.lastElement()); 
    1042                         if(parent_entity == null) throw new MolgenisModelException("Superclass "+ this.parents.lastElement()+" unknown for entity "+this.getName()); 
     1036                        if (parent_entity == null) throw new MolgenisModelException("Superclass " + this.parents.lastElement() 
     1037                                        + " unknown for entity " + this.getName()); 
    10431038                        result.add(parent_entity.getKeys().firstElement()); 
    10441039                } 
    10451040 
    1046                 // get key from implements 
     1041                // get other keys from implements 
    10471042                if (hasImplements()) 
    10481043                { 
     
    12041199                this.addKey(fields, subclass, description); 
    12051200        } 
    1206          
     1201 
    12071202        public int getNumberOfReferencesTo(Entity e) throws MolgenisModelException 
    12081203        { 
    12091204                int count = 0; 
    1210                 for (Field field : this.getXRefFields()) { 
    1211                         String xrefEntity = field.getXRefEntity(); 
    1212                         if(xrefEntity != null && xrefEntity.equals(e.getName())) 
    1213                                 count++; 
     1205                for (Field field : this.getXRefFields()) 
     1206                { 
     1207                        String xrefEntity = field.getXrefEntityName(); 
     1208                        if (xrefEntity != null && xrefEntity.equals(e.getName())) count++; 
    12141209                } 
    12151210                return count; 
    12161211        } 
    12171212 
    1218         public String getXrefLabel() 
    1219         { 
    1220                 return xrefLabel; 
    1221         } 
    1222  
    1223         public void setXrefLabel(String xrefLabel) 
    1224         { 
    1225                 this.xrefLabel = xrefLabel; 
     1213        public List<String> getXrefLabels() 
     1214        { 
     1215                return xrefLabels; 
     1216        } 
     1217 
     1218        public void setXrefLabels(List<String> xrefLabels) 
     1219        { 
     1220                this.xrefLabels = xrefLabels; 
     1221        } 
     1222 
     1223        public Model getModel() 
     1224        { 
     1225                return this.getRoot().getModel(); 
    12261226        } 
    12271227} 
  • molgenis/3.3/src/org/molgenis/model/elements/Field.java

    r2317 r2677  
    1414import java.io.Serializable; 
    1515import java.sql.Types; 
     16import java.util.ArrayList; 
     17import java.util.Arrays; 
     18import java.util.List; 
    1619import java.util.Vector; 
    1720 
    18 import org.apache.log4j.Logger; 
     21import org.molgenis.framework.db.DatabaseException; 
     22import org.molgenis.generators.GeneratorHelper; 
    1923import org.molgenis.model.MolgenisModelException; 
    2024 
     
    2529 *  
    2630 * @author RA Scheltema 
     31 * @author MA Swertz 
    2732 * @version 1.0.0 
    2833 */ 
     
    3439        public static enum Type 
    3540        { 
    36                 /**Ontology type*/ 
    37                 ONTOLOGY("ontology","%s"), 
     41                /** Ontology type */ 
     42                ONTOLOGY("ontology", "%s"), 
    3843                /** The type is unknown, this case should raise an exception. */ 
    3944                UNKNOWN("unknown", ""), 
     
    6671                /** The type of the field is file. */ 
    6772                FILE("file", "%s"), 
    68                 /** special type of file, namely images*/ 
    69                 IMAGE("image","%s"), 
     73                /** special type of file, namely images */ 
     74                IMAGE("image", "%s"), 
    7075                /** */ 
    7176                ENUM("enum", "%s"), 
     
    239244        public Field(Entity parent, String name, Type type) 
    240245        { 
    241                 this(parent, type, name, name, false,false,false,null); 
     246                this(parent, type, name, name, false, false, false, null); 
    242247        } 
    243248 
     
    263268         *            Indicates whether this field is readonly. 
    264269         */ 
    265         public Field(Entity parent, Type type, String name, String label, boolean auto, boolean nillable, boolean readonly, String default_value) 
     270        public Field(Entity parent, Type type, String name, String label, boolean auto, boolean nillable, boolean readonly, 
     271                        String default_value) 
    266272        { 
    267273                this.entity = parent; 
     
    285291                this.xref_table = ""; 
    286292                this.xref_field = ""; 
    287                 this.xref_label = ""; 
     293                this.xref_labels = new ArrayList<String>(); 
    288294 
    289295                // 
     
    320326                this.xref_table = field.xref_table; 
    321327                this.xref_field = field.xref_field; 
    322                 this.xref_label = field.xref_label; 
     328                this.xref_labels = field.xref_labels; 
    323329                this.mref_name = field.mref_name; 
    324330 
     
    369375                                DBSchema root = entity.getRoot(); 
    370376 
    371                                 Entity xref_entity = (Entity) root.get(getXRefEntity()); 
    372                                 Field xref_field = xref_entity.getField(getXRefField()); 
    373  
    374                                 return xref_field.getFormatString(); 
     377                                return this.getXrefField().getFormatString(); 
    375378                        } 
    376379                        catch (Exception e) 
     
    443446                return this.nillable; 
    444447        } 
    445          
     448 
    446449        public void setReadonly(boolean readonly) 
    447450        { 
     
    662665         *             Type.XREF_MULTIPLE 
    663666         */ 
    664         public void setXRefVariables(String entity, String field, String label) // throws 
     667        public void setXRefVariables(String entity, String field, List<String> labels) // throws 
    665668        // Exception 
    666669        { 
     
    673676                this.xref_table = entity; 
    674677                this.xref_field = field; 
    675                 this.xref_label = label; 
     678                this.xref_labels = labels; 
    676679        } 
    677680 
     
    686689         *             Type.XREF_MULTIPLE 
    687690         */ 
    688         public String getXRefEntity() throws MolgenisModelException 
     691        public Entity getXrefEntity() throws MolgenisModelException 
     692        { 
     693                return this.getEntity().getModel().getEntity(this.getXrefEntityName()); 
     694        } 
     695 
     696        public String getXrefEntityName() throws MolgenisModelException 
    689697        { 
    690698                if (this.type != Type.XREF_SINGLE && this.type != Type.XREF_MULTIPLE) 
    691                  { 
    692                  throw new MolgenisModelException("Field '"+this.getEntity().getName()+"."+this.getName()+"' is not a XREF, so xref-table cannot be retrieved."); 
     699                { 
     700                        throw new MolgenisModelException("Field '" + this.getEntity().getName() + "." + this.getName() 
     701                                        + "' is not a XREF, so xref-table cannot be retrieved."); 
    693702                } 
    694703 
    695704                return this.xref_table; 
     705 
    696706        } 
    697707 
     
    702712         *  
    703713         * @return The name of the field of the entity this field is referencing. 
     714         * @throws Exception  
    704715         * @throws Exception 
    705716         *             When this field is not of type Type.XREF_SINGLE or 
    706717         *             Type.XREF_MULTIPLE 
    707718         */ 
    708         public String getXRefField() // throws Exception 
    709         { 
    710                 // if (this.type != Type.XREF_SINGLE && this.type != Type.XREF_MULTIPLE) 
    711                 // { 
    712                 // throw new Exception("Field is not a XREF, so xref-field cannot be 
    713                 // retrieved."); 
    714                 // } 
    715  
     719        public Field getXrefField() throws MolgenisModelException // throws Exception 
     720        { 
     721                if (this.type != Type.XREF_SINGLE && this.type != Type.XREF_MULTIPLE) 
     722                { 
     723                        throw new MolgenisModelException("Field is not a XREF, so xref-field cannot be retrieved."); 
     724                } 
     725 
     726                return this.getXrefEntity().getField(this.getXrefFieldName()); 
     727        } 
     728 
     729        public String getXrefFieldName() 
     730        { 
    716731                return this.xref_field; 
    717732        } 
     
    722737         *  
    723738         * @return The label of this reference. 
     739         * @throws MolgenisModelException 
    724740         * @throws Exception 
    725741         *             When this field is not of type Type.XREF_SINGLE or 
    726742         *             Type.XREF_MULTIPLE 
    727743         */ 
    728         public XRefLabel getXRefLabel() throws Exception 
    729         { 
    730                 if (this.type != Type.XREF_SINGLE && this.type != Type.XREF_MULTIPLE) throw new Exception("Field is not a XREF, so xref-label cannot be retrieved."); 
    731  
    732                 XRefLabel label = new XRefLabel(); 
    733                 if (xref_label.contains("{")) 
    734                 { 
    735                         int pos = 0; 
    736                         int old = 0; 
    737  
    738                         while (pos != -1) 
    739                         { 
    740                                 // find the next occurence of a field-name 
    741                                 pos = xref_label.indexOf('{', old); 
    742                                 if (pos != -1) 
    743                                 { 
    744                                         // expand the format-string 
    745                                         label.format += xref_label.substring(old, pos) + "%s"; 
    746  
    747                                         // find the end-position of the field-name 
    748                                         old = xref_label.indexOf('}', pos); 
    749                                         if (old == -1) throw new Exception("Unterminated field-name in xref-label:\n" + xref_label); 
    750  
    751                                         // add the field-name to the vector 
    752                                         label.fields.add(xref_label.substring(pos + 1, old)); 
    753                                 } 
    754                                 else 
    755                                 { 
    756                                 } 
    757  
    758                                 old++; 
    759                         } 
    760                 } 
    761                 else 
    762                 { 
    763                         if (xref_label == null || xref_label.equals("")) xref_label = this.xref_field; 
    764                         label.format = "%s"; 
    765                         label.fields.add(xref_label); 
    766                 } 
    767  
    768                 return label; 
    769         } 
    770  
    771         /** 
    772          * Gets the xref_label as string. For the parsed version: 
    773          *  
    774          * @see #getXRefLabel() 
    775          */ 
    776         public String getXRefLabelString() 
    777         { 
    778                 if(this.xref_label == "" || this.xref_label == null) 
    779                         return this.xref_field; 
    780                 return this.xref_label; 
     744        public List<String> getXrefLabelNames() throws MolgenisModelException 
     745        { 
     746                // label name = replace '.' and replace entity name if label entity == 
     747                // xref_entity 
     748                List<String> label_names = new ArrayList<String>(); 
     749                for (String label : this.getXrefLabelsTemp()) 
     750                        label_names.add(label.replace(".", "_").replace(this.getXrefEntity() + "_", "")); 
     751                return label_names; 
     752        } 
     753 
     754        public List<Field> getXrefLabels() throws DatabaseException, MolgenisModelException 
     755        { 
     756                List<Field> result = new ArrayList<Field>(); 
     757 
     758                for (String label : getXrefLabelsTemp()) 
     759                { 
     760                        if (label.contains(".")) result.add(this.getEntity().getModel().findField(label)); 
     761                        else 
     762                                result.add(this.getEntity().getModel().findField(this.getXrefEntity().getName() + "." + label)); 
     763                } 
     764 
     765                return result; 
     766        } 
     767 
     768        public List<String> getXrefLabelsTemp() 
     769        { 
     770                if (xref_labels == null || xref_labels.size() == 0) return Arrays.asList(new String[] 
     771                { this.xref_field }); 
     772                return xref_labels; 
    781773        } 
    782774 
     
    819811                this.mref_name = linktable; 
    820812        } 
    821          
     813 
    822814        public String getMrefLocalid() 
    823815        { 
     
    886878                str += ", type=" + type.tag; 
    887879                if (type == Field.Type.STRING || type == Field.Type.CHAR) str += "[" + varchar_length + "]"; 
    888                 else if (type == Field.Type.XREF_SINGLE || type == Field.Type.XREF_MULTIPLE) str += "[" + xref_table + "->" + xref_field + "]"; 
    889                 if(type == Field.Type.XREF_MULTIPLE) str += ", mref_name="+this.mref_name +", mref_localid="+this.mref_localid+", mref_remoteid="+this.mref_remoteid; 
    890                 if (type == Field.Type.XREF_SINGLE || type == Field.Type.XREF_MULTIPLE) str +=", xref_label="+getXRefLabelString(); 
    891                  
     880                else if (type == Field.Type.XREF_SINGLE || type == Field.Type.XREF_MULTIPLE) str += "[" + xref_table + "->" 
     881                                + xref_field + "]"; 
     882                if (type == Field.Type.XREF_MULTIPLE) str += ", mref_name=" + this.mref_name + ", mref_localid=" 
     883                                + this.mref_localid + ", mref_remoteid=" + this.mref_remoteid; 
     884                if (type == Field.Type.XREF_SINGLE || type == Field.Type.XREF_MULTIPLE) str += ", xref_label=" 
     885                                + new GeneratorHelper(null).toCsv(this.xref_labels); 
     886 
    892887                // settings 
    893888                str += ", auto=" + auto; 
     
    989984         * is the label of the reference. 
    990985         */ 
    991         private String xref_label; 
     986        private List<String> xref_labels; 
    992987        /** 
    993988         * When this field is of type Type.XREF_MULTIPLE, this is the name of the 
     
    995990         */ 
    996991        private String mref_name; 
    997          
     992 
    998993        private String mref_localid; 
    999          
     994 
    1000995        private String mref_remoteid; 
    1001996 
     
    10661061        { 
    10671062                this.xref_field = xrefField; 
     1063 
     1064        } 
     1065 
     1066        public void setXrefLabelNames(List<String> labelNames) 
     1067        { 
     1068                this.xref_labels = labelNames; 
    10681069                 
    10691070        } 
    1070  
    1071         public void setXrefLabel(String xrefLabel) throws MolgenisModelException 
    1072         { 
    1073                 this.setXRefVariables(this.getXRefEntity(), this.getXRefField(), xrefLabel); 
    1074         } 
    10751071} 
  • molgenis/3.3/src/org/molgenis/model/elements/Form.java

    r2594 r2677  
    165165 
    166166        /** */ 
    167         private List<String> actionPlugins; 
     167        private List<String> commandPlugins; 
    168168 
    169169        /** */ 
     
    320320        } 
    321321 
    322         public List<String> getActions() 
    323         { 
    324                 return actionPlugins; 
    325         } 
    326  
    327         public void setActions(List<String> actionPlugins) 
    328         { 
    329                 this.actionPlugins = actionPlugins; 
     322        public List<String> getCommands() 
     323        { 
     324                return commandPlugins; 
     325        } 
     326 
     327        public void setCommands(List<String> actionPlugins) 
     328        { 
     329                this.commandPlugins = actionPlugins; 
    330330        } 
    331331 
     
    340340        } 
    341341         
     342        public String toString() 
     343        { 
     344                String commands = ""; 
     345                for(String command: getCommands()) commands += command +","; 
     346                return String.format("Form(name=%s, entity=%s, commands=%s)", getName(), getRecord().getName(), commands); 
     347        } 
    342348} 
  • molgenis/3.3/src/org/molgenis/model/elements/Matrix.java

    r2317 r2677  
    3535        public Matrix(String name, DBSchema parent) 
    3636        { 
    37                 super(name, parent); 
     37                super(name, parent, parent.getModel()); 
    3838        } 
    3939 
     
    9797                        Entity e = (Entity) get(this.content_entity); 
    9898                        Field row_field = e.getField(this.row); 
    99                         return (Entity) get(row_field.getXRefEntity()); 
     99                        return row_field.getXrefEntity(); 
    100100                        // return model.getEntity(row_field.getXRefEntity()); 
    101101                } 
     
    120120                        Field col_field = ce.getField(col); 
    121121                        // get from the field the entity that is 'xref-ed' by the row 
    122                         return (Entity) get(col_field.getXRefEntity()); 
     122                        return col_field.getXrefEntity(); 
    123123                } 
    124124        } 
     
    142142                // "+container_field.getXRefEntity()); 
    143143                // get from the field the entity that is 'xref-ed' by the row 
    144                 return (Entity) get(container_field.getXRefEntity()); 
     144                return container_field.getXrefEntity(); 
    145145        } 
    146146 
  • molgenis/3.3/src/org/molgenis/model/elements/Model.java

    r2381 r2677  
    3232                this.name = name; 
    3333 
    34                 database = new DBSchema(name, null); 
     34                database = new DBSchema(name, null, this); 
    3535                userinterface = new UISchema(name, null); 
    3636                methods = new MethodSchema(name, null); 
     
    435435                for (UISchema u : getUserinterface().getAllChildren()) 
    436436                { 
    437                         result.append(u.getType() + ": " + u.getName() + "\n"); 
     437                        result.append(u.toString()+"\n"); 
    438438                } 
    439439 
  • molgenis/3.3/src/org/molgenis/model/elements/View.java

    r2317 r2677  
    3737        public View(String name, String label, DBSchema parent) 
    3838        { 
    39                 super(name, parent); 
     39                super(name, parent, parent.getModel()); 
    4040                 
    4141                // 
     
    160160                                 
    161161                                try { 
    162                                         if (field.getXRefEntity().equals(entity.getName())) 
     162                                        if (field.getXrefEntity().equals(entity.getName())) 
    163163                                                xrefs.add(field); 
    164164                                } catch (Exception ex) {;} 
     
    172172                                 
    173173                                try { 
    174                                         if (field.getXRefEntity().equals(e.getName())) 
     174                                        if (field.getXrefEntity().equals(e.getName())) 
    175175                                                xrefs.add(field); 
    176176                                } catch (Exception ex) {;} 
Note: See TracChangeset for help on using the changeset viewer.