details:   /erp/devel/pi/rev/9a61e6cef524
changeset: 10483:9a61e6cef524
user:      Gorka Ion Damián <gorkaion.damian <at> openbravo.com>
date:      Wed Feb 09 17:38:56 2011 +0100
summary:   [OBUISEL] Properly define foreign key fields on the grid.

details:   /erp/devel/pi/rev/1e14058a7dec
changeset: 10484:1e14058a7dec
user:      Gorka Ion Damián <gorkaion.damian <at> openbravo.com>
date:      Wed Feb 09 17:39:38 2011 +0100
summary:   [OBUISEL] Implement default expressions on grid fields.

diffstat:

 
modules/org.openbravo.userinterface.selector/src/org/openbravo/userinterface/selector/SelectorComponent.java
                  |  16 +++-
 
modules/org.openbravo.userinterface.selector/src/org/openbravo/userinterface/selector/SelectorDefaultFilterActionHandler.java
 |  42 +++++++++-
 
modules/org.openbravo.userinterface.selector/web/org.openbravo.userinterface.selector/js/ob-selector-item.js
                  |   2 +-
 3 files changed, 57 insertions(+), 3 deletions(-)

diffs (132 lines):

diff -r 9158261ee690 -r 1e14058a7dec 
modules/org.openbravo.userinterface.selector/src/org/openbravo/userinterface/selector/SelectorComponent.java
--- 
a/modules/org.openbravo.userinterface.selector/src/org/openbravo/userinterface/selector/SelectorComponent.java
      Wed Feb 09 17:36:03 2011 +0100
+++ 
b/modules/org.openbravo.userinterface.selector/src/org/openbravo/userinterface/selector/SelectorComponent.java
      Wed Feb 09 17:39:38 2011 +0100
@@ -539,7 +539,8 @@
       // in that case always show the identifier
       final DomainType domainType = getDomainType(selectorField);
       if (domainType instanceof ForeignKeyDomainType) {
-        fieldName = fieldName + "." + JsonConstants.IDENTIFIER;
+        String displayField = fieldName + "." + JsonConstants.IDENTIFIER;
+        localSelectorField.setDisplayField(displayField);
       }
 
       localSelectorField.setName(fieldName);
@@ -639,6 +640,7 @@
   public static class LocalSelectorField {
     private String title;
     private String name;
+    private String displayField;
     private boolean filter;
     private boolean sort;
     private DomainType domainType;
@@ -667,6 +669,14 @@
       this.name = name;
     }
 
+    public String getDisplayField() {
+      return displayField;
+    }
+
+    public void setDisplayField(String displayField) {
+      this.displayField = displayField;
+    }
+
     public List<LocalSelectorFieldProperty> getProperties() {
       final List<LocalSelectorFieldProperty> result = new 
ArrayList<LocalSelectorFieldProperty>();
       result.add(createLocalSelectorFieldProperty("title", title));
@@ -685,6 +695,10 @@
               " function(value) { return 
OB.Utilities.getYesNoDisplayValue(value);}"));
         }
       }
+      if (domainType instanceof ForeignKeyDomainType) {
+        result.add(createLocalSelectorFieldProperty("displayField", 
displayField));
+        
result.add(createNonStringLocalSelectorFieldProperty("filterEditorType", 
"OBTextItem"));
+      }
       return result;
     }
 
diff -r 9158261ee690 -r 1e14058a7dec 
modules/org.openbravo.userinterface.selector/src/org/openbravo/userinterface/selector/SelectorDefaultFilterActionHandler.java
--- 
a/modules/org.openbravo.userinterface.selector/src/org/openbravo/userinterface/selector/SelectorDefaultFilterActionHandler.java
     Wed Feb 09 17:36:03 2011 +0100
+++ 
b/modules/org.openbravo.userinterface.selector/src/org/openbravo/userinterface/selector/SelectorDefaultFilterActionHandler.java
     Wed Feb 09 17:39:38 2011 +0100
@@ -29,12 +29,21 @@
 import org.apache.log4j.Logger;
 import org.codehaus.jettison.json.JSONObject;
 import org.hibernate.criterion.Expression;
+import org.openbravo.base.model.Entity;
+import org.openbravo.base.model.ModelProvider;
+import org.openbravo.base.model.Property;
+import org.openbravo.base.model.Reference;
+import org.openbravo.base.model.domaintype.DomainType;
+import org.openbravo.base.model.domaintype.ForeignKeyDomainType;
+import org.openbravo.base.util.Check;
 import org.openbravo.client.application.OBBindings;
 import org.openbravo.client.kernel.BaseActionHandler;
 import org.openbravo.client.kernel.KernelConstants;
+import org.openbravo.dal.core.DalUtil;
 import org.openbravo.dal.core.OBContext;
 import org.openbravo.dal.service.OBCriteria;
 import org.openbravo.dal.service.OBDal;
+import org.openbravo.service.json.JsonConstants;
 
 /**
  * 
@@ -77,10 +86,17 @@
       for (SelectorField f : obc.list()) {
         try {
           exprResult = engine.eval(f.getDefaultExpression());
+
           if (sel.isCustomQuery()) {
             result.put(f.getDisplayColumnAlias(), exprResult);
           } else {
-            result.put(f.getProperty(), exprResult);
+            final DomainType domainType = getDomainType(f);
+            String fieldName = f.getProperty();
+            if (domainType instanceof ForeignKeyDomainType) {
+              fieldName = fieldName + "." + JsonConstants.IDENTIFIER;
+            }
+
+            result.put(fieldName, exprResult);
           }
         } catch (Exception e) {
           log.error("Error evaluating expression for property " + 
f.getProperty()
@@ -107,4 +123,28 @@
     return params;
   }
 
+  private DomainType getDomainType(SelectorField selectorField) {
+    if (selectorField.getObuiselSelector().getTable() != null
+        && selectorField.getProperty() != null) {
+      final String entityName = 
selectorField.getObuiselSelector().getTable().getName();
+      final Entity entity = ModelProvider.getInstance().getEntity(entityName);
+      final Property property = DalUtil.getPropertyFromPath(entity, 
selectorField.getProperty());
+      Check.isNotNull(property, "Property " + selectorField.getProperty() + " 
not found in Entity "
+          + entity);
+      return property.getDomainType();
+    } else if (selectorField.getObuiselSelector().getTable() != null
+        && selectorField.getObuiselSelector().isCustomQuery()
+        && selectorField.getReference() != null) {
+      return getDomainType(selectorField.getReference().getId());
+    } else if (selectorField.getObserdsDatasourceField().getReference() != 
null) {
+      return 
getDomainType(selectorField.getObserdsDatasourceField().getReference().getId());
+    }
+    return null;
+  }
+
+  private DomainType getDomainType(String referenceId) {
+    final Reference reference = 
ModelProvider.getInstance().getReference(referenceId);
+    Check.isNotNull(reference, "No reference found for referenceid " + 
referenceId);
+    return reference.getDomainType();
+  }
 }
diff -r 9158261ee690 -r 1e14058a7dec 
modules/org.openbravo.userinterface.selector/web/org.openbravo.userinterface.selector/js/ob-selector-item.js
--- 
a/modules/org.openbravo.userinterface.selector/web/org.openbravo.userinterface.selector/js/ob-selector-item.js
      Wed Feb 09 17:36:03 2011 +0100
+++ 
b/modules/org.openbravo.userinterface.selector/web/org.openbravo.userinterface.selector/js/ob-selector-item.js
      Wed Feb 09 17:39:38 2011 +0100
@@ -212,7 +212,7 @@
   
   open: function(){
     var selectorWindow = this, data = {
-      '_selectorDefinitionId': this.selectorDefinitionId
+      '_selectorDefinitionId': this.selectorDefinitionId || 
this.selector.selectorDefinitionId
     };
     
     // purposely not passing the third boolean param

------------------------------------------------------------------------------
The ultimate all-in-one performance toolkit: Intel(R) Parallel Studio XE:
Pinpoint memory and threading errors before they happen.
Find and fix more than 250 security defects in the development cycle.
Locate bottlenecks in serial and parallel code that limit performance.
http://p.sf.net/sfu/intel-dev2devfeb
_______________________________________________
Openbravo-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openbravo-commits

Reply via email to