Changeset 2001


Ignore:
Timestamp:
06/21/09 23:18:34 (3 years ago)
Author:
mswertz
Message:

feature: add 'mref' filter to getSystemRules to show related entities for parent form based on mref relationships.
cleanup: simpflified the 'xref' filter in getSystemRules.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • molgenis3_3/src/org/molgenis/generators/screen/FormScreenGen.java.ftl

    r1979 r2001  
    3737 
    3838// molgenis 
     39import org.molgenis.framework.data.QueryRule.Operator; 
    3940import org.molgenis.framework.data.QueryRule; 
    4041import org.molgenis.framework.screen.Screen; 
    4142import org.molgenis.framework.screen.form.FormScreen; 
    4243import org.molgenis.framework.html.*; 
     44import org.molgenis.framework.data.DatabaseException; 
    4345 
    4446${imports(model,model.getEntity(entity),"data.types")} 
     
    4648 
    4749<#if parent_form?exists> 
    48         <#list form.getRecord().getAllFields() as field> 
    49                 <#if field.getType().toString() = "xref"> 
    50                         <#--check parent record. FIXME: move to model as parent_child relationships-->   
    51                         <#assign parent_xref = false> 
    52                         <#list superclasses(parent_form.getRecord()) as parent_entity> 
    53                                 <#if parent_entity.getName() == field.getXRefEntity()> 
    54                                         <#assign parent_xref = true/> 
    55                                 </#if> 
    56                         </#list> 
    57                  
    58                         <#if parent_xref> 
    59                                 <#assign xref_entity = model.getEntity(field.getXRefEntity())> 
    60 import ${xref_entity.getNamespace()}.data.types.${Name(xref_entity)}; 
    61                         </#if> 
    62                 </#if> 
    63         </#list> 
     50<#assign xref_entity = parent_form.getRecord()> 
     51import ${xref_entity.getNamespace()}.data.types.${JavaName(xref_entity)}; 
    6452</#if> 
    6553 
     
    184172        { 
    185173                List<QueryRule> rules = new ArrayList<QueryRule>(); 
     174                 
     175<#assign parent_xref = false>            
    186176<#if parent_form?exists> 
    187         <#list form.getRecord().getAllFields() as field> 
    188                 <#if field.getType().toString() = "xref"> 
    189                         <#--check parent record. FIXME: move to model as parent_child relationships-->   
    190                         <#assign parent_xref = false> 
    191                         <#list superclasses(parent_form.getRecord()) as parent_entity> 
    192                                 <#if parent_entity.getName() == field.getXRefEntity()> 
    193                                         <#assign parent_xref = true/> 
    194                                 </#if> 
    195                         </#list> 
    196                  
    197                         <#if parent_xref> 
    198                                 <#assign xrefentity = Name(field.getXRefEntity())> 
     177<#assign xrefentity = Name(parent_form.getRecord())> 
    199178                FormScreen<${xrefentity}> parent = (FormScreen<${xrefentity}>)this.get("${parent_form.getVelocityName()}"); 
    200179                List<${xrefentity}> records = parent.getRecords(); 
     180         
     181                //add filters for xref or mref relationships (if any) 
     182                //if multiple xrefs apply then the filters are union (so xref1 OR xref2 OR etc) 
    201183                if(records.size()>0) 
    202                 { 
    203                         <#if form.isEmbedchild()> 
    204                         if (this.getMode() == Mode.EMBEDDED_VIEW) 
    205                         { 
    206                                 List<Object> ids = new ArrayList<Object>(); 
    207                                 for(${form.getEmbedparentname()} record: records) 
     184                {                
     185                        List<QueryRule> xref_filters = new ArrayList<QueryRule>(); 
     186<#-- subform to parent form xrefs:--> 
     187<#list form.getRecord().getAllFields() as field> 
     188        <#--if subform entity refers to parent form entity: show only records that point to parent record--> 
     189        <#--if multiple references exist, then use union, so 'OR' in query rule--> 
     190        <#if field.getType() == "xref" || field.getType() == "mref"> 
     191                <#list superclasses(parent_form.getRecord()) as parent_entity> 
     192                        <#if parent_entity.getName() == field.getXRefEntity()> 
     193                        //filter on <#if field.getType() == "mref">ANY </#if>subform_entity.${name(field)} == parentform_entity.${field.getXRefField()} 
     194                        {        
     195                                QueryRule rule = new QueryRule("${SqlName(field)}",QueryRule.Operator.EQUALS, records.get(0).get${JavaName(field.getXRefField())}()); 
     196                                rule.setOr(true); 
     197                                xref_filters.add(rule); 
     198                        } 
     199                        </#if> 
     200                </#list> 
     201        </#if> 
     202</#list> 
     203<#--parent to subform xrefs-->           
     204<#list parent_form.getRecord().getAllFields() as field> 
     205        <#--if parent entity refers to subform form entity: show only records that are pointed to by parent record--> 
     206        <#--if multiple references exist, then use union, so 'OR' in query rule--> 
     207        <#if field.getType() == "xref" || field.getType() == "mref"> 
     208                <#list superclasses(form.getRecord()) as subform_entity> 
     209                        <#if subform_entity.getName() == field.getXRefEntity()> 
     210                        //filter on <#if field.getType() == "mref">ANY </#if>parentform_entity.${name(field)} == subform_entity.${field.getXRefField()} 
     211                        {        
     212                                QueryRule rule = null; 
     213                                if( records.get(0).get${JavaName(field)}()<#if field.getType() == "mref">.size() > 0<#else>!= null</#if>) 
    208214                                { 
    209                                         ids.add(record.get${Name(form.getEmbedparentfield())}()); 
     215                                        rule = new QueryRule("${SqlName(field.getXRefField())}",QueryRule.Operator.<#if field.getType() == "mref">IN<#else>EQUALS</#if>, records.get(0).get${JavaName(field)}()); 
    210216                                } 
    211                                 QueryRule rule = new QueryRule("${form.getEmbedchildfield()}",QueryRule.Operator.IN, ids.toArray()); 
    212                                 rules.add(rule); 
     217                                else 
     218                                { 
     219                                        //disable all results by impossible condition 
     220                                        rule = new QueryRule("${SqlName(field.getXRefField())}",QueryRule.Operator.EQUALS, Integer.MIN_VALUE); 
     221                                } 
     222                                rule.setOr(true); 
     223                                xref_filters.add(rule); 
    213224                        } 
    214                         else 
    215225                        </#if> 
    216                         { 
    217                                 QueryRule rule = new QueryRule("${name(field)}",QueryRule.Operator.EQUALS, records.get(0).get${Name(field.getXRefField())}()); 
    218                                 rules.add(rule); 
    219                         } 
    220                 } 
    221                         <#break> 
    222                         </#if> 
    223                 </#if> 
    224         </#list>         
     226                </#list> 
     227        </#if> 
     228</#list> 
     229                        rules.add(new QueryRule(xref_filters)); 
     230                }        
    225231</#if> 
    226232<#if form.isFilter()> 
     233                //add predefined form filter 
    227234                { 
    228235                        QueryRule rule = new QueryRule("${form.getFilterfield()}", QueryRule.Operator.${form.getFiltertype()}, "${form.getFiltervalue()}"); 
     
    246253</#list> 
    247254        } 
    248          
     255 
     256        @Override        
    249257        public String getSearchField(String fieldName) 
    250258        { 
    251259<#list form.getRecord().getAllFields() as field> 
    252         <#if field.type="xref"> 
     260        <#if field.type="xref" || field.type="mref"> 
    253261                if(fieldName.equals("${name(field)}")) return "${name(field)}_${name(field.getXRefLabelString())}"; 
    254262        </#if> 
Note: See TracChangeset for help on using the changeset viewer.