Author: adrianc
Date: Sun Apr 28 09:47:32 2013
New Revision: 1476745
URL: http://svn.apache.org/r1476745
Log:
Pull up some data and methods from GenericValue to GenericEntity. GenericValue
is now a GenericEntity with some convenience methods.
Modified:
ofbiz/trunk/framework/entity/src/org/ofbiz/entity/GenericEntity.java
ofbiz/trunk/framework/entity/src/org/ofbiz/entity/GenericValue.java
Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/GenericEntity.java
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/GenericEntity.java?rev=1476745&r1=1476744&r2=1476745&view=diff
==============================================================================
--- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/GenericEntity.java
(original)
+++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/GenericEntity.java Sun
Apr 28 09:47:32 2013
@@ -51,10 +51,13 @@ import org.ofbiz.base.util.UtilValidate;
import org.ofbiz.base.util.UtilXml;
import org.ofbiz.base.util.collections.LocalizedMap;
import org.ofbiz.entity.condition.EntityCondition;
+import org.ofbiz.entity.condition.EntityFieldMap;
import org.ofbiz.entity.jdbc.SqlJdbcUtil;
import org.ofbiz.entity.model.ModelEntity;
import org.ofbiz.entity.model.ModelField;
import org.ofbiz.entity.model.ModelFieldType;
+import org.ofbiz.entity.model.ModelKeyMap;
+import org.ofbiz.entity.model.ModelRelation;
import org.ofbiz.entity.model.ModelViewEntity;
import org.ofbiz.entity.model.ModelViewEntity.ModelAlias;
import org.w3c.dom.Document;
@@ -85,6 +88,10 @@ public class GenericEntity implements Ma
/** Reference to an instance of GenericDelegator used to do some basic
operations on this entity value. If null various methods in this class will
fail. This is automatically set by the GenericDelegator for all GenericValue
objects instantiated through it. You may set this manually for objects you
instantiate manually, but it is optional. */
private transient Delegator internalDelegator = null;
+ /** A Map containing the original field values from the database.
+ */
+ private Map<String, Object> originalDbValues = null;
+
/** Contains the fields for this entity. Note that this should always be a
* HashMap to allow for two things: non-synchronized reads (synchronized
* writes are done through synchronized setters) and being able to store
@@ -237,6 +244,7 @@ public class GenericEntity implements Ma
// from GenericEntity
this.delegatorName = null;
this.internalDelegator = null;
+ this.originalDbValues = null;
this.fields = new HashMap<String, Object>();
this.entityName = null;
this.modelEntity = null;
@@ -279,6 +287,7 @@ public class GenericEntity implements Ma
*/
public void synchronizedWithDatasource() {
assertIsMutable();
+ this.originalDbValues = Collections.unmodifiableMap(getAllFields());
this.clearChanged();
}
@@ -1522,6 +1531,78 @@ public class GenericEntity implements Ma
getObservable().setChanged();
}
+ public boolean originalDbValuesAvailable() {
+ return this.originalDbValues != null ? true : false;
+ }
+
+ public Object getOriginalDbValue(String name) {
+ if (getModelEntity().getField(name) == null) {
+ throw new IllegalArgumentException("[GenericEntity.get] \"" + name
+ "\" is not a field of " + getEntityName());
+ }
+ if (originalDbValues == null) return null;
+ return originalDbValues.get(name);
+ }
+
+ /**
+ * Checks to see if all foreign key records exist in the database. Will
create a dummy value for
+ * those missing when specified.
+ *
+ * @param insertDummy Create a dummy record using the provided fields
+ * @return true if all FKs exist (or when all missing are created)
+ * @throws GenericEntityException
+ */
+ public boolean checkFks(boolean insertDummy) throws GenericEntityException
{
+ ModelEntity model = this.getModelEntity();
+ Iterator<ModelRelation> relItr = model.getRelationsIterator();
+ while (relItr.hasNext()) {
+ ModelRelation relation = relItr.next();
+ if ("one".equalsIgnoreCase(relation.getType())) {
+ // see if the related value exists
+ Map<String, Object> fields = new HashMap<String, Object>();
+ for (int i = 0; i < relation.getKeyMapsSize(); i++) {
+ ModelKeyMap keyMap = relation.getKeyMap(i);
+ fields.put(keyMap.getRelFieldName(),
this.get(keyMap.getFieldName()));
+ }
+ EntityFieldMap ecl = EntityCondition.makeCondition(fields);
+ long count =
this.getDelegator().findCountByCondition(relation.getRelEntityName(), ecl,
null, null);
+ if (count == 0) {
+ if (insertDummy) {
+ // create the new related value (dummy)
+ GenericValue newValue =
this.getDelegator().makeValue(relation.getRelEntityName());
+ Iterator<ModelKeyMap> keyMapIter =
relation.getKeyMapsIterator();
+ boolean allFieldsSet = true;
+ while (keyMapIter.hasNext()) {
+ ModelKeyMap mkm = keyMapIter.next();
+ if (this.get(mkm.getFieldName()) != null) {
+ newValue.set(mkm.getRelFieldName(),
this.get(mkm.getFieldName()));
+ if (Debug.infoOn()) Debug.logInfo("Set [" +
mkm.getRelFieldName() + "] to - " + this.get(mkm.getFieldName()), module);
+ } else {
+ allFieldsSet = false;
+ }
+ }
+ if (allFieldsSet) {
+ if (Debug.infoOn()) Debug.logInfo("Creating place
holder value : " + newValue, module);
+
+ // inherit create and update times from this value
in order to make this not seem like new/fresh data
+ newValue.put(ModelEntity.CREATE_STAMP_FIELD,
this.get(ModelEntity.CREATE_STAMP_FIELD));
+ newValue.put(ModelEntity.CREATE_STAMP_TX_FIELD,
this.get(ModelEntity.CREATE_STAMP_TX_FIELD));
+ newValue.put(ModelEntity.STAMP_FIELD,
this.get(ModelEntity.STAMP_FIELD));
+ newValue.put(ModelEntity.STAMP_TX_FIELD,
this.get(ModelEntity.STAMP_TX_FIELD));
+ // set isFromEntitySync so that create/update
stamp fields set above will be preserved
+ newValue.setIsFromEntitySync(true);
+ // check the FKs for the newly created entity
+ newValue.checkFks(true);
+ newValue.create();
+ }
+ } else {
+ return false;
+ }
+ }
+ }
+ }
+ return true;
+ }
+
public static interface NULL {
}
Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/GenericValue.java
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/GenericValue.java?rev=1476745&r1=1476744&r2=1476745&view=diff
==============================================================================
--- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/GenericValue.java
(original)
+++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/GenericValue.java Sun Apr
28 09:47:32 2013
@@ -19,20 +19,10 @@
package org.ofbiz.entity;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
import java.util.List;
import java.util.Map;
-import org.ofbiz.base.util.Debug;
-import org.ofbiz.entity.condition.EntityCondition;
-import org.ofbiz.entity.condition.EntityFieldMap;
import org.ofbiz.entity.model.ModelEntity;
-import org.ofbiz.entity.model.ModelKeyMap;
-import org.ofbiz.entity.model.ModelRelation;
-
/**
* Generic Entity Value Object - Handles persistence for any defined entity.
@@ -43,10 +33,6 @@ public class GenericValue extends Generi
public static final GenericValue NULL_VALUE = new NullGenericValue();
- /** A Map containing the original field values from the database.
- */
- private Map<String, Object> originalDbValues = null;
-
/** Creates new GenericValue */
public static GenericValue create(ModelEntity modelEntity) {
GenericValue newValue = new GenericValue();
@@ -82,18 +68,6 @@ public class GenericValue extends Generi
return newValue;
}
- @Override
- public void reset() {
- super.reset();
- this.originalDbValues = null;
- }
-
- @Override
- public void synchronizedWithDatasource() {
- super.synchronizedWithDatasource();
- this.originalDbValues = Collections.unmodifiableMap(getAllFields());
- }
-
public GenericValue create() throws GenericEntityException {
return this.getDelegator().create(this);
}
@@ -114,18 +88,6 @@ public class GenericValue extends Generi
this.getDelegator().refreshFromCache(this);
}
- public boolean originalDbValuesAvailable() {
- return this.originalDbValues != null ? true : false;
- }
-
- public Object getOriginalDbValue(String name) {
- if (getModelEntity().getField(name) == null) {
- throw new IllegalArgumentException("[GenericEntity.get] \"" + name
+ "\" is not a field of " + getEntityName());
- }
- if (originalDbValues == null) return null;
- return originalDbValues.get(name);
- }
-
/** Get the named Related Entity for the GenericValue from the persistent
store
*@param relationName String containing the relation name which is the
combination of relation.title and relation.rel-entity-name as specified in the
entity XML definition file
*@return List of GenericValue instances as specified in the relation
definition
@@ -145,7 +107,7 @@ public class GenericValue extends Generi
*/
@Deprecated
public List<GenericValue> getRelated(String relationName, List<String>
orderBy) throws GenericEntityException {
- return this.getDelegator().getRelated(relationName, new
HashMap<String, Object>(), orderBy, this, false);
+ return this.getDelegator().getRelated(relationName, null, orderBy,
this, false);
}
/** Get the named Related Entity for the GenericValue from the persistent
store
@@ -343,66 +305,6 @@ public class GenericValue extends Generi
return this.getDelegator().getRelatedDummyPK(relationName,
byAndFields, this);
}
- /**
- * Checks to see if all foreign key records exist in the database. Will
create a dummy value for
- * those missing when specified.
- *
- * @param insertDummy Create a dummy record using the provided fields
- * @return true if all FKs exist (or when all missing are created)
- * @throws GenericEntityException
- */
- public boolean checkFks(boolean insertDummy) throws GenericEntityException
{
- ModelEntity model = this.getModelEntity();
- Iterator<ModelRelation> relItr = model.getRelationsIterator();
- while (relItr.hasNext()) {
- ModelRelation relation = relItr.next();
- if ("one".equalsIgnoreCase(relation.getType())) {
- // see if the related value exists
- Map<String, Object> fields = new HashMap<String, Object>();
- for (int i = 0; i < relation.getKeyMapsSize(); i++) {
- ModelKeyMap keyMap = relation.getKeyMap(i);
- fields.put(keyMap.getRelFieldName(),
this.get(keyMap.getFieldName()));
- }
- EntityFieldMap ecl = EntityCondition.makeCondition(fields);
- long count =
this.getDelegator().findCountByCondition(relation.getRelEntityName(), ecl,
null, null);
- if (count == 0) {
- if (insertDummy) {
- // create the new related value (dummy)
- GenericValue newValue =
this.getDelegator().makeValue(relation.getRelEntityName());
- Iterator<ModelKeyMap> keyMapIter =
relation.getKeyMapsIterator();
- boolean allFieldsSet = true;
- while (keyMapIter.hasNext()) {
- ModelKeyMap mkm = keyMapIter.next();
- if (this.get(mkm.getFieldName()) != null) {
- newValue.set(mkm.getRelFieldName(),
this.get(mkm.getFieldName()));
- if (Debug.infoOn()) Debug.logInfo("Set [" +
mkm.getRelFieldName() + "] to - " + this.get(mkm.getFieldName()), module);
- } else {
- allFieldsSet = false;
- }
- }
- if (allFieldsSet) {
- if (Debug.infoOn()) Debug.logInfo("Creating place
holder value : " + newValue, module);
-
- // inherit create and update times from this value
in order to make this not seem like new/fresh data
- newValue.put(ModelEntity.CREATE_STAMP_FIELD,
this.get(ModelEntity.CREATE_STAMP_FIELD));
- newValue.put(ModelEntity.CREATE_STAMP_TX_FIELD,
this.get(ModelEntity.CREATE_STAMP_TX_FIELD));
- newValue.put(ModelEntity.STAMP_FIELD,
this.get(ModelEntity.STAMP_FIELD));
- newValue.put(ModelEntity.STAMP_TX_FIELD,
this.get(ModelEntity.STAMP_TX_FIELD));
- // set isFromEntitySync so that create/update
stamp fields set above will be preserved
- newValue.setIsFromEntitySync(true);
- // check the FKs for the newly created entity
- newValue.checkFks(true);
- newValue.create();
- }
- } else {
- return false;
- }
- }
- }
- }
- return true;
- }
-
/** Clones this GenericValue, this is a shallow clone & uses the default
shallow HashMap clone
*@return Object that is a clone of this GenericValue
*/