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 2009/11/19 19:16:35 UTC
svn commit: r882236 -
/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelFieldTypeReader.java
Author: adrianc
Date: Thu Nov 19 18:16:35 2009
New Revision: 882236
URL: http://svn.apache.org/viewvc?rev=882236&view=rev
Log:
Major code cleanup in ModelFieldTypeReader.java. Eliminated unused fields, made public fields protected, simplified code.
Modified:
ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelFieldTypeReader.java
Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelFieldTypeReader.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelFieldTypeReader.java?rev=882236&r1=882235&r2=882236&view=diff
==============================================================================
--- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelFieldTypeReader.java (original)
+++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelFieldTypeReader.java Thu Nov 19 18:16:35 2009
@@ -20,162 +20,103 @@
import java.io.Serializable;
import java.util.Collection;
-import java.util.HashMap;
+import java.util.List;
import java.util.Map;
+import javolution.util.FastMap;
+
import org.ofbiz.base.config.GenericConfigException;
import org.ofbiz.base.config.MainResourceHandler;
import org.ofbiz.base.config.ResourceHandler;
import org.ofbiz.base.util.Debug;
import org.ofbiz.base.util.UtilTimer;
+import org.ofbiz.base.util.UtilValidate;
import org.ofbiz.base.util.UtilXml;
import org.ofbiz.base.util.cache.UtilCache;
import org.ofbiz.entity.config.DatasourceInfo;
import org.ofbiz.entity.config.EntityConfigUtil;
import org.ofbiz.entity.config.FieldTypeInfo;
+
import org.w3c.dom.Document;
import org.w3c.dom.Element;
-import org.w3c.dom.Node;
/**
- * Generic Entity - Field Type Definition Reader
+ * Field Type Definition Reader.
*
*/
+@SuppressWarnings("serial")
public class ModelFieldTypeReader implements Serializable {
public static final String module = ModelFieldTypeReader.class.getName();
- public static UtilCache<String, ModelFieldTypeReader> readers = new UtilCache<String, ModelFieldTypeReader>("entity.ModelFieldTypeReader", 0, 0);
-
- public Map<String, ModelFieldType> fieldTypeCache = null;
+ protected static final UtilCache<String, ModelFieldTypeReader> readers = new UtilCache<String, ModelFieldTypeReader>("entity.ModelFieldTypeReader", 0, 0);
- public int numEntities = 0;
- public int numFields = 0;
- public int numRelations = 0;
-
- public String modelName;
- public ResourceHandler fieldTypeResourceHandler;
- public String entityFileName;
+ protected static Map<String, ModelFieldType> createFieldTypeCache(Element docElement, String location) {
+ docElement.normalize();
+ Map<String, ModelFieldType> fieldTypeMap = FastMap.newInstance();
+ List<? extends Element> fieldTypeList = UtilXml.childElementList(docElement, "field-type-def");
+ for (Element curFieldType: fieldTypeList) {
+ String fieldTypeName = curFieldType.getAttribute("type");
+ if (UtilValidate.isEmpty(fieldTypeName)) {
+ Debug.logError("Invalid field-type element, type attribute is missing in file " + location, module);
+ } else {
+ ModelFieldType fieldType = new ModelFieldType(curFieldType);
+ fieldTypeMap.put(fieldTypeName, fieldType);
+ }
+ }
+ return fieldTypeMap;
+ }
public static ModelFieldTypeReader getModelFieldTypeReader(String helperName) {
DatasourceInfo datasourceInfo = EntityConfigUtil.getDatasourceInfo(helperName);
if (datasourceInfo == null) {
throw new IllegalArgumentException("Could not find a datasource/helper with the name " + helperName);
}
-
String tempModelName = datasourceInfo.fieldTypeName;
ModelFieldTypeReader reader = readers.get(tempModelName);
-
- if (reader == null) // don't want to block here
+ if (reader == null)
{
- synchronized (ModelFieldTypeReader.class) {
- // must check if null again as one of the blocked threads can still enter
- reader = readers.get(tempModelName);
- if (reader == null) {
- reader = new ModelFieldTypeReader(tempModelName);
- readers.put(tempModelName, reader);
+ synchronized (readers) {
+ FieldTypeInfo fieldTypeInfo = EntityConfigUtil.getFieldTypeInfo(tempModelName);
+ if (fieldTypeInfo == null) {
+ throw new IllegalArgumentException("Could not find a field-type definition with name \"" + tempModelName + "\"");
}
+ ResourceHandler fieldTypeResourceHandler = new MainResourceHandler(EntityConfigUtil.ENTITY_ENGINE_XML_FILENAME, fieldTypeInfo.resourceElement);
+ UtilTimer utilTimer = new UtilTimer();
+ utilTimer.timerString("[ModelFieldTypeReader.getModelFieldTypeReader] Reading field types from " + fieldTypeResourceHandler.getLocation());
+ Document document = null;
+ try {
+ document = fieldTypeResourceHandler.getDocument();
+ } catch (GenericConfigException e) {
+ Debug.logError(e, module);
+ throw new IllegalStateException("Error loading field type file " + fieldTypeResourceHandler.getLocation());
+ }
+ Map<String, ModelFieldType> fieldTypeMap = createFieldTypeCache(document.getDocumentElement(), fieldTypeResourceHandler.getLocation());
+ reader = new ModelFieldTypeReader(fieldTypeMap);
+ readers.put(tempModelName, reader);
+ utilTimer.timerString("[ModelFieldTypeReader.getModelFieldTypeReader] Read " + fieldTypeMap.size() + " field types");
}
}
return reader;
}
- public ModelFieldTypeReader(String modelName) {
- this.modelName = modelName;
- FieldTypeInfo fieldTypeInfo = EntityConfigUtil.getFieldTypeInfo(modelName);
-
- if (fieldTypeInfo == null) {
- throw new IllegalStateException("Could not find a field-type definition with name \"" + modelName + "\"");
- }
- fieldTypeResourceHandler = new MainResourceHandler(EntityConfigUtil.ENTITY_ENGINE_XML_FILENAME, fieldTypeInfo.resourceElement);
-
- // preload caches...
- getFieldTypeCache();
- }
+ protected final Map<String, ModelFieldType> fieldTypeCache;
- public Map<String, ModelFieldType> getFieldTypeCache() {
- if (fieldTypeCache == null) // don't want to block here
- {
- synchronized (ModelFieldTypeReader.class) {
- // must check if null again as one of the blocked threads can still enter
- if (fieldTypeCache == null) // now it's safe
- {
- fieldTypeCache = new HashMap<String, ModelFieldType>();
-
- UtilTimer utilTimer = new UtilTimer();
- // utilTimer.timerString("Before getDocument");
-
- Document document = null;
-
- try {
- document = fieldTypeResourceHandler.getDocument();
- } catch (GenericConfigException e) {
- Debug.logError(e, "Error loading field type file", module);
- }
- if (document == null) {
- fieldTypeCache = null;
- return null;
- }
-
- // utilTimer.timerString("Before getDocumentElement");
- Element docElement = document.getDocumentElement();
-
- if (docElement == null) {
- fieldTypeCache = null;
- return null;
- }
- docElement.normalize();
-
- Node curChild = docElement.getFirstChild();
-
- int i = 0;
-
- if (curChild != null) {
- utilTimer.timerString("Before start of field type loop");
- do {
- if (curChild.getNodeType() == Node.ELEMENT_NODE && "field-type-def".equals(curChild.getNodeName())) {
- i++;
- // utilTimer.timerString("Start loop -- " + i + " --");
- Element curFieldType = (Element) curChild;
- String fieldTypeName = UtilXml.checkEmpty(curFieldType.getAttribute("type"), "[No type name]").intern();
- // utilTimer.timerString(" After fieldTypeName -- " + i + " --");
- ModelFieldType fieldType = createModelFieldType(curFieldType, docElement, null);
-
- // utilTimer.timerString(" After createModelFieldType -- " + i + " --");
- if (fieldType != null) {
- fieldTypeCache.put(fieldTypeName, fieldType);
- // utilTimer.timerString(" After fieldTypeCache.put -- " + i + " --");
- if (Debug.verboseOn()) Debug.logVerbose("-- getModelFieldType: #" + i + " Created fieldType: " + fieldTypeName, module);
- } else {
- Debug.logWarning("-- -- ENTITYGEN ERROR:getModelFieldType: Could not create fieldType for fieldTypeName: " + fieldTypeName, module);
- }
-
- }
- } while ((curChild = curChild.getNextSibling()) != null);
- } else
- Debug.logWarning("No child nodes found.", module);
- utilTimer.timerString("FINISHED - Total Field Types: " + i + " FINISHED");
- }
- }
- }
- return fieldTypeCache;
+ public ModelFieldTypeReader(Map<String, ModelFieldType> fieldTypeMap) {
+ this.fieldTypeCache = fieldTypeMap;
}
/** Creates a Collection with all of the ModelFieldType names
* @return A Collection of ModelFieldType names
*/
public Collection<String> getFieldTypeNames() {
- Map<String, ModelFieldType> ftc = getFieldTypeCache();
-
- return ftc.keySet();
+ return this.fieldTypeCache.keySet();
}
/** Creates a Collection with all of the ModelFieldTypes
* @return A Collection of ModelFieldTypes
*/
public Collection<ModelFieldType> getFieldTypes() {
- Map<String, ModelFieldType> ftc = getFieldTypeCache();
-
- return ftc.values();
+ return this.fieldTypeCache.values();
}
/** Gets an FieldType object based on a definition from the specified XML FieldType descriptor file.
@@ -183,19 +124,7 @@
* @return An FieldType object describing the specified fieldType of the specified descriptor file.
*/
public ModelFieldType getModelFieldType(String fieldTypeName) {
- Map<String, ModelFieldType> ftc = getFieldTypeCache();
-
- if (ftc != null)
- return ftc.get(fieldTypeName);
- else
- return null;
+ return this.fieldTypeCache.get(fieldTypeName);
}
- ModelFieldType createModelFieldType(Element fieldTypeElement, Element docElement, UtilTimer utilTimer) {
- if (fieldTypeElement == null) return null;
-
- ModelFieldType field = new ModelFieldType(fieldTypeElement);
-
- return field;
- }
}