details:   /erp/devel/pi/rev/33fa8bd2fa96
changeset: 11735:33fa8bd2fa96
user:      Martin Taal <martin.taal <at> openbravo.com>
date:      Wed Apr 27 16:41:09 2011 +0200
summary:   Fixes issue 16465: Combos on new ui doesn't show the record 
identifiers

diffstat:

 
modules/org.openbravo.service.json/src/org/openbravo/service/json/DataToJsonConverter.java
 |  22 ++-
 src/org/openbravo/base/model/Property.java                                     
            |  50 ++++++++-
 src/org/openbravo/base/model/RefTable.hbm.xml                                  
            |   2 +
 src/org/openbravo/base/model/RefTable.java                                     
            |  10 ++
 4 files changed, 68 insertions(+), 16 deletions(-)

diffs (183 lines):

diff -r d74c722d6154 -r 33fa8bd2fa96 
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
        Wed Apr 27 16:11:59 2011 +0200
+++ 
b/modules/org.openbravo.service.json/src/org/openbravo/service/json/DataToJsonConverter.java
        Wed Apr 27 16:41:09 2011 +0200
@@ -79,7 +79,7 @@
         for (String key : dataInstance.keySet()) {
           final Object value = dataInstance.get(key);
           if (value instanceof BaseOBObject) {
-            addBaseOBObject(jsonObject, key, null, (BaseOBObject) value);
+            addBaseOBObject(jsonObject, null, key, null, (BaseOBObject) value);
           } else {
             // TODO: format!
             jsonObject.put(key, convertPrimitiveValue(value));
@@ -149,8 +149,8 @@
             // TODO: format!
             jsonObject.put(property.getName(), convertPrimitiveValue(property, 
value));
           } else {
-            addBaseOBObject(jsonObject, property.getName(), 
property.getReferencedProperty(),
-                (BaseOBObject) value);
+            addBaseOBObject(jsonObject, property, property.getName(),
+                property.getReferencedProperty(), (BaseOBObject) value);
           }
         } else {
           jsonObject.put(property.getName(), JSONObject.NULL);
@@ -163,8 +163,9 @@
         }
         final Object value = DalUtil.getValueFromPath(bob, additionalProperty);
         if (value instanceof BaseOBObject) {
-          addBaseOBObject(jsonObject, additionalProperty, 
getPropertyFromPath(bob,
-              additionalProperty).getReferencedProperty(), (BaseOBObject) 
value);
+          final Property additonalPropertyObject = getPropertyFromPath(bob, 
additionalProperty);
+          addBaseOBObject(jsonObject, additonalPropertyObject, 
additionalProperty,
+              additonalPropertyObject.getReferencedProperty(), (BaseOBObject) 
value);
         } else {
           final Property property = DalUtil
               .getPropertyFromPath(bob.getEntity(), additionalProperty);
@@ -210,8 +211,8 @@
     return result;
   }
 
-  private void addBaseOBObject(JSONObject jsonObject, String propertyName,
-      Property referencedProperty, BaseOBObject obObject) throws JSONException 
{
+  private void addBaseOBObject(JSONObject jsonObject, Property 
referencingProperty,
+      String propertyName, Property referencedProperty, BaseOBObject obObject) 
throws JSONException {
     // jsonObject.put(propertyName, toJsonObject(obObject, 
DataResolvingMode.SHORT));
     if (referencedProperty != null) {
       jsonObject.put(propertyName, obObject.get(referencedProperty.getName()));
@@ -219,7 +220,12 @@
       jsonObject.put(propertyName, obObject.getId());
     }
     // jsonObject.put(propertyName + "." + JsonConstants.ID, obObject.getId());
-    jsonObject.put(propertyName + "." + JsonConstants.IDENTIFIER, 
obObject.getIdentifier());
+    if (referencingProperty != null && referencingProperty.hasDisplayColumn()) 
{
+      jsonObject.put(propertyName + "." + JsonConstants.IDENTIFIER,
+          obObject.get(referencingProperty.getDisplayPropertyName()));
+    } else {
+      jsonObject.put(propertyName + "." + JsonConstants.IDENTIFIER, 
obObject.getIdentifier());
+    }
   }
 
   // TODO: do some form of formatting here?
diff -r d74c722d6154 -r 33fa8bd2fa96 src/org/openbravo/base/model/Property.java
--- a/src/org/openbravo/base/model/Property.java        Wed Apr 27 16:11:59 
2011 +0200
+++ b/src/org/openbravo/base/model/Property.java        Wed Apr 27 16:41:09 
2011 +0200
@@ -35,6 +35,7 @@
 import org.openbravo.base.model.domaintype.HashedStringDomainType;
 import org.openbravo.base.model.domaintype.PrimitiveDomainType;
 import org.openbravo.base.model.domaintype.StringDomainType;
+import org.openbravo.base.model.domaintype.TableDomainType;
 import org.openbravo.base.util.Check;
 import org.openbravo.base.validation.PropertyValidator;
 import org.openbravo.base.validation.ValidationException;
@@ -105,6 +106,9 @@
   // gives a lot of performance/memory improvements when getting property 
values
   private int indexInEntity;
 
+  private Boolean hasDisplayColumn;
+  private String displayProperty;
+
   /**
    * Initializes this Property using the information from the Column.
    * 
@@ -368,10 +372,9 @@
 
     if (defaultValue == null && isBoolean()) {
       if (getName().equalsIgnoreCase("active")) {
-        log
-            .debug("Property "
-                + this
-                + " is probably the active column but does not have a default 
value set, supplying default value Y");
+        log.debug("Property "
+            + this
+            + " is probably the active column but does not have a default 
value set, supplying default value Y");
         defaultValue = "Y";
       } else {
         defaultValue = "N";
@@ -453,10 +456,9 @@
   public Object getActualDefaultValue() {
     if (defaultValue == null && isBoolean()) {
       if (getName().equalsIgnoreCase("isactive")) {
-        log
-            .debug("Property "
-                + this
-                + " is probably the active column but does not have a default 
value set, supplying default value Y");
+        log.debug("Property "
+            + this
+            + " is probably the active column but does not have a default 
value set, supplying default value Y");
         setDefaultValue("Y");
       } else {
         setDefaultValue("N");
@@ -1059,4 +1061,36 @@
   public void setEncrypted(boolean encrypted) {
     this.encrypted = encrypted;
   }
+
+  /**
+   * @return true if the property is a table reference which defines an 
explicit display column.
+   *         This display column is then used as the identifier of objects 
referenced through this
+   *         property.
+   */
+  public boolean hasDisplayColumn() {
+    if (hasDisplayColumn == null) {
+      if (domainType instanceof TableDomainType) {
+        final TableDomainType tableDomainType = (TableDomainType) domainType;
+        hasDisplayColumn = tableDomainType.getRefTable().getDisplayColumn() != 
null;
+      } else {
+        hasDisplayColumn = false;
+      }
+    }
+    return hasDisplayColumn;
+  }
+
+  public String getDisplayPropertyName() {
+    if (displayProperty == null) {
+      final Column column = ((TableDomainType) 
domainType).getRefTable().getDisplayColumn();
+      final Entity referencedEntity = getTargetEntity();
+      for (Property prop : referencedEntity.getProperties()) {
+        if (prop.getColumnId().equals(column.getId())) {
+          displayProperty = prop.getName();
+          break;
+        }
+      }
+      log.warn("Display column for property " + this + " not found");
+    }
+    return displayProperty;
+  }
 }
diff -r d74c722d6154 -r 33fa8bd2fa96 
src/org/openbravo/base/model/RefTable.hbm.xml
--- a/src/org/openbravo/base/model/RefTable.hbm.xml     Wed Apr 27 16:11:59 
2011 +0200
+++ b/src/org/openbravo/base/model/RefTable.hbm.xml     Wed Apr 27 16:41:09 
2011 +0200
@@ -31,6 +31,8 @@
         <many-to-one name="reference" not-null="true" 
class="org.openbravo.base.model.Reference" column="ad_reference_id" 
insert="false" update="false"/>
 
                <many-to-one name="column" not-null="true" 
class="org.openbravo.base.model.Column" column="ad_key"/>                       
     
+
+    <many-to-one name="displayColumn" not-null="true" 
class="org.openbravo.base.model.Column" column="ad_display"/>        
                
                <property name="updated"/>
                
diff -r d74c722d6154 -r 33fa8bd2fa96 src/org/openbravo/base/model/RefTable.java
--- a/src/org/openbravo/base/model/RefTable.java        Wed Apr 27 16:11:59 
2011 +0200
+++ b/src/org/openbravo/base/model/RefTable.java        Wed Apr 27 16:41:09 
2011 +0200
@@ -37,6 +37,8 @@
 
   private Column column;
 
+  private Column displayColumn;
+
   public Column getColumn() {
     return column;
   }
@@ -59,4 +61,12 @@
       ((TableDomainType) domainType).setRefTable(this);
     }
   }
+
+  public Column getDisplayColumn() {
+    return displayColumn;
+  }
+
+  public void setDisplayColumn(Column displayColumn) {
+    this.displayColumn = displayColumn;
+  }
 }

------------------------------------------------------------------------------
WhatsUp Gold - Download Free Network Management Software
The most intuitive, comprehensive, and cost-effective network 
management toolset available today.  Delivers lowest initial 
acquisition cost and overall TCO of any competing solution.
http://p.sf.net/sfu/whatsupgold-sd
_______________________________________________
Openbravo-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openbravo-commits

Reply via email to