details:   /erp/devel/pi/rev/90d9d93d584c
changeset: 10956:90d9d93d584c
user:      Martin Taal <martin.taal <at> openbravo.com>
date:      Tue Mar 01 22:08:21 2011 +0100
summary:   Also read displayfield together with main record, use displayfield 
in new ui

diffstat:

 
modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-standard-view-datasource.js
             |   25 +-
 
modules/org.openbravo.client.kernel/src/org/openbravo/client/kernel/reference/ForeignKeyUIDefinition.java
                   |    8 +-
 
modules/org.openbravo.client.kernel/src/org/openbravo/client/kernel/reference/UIDefinition.java
                             |   13 +
 
modules/org.openbravo.service.datasource/src/org/openbravo/service/datasource/DataSourceProperty.java
                       |    9 +
 
modules/org.openbravo.service.datasource/src/org/openbravo/service/datasource/DefaultDataSourceService.java
                 |   26 +-
 
modules/org.openbravo.service.datasource/src/org/openbravo/service/datasource/templates/datasource.ftl
                      |    3 +-
 
modules/org.openbravo.service.json/src/org/openbravo/service/json/DataToJsonConverter.java
                                  |    4 +
 
modules/org.openbravo.service.json/src/org/openbravo/service/json/DefaultJsonDataService.java
                               |    1 +
 
modules/org.openbravo.userinterface.selector/src/org/openbravo/userinterface/selector/SelectorComponent.java
                |  124 ++++-----
 
modules/org.openbravo.userinterface.selector/src/org/openbravo/userinterface/selector/reference/FKSelectorUIDefinition.java
 |   41 +++-
 
modules/org.openbravo.userinterface.selector/web/org.openbravo.userinterface.selector/js/ob-selector-item.js
                |    2 +-
 11 files changed, 180 insertions(+), 76 deletions(-)

diffs (truncated from 454 to 300 lines):

diff -r 3e4e4993fee9 -r 90d9d93d584c 
modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-standard-view-datasource.js
--- 
a/modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-standard-view-datasource.js
   Tue Mar 01 21:54:21 2011 +0100
+++ 
b/modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-standard-view-datasource.js
   Tue Mar 01 22:08:21 2011 +0100
@@ -24,7 +24,8 @@
 isc.ClassFactory.defineClass('OBViewDataSource', isc.OBRestDataSource);
 
 isc.OBViewDataSource.addProperties({
-
+  additionalProps: null,
+  
   showProgress: function(editedRecord){
   
     // don't show it, done to quickly
@@ -99,7 +100,8 @@
     var additionalPara = {
       _operationType: 'update',
       _noActiveFilter: true,
-      sendOriginalIDBack: true
+      sendOriginalIDBack: true,
+      _extraProperties: this.getAdditionalProps()
     };
     isc.addProperties(newRequestProperties.params, additionalPara);
     if (!newRequestProperties.dataSource) {
@@ -108,6 +110,25 @@
     this.Super('performDSOperation', [operationType, data, callback, 
newRequestProperties]);
   },
   
+  getAdditionalProps: function() {
+    if (this.additionalProps !== null) {
+      return this.additionalProps;
+    }
+    this.additionalProps = "";
+    for (var prop in this.getFields()) {
+      if (this.getFields().hasOwnProperty(prop)) {
+        var fld = this.getFields()[prop];
+        if (fld.additional) {
+          if (this.additionalProps.length > 0) {
+            this.additionalProps += ",";
+          }
+          this.additionalProps += fld.name;
+        }        
+      }
+    }
+    return this.additionalProps;
+  },
+  
   // do special id-handling so that we can replace the old if with the new
   // id
   // in the correct way, see the ob-view-grid.js editComplete method
diff -r 3e4e4993fee9 -r 90d9d93d584c 
modules/org.openbravo.client.kernel/src/org/openbravo/client/kernel/reference/ForeignKeyUIDefinition.java
--- 
a/modules/org.openbravo.client.kernel/src/org/openbravo/client/kernel/reference/ForeignKeyUIDefinition.java
 Tue Mar 01 21:54:21 2011 +0100
+++ 
b/modules/org.openbravo.client.kernel/src/org/openbravo/client/kernel/reference/ForeignKeyUIDefinition.java
 Tue Mar 01 22:08:21 2011 +0100
@@ -58,11 +58,15 @@
     }
     final Property prop = 
KernelUtils.getInstance().getPropertyFromColumn(field.getColumn());
     return ", width: isc.OBGrid.getDefaultColumnWidth(" + length + "), 
displayField: '"
-        + prop.getName() + "." + JsonConstants.IDENTIFIER + "'," + 
"valueField: '" + prop.getName()
-        + "'" + ", foreignKeyField: true" + super.getGridFieldProperties(field)
+        + getDisplayFieldName(field, prop) + "'," + "valueField: '" + 
prop.getName() + "'"
+        + ", foreignKeyField: true" + super.getGridFieldProperties(field)
         + getShowHoverGridFieldSettings(field);
   }
 
+  protected String getDisplayFieldName(Field field, Property prop) {
+    return prop.getName() + "." + JsonConstants.IDENTIFIER;
+  }
+
   protected String getSuperGridFieldProperties(Field field) {
     return super.getGridFieldProperties(field);
   }
diff -r 3e4e4993fee9 -r 90d9d93d584c 
modules/org.openbravo.client.kernel/src/org/openbravo/client/kernel/reference/UIDefinition.java
--- 
a/modules/org.openbravo.client.kernel/src/org/openbravo/client/kernel/reference/UIDefinition.java
   Tue Mar 01 21:54:21 2011 +0100
+++ 
b/modules/org.openbravo.client.kernel/src/org/openbravo/client/kernel/reference/UIDefinition.java
   Tue Mar 01 22:08:21 2011 +0100
@@ -22,8 +22,10 @@
 import java.sql.ResultSet;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import org.apache.log4j.Logger;
 import org.codehaus.jettison.json.JSONArray;
@@ -236,6 +238,17 @@
   }
 
   /**
+   * Parameters passed in to the datasource, for example the
+   * {@link JsonConstants#ADDITIONAL_PROPERTIES_PARAMETER} can be passed in 
like this.
+   * 
+   * @return a list of parameters used to drive the datasource generation 
incorporating this
+   *         UIDefinition.
+   */
+  public Map<String, Object> getDataSourceParameters() {
+    return Collections.emptyMap();
+  }
+
+  /**
    * Computes properties to initialize and set the field in a Smartclient grid 
filter. This can be
    * the default value or the sets of values in the valuemap.
    * 
diff -r 3e4e4993fee9 -r 90d9d93d584c 
modules/org.openbravo.service.datasource/src/org/openbravo/service/datasource/DataSourceProperty.java
--- 
a/modules/org.openbravo.service.datasource/src/org/openbravo/service/datasource/DataSourceProperty.java
     Tue Mar 01 21:54:21 2011 +0100
+++ 
b/modules/org.openbravo.service.datasource/src/org/openbravo/service/datasource/DataSourceProperty.java
     Tue Mar 01 22:08:21 2011 +0100
@@ -207,6 +207,7 @@
   private boolean numericType;
   private List<RefListEntry> valueMap;
   private UIDefinition uiDefinition;
+  private boolean additional = false;
 
   public String getType() {
     return uiDefinition.getName();
@@ -368,4 +369,12 @@
       return (v1 < v2 ? -1 : 1);
     }
   }
+
+  public boolean isAdditional() {
+    return additional;
+  }
+
+  public void setAdditional(boolean additional) {
+    this.additional = additional;
+  }
 }
diff -r 3e4e4993fee9 -r 90d9d93d584c 
modules/org.openbravo.service.datasource/src/org/openbravo/service/datasource/DefaultDataSourceService.java
--- 
a/modules/org.openbravo.service.datasource/src/org/openbravo/service/datasource/DefaultDataSourceService.java
       Tue Mar 01 21:54:21 2011 +0100
+++ 
b/modules/org.openbravo.service.datasource/src/org/openbravo/service/datasource/DefaultDataSourceService.java
       Tue Mar 01 22:08:21 2011 +0100
@@ -133,16 +133,36 @@
     }
 
     // now see if there are additional properties, these are often property 
paths
-    final Object additionalPropParameter = parameters
+    final String additionalPropParameter = (String) parameters
         .get(JsonConstants.ADDITIONAL_PROPERTIES_PARAMETER);
-    if (additionalPropParameter != null && getEntity() != null) {
-      final String[] additionalProps = ((String) 
additionalPropParameter).split(",");
+    final StringBuilder additionalProperties = new StringBuilder();
+    if (additionalPropParameter != null) {
+      additionalProperties.append(additionalPropParameter);
+    }
+    // get the additionalproperties from the properties
+    for (DataSourceProperty dsProp : dsProperties) {
+      final Map<String, Object> params = 
dsProp.getUIDefinition().getDataSourceParameters();
+      String additionalProps = (String) 
params.get(JsonConstants.ADDITIONAL_PROPERTIES_PARAMETER);
+      if (additionalProps != null) {
+        final String[] additionalPropValues = 
additionalProps.toString().split(",");
+        for (String addProp : additionalPropValues) {
+          if (additionalProperties.length() > 0) {
+            additionalProperties.append(",");
+          }
+          additionalProperties.append(dsProp.getName() + "." + addProp);
+        }
+      }
+    }
+
+    if (additionalProperties.length() > 0 && getEntity() != null) {
+      final String[] additionalProps = 
additionalProperties.toString().split(",");
 
       // the additional properties are passed back using a different name
       // than the original property
       for (String additionalProp : additionalProps) {
         final Property property = DalUtil.getPropertyFromPath(entity, 
additionalProp);
         final DataSourceProperty dsProperty = 
DataSourceProperty.createFromProperty(property);
+        dsProperty.setAdditional(true);
         dsProperty.setName(additionalProp);
         dsProperties.add(dsProperty);
       }
diff -r 3e4e4993fee9 -r 90d9d93d584c 
modules/org.openbravo.service.datasource/src/org/openbravo/service/datasource/templates/datasource.ftl
--- 
a/modules/org.openbravo.service.datasource/src/org/openbravo/service/datasource/templates/datasource.ftl
    Tue Mar 01 21:54:21 2011 +0100
+++ 
b/modules/org.openbravo.service.datasource/src/org/openbravo/service/datasource/templates/datasource.ftl
    Tue Mar 01 22:08:21 2011 +0100
@@ -59,7 +59,8 @@
 
 <#macro generateField property>
   {name: '${property.name?js_string}',
-    type: '${property.type}'
+    type: '${property.type}',
+    additional: ${property.additional?string}
 <#if property.id>
     , hidden: true, primaryKey: true
 </#if>
diff -r 3e4e4993fee9 -r 90d9d93d584c 
modules/org.openbravo.service.json/src/org/openbravo/service/json/DataToJsonConverter.java
--- 
a/modules/org.openbravo.service.json/src/org/openbravo/service/json/DataToJsonConverter.java
        Tue Mar 01 21:54:21 2011 +0100
+++ 
b/modules/org.openbravo.service.json/src/org/openbravo/service/json/DataToJsonConverter.java
        Tue Mar 01 22:08:21 2011 +0100
@@ -157,6 +157,10 @@
         }
       }
       for (String additionalProperty : additionalProperties) {
+        // sometimes empty strings are passed in
+        if (additionalProperty.length() == 0) {
+          continue;
+        }
         final Object value = DalUtil.getValueFromPath(bob, additionalProperty);
         if (value instanceof BaseOBObject) {
           addBaseOBObject(jsonObject, additionalProperty, 
getPropertyFromPath(bob,
diff -r 3e4e4993fee9 -r 90d9d93d584c 
modules/org.openbravo.service.json/src/org/openbravo/service/json/DefaultJsonDataService.java
--- 
a/modules/org.openbravo.service.json/src/org/openbravo/service/json/DefaultJsonDataService.java
     Tue Mar 01 21:54:21 2011 +0100
+++ 
b/modules/org.openbravo.service.json/src/org/openbravo/service/json/DefaultJsonDataService.java
     Tue Mar 01 22:08:21 2011 +0100
@@ -377,6 +377,7 @@
         // needs to be done before the close of the session
         final DataToJsonConverter toJsonConverter = 
OBProvider.getInstance().get(
             DataToJsonConverter.class);
+        
toJsonConverter.setAdditionalProperties(JsonUtils.getAdditionalProperties(parameters));
         final List<JSONObject> jsonObjects = 
toJsonConverter.toJsonObjects(bobs);
 
         if (sendOriginalIdBack) {
diff -r 3e4e4993fee9 -r 90d9d93d584c 
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
      Tue Mar 01 21:54:21 2011 +0100
+++ 
b/modules/org.openbravo.userinterface.selector/src/org/openbravo/userinterface/selector/SelectorComponent.java
      Tue Mar 01 22:08:21 2011 +0100
@@ -95,6 +95,63 @@
     IdentifierOutField.setOutSuffix("");
   }
 
+  private static 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 static DomainType getDomainType(String referenceId) {
+    final Reference reference = 
ModelProvider.getInstance().getReference(referenceId);
+    Check.isNotNull(reference, "No reference found for referenceid " + 
referenceId);
+    return reference.getDomainType();
+  }
+
+  private static String getPropertyOrDataSourceField(SelectorField 
selectorField) {
+    if (selectorField.getProperty() != null) {
+      return selectorField.getProperty();
+    }
+    if (selectorField.getDisplayColumnAlias() != null) {
+      return selectorField.getDisplayColumnAlias();
+    }
+    if (selectorField.getObserdsDatasourceField() != null) {
+      return selectorField.getObserdsDatasourceField().getName();
+    }
+    throw new IllegalStateException("Selectorfield " + selectorField
+        + " has a null datasource and a null property");
+  }
+
+  public static String getAdditionalProperties(Selector selector) {
+    final StringBuilder extraProperties = new StringBuilder();
+    if (selector.getDisplayfield() == null || 
!selector.getDisplayfield().isActive()) {
+      return extraProperties.toString();
+    }
+    SelectorField selectorField = selector.getDisplayfield();
+    String fieldName = getPropertyOrDataSourceField(selectorField);
+
+    // handle the case that the field is a foreign key
+    // in that case always show the identifier
+    final DomainType domainType = getDomainType(selectorField);
+    if (domainType instanceof ForeignKeyDomainType) {
+      fieldName = fieldName + "." + JsonConstants.IDENTIFIER;
+    }
+    extraProperties.append(fieldName);
+    return extraProperties.toString();
+  }
+
   @Override
   protected Template getComponentTemplate() {
     return getSelector().getObclkerTemplate();
@@ -237,20 +294,6 @@
     return JsonConstants.IDENTIFIER;
   }
 
-  private String getPropertyOrDataSourceField(SelectorField selectorField) {
-    if (selectorField.getProperty() != null) {
-      return selectorField.getProperty();
-    }
-    if (selectorField.getDisplayColumnAlias() != null) {
-      return selectorField.getDisplayColumnAlias();
-    }
-    if (selectorField.getObserdsDatasourceField() != null) {
-      return selectorField.getObserdsDatasourceField().getName();
-    }
-    throw new IllegalStateException("Selectorfield " + selectorField
-        + " has a null datasource and a null property");
-  }
-
   private boolean isBoolean(SelectorField selectorField) {
     final DomainType domainType = getDomainType(selectorField);
     if (domainType instanceof PrimitiveDomainType) {
@@ -323,25 +366,7 @@
 
     final Map<String, Object> dsParameters = new HashMap<String, 
Object>(getParameters());
     dsParameters.put(DataSourceConstants.DS_ONLY_GENERATE_CREATESTATEMENT, 
true);
-

------------------------------------------------------------------------------
Free Software Download: Index, Search & Analyze Logs and other IT data in 
Real-Time with Splunk. Collect, index and harness all the fast moving IT data 
generated by your applications, servers and devices whether physical, virtual
or in the cloud. Deliver compliance at lower cost and gain new business 
insights. http://p.sf.net/sfu/splunk-dev2dev 
_______________________________________________
Openbravo-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openbravo-commits

Reply via email to