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/08/09 20:04:27 UTC
svn commit: r802567 [4/5] - in /ofbiz/trunk:
applications/order/src/org/ofbiz/order/shoppingcart/
applications/product/src/org/ofbiz/shipment/packing/
applications/product/src/org/ofbiz/shipment/verify/
applications/product/src/org/ofbiz/shipment/weigh...
Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/GenericDelegator.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/GenericDelegator.java?rev=802567&r1=802566&r2=802567&view=diff
==============================================================================
--- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/GenericDelegator.java (original)
+++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/GenericDelegator.java Sun Aug 9 18:04:26 2009
@@ -18,58 +18,25 @@
*/
package org.ofbiz.entity;
-import java.io.FileNotFoundException;
-import java.io.IOException;
import java.net.URL;
-import java.util.Arrays;
import java.util.Collection;
-import java.util.Iterator;
import java.util.List;
-import java.util.ListIterator;
+import java.util.Locale;
import java.util.Map;
import java.util.Set;
-import java.util.TreeSet;
import javax.xml.parsers.ParserConfigurationException;
-import javolution.util.FastList;
-import javolution.util.FastMap;
-
-import org.ofbiz.base.util.Debug;
-import org.ofbiz.base.util.GeneralRuntimeException;
-import org.ofbiz.base.util.UtilDateTime;
-import org.ofbiz.base.util.UtilFormatOut;
-import org.ofbiz.base.util.UtilMisc;
-import org.ofbiz.base.util.UtilValidate;
-import org.ofbiz.base.util.UtilXml;
-import org.ofbiz.base.util.cache.CacheLine;
-import org.ofbiz.base.util.cache.UtilCache;
import org.ofbiz.entity.cache.Cache;
import org.ofbiz.entity.condition.EntityCondition;
-import org.ofbiz.entity.condition.EntityConditionList;
-import org.ofbiz.entity.condition.EntityExpr;
-import org.ofbiz.entity.condition.EntityOperator;
-import org.ofbiz.entity.config.DatasourceInfo;
-import org.ofbiz.entity.config.DelegatorInfo;
-import org.ofbiz.entity.config.EntityConfigUtil;
import org.ofbiz.entity.datasource.GenericHelper;
-import org.ofbiz.entity.datasource.GenericHelperFactory;
import org.ofbiz.entity.eca.EntityEcaHandler;
import org.ofbiz.entity.model.DynamicViewEntity;
import org.ofbiz.entity.model.ModelEntity;
-import org.ofbiz.entity.model.ModelEntityChecker;
-import org.ofbiz.entity.model.ModelField;
import org.ofbiz.entity.model.ModelFieldType;
import org.ofbiz.entity.model.ModelFieldTypeReader;
import org.ofbiz.entity.model.ModelGroupReader;
-import org.ofbiz.entity.model.ModelKeyMap;
import org.ofbiz.entity.model.ModelReader;
-import org.ofbiz.entity.model.ModelRelation;
-import org.ofbiz.entity.model.ModelViewEntity;
-import org.ofbiz.entity.serialize.SerializeException;
-import org.ofbiz.entity.serialize.XmlSerializer;
-import org.ofbiz.entity.transaction.GenericTransactionException;
-import org.ofbiz.entity.transaction.TransactionUtil;
import org.ofbiz.entity.util.DistributedCacheClear;
import org.ofbiz.entity.util.EntityCrypto;
import org.ofbiz.entity.util.EntityFindOptions;
@@ -77,618 +44,127 @@
import org.ofbiz.entity.util.SequenceUtil;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
-import org.w3c.dom.Node;
import org.xml.sax.SAXException;
/**
- * Generic Data Source Delegator Class
- *
+ * Delegator Interface
*/
-public class GenericDelegator implements DelegatorInterface {
-
- public static final String module = GenericDelegator.class.getName();
+public interface GenericDelegator {
- protected ModelReader modelReader = null;
- protected ModelGroupReader modelGroupReader = null;
+ public void clearAllCacheLinesByDummyPK(Collection<GenericPK> dummyPKs);
- /** This flag is only here for lower level technical testing, it shouldn't be user configurable (or at least I don't think so yet); when true all operations without a transaction will be wrapped in one; seems to be necessary for some (all?) XA aware connection pools, and should improve overall stability and consistency */
- public static final boolean alwaysUseTransaction = true;
-
- /** the delegatorCache will now be a HashMap, allowing reload of definitions,
- * but the delegator will always be the same object for the given name */
- protected static Map<String, GenericDelegator> delegatorCache = FastMap.newInstance();
- protected String delegatorName = null;
- protected DelegatorInfo delegatorInfo = null;
-
- protected Cache cache = null;
-
- /** keeps a list of field key sets used in the by and cache, a Set (of Sets of fieldNames) for each entityName */
- protected Map andCacheFieldSets = FastMap.newInstance();
-
- protected DistributedCacheClear distributedCacheClear = null;
- protected EntityEcaHandler<?> entityEcaHandler = null;
- protected SequenceUtil sequencer = null;
- protected EntityCrypto crypto = null;
-
- /** A ThreadLocal variable to allow other methods to specify a user identifier (usually the userLoginId, though technically the Entity Engine doesn't know anything about the UserLogin entity) */
- protected static ThreadLocal<List<Object>> userIdentifierStack = new ThreadLocal<List<Object>>();
- /** A ThreadLocal variable to allow other methods to specify a session identifier (usually the visitId, though technically the Entity Engine doesn't know anything about the Visit entity) */
- protected static ThreadLocal<List<Object>> sessionIdentifierStack = new ThreadLocal<List<Object>>();
-
- private boolean testMode = false;
- private boolean testRollbackInProgress = false;
- private List<TestOperation> testOperations = null;
- private enum OperationType {INSERT, UPDATE, DELETE};
-
- private String originalDelegatorName = null;
-
-
- public static GenericDelegator getGenericDelegator(String delegatorName) {
- if (delegatorName == null) {
- delegatorName = "default";
- Debug.logWarning(new Exception("Location where getting delegator with null name"), "Got a getGenericDelegator call with a null delegatorName, assuming default for the name.", module);
- }
- GenericDelegator delegator = delegatorCache.get(delegatorName);
-
- if (delegator == null) {
- synchronized (GenericDelegator.class) {
- // must check if null again as one of the blocked threads can still enter
- delegator = delegatorCache.get(delegatorName);
- if (delegator == null) {
- if (Debug.infoOn()) Debug.logInfo("Creating new delegator [" + delegatorName + "] (" + Thread.currentThread().getName() + ")", module);
- //Debug.logInfo(new Exception(), "Showing stack where new delegator is being created...", module);
- try {
- delegator = new GenericDelegator(delegatorName);
- } catch (GenericEntityException e) {
- Debug.logError(e, "Error creating delegator", module);
- }
- if (delegator != null) {
- delegatorCache.put(delegatorName, delegator);
- } else {
- Debug.logError("Could not create delegator with name " + delegatorName + ", constructor failed (got null value) not sure why/how.", module);
- }
- }
- }
- }
- return delegator;
- }
-
- protected static List<Object> getUserIdentifierStack() {
- List<Object> curValList = userIdentifierStack.get();
- if (curValList == null) {
- curValList = FastList.newInstance();
- userIdentifierStack.set(curValList);
- }
- return curValList;
- }
-
- public static String getCurrentUserIdentifier() {
- List<Object> curValList = getUserIdentifierStack();
- Object curVal = curValList.size() > 0 ? curValList.get(0) : null;
- if (curVal == null) {
- return null;
- } else {
- return curVal.toString();
- }
- }
-
- public static void pushUserIdentifier(String userIdentifier) {
- if (userIdentifier == null) {
- return;
- }
- List<Object> curValList = getUserIdentifierStack();
- curValList.add(0, userIdentifier);
- }
-
- public static String popUserIdentifier() {
- List<Object> curValList = getUserIdentifierStack();
- if (curValList.size() == 0) {
- return null;
- } else {
- return (String) curValList.remove(0);
- }
- }
-
- public static void clearUserIdentifierStack() {
- List<Object> curValList = getUserIdentifierStack();
- curValList.clear();
- }
-
- protected static List<Object> getSessionIdentifierStack() {
- List<Object> curValList = sessionIdentifierStack.get();
- if (curValList == null) {
- curValList = FastList.newInstance();
- sessionIdentifierStack.set(curValList);
- }
- return curValList;
- }
-
- public static String getCurrentSessionIdentifier() {
- List<Object> curValList = getSessionIdentifierStack();
- Object curVal = curValList.size() > 0 ? curValList.get(0) : null;
- if (curVal == null) {
- return null;
- } else {
- return curVal.toString();
- }
- }
-
- public static void pushSessionIdentifier(String sessionIdentifier) {
- if (sessionIdentifier == null) {
- return;
- }
- List<Object> curValList = getSessionIdentifierStack();
- curValList.add(0, sessionIdentifier);
- }
-
- public static String popSessionIdentifier() {
- List<Object> curValList = getSessionIdentifierStack();
- if (curValList.size() == 0) {
- return null;
- } else {
- return (String) curValList.remove(0);
- }
- }
-
- public static void clearSessionIdentifierStack() {
- List<Object> curValList = getSessionIdentifierStack();
- curValList.clear();
- }
-
- /** Only allow creation through the factory method */
- protected GenericDelegator() {}
-
- /** Only allow creation through the factory method */
- protected GenericDelegator(String delegatorName) throws GenericEntityException {
- //if (Debug.infoOn()) Debug.logInfo("Creating new Delegator with name \"" + delegatorName + "\".", module);
-
- this.delegatorName = delegatorName;
- this.modelReader = ModelReader.getModelReader(delegatorName);
- this.modelGroupReader = ModelGroupReader.getModelGroupReader(delegatorName);
-
- cache = new Cache(delegatorName);
-
- // do the entity model check
- List<String> warningList = FastList.newInstance();
- Debug.logImportant("Doing entity definition check...", module);
- ModelEntityChecker.checkEntities(this, warningList);
- if (warningList.size() > 0) {
- Debug.logWarning("=-=-=-=-= Found " + warningList.size() + " warnings when checking the entity definitions:", module);
- for (String warning: warningList) {
- Debug.logWarning(warning, module);
- }
- }
-
- // initialize helpers by group
- Set<String> groupNames = getModelGroupReader().getGroupNames(delegatorName);
- Iterator<String> groups = UtilMisc.toIterator(groupNames);
- while (groups != null && groups.hasNext()) {
- String groupName = groups.next();
- String helperName = this.getGroupHelperName(groupName);
-
- if (Debug.infoOn()) Debug.logInfo("Delegator \"" + delegatorName + "\" initializing helper \"" +
- helperName + "\" for entity group \"" + groupName + "\".", module);
- TreeSet<String> helpersDone = new TreeSet<String>();
- if (helperName != null && helperName.length() > 0) {
- // make sure each helper is only loaded once
- if (helpersDone.contains(helperName)) {
- if (Debug.infoOn()) Debug.logInfo("Helper \"" + helperName + "\" already initialized, not re-initializing.", module);
- continue;
- }
- helpersDone.add(helperName);
- // pre-load field type defs, the return value is ignored
- ModelFieldTypeReader.getModelFieldTypeReader(helperName);
- // get the helper and if configured, do the datasource check
- GenericHelper helper = GenericHelperFactory.getHelper(helperName);
-
- DatasourceInfo datasourceInfo = EntityConfigUtil.getDatasourceInfo(helperName);
- if (datasourceInfo.checkOnStart) {
- if (Debug.infoOn()) Debug.logInfo("Doing database check as requested in entityengine.xml with addMissing=" + datasourceInfo.addMissingOnStart, module);
- try {
- helper.checkDataSource(this.getModelEntityMapByGroup(groupName), null, datasourceInfo.addMissingOnStart);
- } catch (GenericEntityException e) {
- Debug.logWarning(e, e.getMessage(), module);
- }
- }
- }
- }
-
- // NOTE: doing some things before the ECAs and such to make sure it is in place just in case it is used in a service engine startup thing or something
- // put the delegator in the master Map by its name
- GenericDelegator.delegatorCache.put(delegatorName, this);
-
- // setup the crypto class
- this.crypto = new EntityCrypto(this);
-
- //time to do some tricks with manual class loading that resolves circular dependencies, like calling services...
- ClassLoader loader = Thread.currentThread().getContextClassLoader();
-
- // if useDistributedCacheClear is false do nothing since the
- // distributedCacheClear member field with a null value will cause the
- // dcc code to do nothing
- if (getDelegatorInfo().useDistributedCacheClear) {
- // initialize the distributedCacheClear mechanism
- String distributedCacheClearClassName = getDelegatorInfo().distributedCacheClearClassName;
-
- try {
- Class dccClass = loader.loadClass(distributedCacheClearClassName);
- this.distributedCacheClear = (DistributedCacheClear) dccClass.newInstance();
- this.distributedCacheClear.setDelegator(this, getDelegatorInfo().distributedCacheClearUserLoginId);
- } catch (ClassNotFoundException e) {
- Debug.logWarning(e, "DistributedCacheClear class with name " + distributedCacheClearClassName + " was not found, distributed cache clearing will be disabled", module);
- } catch (InstantiationException e) {
- Debug.logWarning(e, "DistributedCacheClear class with name " + distributedCacheClearClassName + " could not be instantiated, distributed cache clearing will be disabled", module);
- } catch (IllegalAccessException e) {
- Debug.logWarning(e, "DistributedCacheClear class with name " + distributedCacheClearClassName + " could not be accessed (illegal), distributed cache clearing will be disabled", module);
- } catch (ClassCastException e) {
- Debug.logWarning(e, "DistributedCacheClear class with name " + distributedCacheClearClassName + " does not implement the DistributedCacheClear interface, distributed cache clearing will be disabled", module);
- }
- } else {
- Debug.logInfo("Distributed Cache Clear System disabled for delegator [" + delegatorName + "]", module);
- }
-
- // setup the Entity ECA Handler
- initEntityEcaHandler();
- }
-
- public void initEntityEcaHandler() {
- if (getDelegatorInfo().useEntityEca) {
- ClassLoader loader = Thread.currentThread().getContextClassLoader();
- // initialize the entity eca handler
- String entityEcaHandlerClassName = getDelegatorInfo().entityEcaHandlerClassName;
-
- try {
- Class eecahClass = loader.loadClass(entityEcaHandlerClassName);
- this.entityEcaHandler = (EntityEcaHandler) eecahClass.newInstance();
- this.entityEcaHandler.setDelegator(this);
- } catch (ClassNotFoundException e) {
- Debug.logWarning(e, "EntityEcaHandler class with name " + entityEcaHandlerClassName + " was not found, Entity ECA Rules will be disabled", module);
- } catch (InstantiationException e) {
- Debug.logWarning(e, "EntityEcaHandler class with name " + entityEcaHandlerClassName + " could not be instantiated, Entity ECA Rules will be disabled", module);
- } catch (IllegalAccessException e) {
- Debug.logWarning(e, "EntityEcaHandler class with name " + entityEcaHandlerClassName + " could not be accessed (illegal), Entity ECA Rules will be disabled", module);
- } catch (ClassCastException e) {
- Debug.logWarning(e, "EntityEcaHandler class with name " + entityEcaHandlerClassName + " does not implement the EntityEcaHandler interface, Entity ECA Rules will be disabled", module);
- }
- } else {
- Debug.logInfo("Entity ECA Handler disabled for delegator [" + delegatorName + "]", module);
- }
- }
-
- public String getDelegatorName() {
- return this.delegatorName;
- }
-
- /** Gets the name of the server configuration that corresponds to this delegator
- * @return server configuration name
- */
- public String getOriginalDelegatorName() {
- return this.originalDelegatorName == null ? this.delegatorName : this.originalDelegatorName;
- }
-
- protected DelegatorInfo getDelegatorInfo() {
- if (this.delegatorInfo == null) {
- this.delegatorInfo = EntityConfigUtil.getDelegatorInfo(this.delegatorName);
- }
- return this.delegatorInfo;
- }
+ public void clearAllCacheLinesByValue(Collection<GenericValue> values);
- /** Gets the instance of ModelReader that corresponds to this delegator
- *@return ModelReader that corresponds to this delegator
+ /** This method is a shortcut to completely clear all entity engine caches.
+ * For performance reasons this should not be called very often.
*/
- public ModelReader getModelReader() {
- return this.modelReader;
- }
+ public void clearAllCaches();
- /** Gets the instance of ModelGroupReader that corresponds to this delegator
- *@return ModelGroupReader that corresponds to this delegator
- */
- public ModelGroupReader getModelGroupReader() {
- return this.modelGroupReader;
- }
+ public void clearAllCaches(boolean distribute);
- /** Gets the instance of ModelEntity that corresponds to this delegator and the specified entityName
- *@param entityName The name of the entity to get
- *@return ModelEntity that corresponds to this delegator and the specified entityName
+ /** Remove a CACHED Generic Entity from the cache by its primary key, does NOT
+ * check to see if the passed GenericPK is a complete primary key.
+ * Also tries to clear the corresponding all cache entry.
+ *@param primaryKey The primary key to clear by.
*/
- public ModelEntity getModelEntity(String entityName) {
- try {
- return getModelReader().getModelEntity(entityName);
- } catch (GenericEntityException e) {
- Debug.logError(e, "Error getting entity definition from model", module);
- return null;
- }
- }
+ public void clearCacheLine(GenericPK primaryKey);
- /** Gets the helper name that corresponds to this delegator and the specified entityName
- *@param entityName The name of the entity to get the helper for
- *@return String with the helper name that corresponds to this delegator and the specified entityName
- */
- public String getEntityGroupName(String entityName) {
- return getModelGroupReader().getEntityGroupName(entityName, getOriginalDelegatorName());
- }
+ public void clearCacheLine(GenericPK primaryKey, boolean distribute);
- /** Gets a Map of entity name & entity model pairs that are in the named group
- *@param groupName The name of the group
- *@return Map of entityName String keys and ModelEntity instance values
+ /** Remove a CACHED GenericValue from as many caches as it can. Automatically
+ * tries to remove entries from the all cache, the by primary key cache, and
+ * the by and cache. This is the ONLY method that tries to clear automatically
+ * from the by and cache.
+ *@param value The GenericValue to clear by.
*/
- public Map<String, ModelEntity> getModelEntityMapByGroup(String groupName) throws GenericEntityException {
- Set<String> entityNameSet = getModelGroupReader().getEntityNamesByGroup(groupName);
-
- if (this.getDelegatorInfo().defaultGroupName.equals(groupName)) {
- // add all entities with no group name to the Set
- Set<String> allEntityNames = this.getModelReader().getEntityNames();
- for (String entityName: allEntityNames) {
- if (this.getDelegatorInfo().defaultGroupName.equals(getModelGroupReader().getEntityGroupName(entityName, getDelegatorName()))) {
- entityNameSet.add(entityName);
- }
- }
- }
-
- Map<String, ModelEntity> entities = FastMap.newInstance();
- if (entityNameSet == null || entityNameSet.size() == 0) {
- return entities;
- }
-
- int errorCount = 0;
- for (String entityName: entityNameSet) {
- try {
- ModelEntity entity = getModelReader().getModelEntity(entityName);
- if (entity != null) {
- entities.put(entity.getEntityName(), entity);
- } else {
- throw new IllegalStateException("Could not find entity with name " + entityName);
- }
- } catch (GenericEntityException ex) {
- errorCount++;
- Debug.logError("Entity [" + entityName + "] named in Entity Group with name " + groupName + " are not defined in any Entity Definition file", module);
- }
- }
-
- if (errorCount > 0) {
- Debug.logError(errorCount + " entities were named in ModelGroup but not defined in any EntityModel", module);
- }
+ public void clearCacheLine(GenericValue value);
- return entities;
- }
+ public void clearCacheLine(GenericValue value, boolean distribute);
- /** Gets the helper name that corresponds to this delegator and the specified entityName
- *@param groupName The name of the group to get the helper name for
- *@return String with the helper name that corresponds to this delegator and the specified entityName
- */
- public String getGroupHelperName(String groupName) {
- return this.getDelegatorInfo().groupMap.get(groupName);
- }
-
- /** Gets the helper name that corresponds to this delegator and the specified entityName
- *@param entityName The name of the entity to get the helper name for
- *@return String with the helper name that corresponds to this delegator and the specified entityName
+ /** Remove all CACHED Generic Entity (List) from the cache
+ *@param entityName The Name of the Entity as defined in the entity XML file
*/
- public String getEntityHelperName(String entityName) {
- return this.getGroupHelperName(this.getEntityGroupName(entityName));
- }
+ public void clearCacheLine(String entityName);
- /** Gets the helper name that corresponds to this delegator and the specified entity
- *@param entity The entity to get the helper for
- *@return String with the helper name that corresponds to this delegator and the specified entity
+ /** Remove a CACHED Generic Entity (List) from the cache, either a PK, ByAnd, or All
+ *@param entityName The Name of the Entity as defined in the entity XML file
+ *@param fields The fields of the named entity to query by with their corresponding values
*/
- public String getEntityHelperName(ModelEntity entity) {
- if (entity == null)
- return null;
- return getEntityHelperName(entity.getEntityName());
- }
+ public void clearCacheLine(String entityName, Map<String, ? extends Object> fields);
- /** Gets the an instance of helper that corresponds to this delegator and the specified entityName
- *@param entityName The name of the entity to get the helper for
- *@return GenericHelper that corresponds to this delegator and the specified entityName
+ /** Remove a CACHED Generic Entity (List) from the cache, either a PK, ByAnd, or All
+ *@param entityName The Name of the Entity as defined in the entity XML file
+ *@param fields The fields of the named entity to query by with their corresponding values
*/
- public GenericHelper getEntityHelper(String entityName) throws GenericEntityException {
- String helperName = getEntityHelperName(entityName);
+ public void clearCacheLine(String entityName, Object... fields);
- if (helperName != null && helperName.length() > 0) {
- return GenericHelperFactory.getHelper(helperName);
- } else {
- throw new GenericEntityException("There is no datasource (Helper) configured for the entity-group [" + this.getEntityGroupName(entityName) + "]; was trying to find datesource (helper) for entity [" + entityName + "]");
- }
- }
-
- /** Gets the an instance of helper that corresponds to this delegator and the specified entity
- *@param entity The entity to get the helper for
- *@return GenericHelper that corresponds to this delegator and the specified entity
- */
- public GenericHelper getEntityHelper(ModelEntity entity) throws GenericEntityException {
- return getEntityHelper(entity.getEntityName());
- }
+ public void clearCacheLineByCondition(String entityName, EntityCondition condition);
- /** Gets a field type instance by name from the helper that corresponds to the specified entity
- *@param entity The entity
- *@param type The name of the type
- *@return ModelFieldType instance for the named type from the helper that corresponds to the specified entity
- */
- public ModelFieldType getEntityFieldType(ModelEntity entity, String type) throws GenericEntityException {
- return this.getModelFieldTypeReader(entity).getModelFieldType(type);
- }
-
- public ModelFieldTypeReader getModelFieldTypeReader(ModelEntity entity) {
- String helperName = getEntityHelperName(entity);
- if (helperName == null || helperName.length() <= 0) {
- return null;
- }
- ModelFieldTypeReader modelFieldTypeReader = ModelFieldTypeReader.getModelFieldTypeReader(helperName);
- if (modelFieldTypeReader == null) {
- throw new IllegalArgumentException("ModelFieldTypeReader not found for entity " + entity.getEntityName() + " with helper name " + helperName);
- }
- return modelFieldTypeReader;
- }
+ public void clearCacheLineByCondition(String entityName, EntityCondition condition, boolean distribute);
- /** Gets field type names from the helper that corresponds to the specified entity
- *@param entity The entity
- *@return Collection of field type names from the helper that corresponds to the specified entity
+ /** Remove a CACHED Generic Entity from the cache by its primary key.
+ * Checks to see if the passed GenericPK is a complete primary key, if
+ * it is then the cache line will be removed from the primaryKeyCache; if it
+ * is NOT a complete primary key it will remove the cache line from the andCache.
+ * If the fields map is empty, then the allCache for the entity will be cleared.
+ *@param dummyPK The dummy primary key to clear by.
*/
- public Collection<String> getEntityFieldTypeNames(ModelEntity entity) throws GenericEntityException {
- String helperName = getEntityHelperName(entity);
-
- if (helperName == null || helperName.length() <= 0)
- return null;
- ModelFieldTypeReader modelFieldTypeReader = ModelFieldTypeReader.getModelFieldTypeReader(helperName);
-
- if (modelFieldTypeReader == null) {
- throw new GenericEntityException("ModelFieldTypeReader not found for entity " + entity.getEntityName() + " with helper name " + helperName);
- }
- return modelFieldTypeReader.getFieldTypeNames();
- }
-
- /** Creates a Entity in the form of a GenericValue without persisting it */
- public GenericValue makeValue(String entityName) {
- ModelEntity entity = this.getModelEntity(entityName);
- if (entity == null) {
- throw new IllegalArgumentException("[GenericDelegator.makeValue] could not find entity for entityName: " + entityName);
- }
- GenericValue value = GenericValue.create(entity);
- value.setDelegator(this);
- return value;
- }
-
- /** Creates a Entity in the form of a GenericValue without persisting it */
- public GenericValue makeValue(String entityName, Object... fields) {
- return makeValue(entityName, UtilMisc.<String, Object>toMap(fields));
- }
-
- /** Creates a Entity in the form of a GenericValue without persisting it */
- public GenericValue makeValue(String entityName, Map<String, ? extends Object> fields) {
- ModelEntity entity = this.getModelEntity(entityName);
- if (entity == null) {
- throw new IllegalArgumentException("[GenericDelegator.makeValue] could not find entity for entityName: " + entityName);
- }
- GenericValue value = GenericValue.create(entity, fields);
- value.setDelegator(this);
- return value;
- }
+ public void clearCacheLineFlexible(GenericEntity dummyPK);
- /** Creates a Entity in the form of a GenericValue without persisting it */
- public GenericValue makeValueSingle(String entityName, Object singlePkValue) {
- ModelEntity entity = this.getModelEntity(entityName);
- if (entity == null) {
- throw new IllegalArgumentException("[GenericDelegator.makeValue] could not find entity for entityName: " + entityName);
- }
- GenericValue value = GenericValue.create(entity, singlePkValue);
- value.setDelegator(this);
- return value;
- }
-
- /** Creates a Entity in the form of a GenericValue without persisting it; only valid fields will be pulled from the fields Map */
- public GenericValue makeValidValue(String entityName, Object... fields) {
- return makeValidValue(entityName, UtilMisc.<String, Object>toMap(fields));
- }
-
- /** Creates a Entity in the form of a GenericValue without persisting it; only valid fields will be pulled from the fields Map */
- public GenericValue makeValidValue(String entityName, Map<String, ? extends Object> fields) {
- ModelEntity entity = this.getModelEntity(entityName);
- if (entity == null) {
- throw new IllegalArgumentException("[GenericDelegator.makeValidValue] could not find entity for entityName: " + entityName);
- }
- GenericValue value = GenericValue.create(entity);
- value.setPKFields(fields, true);
- value.setNonPKFields(fields, true);
- value.setDelegator(this);
- return value;
- }
-
- /** Creates a Primary Key in the form of a GenericPK without persisting it */
- public GenericPK makePK(String entityName) {
- return this.makePK(entityName, (Map<String, Object>) null);
- }
-
- /** Creates a Primary Key in the form of a GenericPK without persisting it */
- public GenericPK makePK(String entityName, Object... fields) {
- return makePK(entityName, UtilMisc.<String, Object>toMap(fields));
- }
+ public void clearCacheLineFlexible(GenericEntity dummyPK, boolean distribute);
- /** Creates a Primary Key in the form of a GenericPK without persisting it */
- public GenericPK makePK(String entityName, Map<String, ? extends Object> fields) {
- ModelEntity entity = this.getModelEntity(entityName);
- if (entity == null) {
- throw new IllegalArgumentException("[GenericDelegator.makePK] could not find entity for entityName: " + entityName);
- }
- GenericPK pk = GenericPK.create(entity, fields);
-
- pk.setDelegator(this);
- return pk;
- }
+ public GenericDelegator cloneDelegator();
- /** Creates a Primary Key in the form of a GenericPK without persisting it */
- public GenericPK makePKSingle(String entityName, Object singlePkValue) {
- ModelEntity entity = this.getModelEntity(entityName);
- if (entity == null) {
- throw new IllegalArgumentException("[GenericDelegator.makePKSingle] could not find entity for entityName: " + entityName);
- }
- GenericPK pk = GenericPK.create(entity, singlePkValue);
-
- pk.setDelegator(this);
- return pk;
- }
+ public GenericDelegator cloneDelegator(String delegatorName);
/** Creates a Entity in the form of a GenericValue and write it to the datasource
*@param primaryKey The GenericPK to create a value in the datasource from
*@return GenericValue instance containing the new instance
*/
- public GenericValue create(GenericPK primaryKey) throws GenericEntityException {
- return this.create(primaryKey, true);
- }
+ public GenericValue create(GenericPK primaryKey) throws GenericEntityException;
/** Creates a Entity in the form of a GenericValue and write it to the datasource
*@param primaryKey The GenericPK to create a value in the datasource from
*@param doCacheClear boolean that specifies whether to clear related cache entries for this primaryKey to be created
*@return GenericValue instance containing the new instance
*/
- public GenericValue create(GenericPK primaryKey, boolean doCacheClear) throws GenericEntityException {
- if (primaryKey == null) {
- throw new GenericEntityException("Cannot create from a null primaryKey");
- }
+ public GenericValue create(GenericPK primaryKey, boolean doCacheClear) throws GenericEntityException;
- return this.create(GenericValue.create(primaryKey), doCacheClear);
- }
+ /** Creates a Entity in the form of a GenericValue and write it to the datasource
+ *@param value The GenericValue to create a value in the datasource from
+ *@return GenericValue instance containing the new instance
+ */
+ public GenericValue create(GenericValue value) throws GenericEntityException;
- /** Creates a Entity in the form of a GenericValue and write it to the database
+ /** Creates a Entity in the form of a GenericValue and write it to the datasource
+ *@param value The GenericValue to create a value in the datasource from
+ *@param doCacheClear boolean that specifies whether or not to automatically clear cache entries related to this operation
*@return GenericValue instance containing the new instance
*/
- public GenericValue create(String entityName, Object... fields) throws GenericEntityException {
- return create(entityName, UtilMisc.<String, Object>toMap(fields));
- }
+ public GenericValue create(GenericValue value, boolean doCacheClear) throws GenericEntityException;
/** Creates a Entity in the form of a GenericValue and write it to the database
*@return GenericValue instance containing the new instance
*/
- public GenericValue create(String entityName, Map<String, ? extends Object> fields) throws GenericEntityException {
- if (entityName == null || fields == null) {
- return null;
- }
- ModelEntity entity = this.getModelReader().getModelEntity(entityName);
- GenericValue genericValue = GenericValue.create(entity, fields);
-
- return this.create(genericValue, true);
- }
+ public GenericValue create(String entityName, Map<String, ? extends Object> fields) throws GenericEntityException;
/** Creates a Entity in the form of a GenericValue and write it to the database
*@return GenericValue instance containing the new instance
*/
- public GenericValue createSingle(String entityName, Object singlePkValue) throws GenericEntityException {
- if (entityName == null || singlePkValue == null) {
- return null;
- }
- ModelEntity entity = this.getModelReader().getModelEntity(entityName);
- GenericValue genericValue = GenericValue.create(entity, singlePkValue);
+ public GenericValue create(String entityName, Object... fields) throws GenericEntityException;
- return this.create(genericValue, true);
- }
+ /** Creates or stores an Entity
+ *@param value The GenericValue instance containing the new or existing instance
+ *@return GenericValue instance containing the new or updated instance
+ */
+ public GenericValue createOrStore(GenericValue value) throws GenericEntityException;
- /** Creates a Entity in the form of a GenericValue and write it to the datasource
- *@param value The GenericValue to create a value in the datasource from
- *@return GenericValue instance containing the new instance
+ /** Creates or stores an Entity
+ *@param value The GenericValue instance containing the new or existing instance
+ *@param doCacheClear boolean that specifies whether or not to automatically clear cache entries related to this operation
+ *@return GenericValue instance containing the new or updated instance
*/
- public GenericValue create(GenericValue value) throws GenericEntityException {
- return this.create(value, true);
- }
+ public GenericValue createOrStore(GenericValue value, boolean doCacheClear) throws GenericEntityException;
/** Sets the sequenced ID (for entity with one primary key field ONLY), and then does a create in the database
* as normal. The reason to do it this way is that it will retry and fix the sequence if somehow the sequencer
@@ -696,1034 +172,372 @@
*@param value The GenericValue to create a value in the datasource from
*@return GenericValue instance containing the new instance
*/
- public GenericValue createSetNextSeqId(GenericValue value) throws GenericEntityException {
- boolean doCacheClear = true;
-
- GenericHelper helper = getEntityHelper(value.getEntityName());
- // just make sure it is this delegator...
- value.setDelegator(this);
- // this will throw an IllegalArgumentException if the entity for the value does not have one pk field, or if it already has a value set for the one pk field
- value.setNextSeqId();
-
- boolean beganTransaction = false;
- try {
- if (alwaysUseTransaction) {
- beganTransaction = TransactionUtil.begin();
- }
-
- EntityEcaRuleRunner<?> ecaRunner = this.getEcaRuleRunner(value.getEntityName());
- ecaRunner.evalRules(EntityEcaHandler.EV_VALIDATE, EntityEcaHandler.OP_CREATE, value, false);
-
- if (value == null) {
- throw new GenericEntityException("Cannot create a null value");
- }
-
- ecaRunner.evalRules(EntityEcaHandler.EV_RUN, EntityEcaHandler.OP_CREATE, value, false);
-
- value.setDelegator(this);
- this.encryptFields(value);
-
- // if audit log on for any fields, save new value with no old value because it's a create
- if (value != null && value.getModelEntity().getHasFieldWithAuditLog()) {
- createEntityAuditLogAll(value, false, false);
- }
-
- try {
- value = helper.create(value);
-
- if (testMode) {
- storeForTestRollback(new TestOperation(OperationType.INSERT, value));
- }
- } catch (GenericEntityException e) {
- // see if this was caused by an existing record before resetting the sequencer and trying again
- // NOTE: use the helper directly so ECA rules, etc won't be run
- GenericValue existingValue = helper.findByPrimaryKey(value.getPrimaryKey());
- if (existingValue == null) {
- throw e;
- } else {
- Debug.logInfo("Error creating entity record with a sequenced value [" + value.getPrimaryKey() + "], trying again about to refresh bank for entity [" + value.getEntityName() + "]", module);
-
- // found an existing value... was probably a duplicate key, so clean things up and try again
- this.sequencer.forceBankRefresh(value.getEntityName(), 1);
-
- value.setNextSeqId();
- value = helper.create(value);
- Debug.logInfo("Successfully created new entity record on retry with a sequenced value [" + value.getPrimaryKey() + "], after getting refreshed bank for entity [" + value.getEntityName() + "]", module);
-
- if (testMode) {
- storeForTestRollback(new TestOperation(OperationType.INSERT, value));
- }
- }
- }
-
- if (value != null) {
- value.setDelegator(this);
- if (value.lockEnabled()) {
- refresh(value, doCacheClear);
- } else {
- if (doCacheClear) {
- ecaRunner.evalRules(EntityEcaHandler.EV_CACHE_CLEAR, EntityEcaHandler.OP_CREATE, value, false);
- this.clearCacheLine(value);
- }
- }
- }
-
- ecaRunner.evalRules(EntityEcaHandler.EV_RETURN, EntityEcaHandler.OP_CREATE, value, false);
-
- return value;
- } catch (GenericEntityException e) {
- String errMsg = "Failure in create operation for entity [" + value.getEntityName() + "]: " + e.toString() + ". Rolling back transaction.";
- Debug.logError(e, errMsg, module);
- try {
- // only rollback the transaction if we started one...
- TransactionUtil.rollback(beganTransaction, errMsg, e);
- } catch (GenericEntityException e2) {
- Debug.logError(e2, "[GenericDelegator] Could not rollback transaction: " + e2.toString(), module);
- }
- // after rolling back, rethrow the exception
- throw e;
- } finally {
- // only commit the transaction if we started one... this will throw an exception if it fails
- TransactionUtil.commit(beganTransaction);
- }
- }
+ public GenericValue createSetNextSeqId(GenericValue value) throws GenericEntityException;
- /** Creates a Entity in the form of a GenericValue and write it to the datasource
- *@param value The GenericValue to create a value in the datasource from
- *@param doCacheClear boolean that specifies whether or not to automatically clear cache entries related to this operation
+ /** Creates a Entity in the form of a GenericValue and write it to the database
*@return GenericValue instance containing the new instance
*/
- public GenericValue create(GenericValue value, boolean doCacheClear) throws GenericEntityException {
- boolean beganTransaction = false;
- try {
- if (alwaysUseTransaction) {
- beganTransaction = TransactionUtil.begin();
- }
-
- EntityEcaRuleRunner<?> ecaRunner = this.getEcaRuleRunner(value.getEntityName());
- ecaRunner.evalRules(EntityEcaHandler.EV_VALIDATE, EntityEcaHandler.OP_CREATE, value, false);
-
- if (value == null) {
- throw new GenericEntityException("Cannot create a null value");
- }
- GenericHelper helper = getEntityHelper(value.getEntityName());
-
- ecaRunner.evalRules(EntityEcaHandler.EV_RUN, EntityEcaHandler.OP_CREATE, value, false);
-
- value.setDelegator(this);
- this.encryptFields(value);
-
- // if audit log on for any fields, save new value with no old value because it's a create
- if (value != null && value.getModelEntity().getHasFieldWithAuditLog()) {
- createEntityAuditLogAll(value, false, false);
- }
-
- value = helper.create(value);
-
- if (testMode) {
- storeForTestRollback(new TestOperation(OperationType.INSERT, value));
- }
- if (value != null) {
- value.setDelegator(this);
- if (value.lockEnabled()) {
- refresh(value, doCacheClear);
- } else {
- if (doCacheClear) {
- ecaRunner.evalRules(EntityEcaHandler.EV_CACHE_CLEAR, EntityEcaHandler.OP_CREATE, value, false);
- this.clearCacheLine(value);
- }
- }
- }
-
- ecaRunner.evalRules(EntityEcaHandler.EV_RETURN, EntityEcaHandler.OP_CREATE, value, false);
-
- return value;
- } catch (GenericEntityException e) {
- String errMsg = "Failure in create operation for entity [" + value.getEntityName() + "]: " + e.toString() + ". Rolling back transaction.";
- Debug.logError(e, errMsg, module);
- try {
- // only rollback the transaction if we started one...
- TransactionUtil.rollback(beganTransaction, errMsg, e);
- } catch (GenericEntityException e2) {
- Debug.logError(e2, "[GenericDelegator] Could not rollback transaction: " + e2.toString(), module);
- }
- // after rolling back, rethrow the exception
- throw e;
- } finally {
- // only commit the transaction if we started one... this will throw an exception if it fails
- TransactionUtil.commit(beganTransaction);
- }
- }
+ public GenericValue createSingle(String entityName, Object singlePkValue) throws GenericEntityException;
- /** Creates or stores an Entity
- *@param value The GenericValue instance containing the new or existing instance
- *@param doCacheClear boolean that specifies whether or not to automatically clear cache entries related to this operation
- *@return GenericValue instance containing the new or updated instance
- */
- public GenericValue createOrStore(GenericValue value, boolean doCacheClear) throws GenericEntityException {
- boolean beganTransaction = false;
- try {
- if (alwaysUseTransaction) {
- beganTransaction = TransactionUtil.begin();
- }
-
- GenericValue checkValue = this.findOne(value.getEntityName(), value.getPrimaryKey(), false);
- if (checkValue != null) {
- this.store(value, doCacheClear);
- } else {
- this.create(value, doCacheClear);
- }
- if (value.lockEnabled()) {
- this.refresh(value);
- }
-
- return value;
- } catch (GenericEntityException e) {
- String errMsg = "Failure in createOrStore operation for entity [" + value.getEntityName() + "]: " + e.toString() + ". Rolling back transaction.";
- Debug.logError(e, errMsg, module);
- try {
- // only rollback the transaction if we started one...
- TransactionUtil.rollback(beganTransaction, errMsg, e);
- } catch (GenericEntityException e2) {
- Debug.logError(e2, "[GenericDelegator] Could not rollback transaction: " + e2.toString(), module);
- }
- // after rolling back, rethrow the exception
- throw e;
- } finally {
- // only commit the transaction if we started one... this will throw an exception if it fails
- TransactionUtil.commit(beganTransaction);
- }
- }
+ public void decryptFields(GenericEntity entity) throws GenericEntityException;
- /** Creates or stores an Entity
- *@param value The GenericValue instance containing the new or existing instance
- *@return GenericValue instance containing the new or updated instance
+ public void decryptFields(List<? extends GenericEntity> entities) throws GenericEntityException;
+
+ public void encryptFields(GenericEntity entity) throws GenericEntityException;
+
+ public void encryptFields(List<? extends GenericEntity> entities) throws GenericEntityException;
+
+ public Object encryptFieldValue(String entityName, Object fieldValue) throws EntityCryptoException;
+
+ /** Finds GenericValues by the conditions specified in the EntityCondition object, the the EntityCondition javadoc for more details.
+ * NOTE 20080502: 3 references
+ *@param entityName The name of the Entity as defined in the entity XML file
+ *@param whereEntityCondition The EntityCondition object that specifies how to constrain this query before any groupings are done (if this is a view entity with group-by aliases)
+ *@param havingEntityCondition The EntityCondition object that specifies how to constrain this query after any groupings are done (if this is a view entity with group-by aliases)
+ *@param fieldsToSelect The fields of the named entity to get from the database; if empty or null all fields will be retreived
+ *@param orderBy The fields of the named entity to order the query by; optionally add a " ASC" for ascending or " DESC" for descending
+ *@param findOptions An instance of EntityFindOptions that specifies advanced query options. See the EntityFindOptions JavaDoc for more details.
+ *@return EntityListIterator representing the result of the query: NOTE THAT THIS MUST BE CLOSED (preferably in a finally block) WHEN YOU ARE
+ * DONE WITH IT, AND DON'T LEAVE IT OPEN TOO LONG BEACUSE IT WILL MAINTAIN A DATABASE CONNECTION.
*/
- public GenericValue createOrStore(GenericValue value) throws GenericEntityException {
- return createOrStore(value, true);
- }
-
- protected void saveEntitySyncRemoveInfo(GenericEntity dummyPK) throws GenericEntityException {
- // don't store remove info on entities where it is disabled
- if (dummyPK.getModelEntity().getNoAutoStamp() || this.testRollbackInProgress) {
- return;
- }
-
- // don't store remove info on things removed on an entity sync
- if (dummyPK.getIsFromEntitySync()) {
- return;
- }
-
- String serializedPK = null;
- try {
- serializedPK = XmlSerializer.serialize(dummyPK);
- } catch (SerializeException e) {
- Debug.logError(e, "Could not serialize primary key to save EntitySyncRemove", module);
- } catch (FileNotFoundException e) {
- Debug.logError(e, "Could not serialize primary key to save EntitySyncRemove", module);
- } catch (IOException e) {
- Debug.logError(e, "Could not serialize primary key to save EntitySyncRemove", module);
- }
-
- if (serializedPK != null) {
- GenericValue entitySyncRemove = this.makeValue("EntitySyncRemove");
- entitySyncRemove.set("primaryKeyRemoved", serializedPK);
- this.createSetNextSeqId(entitySyncRemove);
- }
- }
+ public EntityListIterator find(String entityName, EntityCondition whereEntityCondition, EntityCondition havingEntityCondition, Set<String> fieldsToSelect, List<String> orderBy, EntityFindOptions findOptions) throws GenericEntityException;
- /** Remove a Generic Entity corresponding to the primaryKey
- *@param primaryKey The primary key of the entity to remove.
- *@return int representing number of rows effected by this operation
+ /** Finds all Generic entities
+ * NOTE 20080502: 14 references; all changed to findList
+ *@param entityName The Name of the Entity as defined in the entity XML file
+ *@return List containing all Generic entities
+ *@deprecated Use findList() instead
*/
- public int removeByPrimaryKey(GenericPK primaryKey) throws GenericEntityException {
- int retVal = this.removeByPrimaryKey(primaryKey, true);
- return retVal;
- }
+ @Deprecated
+ public List<GenericValue> findAll(String entityName) throws GenericEntityException;
- /** Remove a Generic Entity corresponding to the primaryKey
- *@param primaryKey The primary key of the entity to remove.
- *@param doCacheClear boolean that specifies whether to clear cache entries for this primaryKey to be removed
- *@return int representing number of rows effected by this operation
+ /** Finds all Generic entities
+ * NOTE 20080502: 10 references; all changed to findList
+ *@param entityName The Name of the Entity as defined in the entity XML file
+ *@param orderBy The fields of the named entity to order the query by; optionally add a " ASC" for ascending or " DESC" for descending
+ *@return List containing all Generic entities
+ *@deprecated Use findList() instead
*/
- public int removeByPrimaryKey(GenericPK primaryKey, boolean doCacheClear) throws GenericEntityException {
- boolean beganTransaction = false;
- try {
- if (alwaysUseTransaction) {
- beganTransaction = TransactionUtil.begin();
- }
-
- EntityEcaRuleRunner<?> ecaRunner = this.getEcaRuleRunner(primaryKey.getEntityName());
- ecaRunner.evalRules(EntityEcaHandler.EV_VALIDATE, EntityEcaHandler.OP_REMOVE, primaryKey, false);
-
- GenericHelper helper = getEntityHelper(primaryKey.getEntityName());
-
- if (doCacheClear) {
- // always clear cache before the operation
- ecaRunner.evalRules(EntityEcaHandler.EV_CACHE_CLEAR, EntityEcaHandler.OP_REMOVE, primaryKey, false);
- this.clearCacheLine(primaryKey);
- }
-
- ecaRunner.evalRules(EntityEcaHandler.EV_RUN, EntityEcaHandler.OP_REMOVE, primaryKey, false);
-
- // if audit log on for any fields, save old value before removing so it's still there
- if (primaryKey != null && primaryKey.getModelEntity().getHasFieldWithAuditLog()) {
- createEntityAuditLogAll(this.findOne(primaryKey.getEntityName(), primaryKey, false), true, true);
- }
-
- GenericValue removedEntity = null;
- if (testMode) {
- removedEntity = this.findOne(primaryKey.entityName, primaryKey, false);
- }
- int num = helper.removeByPrimaryKey(primaryKey);
- this.saveEntitySyncRemoveInfo(primaryKey);
-
- if (testMode) {
- storeForTestRollback(new TestOperation(OperationType.DELETE, removedEntity));
- }
-
- ecaRunner.evalRules(EntityEcaHandler.EV_RETURN, EntityEcaHandler.OP_REMOVE, primaryKey, false);
-
- return num;
- } catch (GenericEntityException e) {
- String errMsg = "Failure in removeByPrimaryKey operation for entity [" + primaryKey.getEntityName() + "]: " + e.toString() + ". Rolling back transaction.";
- Debug.logError(e, errMsg, module);
- try {
- // only rollback the transaction if we started one...
- TransactionUtil.rollback(beganTransaction, errMsg, e);
- } catch (GenericEntityException e2) {
- Debug.logError(e2, "[GenericDelegator] Could not rollback transaction: " + e2.toString(), module);
- }
- // after rolling back, rethrow the exception
- throw e;
- } finally {
- // only commit the transaction if we started one... this will throw an exception if it fails
- TransactionUtil.commit(beganTransaction);
- }
- }
+ @Deprecated
+ public List<GenericValue> findAll(String entityName, List<String> orderBy) throws GenericEntityException;
- /** Remove a Generic Value from the database
- *@param value The GenericValue object of the entity to remove.
- *@return int representing number of rows effected by this operation
+ /** Finds all Generic entities
+ * NOTE 20080502: 0 references
+ *@param entityName The Name of the Entity as defined in the entity XML file
+ *@param orderBy The fields of the named entity to order the query by; optionally add a " ASC" for ascending or " DESC" for descending
+ *@return List containing all Generic entities
+ *@deprecated Use findList() instead
*/
- public int removeValue(GenericValue value) throws GenericEntityException {
- return this.removeValue(value, true);
- }
+ @Deprecated
+ public List<GenericValue> findAll(String entityName, String... orderBy) throws GenericEntityException;
- /** Remove a Generic Value from the database
- *@param value The GenericValue object of the entity to remove.
- *@param doCacheClear boolean that specifies whether to clear cache entries for this value to be removed
- *@return int representing number of rows effected by this operation
+ /** Find a number of Generic Value objects by their Primary Keys, all at once
+ * NOTE 20080502: 0 references
+ *@param primaryKeys A Collection of primary keys to find by.
+ *@return List of GenericValue objects corresponding to the passed primaryKey objects
+ *@deprecated
*/
- public int removeValue(GenericValue value, boolean doCacheClear) throws GenericEntityException {
- // NOTE: this does not call the GenericDelegator.removeByPrimaryKey method because it has more information to pass to the ECA rule hander
- boolean beganTransaction = false;
- try {
- if (alwaysUseTransaction) {
- beganTransaction = TransactionUtil.begin();
- }
-
- EntityEcaRuleRunner<?> ecaRunner = this.getEcaRuleRunner(value.getEntityName());
- ecaRunner.evalRules(EntityEcaHandler.EV_VALIDATE, EntityEcaHandler.OP_REMOVE, value, false);
-
- GenericHelper helper = getEntityHelper(value.getEntityName());
-
- if (doCacheClear) {
- ecaRunner.evalRules(EntityEcaHandler.EV_CACHE_CLEAR, EntityEcaHandler.OP_REMOVE, value, false);
- this.clearCacheLine(value);
- }
-
- ecaRunner.evalRules(EntityEcaHandler.EV_RUN, EntityEcaHandler.OP_REMOVE, value, false);
-
- // if audit log on for any fields, save old value before actual remove
- if (value != null && value.getModelEntity().getHasFieldWithAuditLog()) {
- createEntityAuditLogAll(value, true, true);
- }
-
- GenericValue removedValue = null;
- if (testMode) {
- removedValue = this.findOne(value.getEntityName(), value.getPrimaryKey(), false);
- }
-
- int num = helper.removeByPrimaryKey(value.getPrimaryKey());
-
- if (testMode) {
- storeForTestRollback(new TestOperation(OperationType.DELETE, removedValue));
- }
-
- this.saveEntitySyncRemoveInfo(value.getPrimaryKey());
-
- ecaRunner.evalRules(EntityEcaHandler.EV_RETURN, EntityEcaHandler.OP_REMOVE, value, false);
-
- return num;
- } catch (GenericEntityException e) {
- String errMsg = "Failure in removeValue operation for entity [" + value.getEntityName() + "]: " + e.toString() + ". Rolling back transaction.";
- Debug.logError(e, errMsg, module);
- try {
- // only rollback the transaction if we started one...
- TransactionUtil.rollback(beganTransaction, errMsg, e);
- } catch (GenericEntityException e2) {
- Debug.logError(e2, "[GenericDelegator] Could not rollback transaction: " + e2.toString(), module);
- }
- // after rolling back, rethrow the exception
- throw e;
- } finally {
- // only commit the transaction if we started one... this will throw an exception if it fails
- TransactionUtil.commit(beganTransaction);
- }
- }
+ @Deprecated
+ public List<GenericValue> findAllByPrimaryKeys(Collection<GenericPK> primaryKeys) throws GenericEntityException;
- /** Removes/deletes Generic Entity records found by all of the specified fields (ie: combined using AND)
- *@param entityName The Name of the Entity as defined in the entity XML file
- *@param fields The fields of the named entity to query by with their corresponding values
- *@return int representing number of rows effected by this operation
+ /** Find a number of Generic Value objects by their Primary Keys, all at once;
+ * this first looks in the local cache for each PK and if there then it puts it
+ * in the return list rather than putting it in the batch to send to
+ * a given helper.
+ * NOTE 20080502: 0 references
+ *@param primaryKeys A Collection of primary keys to find by.
+ *@return List of GenericValue objects corresponding to the passed primaryKey objects
+ *@deprecated
*/
- public int removeByAnd(String entityName, Object... fields) throws GenericEntityException {
- return removeByAnd(entityName, UtilMisc.<String, Object>toMap(fields));
- }
+ @Deprecated
+ public List<GenericValue> findAllByPrimaryKeysCache(Collection<GenericPK> primaryKeys) throws GenericEntityException;
- /** Removes/deletes Generic Entity records found by all of the specified fields (ie: combined using AND)
+ /** Finds all Generic entities, looking first in the cache
+ * NOTE 20080502: 4 references; all changed to findList
*@param entityName The Name of the Entity as defined in the entity XML file
- *@param fields The fields of the named entity to query by with their corresponding values
- *@return int representing number of rows effected by this operation
+ *@return List containing all Generic entities
+ *@deprecated Use findList() instead
*/
- public int removeByAnd(String entityName, Map<String, ? extends Object> fields) throws GenericEntityException {
- return this.removeByAnd(entityName, fields, true);
- }
+ @Deprecated
+ public List<GenericValue> findAllCache(String entityName) throws GenericEntityException;
- /** Removes/deletes Generic Entity records found by all of the specified fields (ie: combined using AND)
+ /** Finds all Generic entities, looking first in the cache; uses orderBy for lookup, but only keys results on the entityName and fields
+ * NOTE 20080502: 2 references; all changed to findList
*@param entityName The Name of the Entity as defined in the entity XML file
- *@param doCacheClear boolean that specifies whether to clear cache entries for this value to be removed
- *@param fields The fields of the named entity to query by with their corresponding values
- *@return int representing number of rows effected by this operation
+ *@param orderBy The fields of the named entity to order the query by; optionally add a " ASC" for ascending or " DESC" for descending
+ *@return List containing all Generic entities
+ *@deprecated Use findList() instead
*/
- public int removeByAnd(String entityName, boolean doCacheClear, Object... fields) throws GenericEntityException {
- return removeByAnd(entityName, UtilMisc.<String, Object>toMap(fields), doCacheClear);
- }
+ @Deprecated
+ public List<GenericValue> findAllCache(String entityName, List<String> orderBy) throws GenericEntityException;
- /** Removes/deletes Generic Entity records found by all of the specified fields (ie: combined using AND)
+ /** Finds all Generic entities, looking first in the cache; uses orderBy for lookup, but only keys results on the entityName and fields
+ * NOTE 20080502: 0 references
*@param entityName The Name of the Entity as defined in the entity XML file
- *@param fields The fields of the named entity to query by with their corresponding values
- *@param doCacheClear boolean that specifies whether to clear cache entries for this value to be removed
- *@return int representing number of rows effected by this operation
+ *@param orderBy The fields of the named entity to order the query by; optionally add a " ASC" for ascending or " DESC" for descending
+ *@return List containing all Generic entities
+ *@deprecated Use findList() instead
*/
- public int removeByAnd(String entityName, Map<String, ? extends Object> fields, boolean doCacheClear) throws GenericEntityException {
- EntityCondition ecl = EntityCondition.makeCondition(fields);
- return removeByCondition(entityName, ecl, doCacheClear);
- }
+ @Deprecated
+ public List<GenericValue> findAllCache(String entityName, String... orderBy) throws GenericEntityException;
- /** Removes/deletes Generic Entity records found by the condition
+ /** Finds Generic Entity records by all of the specified expressions (ie: combined using AND)
+ * NOTE 20080502: 11 references; all changed to findList
*@param entityName The Name of the Entity as defined in the entity XML file
- *@param condition The condition used to restrict the removing
- *@return int representing number of rows effected by this operation
+ *@param expressions The expressions to use for the lookup, each consisting of at least a field name, an EntityOperator, and a value to compare to
+ *@return List of GenericValue instances that match the query
+ *@deprecated Use findList() instead
*/
- public int removeByCondition(String entityName, EntityCondition condition) throws GenericEntityException {
- return this.removeByCondition(entityName, condition, true);
- }
+ @Deprecated
+ public <T extends EntityCondition> List<GenericValue> findByAnd(String entityName, List<T> expressions) throws GenericEntityException;
- /** Removes/deletes Generic Entity records found by the condition
+ /** Finds Generic Entity records by all of the specified expressions (ie: combined using AND)
+ * NOTE 20080502: 24 references; all changed to findList
*@param entityName The Name of the Entity as defined in the entity XML file
- *@param condition The condition used to restrict the removing
- *@param doCacheClear boolean that specifies whether to clear cache entries for this value to be removed
- *@return int representing number of rows effected by this operation
+ *@param expressions The expressions to use for the lookup, each consisting of at least a field name, an EntityOperator, and a value to compare to
+ *@param orderBy The fields of the named entity to order the query by; optionally add a " ASC" for ascending or " DESC" for descending
+ *@return List of GenericValue instances that match the query
+ *@deprecated Use findList() instead
*/
- public int removeByCondition(String entityName, EntityCondition condition, boolean doCacheClear) throws GenericEntityException {
- boolean beganTransaction = false;
- try {
- if (alwaysUseTransaction) {
- beganTransaction = TransactionUtil.begin();
- }
-
- if (doCacheClear) {
- // always clear cache before the operation
- this.clearCacheLineByCondition(entityName, condition);
- }
- ModelEntity modelEntity = getModelReader().getModelEntity(entityName);
- GenericHelper helper = getEntityHelper(entityName);
-
- List<GenericValue> removedEntities = null;
- if (testMode) {
- removedEntities = this.findList(entityName, condition, null, null, null, false);
- }
-
- int rowsAffected = helper.removeByCondition(modelEntity, condition);
-
- if (testMode) {
- for (GenericValue entity : removedEntities) {
- storeForTestRollback(new TestOperation(OperationType.DELETE, entity));
- }
- }
-
- return rowsAffected;
- } catch (GenericEntityException e) {
- String errMsg = "Failure in removeByCondition operation for entity [" + entityName + "]: " + e.toString() + ". Rolling back transaction.";
- Debug.logError(e, errMsg, module);
- try {
- // only rollback the transaction if we started one...
- TransactionUtil.rollback(beganTransaction, errMsg, e);
- } catch (GenericEntityException e2) {
- Debug.logError(e2, "[GenericDelegator] Could not rollback transaction: " + e2.toString(), module);
- }
- // after rolling back, rethrow the exception
- throw e;
- } finally {
- // only commit the transaction if we started one... this will throw an exception if it fails
- TransactionUtil.commit(beganTransaction);
- }
- }
+ @Deprecated
+ public <T extends EntityCondition> List<GenericValue> findByAnd(String entityName, List<T> expressions, List<String> orderBy) throws GenericEntityException;
- /** Remove 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
- *@param value GenericValue instance containing the entity
- *@return int representing number of rows effected by this operation
+ /** Finds Generic Entity records by all of the specified fields (ie: combined using AND)
+ * NOTE 20080502: 264 references
+ * @param entityName The Name of the Entity as defined in the entity XML file
+ * @param fields The fields of the named entity to query by with their corresponding values
+ * @return List of GenericValue instances that match the query
*/
- public int removeRelated(String relationName, GenericValue value) throws GenericEntityException {
- return this.removeRelated(relationName, value, true);
- }
+ public List<GenericValue> findByAnd(String entityName, Map<String, ? extends Object> fields) throws GenericEntityException;
- /** Remove 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
- *@param value GenericValue instance containing the entity
- *@param doCacheClear boolean that specifies whether to clear cache entries for this value to be removed
- *@return int representing number of rows effected by this operation
+ /** Finds Generic Entity records by all of the specified fields (ie: combined using AND)
+ * NOTE 20080502: 72 references
+ * @param entityName The Name of the Entity as defined in the entity XML file
+ * @param fields The fields of the named entity to query by with their corresponding values
+ * @param orderBy The fields of the named entity to order the query by;
+ * optionally add a " ASC" for ascending or " DESC" for descending
+ * @return List of GenericValue instances that match the query
*/
- public int removeRelated(String relationName, GenericValue value, boolean doCacheClear) throws GenericEntityException {
- ModelEntity modelEntity = value.getModelEntity();
- ModelRelation relation = modelEntity.getRelation(relationName);
-
- if (relation == null) {
- throw new GenericModelException("Could not find relation for relationName: " + relationName + " for value " + value);
- }
-
- Map<String, Object> fields = FastMap.newInstance();
- for (int i = 0; i < relation.getKeyMapsSize(); i++) {
- ModelKeyMap keyMap = relation.getKeyMap(i);
- fields.put(keyMap.getRelFieldName(), value.get(keyMap.getFieldName()));
- }
+ public List<GenericValue> findByAnd(String entityName, Map<String, ? extends Object> fields, List<String> orderBy) throws GenericEntityException;
- return this.removeByAnd(relation.getRelEntityName(), fields, doCacheClear);
- }
+ /** Finds Generic Entity records by all of the specified fields (ie: combined using AND)
+ * NOTE 20080502: 1 references
+ * @param entityName The Name of the Entity as defined in the entity XML file
+ * @param fields The fields of the named entity to query by with their corresponding values
+ * @return List of GenericValue instances that match the query
+ */
+ public List<GenericValue> findByAnd(String entityName, Object... fields) throws GenericEntityException;
- /** Refresh the Entity for the GenericValue from the persistent store
- *@param value GenericValue instance containing the entity to refresh
+ /** Finds Generic Entity records by all of the specified expressions (ie: combined using AND)
+ * NOTE 20080502: 0 references
+ *@param entityName The Name of the Entity as defined in the entity XML file
+ *@param expressions The expressions to use for the lookup, each consisting of at least a field name, an EntityOperator, and a value to compare to
+ *@return List of GenericValue instances that match the query
+ *@deprecated Use findList() instead
*/
- public void refresh(GenericValue value) throws GenericEntityException {
- this.refresh(value, true);
- }
+ @Deprecated
+ public <T extends EntityCondition> List<GenericValue> findByAnd(String entityName, T... expressions) throws GenericEntityException;
- /** Refresh the Entity for the GenericValue from the persistent store
- *@param value GenericValue instance containing the entity to refresh
- *@param doCacheClear boolean that specifies whether or not to automatically clear cache entries related to this operation
+ /** Finds Generic Entity records by all of the specified fields (ie: combined using AND), looking first in the cache; uses orderBy for lookup, but only keys results on the entityName and fields
+ * NOTE 20080502: 91 references
+ *@param entityName The Name of the Entity as defined in the entity XML file
+ *@param fields The fields of the named entity to query by with their corresponding values
+ *@return List of GenericValue instances that match the query
*/
- public void refresh(GenericValue value, boolean doCacheClear) throws GenericEntityException {
- if (doCacheClear) {
- // always clear cache before the operation
- clearCacheLine(value);
- }
- GenericPK pk = value.getPrimaryKey();
- GenericValue newValue = this.findOne(pk.getEntityName(), pk, false);
- value.refreshFromValue(newValue);
- }
+ public List<GenericValue> findByAndCache(String entityName, Map<String, ? extends Object> fields) throws GenericEntityException;
- /** Refresh the Entity for the GenericValue from the cache
- *@param value GenericValue instance containing the entity to refresh
+ /** Finds Generic Entity records by all of the specified fields (ie: combined using AND), looking first in the cache; uses orderBy for lookup, but only keys results on the entityName and fields
+ * NOTE 20080502: 56 references
+ *@param entityName The Name of the Entity as defined in the entity XML file
+ *@param fields The fields of the named entity to query by with their corresponding values
+ *@param orderBy The fields of the named entity to order the query by; optionally add a " ASC" for ascending or " DESC" for descending
+ *@return List of GenericValue instances that match the query
*/
- public void refreshFromCache(GenericValue value) throws GenericEntityException {
- GenericPK pk = value.getPrimaryKey();
- GenericValue newValue = findOne(pk.getEntityName(), pk, true);
- value.refreshFromValue(newValue);
- }
+ public List<GenericValue> findByAndCache(String entityName, Map<String, ? extends Object> fields, List<String> orderBy) throws GenericEntityException;
- /** Store a group of values
- *@param entityName The name of the Entity as defined in the entity XML file
- *@param fieldsToSet The fields of the named entity to set in the database
- *@param condition The condition that restricts the list of stored values
- *@return int representing number of rows effected by this operation
- *@throws GenericEntityException
+ /** Finds Generic Entity records by all of the specified fields (ie: combined using AND), looking first in the cache; uses orderBy for lookup, but only keys results on the entityName and fields
+ * NOTE 20080502: 0 references
+ *@param entityName The Name of the Entity as defined in the entity XML file
+ *@param fields The fields of the named entity to query by with their corresponding values
+ *@return List of GenericValue instances that match the query
+ *@deprecated Use findList() instead
*/
- public int storeByCondition(String entityName, Map<String, ? extends Object> fieldsToSet, EntityCondition condition) throws GenericEntityException {
- return storeByCondition(entityName, fieldsToSet, condition, true);
- }
+ @Deprecated
+ public List<GenericValue> findByAndCache(String entityName, Object... fields) throws GenericEntityException;
- /** Store a group of values
+ /** Finds GenericValues by the conditions specified in the EntityCondition object, the the EntityCondition javadoc for more details.
+ * NOTE 20080502: 64 references; all changed to findList
+ *@param entityName The Name of the Entity as defined in the entity model XML file
+ *@param entityCondition The EntityCondition object that specifies how to constrain this query
+ *@param fieldsToSelect The fields of the named entity to get from the database; if empty or null all fields will be retreived
+ *@param orderBy The fields of the named entity to order the query by; optionally add a " ASC" for ascending or " DESC" for descending
+ *@return List of GenericValue objects representing the result
+ *@deprecated Use findList() instead
+ */
+ @Deprecated
+ public List<GenericValue> findByCondition(String entityName, EntityCondition entityCondition, Collection<String> fieldsToSelect, List<String> orderBy) throws GenericEntityException;
+
+ /** Finds GenericValues by the conditions specified in the EntityCondition object, the the EntityCondition javadoc for more details.
+ * NOTE 20080502: 6 references; all changed to findList
*@param entityName The name of the Entity as defined in the entity XML file
- *@param fieldsToSet The fields of the named entity to set in the database
- *@param condition The condition that restricts the list of stored values
- *@param doCacheClear boolean that specifies whether to clear cache entries for these values
- *@return int representing number of rows effected by this operation
- *@throws GenericEntityException
+ *@param whereEntityCondition The EntityCondition object that specifies how to constrain this query before any groupings are done (if this is a view entity with group-by aliases)
+ *@param havingEntityCondition The EntityCondition object that specifies how to constrain this query after any groupings are done (if this is a view entity with group-by aliases)
+ *@param fieldsToSelect The fields of the named entity to get from the database; if empty or null all fields will be retreived
+ *@param orderBy The fields of the named entity to order the query by; optionally add a " ASC" for ascending or " DESC" for descending
+ *@param findOptions An instance of EntityFindOptions that specifies advanced query options. See the EntityFindOptions JavaDoc for more details.
+ *@return List of GenericValue objects representing the result
+ *@deprecated Use findList() instead
*/
- public int storeByCondition(String entityName, Map<String, ? extends Object> fieldsToSet, EntityCondition condition, boolean doCacheClear) throws GenericEntityException {
- boolean beganTransaction = false;
- try {
- if (alwaysUseTransaction) {
- beganTransaction = TransactionUtil.begin();
- }
-
- if (doCacheClear) {
- // always clear cache before the operation
- this.clearCacheLineByCondition(entityName, condition);
- }
- ModelEntity modelEntity = getModelReader().getModelEntity(entityName);
- GenericHelper helper = getEntityHelper(entityName);
-
- List<GenericValue> updatedEntities = null;
- if (testMode) {
- updatedEntities = this.findList(entityName, condition, null, null, null, false);
- }
-
- int rowsAffected = helper.storeByCondition(modelEntity, fieldsToSet, condition);
-
- if (testMode) {
- for (GenericValue entity : updatedEntities) {
- storeForTestRollback(new TestOperation(OperationType.UPDATE, entity));
- }
- }
-
- return rowsAffected;
- } catch (GenericEntityException e) {
- String errMsg = "Failure in storeByCondition operation for entity [" + entityName + "]: " + e.toString() + ". Rolling back transaction.";
- Debug.logError(e, errMsg, module);
- try {
- // only rollback the transaction if we started one...
- TransactionUtil.rollback(beganTransaction, errMsg, e);
- } catch (GenericEntityException e2) {
- Debug.logError(e2, "[GenericDelegator] Could not rollback transaction: " + e2.toString(), module);
- }
- // after rolling back, rethrow the exception
- throw e;
- } finally {
- // only commit the transaction if we started one... this will throw an exception if it fails
- TransactionUtil.commit(beganTransaction);
- }
- }
+ @Deprecated
+ public List<GenericValue> findByCondition(String entityName, EntityCondition whereEntityCondition, EntityCondition havingEntityCondition, Collection<String> fieldsToSelect, List<String> orderBy, EntityFindOptions findOptions) throws GenericEntityException;
- /** Store the Entity from the GenericValue to the persistent store
- *@param value GenericValue instance containing the entity
- *@return int representing number of rows effected by this operation
+ /** Finds GenericValues by the conditions specified in the EntityCondition object, looking first in the cache, see the EntityCondition javadoc for more details.
+ * NOTE 20080502: 17 references; all changed to findList
+ *@param entityName The Name of the Entity as defined in the entity model XML file
+ *@param entityCondition The EntityCondition object that specifies how to constrain this query
+ *@param fieldsToSelect The fields of the named entity to get from the database; if empty or null all fields will be retreived
+ *@param orderBy The fields of the named entity to order the query by; optionally add a " ASC" for ascending or " DESC" for descending
+ *@return List of GenericValue objects representing the result
+ *@deprecated Use findList() instead
*/
- public int store(GenericValue value) throws GenericEntityException {
- return this.store(value, true);
- }
+ @Deprecated
+ public List<GenericValue> findByConditionCache(String entityName, EntityCondition entityCondition, Collection<String> fieldsToSelect, List<String> orderBy) throws GenericEntityException;
- /** Store the Entity from the GenericValue to the persistent store
- *@param value GenericValue instance containing the entity
- *@param doCacheClear boolean that specifies whether or not to automatically clear cache entries related to this operation
- *@return int representing number of rows effected by this operation
+ /**
+ * NOTE 20080502: 1 references; all changed to findList
+ *@deprecated Use findList() instead
*/
- public int store(GenericValue value, boolean doCacheClear) throws GenericEntityException {
- boolean beganTransaction = false;
- try {
- if (alwaysUseTransaction) {
- beganTransaction = TransactionUtil.begin();
- }
-
- EntityEcaRuleRunner<?> ecaRunner = this.getEcaRuleRunner(value.getEntityName());
- ecaRunner.evalRules(EntityEcaHandler.EV_VALIDATE, EntityEcaHandler.OP_STORE, value, false);
- GenericHelper helper = getEntityHelper(value.getEntityName());
-
- if (doCacheClear) {
- // always clear cache before the operation
- ecaRunner.evalRules(EntityEcaHandler.EV_CACHE_CLEAR, EntityEcaHandler.OP_STORE, value, false);
- this.clearCacheLine(value);
- }
-
- ecaRunner.evalRules(EntityEcaHandler.EV_RUN, EntityEcaHandler.OP_STORE, value, false);
- this.encryptFields(value);
-
- // if audit log on for any fields, save old value before the update so we still have both
- if (value != null && value.getModelEntity().getHasFieldWithAuditLog()) {
- createEntityAuditLogAll(value, true, false);
- }
-
- GenericValue updatedEntity = null;
-
- if (testMode) {
- updatedEntity = this.findOne(value.entityName, value.getPrimaryKey(), false);
- }
-
- int retVal = helper.store(value);
-
- if (testMode) {
- storeForTestRollback(new TestOperation(OperationType.UPDATE, updatedEntity));
- }
- // refresh the valueObject to get the new version
- if (value.lockEnabled()) {
- refresh(value, doCacheClear);
- }
-
- ecaRunner.evalRules(EntityEcaHandler.EV_RETURN, EntityEcaHandler.OP_STORE, value, false);
-
- return retVal;
- } catch (GenericEntityException e) {
- String errMsg = "Failure in store operation for entity [" + value.getEntityName() + "]: " + e.toString() + ". Rolling back transaction.";
- Debug.logError(e, errMsg, module);
- try {
- // only rollback the transaction if we started one...
- TransactionUtil.rollback(beganTransaction, errMsg, e);
- } catch (GenericEntityException e2) {
- Debug.logError(e2, "[GenericDelegator] Could not rollback transaction: " + e2.toString(), module);
- }
- // after rolling back, rethrow the exception
- throw e;
- } finally {
- // only commit the transaction if we started one... this will throw an exception if it fails
- TransactionUtil.commit(beganTransaction);
- }
- }
+ @Deprecated
+ public List<GenericValue> findByLike(String entityName, Map<String, ? extends Object> fields) throws GenericEntityException;
- /** Store the Entities from the List GenericValue instances to the persistent store.
- * <br/>This is different than the normal store method in that the store method only does
- * an update, while the storeAll method checks to see if each entity exists, then
- * either does an insert or an update as appropriate.
- * <br/>These updates all happen in one transaction, so they will either all succeed or all fail,
- * if the data source supports transactions. This is just like to othersToStore feature
- * of the GenericEntity on a create or store.
- *@param values List of GenericValue instances containing the entities to store
- *@return int representing number of rows effected by this operation
+ /**
+ * NOTE 20080502: 1 references; all changed to findList
+ *@deprecated Use findList() instead
*/
- public int storeAll(List<GenericValue> values) throws GenericEntityException {
- return this.storeAll(values, true);
- }
+ @Deprecated
+ public List<GenericValue> findByLike(String entityName, Map<String, ? extends Object> fields, List<String> orderBy) throws GenericEntityException;
- /** Store the Entities from the List GenericValue instances to the persistent store.
- * <br/>This is different than the normal store method in that the store method only does
- * an update, while the storeAll method checks to see if each entity exists, then
- * either does an insert or an update as appropriate.
- * <br/>These updates all happen in one transaction, so they will either all succeed or all fail,
- * if the data source supports transactions. This is just like to othersToStore feature
- * of the GenericEntity on a create or store.
- *@param values List of GenericValue instances containing the entities to store
- *@param doCacheClear boolean that specifies whether or not to automatically clear cache entries related to this operation
- *@return int representing number of rows effected by this operation
+ /**
+ * NOTE 20080502: 0 references
+ *@deprecated Use findList() instead
*/
- public int storeAll(List<GenericValue> values, boolean doCacheClear) throws GenericEntityException {
[... 2629 lines stripped ...]