Changeset 2444


Ignore:
Timestamp:
11/30/09 22:54:33 (2 years ago)
Author:
mswertz
Message:

Refactored UI to make it easier to extend. E.g. to add a command or action to a generated MOLGENIS. Also a first step was made to add an alternative UI style base on YUI. When this refactoring is finished it will be possible to omit the *ui.xml and instead assemble the UI by a manual program.

Location:
molgenis/3.3/src/org/molgenis/generators/ui
Files:
2 edited

Legend:

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

    r2391 r2444  
    6262                this.setMode(FormModel.Mode.${form.viewType}); 
    6363                this.setCsvReader(new ${entity}CsvReader()); 
    64                  
     64 
     65<#-- parent form filtering --> 
     66<#assign parent_xref = false>            
     67<#if parent_form?exists> 
     68<#assign xrefentity = Name(parent_form.getRecord())>             
     69<#list form.getRecord().getAllFields() as field> 
     70        <#--if subform entity refers to parent form entity: show only records that point to parent record--> 
     71        <#--if multiple references exist, then use union, so 'OR' in query rule--> 
     72        <#if field.getType() == "xref" || field.getType() == "mref"> 
     73                <#list superclasses(parent_form.getRecord()) as parent_entity> 
     74                        <#if parent_entity.getName() == field.getXRefEntity()> 
     75                //filter on <#if field.getType() == "mref">ANY </#if>subform_entity.${name(field)} == parentform_entity.${field.getXRefField()} 
     76                this.getParentFilters().add(new ParentFilter("${parent_form.name}","${SqlName(field.getXRefField())}","${SqlName(field.getXRefLabelString())}","${SqlName(name(field))}")); 
     77                        </#if> 
     78                </#list> 
     79        </#if> 
     80</#list> 
     81<#--parent to subform xrefs-->           
     82<#list parent_form.getRecord().getAllFields() as field> 
     83        <#--if parent entity refers to subform form entity: show only records that are pointed to by parent record--> 
     84        <#--if multiple references exist, then use union, so 'OR' in query rule--> 
     85        <#if field.getType() == "xref" || field.getType() == "mref"> 
     86                <#list superclasses(form.getRecord()) as subform_entity> 
     87                        <#if subform_entity.getName() == field.getXRefEntity()> 
     88                //filter on subform_entity.${field.getXRefField()} == <#if field.getType() == "mref">ANY </#if> parentform_entity.${name(field)} 
     89                this.getParentFilters().add(new ParentFilter("${parent_form.name}","${SqlName(name(field))}","${SqlName(field.getXRefLabelString())}","${SqlName(field.getXRefField())}"));              
     90                        </#if> 
     91                </#list> 
     92        </#if> 
     93</#list> 
     94</#if>   
    6595<#list form.actions as action> 
    6696                this.addAction(new ${action}<${entity}>(this)); 
    6797</#list>                 
    68                  
    6998<#if form.readOnly> 
    7099                this.setReadonly(true); 
    71100</#if> 
    72101 
    73 <#if !form.isEmbedparent()> 
    74         <#list form.getChildren() as subscreen> 
     102<#list form.getChildren() as subscreen> 
    75103                <#assign screentype = Name(subscreen.getType().toString()?lower_case) /> 
    76104                new ${package}.${JavaName(subscreen)}${screentype}(this); 
    77         </#list>                 
    78  
    79 <#else> 
    80                 this.setEmbedparent(true);               
    81                 this.setEmbedkeyfield("${form.getEmbedkeyfield()}");                     
    82                 this.setEmbedchildfield("${form.getEmbedchildfield()}");                 
    83         <#if screenpackage = ""> 
    84                 <#assign wanted = package+"."+Name(form.className)+"."+helper.firstToUpper(form.getEmbedname()) /> 
    85         <#else> 
    86                 <#assign wanted = package+"."+screenpackage+"."+Name(form.className)+"."+helper.firstToUpper(form.getEmbedchildname()) /> 
    87         </#if> 
    88         <#list form.getChildren() as subscreen> 
    89                 <#assign screentype = Name(subscreen.getType().toString()?lower_case) /> 
    90                 <#if name(model)+".screen."+subscreen.getCanonicalClassName() == wanted> 
    91                 this.setEmbedform(new ${name(model)}.screen.${subscreen.getCanonicalClassName()}${screentype}(this)); 
    92                 <#else> 
    93                 new ${name(model)}.screen.${subscreen.getCanonicalClassName()}${screentype}(this); 
    94                 </#if> 
    95         </#list> 
    96 </#if> 
    97 <#if form.isEmbedchild()> 
    98                 this.setEmbedchild(true);        
    99                 Vector<String> fields = new Vector<String>();    
    100                 fields.addAll(Arrays.asList("${form.getEmbedfields()}".split(","))); 
    101                 this.setEmbedfields(fields); 
    102                                  
    103                 this.setEmbedparentname("${form.getEmbedparentname()}");                 
    104                 this.setEmbedparentfield("${form.getEmbedparentfield()}");               
    105                 this.setEmbedchildfield("${form.getEmbedchildfield()}");                 
    106 </#if> 
     105</#list>                 
    107106        } 
    108107         
     
    126125        public HtmlForm<${entity}> getInputs(${entity} entity, boolean newrecord) 
    127126        { 
    128 <#if parent_form?exists> 
    129         <#list form.getRecord().getAllFields() as field> 
    130                 <#if field.getType().toString() = "xref"> 
    131                         <#--check parent record. FIXME: move to model as parent_child relationships-->   
    132                         <#assign parent_xref = false> 
    133                         <#list superclasses(parent_form.getRecord()) as parent_entity> 
    134                                 <#if parent_entity.getName() == field.getXRefEntity()> 
    135                                         <#assign parent_xref = true/> 
    136                                 </#if> 
    137                         </#list>                 
    138                         <#if parent_xref> 
    139                                 <#assign xrefentity = Name(field.getXRefEntity())> 
    140                                 <#list form.getRecord().getAllFields() as parent_field> 
    141                                         <#if name(parent_field) = name(field.getXRefField())> 
    142                 //default ${Name(field)} via parent form to ${Name(field.getXRefField())} 
    143                 if(newrecord) 
    144                 { 
    145                         FormModel<${xrefentity}> parent = (FormModel<${xrefentity}>)this.get("${parent_form.getVelocityName()}"); 
    146                         List<${xrefentity}> records = parent.getRecords(); 
    147                         if(records.size()>0)  
    148                         { 
    149                                 entity.set${Name(field)}(records.get(0).get${Name(field.getXRefField())}()); 
    150                                 entity.set${Name(field)}Label(records.get(0).get${Name(field.getXRefLabelString())}().toString()); 
    151                         } 
    152                 } 
    153                                         </#if> 
    154                                 </#list> 
    155                         </#if> 
    156                 </#if> 
    157         </#list>         
    158 </#if>                   
    159          
    160                 HtmlForm<${Name(entity)}> form = new ${model.getEntity(entity).namespace}.ui.${Name(entity)}HtmlForm(entity); 
     127                HtmlForm<${Name(entity)}> form = new HtmlForm<${Name(entity)}>(); 
    161128                form.setNewRecord(newrecord); 
    162129                form.setReadonly(isReadonly()); 
     130                 
     131                List<HtmlInput> inputs = new ArrayList<HtmlInput>();                     
     132<#list allFields(model.getEntity(entity)) as field> 
     133        <#assign inputtype = Name(field.getType().toString())> 
     134                //${JavaName(field)}: ${field} 
     135                { 
     136                        ${inputtype}Input input = new ${inputtype}Input("${name(field)}",entity.get${JavaName(field)}()); 
     137                        input.setLabel("${field.label}"); 
     138                        input.setDescription("${escapeXml(field.description)}"); 
     139                        <#if field.isNillable() && field.type != "file"><#--whether files are filled in is only checked in the db--> 
     140                        input.setNillable(true); 
     141                        <#else> 
     142                        input.setNillable(false); 
     143                        </#if>           
     144                        <#if field.readOnly && field.auto> 
     145                        input.setReadonly(true); //automatic fields that are readonly, are also readonly on newrecord 
     146                        <#elseif field.readOnly> 
     147                        if(!newrecord || isReadonly() || entity.isReadonly()) input.setReadonly(true); //readonly if not new record 
     148                        <#else> 
     149                        input.setReadonly( isReadonly() || entity.isReadonly()); 
     150                        </#if> 
     151                        <#if inputtype = "Enum"> 
     152                        input.setOptions(entity.get${JavaName(field)}Options()); 
     153                        </#if>   
     154                        <#if inputtype = "Xref" || inputtype = "Mref"> 
     155                        <#assign xref_entity = model.getEntity(field.XRefEntity)> 
     156                        input.setXrefEntity("${xref_entity.getNamespace()}.${field.XRefEntity}"); 
     157                        input.setXrefField("${name(field.XRefField)}"); 
     158                        input.setXrefLabel("${name(field.XRefLabelString)}"); 
     159                        //initialize the ${field.XRefEntity}.${field.XRefLabelString} of current record 
     160                        input.setValueLabel<#if inputtype = "Mref">s</#if>(entity.get${JavaName(field)}Label<#if inputtype = "Mref">s</#if>());  
     161                        </#if> 
     162                        <#if field.hidden>               
     163                        input.setHidden(<#if (field.auto && field.readOnly) || (field.defaultValue?exists)>true<#else>!isNewRecord()</#if>); 
     164                        </#if>                   
     165                        inputs.add(input); 
     166                } 
     167</#list>         
     168                form.setInputs(inputs); 
    163169                return form; 
    164         } 
    165          
    166         @Override 
    167         public List<QueryRule> getSystemRules() 
    168         { 
    169                 List<QueryRule> rules = new ArrayList<QueryRule>(); 
    170                  
    171 <#assign parent_xref = false>            
    172 <#if parent_form?exists> 
    173 <#assign xrefentity = Name(parent_form.getRecord())> 
    174                 FormModel<${xrefentity}> parent = (FormModel<${xrefentity}>)this.get("${parent_form.getVelocityName()}"); 
    175                 List<${xrefentity}> records = parent.getRecords(); 
    176          
    177                 //add filters for xref or mref relationships (if any) 
    178                 //if multiple xrefs apply then the filters are union (so xref1 OR xref2 OR etc) 
    179                 if(records.size()>0) 
    180                 {                
    181                         List<QueryRule> xref_filters = new ArrayList<QueryRule>(); 
    182 <#-- subform to parent form xrefs:--> 
    183 <#list form.getRecord().getAllFields() as field> 
    184         <#--if subform entity refers to parent form entity: show only records that point to parent record--> 
    185         <#--if multiple references exist, then use union, so 'OR' in query rule--> 
    186         <#if field.getType() == "xref" || field.getType() == "mref"> 
    187                 <#list superclasses(parent_form.getRecord()) as parent_entity> 
    188                         <#if parent_entity.getName() == field.getXRefEntity()> 
    189                         //filter on <#if field.getType() == "mref">ANY </#if>subform_entity.${name(field)} == parentform_entity.${field.getXRefField()} 
    190                         {        
    191                                 QueryRule rule = new QueryRule("${SqlName(field)}",QueryRule.Operator.EQUALS, records.get(0).get${JavaName(field.getXRefField())}()); 
    192                                 rule.setOr(true); 
    193                                 xref_filters.add(rule); 
    194                         } 
    195                         </#if> 
    196                 </#list> 
    197         </#if> 
    198 </#list> 
    199 <#--parent to subform xrefs-->           
    200 <#list parent_form.getRecord().getAllFields() as field> 
    201         <#--if parent entity refers to subform form entity: show only records that are pointed to by parent record--> 
    202         <#--if multiple references exist, then use union, so 'OR' in query rule--> 
    203         <#if field.getType() == "xref" || field.getType() == "mref"> 
    204                 <#list superclasses(form.getRecord()) as subform_entity> 
    205                         <#if subform_entity.getName() == field.getXRefEntity()> 
    206                         //filter on <#if field.getType() == "mref">ANY </#if>parentform_entity.${name(field)} == subform_entity.${field.getXRefField()} 
    207                         {        
    208                                 QueryRule rule = null; 
    209                                 if( records.get(0).get${JavaName(field)}()<#if field.getType() == "mref">.size() > 0<#else>!= null</#if>) 
    210                                 { 
    211                                         rule = new QueryRule("${SqlName(field.getXRefField())}",QueryRule.Operator.<#if field.getType() == "mref">IN<#else>EQUALS</#if>, records.get(0).get${JavaName(field)}()); 
    212                                 } 
    213                                 else 
    214                                 { 
    215                                         //disable all results by impossible condition 
    216                                         rule = new QueryRule("${SqlName(field.getXRefField())}",QueryRule.Operator.EQUALS, Integer.MIN_VALUE); 
    217                                 } 
    218                                 rule.setOr(true); 
    219                                 xref_filters.add(rule); 
    220                         } 
    221                         </#if> 
    222                 </#list> 
    223         </#if> 
    224 </#list> 
    225                         rules.add(new QueryRule(xref_filters)); 
    226                 }        
    227 </#if> 
    228 <#if form.isFilter()> 
    229                 //add predefined form filter 
    230                 { 
    231                         QueryRule rule = new QueryRule("${form.getFilterfield()}", QueryRule.Operator.${form.getFiltertype()}, "${form.getFiltervalue()}"); 
    232                         rules.add(rule); 
    233                 } 
    234 </#if> 
    235                 { 
    236                         QueryRule rule = super.getRootScreen().getLogin().getRowlevelSecurityFilters(new ${entity}()); 
    237                         if (rule != null /*&& !rule.equals(new QueryRule())*/) 
    238                                 rules.add(rule); 
    239                 }        
    240                 return rules;    
    241170        } 
    242171         
  • molgenis/3.3/src/org/molgenis/generators/ui/PluginScreenFTLTemplateGen.ftl.ftl

    r2108 r2444  
    44<#--                                                                   ##--> 
    55<#--#####################################################################--> 
    6 <!--Date:        ${date} 
     6<#--Date:        ${date} 
    77 * Template:    ${template} 
    88 * generator:   ${generator} ${version} 
Note: See TracChangeset for help on using the changeset viewer.