You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by ad...@apache.org on 2013/05/02 10:51:09 UTC

svn commit: r1478302 - in /ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model: ModelEntity.java ModelInfo.java ModelReader.java ModelViewEntity.java

Author: adrianc
Date: Thu May  2 08:51:09 2013
New Revision: 1478302

URL: http://svn.apache.org/r1478302
Log:
Made ModelInfo immutable, modified ModelEntity so it contains ModelInfo instead of extending it.

Modified:
    ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelEntity.java
    ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelInfo.java
    ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelReader.java
    ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelViewEntity.java

Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelEntity.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelEntity.java?rev=1478302&r1=1478301&r2=1478302&view=diff
==============================================================================
--- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelEntity.java (original)
+++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelEntity.java Thu May  2 08:51:09 2013
@@ -38,13 +38,11 @@ import java.util.concurrent.CopyOnWriteA
 import org.ofbiz.base.util.Debug;
 import org.ofbiz.base.util.GeneralException;
 import org.ofbiz.base.util.ObjectType;
-import org.ofbiz.base.util.StringUtil;
 import org.ofbiz.base.util.UtilMisc;
 import org.ofbiz.base.util.UtilPlist;
 import org.ofbiz.base.util.UtilTimer;
 import org.ofbiz.base.util.UtilValidate;
 import org.ofbiz.base.util.UtilXml;
-import org.ofbiz.entity.model.ModelIndex.Field;
 import org.ofbiz.entity.Delegator;
 import org.ofbiz.entity.GenericEntity;
 import org.ofbiz.entity.GenericEntityException;
@@ -52,6 +50,7 @@ import org.ofbiz.entity.GenericValue;
 import org.ofbiz.entity.config.DatasourceInfo;
 import org.ofbiz.entity.config.EntityConfigUtil;
 import org.ofbiz.entity.jdbc.DatabaseUtil;
+import org.ofbiz.entity.model.ModelIndex.Field;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
@@ -60,7 +59,7 @@ import org.w3c.dom.Element;
  *
  */
 @SuppressWarnings("serial")
-public class ModelEntity extends ModelInfo implements Comparable<ModelEntity>, Serializable {
+public class ModelEntity implements Comparable<ModelEntity>, Serializable {
 
     public static final String module = ModelEntity.class.getName();
 
@@ -70,6 +69,8 @@ public class ModelEntity extends ModelIn
     public static final String CREATE_STAMP_FIELD = "createdStamp";
     public static final String CREATE_STAMP_TX_FIELD = "createdTxStamp";
 
+    private ModelInfo modelInfo;
+
     /** The ModelReader that created this Entity */
     private final ModelReader modelReader;
 
@@ -138,26 +139,29 @@ public class ModelEntity extends ModelIn
     /** Default Constructor */
     public ModelEntity() {
         this.modelReader = null;
+        this.modelInfo = ModelInfo.DEFAULT;
     }
 
     protected ModelEntity(ModelReader reader) {
         this.modelReader = reader;
+        this.modelInfo = ModelInfo.DEFAULT;
     }
 
-    protected ModelEntity(ModelReader reader, ModelInfo def) {
-        super(def);
+    protected ModelEntity(ModelReader reader, ModelInfo modelInfo) {
         this.modelReader = reader;
+        this.modelInfo = modelInfo;
     }
 
     /** XML Constructor */
-    protected ModelEntity(ModelReader reader, Element entityElement, ModelInfo def) {
-        this(reader, def);
-        populateFromAttributes(entityElement);
+    protected ModelEntity(ModelReader reader, Element entityElement, ModelInfo modelInfo) {
+        this.modelReader = reader;
+        this.modelInfo = ModelInfo.createFromAttributes(modelInfo, entityElement);
     }
 
     /** XML Constructor */
-    public ModelEntity(ModelReader reader, Element entityElement, UtilTimer utilTimer, ModelInfo def) {
-        this(reader, entityElement, def);
+    public ModelEntity(ModelReader reader, Element entityElement, UtilTimer utilTimer, ModelInfo modelInfo) {
+        this.modelReader = reader;
+        this.modelInfo = ModelInfo.createFromAttributes(modelInfo, entityElement);
         if (utilTimer != null) utilTimer.timerString("  createModelEntity: before general/basic info");
         this.populateBasicInfo(entityElement);
         if (utilTimer != null) utilTimer.timerString("  createModelEntity: before prim-keys");
@@ -221,6 +225,7 @@ public class ModelEntity extends ModelIn
     public ModelEntity(String tableName, Map<String, DatabaseUtil.ColumnCheckInfo> colMap, ModelFieldTypeReader modelFieldTypeReader, boolean isCaseSensitive) {
         // if there is a dot in the name, remove it and everything before it, should be the schema name
         this.modelReader = null;
+        this.modelInfo = ModelInfo.DEFAULT;
         this.tableName = tableName;
         int dotIndex = this.tableName.indexOf(".");
         if (dotIndex >= 0) {
@@ -357,14 +362,7 @@ public class ModelEntity extends ModelIn
                 }
             }
         }
-        
-        // override the default resource file
-        String defResourceName = StringUtil.internString(extendEntityElement.getAttribute("default-resource-name"));
-        //Debug.logInfo("Extended entity - " + extendEntityElement.getAttribute("entity-name") + " new resource name : " + defResourceName, module);
-        if (UtilValidate.isNotEmpty(defResourceName)) {
-            this.setDefaultResourceName(defResourceName);
-        }
-
+        this.modelInfo = ModelInfo.createFromAttributes(this.modelInfo, extendEntityElement);
         this.populateRelated(reader, extendEntityElement);
         this.populateIndexes(extendEntityElement);
         this.dependentOn = UtilXml.checkEmpty(extendEntityElement.getAttribute("dependent-on")).intern();
@@ -1662,4 +1660,29 @@ public class ModelEntity extends ModelIn
 
         return topLevelMap;
     }
+
+    public String getAuthor() {
+        return modelInfo.getAuthor();
+    }
+
+    public String getCopyright() {
+        return modelInfo.getCopyright();
+    }
+
+    public String getDefaultResourceName() {
+        return modelInfo.getDefaultResourceName();
+    }
+
+    public String getDescription() {
+        return modelInfo.getDescription();
+    }
+
+    public String getTitle() {
+        return modelInfo.getTitle();
+    }
+
+    public String getVersion() {
+        return modelInfo.getVersion();
+    }
+
 }

Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelInfo.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelInfo.java?rev=1478302&r1=1478301&r2=1478302&view=diff
==============================================================================
--- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelInfo.java (original)
+++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelInfo.java Thu May  2 08:51:09 2013
@@ -21,134 +21,154 @@ package org.ofbiz.entity.model;
 import java.util.Locale;
 import java.util.TimeZone;
 
+import org.ofbiz.base.lang.ThreadSafe;
 import org.ofbiz.base.util.StringUtil;
 import org.ofbiz.base.util.UtilDateTime;
 import org.ofbiz.base.util.UtilXml;
-import org.ofbiz.base.util.UtilValidate;
 import org.w3c.dom.Element;
 
 /**
- * Generic Entity - Entity model class
+ * An object that models the <code>&lt;entitymodel&gt;</code> child elements that provide default values.
  *
  */
-public class ModelInfo {
+@ThreadSafe
+public final class ModelInfo {
 
-    public static final String module = ModelInfo.class.getName();
+    public static final ModelInfo DEFAULT = new ModelInfo("None", "None", getCopyrightString(), "None", "1.0", "");
+
+    /**
+     * Returns a new <code>ModelInfo</code> instance initialized to the values found in <code>element</code> attributes.
+     * 
+     * @param defaultInfo A <code>ModelInfo</code> instance that will provide default values for missing attributes.
+     * @param element
+     */
+    public static ModelInfo createFromAttributes(ModelInfo defaultInfo, Element element) {
+        String title = element.getAttribute("title").intern();
+        if (title.isEmpty()) {
+            title = defaultInfo.getTitle();
+        }
+        String description = StringUtil.internString(UtilXml.childElementValue(element, "description"));
+        if (description == null || description.isEmpty()) {
+            description = defaultInfo.getDescription();
+        }
+        String copyright = element.getAttribute("copyright").intern();
+        if (copyright.isEmpty()) {
+            copyright = defaultInfo.getCopyright();
+        }
+        String author = element.getAttribute("author").intern();
+        if (author.isEmpty()) {
+            author = defaultInfo.getAuthor();
+        }
+        String version = element.getAttribute("version").intern();
+        if (version.isEmpty()) {
+            version = defaultInfo.getVersion();
+        }
+        String defaultResourceName = StringUtil.internString(element.getAttribute("default-resource-name"));
+        if (defaultResourceName.isEmpty()) {
+            defaultResourceName = defaultInfo.getDefaultResourceName();
+        }
+        return new ModelInfo(title, description, copyright, author, version, defaultResourceName);
+    }
+
+    /**
+     * Returns a new <code>ModelInfo</code> instance initialized to the values found in <code>element</code> child elements.
+     * 
+     * @param defaultInfo A <code>ModelInfo</code> instance that will provide default values for missing child elements.
+     * @param element
+     */
+    public static ModelInfo createFromElements(ModelInfo defaultInfo, Element element) {
+        String title = StringUtil.internString(UtilXml.childElementValue(element, "title"));
+        if (title == null || title.isEmpty()) {
+            title = defaultInfo.getTitle();
+        }
+        String description = StringUtil.internString(UtilXml.childElementValue(element, "description"));
+        if (description == null || description.isEmpty()) {
+            description = defaultInfo.getDescription();
+        }
+        String copyright = StringUtil.internString(UtilXml.childElementValue(element, "copyright"));
+        if (copyright == null || copyright.isEmpty()) {
+            copyright = defaultInfo.getCopyright();
+        }
+        String author = StringUtil.internString(UtilXml.childElementValue(element, "author"));
+        if (author == null ||author.isEmpty()) {
+            author = defaultInfo.getAuthor();
+        }
+        String version = StringUtil.internString(UtilXml.childElementValue(element, "version"));
+        if (version == null || version.isEmpty()) {
+            version = defaultInfo.getVersion();
+        }
+        String defaultResourceName = StringUtil.internString(UtilXml.childElementValue(element, "default-resource-name"));
+        if (defaultResourceName == null || defaultResourceName.isEmpty()) {
+            defaultResourceName = defaultInfo.getDefaultResourceName();
+        }
+        return new ModelInfo(title, description, copyright, author, version, defaultResourceName);
+    }
+
+    private static String getCopyrightString() {
+        int year = UtilDateTime.getYear(UtilDateTime.nowTimestamp(), TimeZone.getDefault(), Locale.getDefault());
+        return "Copyright 2001-" + year + " The Apache Software Foundation";
+    }
+
+    /*
+     * Developers - this is an immutable class. Once constructed, the object should not change state.
+     * Therefore, 'setter' methods are not allowed. If client code needs to modify the object's
+     * state, then it can create a new copy with the changed values.
+     */
 
-    protected ModelInfo def;
     /** The title for documentation purposes */
-    protected String title = "";
+    private final String title;
 
     /** The description for documentation purposes */
-    protected String description = "";
+    private final String description;
 
     /** The copyright for documentation purposes */
-    protected String copyright = "";
+    private final String copyright;
 
     /** The author for documentation purposes */
-    protected String author = "";
+    private final String author;
 
     /** The version for documentation purposes */
-    protected String version = "";
+    private final String version;
 
     /** The default-resource-name of the Entity, used with the getResource call to check for a value in a resource bundle */
-    protected String defaultResourceName = "";
-
-    // ===== CONSTRUCTORS =====
-
-    public ModelInfo() {
-        this(DEFAULT);
-    }
-
-    public ModelInfo(ModelInfo def) {
-        this.def = def;
-    }
-
-    public static final ModelInfo DEFAULT = new ModelInfo() {
-        @Override
-        public String getTitle()                { return "None"; }
-        @Override
-        public String getAuthor()               { return "None"; }
-        @Override
-        public String getCopyright()            { int year = UtilDateTime.getYear(UtilDateTime.nowTimestamp(), TimeZone.getDefault(), Locale.getDefault()); return "Copyright 2001-" + year + " The Apache Software Foundation"; }
-        @Override
-        public String getVersion()              { return "1.0"; }
-        @Override
-        public String getDescription()          { return "None"; }
-        @Override
-        public String getDefaultResourceName()  { return ""; }
-    };
-
-    public void populateFromAttributes(Element element) {
-        author = element.getAttribute("author").intern();
-        copyright = element.getAttribute("copyright").intern();
-        description = StringUtil.internString(UtilXml.childElementValue(element, "description"));
-        title = element.getAttribute("title").intern();
-        version = element.getAttribute("version").intern();
-        defaultResourceName = StringUtil.internString(element.getAttribute("default-resource-name"));
-    }
-
-    public void populateFromElements(Element element) {
-        author = StringUtil.internString(UtilXml.childElementValue(element, "author"));
-        copyright = StringUtil.internString(UtilXml.childElementValue(element, "copyright"));
-        description = StringUtil.internString(UtilXml.childElementValue(element, "description"));
-        title = StringUtil.internString(UtilXml.childElementValue(element, "title"));
-        version = StringUtil.internString(UtilXml.childElementValue(element, "version"));
-        defaultResourceName = StringUtil.internString(UtilXml.childElementValue(element, "default-resource-name"));
-    }
-
-    // Strings to go in the comment header.
-    /** The title for documentation purposes */
-    public String getTitle() {
-        return UtilValidate.isNotEmpty(this.title) ? this.title : def.getTitle();
-    }
+    private final String defaultResourceName;
 
-    public void setTitle(String title) {
+    ModelInfo(String title, String description, String copyright, String author, String version, String defaultResourceName) {
         this.title = title;
-    }
-
-    /** The description for documentation purposes */
-    public String getDescription() {
-        return UtilValidate.isNotEmpty(this.description) ? this.description : def.getDescription();
-    }
-
-    public void setDescription(String description) {
         this.description = description;
-    }
-
-    /** The copyright for documentation purposes */
-    public String getCopyright() {
-        return UtilValidate.isNotEmpty(this.copyright) ? this.copyright : def.getCopyright();
-    }
-
-    public void setCopyright(String copyright) {
         this.copyright = copyright;
+        this.author = author;
+        this.version = version;
+        this.defaultResourceName = defaultResourceName;
     }
 
-    /** The author for documentation purposes */
+    /** Returns the author. */
     public String getAuthor() {
-        return UtilValidate.isNotEmpty(this.author) ? this.author : def.getAuthor();
+        return this.author;
     }
 
-    public void setAuthor(String author) {
-        this.author = author;
+    /** Returns the copyright. */
+    public String getCopyright() {
+        return this.copyright;
     }
 
-    /** The version for documentation purposes */
-    public String getVersion() {
-        return UtilValidate.isNotEmpty(this.version) ? this.version : def.getVersion();
+    /** Returns the default resource name. */
+    public String getDefaultResourceName() {
+        return this.defaultResourceName;
     }
 
-    public void setVersion(String version) {
-        this.version = version;
+    /** Returns the description. */
+    public String getDescription() {
+        return this.description;
     }
 
-    /** The default-resource-name of the Entity */
-    public String getDefaultResourceName() {
-        return UtilValidate.isNotEmpty(this.defaultResourceName) ? this.defaultResourceName : def.getDefaultResourceName();
+    /** Returns the title. */
+    public String getTitle() {
+        return this.title;
     }
 
-    public void setDefaultResourceName(String defaultResourceName) {
-        this.defaultResourceName = defaultResourceName;
+    /** Returns the version. */
+    public String getVersion() {
+        return this.version;
     }
 }

Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelReader.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelReader.java?rev=1478302&r1=1478301&r2=1478302&view=diff
==============================================================================
--- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelReader.java (original)
+++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelReader.java Thu May  2 08:51:09 2013
@@ -223,8 +223,7 @@ public class ModelReader implements Seri
                         docElement.normalize();
                         Node curChild = docElement.getFirstChild();
 
-                        ModelInfo def = new ModelInfo();
-                        def.populateFromElements(docElement);
+                        ModelInfo def = ModelInfo.createFromElements(ModelInfo.DEFAULT, docElement);
                         int i = 0;
 
                         if (curChild != null) {

Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelViewEntity.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelViewEntity.java?rev=1478302&r1=1478301&r2=1478302&view=diff
==============================================================================
--- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelViewEntity.java (original)
+++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelViewEntity.java Thu May  2 08:51:09 2013
@@ -145,11 +145,15 @@ public class ModelViewEntity extends Mod
     }
 
     public ModelViewEntity(DynamicViewEntity dynamicViewEntity, ModelReader modelReader) {
-        super(modelReader);
+        super(modelReader, new ModelInfo(
+                dynamicViewEntity.getTitle(),
+                ModelInfo.DEFAULT.getDescription(),
+                ModelInfo.DEFAULT.getCopyright(),
+                ModelInfo.DEFAULT.getAuthor(),
+                ModelInfo.DEFAULT.getVersion(),
+                dynamicViewEntity.getDefaultResourceName()));
         this.entityName = dynamicViewEntity.getEntityName();
         this.packageName = dynamicViewEntity.getPackageName();
-        this.title = dynamicViewEntity.getTitle();
-        this.defaultResourceName = dynamicViewEntity.getDefaultResourceName();
 
         // member-entities
         Iterator<Map.Entry<String, ModelMemberEntity>> modelMemberEntitiesEntryIter = dynamicViewEntity.getModelMemberEntitiesEntryIter();