📄 genericvalue.java
字号:
/* * $Id: GenericValue.java 5462 2005-08-05 18:35:48Z jonesde $ * * Copyright (c) 2001-2005 The Open For Business Project - www.ofbiz.org * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT * OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * THE USE OR OTHER DEALINGS IN THE SOFTWARE. */package org.ofbiz.entity;import java.util.Iterator;import java.util.List;import java.util.Map;import javolution.lang.Reusable;import javolution.realtime.ObjectFactory;import javolution.util.FastMap;import org.ofbiz.base.util.Debug;import org.ofbiz.base.util.UtilMisc;import org.ofbiz.base.util.UtilValidate;import org.ofbiz.entity.model.ModelEntity;import org.ofbiz.entity.model.ModelKeyMap;import org.ofbiz.entity.model.ModelRelation;import org.ofbiz.entity.util.EntityUtil;/** * Generic Entity Value Object - Handles persisntence for any defined entity. * *@author <a href="mailto:jonesde@ofbiz.org">David E. Jones</a> *@author Eric Pabst *@version $Rev: 5462 $ *@since 1.0 */public class GenericValue extends GenericEntity implements Reusable { public static final GenericValue NULL_VALUE = new NullGenericValue(); protected static final ObjectFactory genericValueFactory = new ObjectFactory() { protected Object create() { return new GenericValue(); } }; /** Hashtable to cache various related entity collections */ public transient Map relatedCache = null; /** Hashtable to cache various related cardinality one entity collections */ public transient Map relatedOneCache = null; /** This Map will contain the original field values from the database iff * this GenericValue came from the database. If it was made manually it will * no have this Map, ie it will be null to not take up memory. */ protected Map originalDbValues = null; protected GenericValue() { } /** Creates new GenericValue */ public static GenericValue create(ModelEntity modelEntity) { GenericValue newValue = (GenericValue) genericValueFactory.object(); newValue.init(modelEntity); return newValue; } /** Creates new GenericValue from existing Map */ public static GenericValue create(ModelEntity modelEntity, Map fields) { GenericValue newValue = (GenericValue) genericValueFactory.object(); newValue.init(modelEntity, fields); return newValue; } /** Creates new GenericValue from existing GenericValue */ public static GenericValue create(GenericValue value) { GenericValue newValue = (GenericValue) genericValueFactory.object(); newValue.init(value); return newValue; } /** Creates new GenericValue from existing GenericValue */ public static GenericValue create(GenericPK primaryKey) { GenericValue newValue = (GenericValue) genericValueFactory.object(); newValue.init(primaryKey); return newValue; } public void reset() { // from GenericEntity super.reset(); // from GenericValue this.relatedCache = null; this.relatedOneCache = null; this.originalDbValues = null; } public void synchronizedWithDatasource() { super.synchronizedWithDatasource(); this.copyOriginalDbValues(); } public GenericValue create() throws GenericEntityException { return this.getDelegator().create(this); } public void store() throws GenericEntityException { this.getDelegator().store(this); } public void remove() throws GenericEntityException { this.getDelegator().removeValue(this); } public void refresh() throws GenericEntityException { this.getDelegator().refresh(this); } public void refreshFromCache() throws GenericEntityException { 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 " + entityName); } if (originalDbValues == null) return null; return originalDbValues.get(name); } /** This should only be called by the Entity Engine once a GenericValue has * been read from the database so that we have a copy of the original field * values from the Db. */ public void copyOriginalDbValues() { this.originalDbValues = FastMap.newInstance(); this.originalDbValues.putAll(this.fields); } /** 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 */ public List getRelated(String relationName) throws GenericEntityException { return this.getDelegator().getRelated(relationName, this); } /** 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 * @param orderBy The fields of the named entity to order the query by; may be null; * optionally add a " ASC" for ascending or " DESC" for descending *@return List of GenericValue instances as specified in the relation definition */ public List getRelated(String relationName, List orderBy) throws GenericEntityException { return this.getDelegator().getRelated(relationName, null, orderBy, this); } /** 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 * @param byAndFields the fields that must equal in order to keep; may be null * @param orderBy The fields of the named entity to order the query by; may be null; * optionally add a " ASC" for ascending or " DESC" for descending *@return List of GenericValue instances as specified in the relation definition */ public List getRelated(String relationName, Map byAndFields, List orderBy) throws GenericEntityException { return this.getDelegator().getRelated(relationName, byAndFields, orderBy, this); } /** Get the named Related Entity for the GenericValue from the persistent * store, looking first in the global generic cache (for the moment this isn't true, is same as EmbeddedCache variant) *@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 */ public List getRelatedCache(String relationName) throws GenericEntityException { return this.getDelegator().getRelatedCache(relationName, this); } /** * Get the named Related Entity for the GenericValue from the persistent store across another Relation. * Helps to get related Values in a multi-to-multi relationship. * @param relationNameOne 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, for first relation * @param relationNameTwo String containing the relation name for second relation * @param orderBy The fields of the named entity to order the query by; may be null; * optionally add a " ASC" for ascending or " DESC" for descending * @return List of GenericValue instances as specified in the relation definition */ public List getRelatedMulti(String relationNameOne, String relationNameTwo, List orderBy) throws GenericEntityException { return this.getDelegator().getMultiRelation(this, relationNameOne, relationNameTwo, orderBy); } /** * Get the named Related Entity for the GenericValue from the persistent store across another Relation. * Helps to get related Values in a multi-to-multi relationship. * @param relationNameOne 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, for first relation * @param relationNameTwo String containing the relation name for second relation * @return List of GenericValue instances as specified in the relation definition */ public List getRelatedMulti(String relationNameOne, String relationNameTwo) throws GenericEntityException { return this.getDelegator().getMultiRelation(this, relationNameOne, relationNameTwo, null); } /** Get the named Related Entity for the GenericValue from the persistent * store, looking first in the global generic cache (for the moment this isn't true, is same as EmbeddedCache variant) *@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 byAndFields the fields that must equal in order to keep; may be null * @param orderBy The fields of the named entity to order the query by; may be null; * optionally add a " ASC" for ascending or " DESC" for descending *@return List of GenericValue instances as specified in the relation definition */ public List getRelatedCache(String relationName, Map byAndFields, List orderBy) throws GenericEntityException { List col = getRelatedCache(relationName); if (byAndFields != null) col = EntityUtil.filterByAnd(col, byAndFields); if (UtilValidate.isNotEmpty(orderBy)) col = EntityUtil.orderBy(col, orderBy); return col; } /** Get the named Related Entity for the GenericValue from the persistent * store, looking first in the global generic cache (for the moment this isn't true, is same as EmbeddedCache variant) *@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 orderBy The fields of the named entity to order the query by; may be null;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -