You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by jo...@apache.org on 2006/08/12 01:04:08 UTC

svn commit: r430913 - in /incubator/ofbiz/trunk/framework: entity/dtd/entitymodel.xsd entity/src/org/ofbiz/entity/model/ModelViewEntity.java example/entitydef/entitygroup.xml example/entitydef/entitymodel.xml

Author: jonesde
Date: Fri Aug 11 16:04:08 2006
New Revision: 430913

URL: http://svn.apache.org/viewvc?rev=430913&view=rev
Log:
Added example view-entity, including a complex-alias to test that; based on that in the Entity Engine fixed some stuff that is part of the caching code that was breaking things on startup; the conversion stuff that is part of the entity cache is now just disabled (and with a TODO in the code) for field aliases in a view entity that are complex aliases (ie made of multiple fields), to implement that more expression evaluation will have to be done

Modified:
    incubator/ofbiz/trunk/framework/entity/dtd/entitymodel.xsd
    incubator/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelViewEntity.java
    incubator/ofbiz/trunk/framework/example/entitydef/entitygroup.xml
    incubator/ofbiz/trunk/framework/example/entitydef/entitymodel.xml

Modified: incubator/ofbiz/trunk/framework/entity/dtd/entitymodel.xsd
URL: http://svn.apache.org/viewvc/incubator/ofbiz/trunk/framework/entity/dtd/entitymodel.xsd?rev=430913&r1=430912&r2=430913&view=diff
==============================================================================
--- incubator/ofbiz/trunk/framework/entity/dtd/entitymodel.xsd (original)
+++ incubator/ofbiz/trunk/framework/entity/dtd/entitymodel.xsd Fri Aug 11 16:04:08 2006
@@ -289,7 +289,7 @@
         </xs:complexType>
     </xs:element>
     <xs:attributeGroup name="attlist.alias">
-        <xs:attribute type="xs:string" name="entity-alias" use="required"/>
+        <xs:attribute type="xs:string" name="entity-alias"/>
         <xs:attribute type="xs:string" name="name" use="required"/>
         <xs:attribute type="xs:string" name="field"/>
         <xs:attribute type="xs:string" name="col-alias"/>

Modified: incubator/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelViewEntity.java
URL: http://svn.apache.org/viewvc/incubator/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelViewEntity.java?rev=430913&r1=430912&r2=430913&view=diff
==============================================================================
--- incubator/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelViewEntity.java (original)
+++ incubator/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelViewEntity.java Fri Aug 11 16:04:08 2006
@@ -24,16 +24,16 @@
 package org.ofbiz.entity.model;
 
 import java.io.Serializable;
-import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
-import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import javolution.util.FastList;
+import javolution.util.FastMap;
+
 import org.ofbiz.base.util.Debug;
 import org.ofbiz.base.util.UtilTimer;
 import org.ofbiz.base.util.UtilValidate;
@@ -45,17 +45,11 @@
 
 /**
  * This class extends ModelEntity and provides additional information appropriate to view entities
- *
- * @author     <a href="mailto:jonesde@ofbiz.org">David E. Jones</a>
- * @author     <a href="mailto:jaz@ofbiz.org">Andy Zeneski</a>
- * @author     <a href="mailto:peterm@miraculum.com">Peter Moon</a>    
- * @version    $Rev$
- * @since      2.0
  */
 public class ModelViewEntity extends ModelEntity {
     public static final String module = ModelViewEntity.class.getName();
 
-    public static Map functionPrefixMap = new HashMap();
+    public static Map functionPrefixMap = FastMap.newInstance();
     static {
         functionPrefixMap.put("min", "MIN(");
         functionPrefixMap.put("max", "MAX(");
@@ -68,27 +62,27 @@
     }
 
     /** Contains member-entity alias name definitions: key is alias, value is ModelMemberEntity */
-    protected Map memberModelMemberEntities = new HashMap();
+    protected Map memberModelMemberEntities = FastMap.newInstance();
 
     /** A list of all ModelMemberEntity entries; this is mainly used to preserve the original order of member entities from the XML file */
-    protected List allModelMemberEntities = new LinkedList();
+    protected List allModelMemberEntities = FastList.newInstance();
 
     /** Contains member-entity ModelEntities: key is alias, value is ModelEntity; populated with fields */
     protected Map memberModelEntities = null;
 
     /** List of alias-alls which act as a shortcut for easily pulling over member entity fields */
-    protected List aliasAlls = new ArrayList();
+    protected List aliasAlls = FastList.newInstance();
 
     /** List of aliases with information in addition to what is in the standard field list */
-    protected List aliases = new ArrayList();
+    protected List aliases = FastList.newInstance();
 
     /** List of view links to define how entities are connected (or "joined") */
-    protected List viewLinks = new ArrayList();
+    protected List viewLinks = FastList.newInstance();
 
     /** A List of the Field objects for the View Entity, one for each GROUP BY field */
-    protected List groupBys = new ArrayList();
+    protected List groupBys = FastList.newInstance();
 
-    protected Map conversions = new HashMap();
+    protected Map conversions = FastMap.newInstance();
 
     public ModelViewEntity(ModelReader reader, Element entityElement, UtilTimer utilTimer, ModelInfo def) {
         super(reader, entityElement, def);
@@ -189,7 +183,7 @@
 
     public ModelEntity getMemberModelEntity(String alias) {
         if (this.memberModelEntities == null) {
-            this.memberModelEntities = new HashMap();
+            this.memberModelEntities = FastMap.newInstance();
             populateFields(this.getModelReader());
         }
         return (ModelEntity) this.memberModelEntities.get(alias);
@@ -243,11 +237,15 @@
     }
 
     public List getAliasesCopy() {
-        return new ArrayList(this.aliases);
+        List newList = FastList.newInstance();
+        newList.addAll(this.aliases);
+        return newList;
     }
 
     public List getGroupBysCopy() {
-        return new ArrayList(this.groupBys);
+        List newList = FastList.newInstance();
+        newList.addAll(this.groupBys);
+        return newList;
     }
 
     /** List of view links to define how entities are connected (or "joined") */
@@ -264,7 +262,9 @@
     }
 
     public List getViewLinksCopy() {
-        return new ArrayList(this.viewLinks);
+        List newList = FastList.newInstance();
+        newList.addAll(this.viewLinks);
+        return newList;
     }
 
     public void addViewLink(ModelViewLink viewLink) {
@@ -336,7 +336,7 @@
     
     public void populateFieldsBasic(ModelReader modelReader) {
         if (this.memberModelEntities == null) {
-            this.memberModelEntities = new HashMap();
+            this.memberModelEntities = FastMap.newInstance();
         }
 
         Iterator meIter = memberModelMemberEntities.entrySet().iterator();
@@ -438,13 +438,14 @@
     protected ModelConversion getOrCreateModelConversion(String aliasName) {
         ModelEntity member = getMemberModelEntity(aliasName);
         if (member == null) {
-            Debug.logWarning("No member found for aliasName - " + aliasName, module);
-            throw new RuntimeException("Cannot create View Entity");
+            String errMsg = "No member found for aliasName - " + aliasName;
+            Debug.logWarning(errMsg, module);
+            throw new RuntimeException("Cannot create View Entity: " + errMsg);
         }
         
-        Map aliasConversions = (HashMap) conversions.get(member.getEntityName());
+        Map aliasConversions = (Map) conversions.get(member.getEntityName());
         if (aliasConversions == null) {
-            aliasConversions = new HashMap();
+            aliasConversions = FastMap.newInstance();
             conversions.put(member.getEntityName(), aliasConversions);
         }
         ModelConversion conversion = (ModelConversion) aliasConversions.get(aliasName);
@@ -456,18 +457,21 @@
     }
 
     public void populateReverseLinks() {
-        Map containedModelFields = new HashMap();
+        Map containedModelFields = FastMap.newInstance();
         Iterator it = getAliasesIterator();
         while (it.hasNext()) {
             ModelViewEntity.ModelAlias alias = (ModelViewEntity.ModelAlias) it.next();
-            ModelEntity member = getMemberModelEntity(alias.getEntityAlias());
-            ModelConversion conversion = getOrCreateModelConversion(alias.getEntityAlias());
-            conversion.addConversion(alias.getField(), alias.getName());
-            ModelField field = (ModelField) member.getField(alias.getField());
+            if (alias.isComplexAlias()) {
+                // TODO: conversion for complex-alias needs to be implemented for cache and in-memory eval stuff to work correctly
+                Debug.logWarning("Conversion for complex-alias needs to be implemented for cache and in-memory eval stuff to work correctly, will not work for alias: " + alias.getName() + " of view-entity " + this.getEntityName(), module);
+            } else {
+                ModelConversion conversion = getOrCreateModelConversion(alias.getEntityAlias());
+                conversion.addConversion(alias.getField(), alias.getName());
+            }
 
-            List aliases = (List)containedModelFields.get(alias.getField());
+            List aliases = (List) containedModelFields.get(alias.getField());
             if (aliases == null) {
-                aliases = new ArrayList();
+                aliases = FastList.newInstance();
                 containedModelFields.put(alias.getField(), aliases);
             }
             aliases.add(alias.getName());
@@ -534,7 +538,7 @@
         Map foo = (Map) conversions.get(fromEntityName);
         if (foo == null) return null;
         Iterator it = foo.values().iterator();
-        List values = new ArrayList(foo.size());
+        List values = FastList.newInstance();
         while (it.hasNext()) {
             ModelConversion conversion = (ModelConversion) it.next();
             values.add(conversion.convert(data));
@@ -808,7 +812,7 @@
     }
     
     public static class ComplexAlias implements ComplexAliasMember {
-        protected List complexAliasMembers = new LinkedList();
+        protected List complexAliasMembers = FastList.newInstance();
         protected String operator;
         
         public ComplexAlias(String operator) {
@@ -908,7 +912,7 @@
         protected String entityAlias = "";
         protected String relEntityAlias = "";
         protected boolean relOptional = false;
-        protected List keyMaps = new ArrayList();
+        protected List keyMaps = FastList.newInstance();
 
         protected ModelViewLink() {}
 
@@ -961,14 +965,16 @@
         }
 
         public List getKeyMapsCopy() {
-            return new ArrayList(this.keyMaps);
+            List newList = FastList.newInstance();
+            newList.addAll(this.keyMaps);
+            return newList;
         }
     }
 
     public class ModelConversion implements Serializable {
         protected String aliasName;
         protected ModelEntity fromModelEntity;
-        protected Map fieldMap = new HashMap();
+        protected Map fieldMap = FastMap.newInstance();
         protected Set wildcards = new HashSet();
 
         public ModelConversion(String aliasName, ModelEntity fromModelEntity) {
@@ -1002,7 +1008,7 @@
         }
 
         public Map convert(Map values) {
-            Map newValues = new HashMap(fieldMap.size() + wildcards.size());
+            Map newValues = FastMap.newInstance();
             Iterator it = fieldMap.entrySet().iterator();
             while (it.hasNext()) {
                 Map.Entry entry = (Map.Entry) it.next();

Modified: incubator/ofbiz/trunk/framework/example/entitydef/entitygroup.xml
URL: http://svn.apache.org/viewvc/incubator/ofbiz/trunk/framework/example/entitydef/entitygroup.xml?rev=430913&r1=430912&r2=430913&view=diff
==============================================================================
--- incubator/ofbiz/trunk/framework/example/entitydef/entitygroup.xml (original)
+++ incubator/ofbiz/trunk/framework/example/entitydef/entitygroup.xml Fri Aug 11 16:04:08 2006
@@ -24,6 +24,7 @@
     <entity-group group="org.ofbiz" entity="Example"/>
     <entity-group group="org.ofbiz" entity="ExampleItem"/>
     <entity-group group="org.ofbiz" entity="ExampleStatus"/>
+    <entity-group group="org.ofbiz" entity="ExampleStatusDetail"/>
     <entity-group group="org.ofbiz" entity="ExampleType"/>
 
     <!-- ========================================================= -->

Modified: incubator/ofbiz/trunk/framework/example/entitydef/entitymodel.xml
URL: http://svn.apache.org/viewvc/incubator/ofbiz/trunk/framework/example/entitydef/entitymodel.xml?rev=430913&r1=430912&r2=430913&view=diff
==============================================================================
--- incubator/ofbiz/trunk/framework/example/entitydef/entitymodel.xml (original)
+++ incubator/ofbiz/trunk/framework/example/entitydef/entitymodel.xml Fri Aug 11 16:04:08 2006
@@ -37,9 +37,7 @@
     <!-- org.ofbiz.example.example -->
     <!-- ========================================================= -->
     
-    <entity entity-name="Example"
-        package-name="org.ofbiz.example.example"
-        title="Example Entity">
+    <entity entity-name="Example" package-name="org.ofbiz.example.example" title="Example Entity">
         <field name="exampleId" type="id-ne"><!-- primary sequenced ID --></field>
         <field name="exampleTypeId" type="id-ne"></field>
         <field name="statusId" type="id-ne"></field>
@@ -57,9 +55,7 @@
             <key-map field-name="statusId"/>
         </relation>
     </entity>
-    <entity entity-name="ExampleItem"
-        package-name="org.ofbiz.example.example"
-        title="Example Item Entity">
+    <entity entity-name="ExampleItem" package-name="org.ofbiz.example.example" title="Example Item Entity">
         <field name="exampleId" type="id-ne"></field>
         <field name="exampleItemSeqId" type="id-ne"><!-- secondary sequenced ID --></field>
         <field name="description" type="description"></field>
@@ -71,9 +67,7 @@
             <key-map field-name="amountUomId" rel-field-name="uomId"/>
         </relation>
     </entity>
-    <entity entity-name="ExampleStatus"
-        package-name="org.ofbiz.example.example"
-        title="Example Status Entity">
+    <entity entity-name="ExampleStatus" package-name="org.ofbiz.example.example" title="Example Status Entity">
         <field name="exampleId" type="id-ne"></field>
         <field name="statusDate" type="date-time"></field>
         <field name="statusId" type="id-ne"></field>
@@ -86,9 +80,25 @@
             <key-map field-name="statusId"/>
         </relation>
     </entity>
-    <entity entity-name="ExampleType"
-        package-name="org.ofbiz.example.example"
-        title="Example Type Entity">
+    <view-entity entity-name="ExampleStatusDetail" package-name="org.ofbiz.example.example">
+        <member-entity entity-alias="EXPL" entity-name="Example"/>
+        <member-entity entity-alias="EXST" entity-name="ExampleStatus"/>
+        <alias-all entity-alias="EXPL">
+            <exclude field="statusId"/>
+        </alias-all>
+        <alias-all entity-alias="EXST"/>
+        <alias entity-alias="EXPL" name="currentStatusId" field="statusId"/>
+        <alias name="statusDelay">
+            <complex-alias operator="-">
+                <complex-alias-field entity-alias="EXST" field="statusDate"/>
+                <complex-alias-field entity-alias="EXPL" field="exampleDate"/>
+            </complex-alias>
+        </alias>
+        <view-link entity-alias="EXPL" rel-entity-alias="EXST">
+            <key-map field-name="exampleId"/>
+        </view-link>
+    </view-entity>
+    <entity entity-name="ExampleType" package-name="org.ofbiz.example.example" title="Example Type Entity">
         <field name="exampleTypeId" type="id-ne"></field>
         <field name="parentTypeId" type="id"></field>
         <field name="description" type="description"></field>