Just for the record:
I got compile error after this commit using JDK 1.5.0_05 (in a win XP box) After updating to JDK 1.5.0_19 everything is working fine. Jacopo On Jul 10, 2009, at 10:47 AM, [hidden email] wrote: > Author: jonesde > Date: Fri Jul 10 08:47:16 2009 > New Revision: 792836 > > URL: http://svn.apache.org/viewvc?rev=792836&view=rev > Log: > Added example of nested view-entity with entity-condition on a view > member entity; adjusted view-entity entity-condition to handle > naming consistent to other places for nested views, other small > cleanups > > Modified: > ofbiz/trunk/framework/base/src/org/ofbiz/base/util/UtilMisc.java > ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/ > EntityFieldValue.java > ofbiz/trunk/framework/entity/src/org/ofbiz/entity/datasource/ > GenericDAO.java > ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ > ModelViewEntity.java > ofbiz/trunk/framework/example/entitydef/entitymodel_view.xml > > Modified: ofbiz/trunk/framework/base/src/org/ofbiz/base/util/ > UtilMisc.java > URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/util/UtilMisc.java?rev=792836&r1=792835&r2=792836&view=diff > = > = > = > = > = > = > = > = > ====================================================================== > --- ofbiz/trunk/framework/base/src/org/ofbiz/base/util/UtilMisc.java > (original) > +++ ofbiz/trunk/framework/base/src/org/ofbiz/base/util/UtilMisc.java > Fri Jul 10 08:47:16 2009 > @@ -51,6 +51,30 @@ > return throwable; > } > > + public static <T> int compare(T obj1, T obj2) { > + if (obj1 == null) { > + if (obj2 == null) { > + return 0; > + } else { > + return 1; > + } > + } else { > + return ((Comparable<T>) obj1).compareTo(obj2); > + } > + } > + > + public static <T> int compare(Comparable<T> obj1, T obj2) { > + if (obj1 == null) { > + if (obj2 == null) { > + return 0; > + } else { > + return 1; > + } > + } else { > + return obj1.compareTo(obj2); > + } > + } > + > /** > * Get an iterator from a collection, returning null if > collection is null > * @param col The collection to be turned in to an iterator > > Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/ > condition/EntityFieldValue.java > URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityFieldValue.java?rev=792836&r1=792835&r2=792836&view=diff > = > = > = > = > = > = > = > = > ====================================================================== > --- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/ > EntityFieldValue.java (original) > +++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/ > EntityFieldValue.java Fri Jul 10 08:47:16 2009 > @@ -24,7 +24,10 @@ > > import javolution.context.ObjectFactory; > import javolution.lang.Reusable; > +import javolution.util.FastList; > > +import org.ofbiz.base.util.Debug; > +import org.ofbiz.base.util.UtilMisc; > import org.ofbiz.base.util.UtilValidate; > import org.ofbiz.entity.GenericDelegator; > import org.ofbiz.entity.GenericEntity; > @@ -33,6 +36,7 @@ > import org.ofbiz.entity.model.ModelEntity; > import org.ofbiz.entity.model.ModelField; > import org.ofbiz.entity.model.ModelViewEntity; > +import org.ofbiz.entity.model.ModelViewEntity.ModelAlias; > > /** > * Encapsulates operations between entities and entity fields. This > is a immutable class. > @@ -41,6 +45,8 @@ > @SuppressWarnings("serial") > public class EntityFieldValue extends EntityConditionValue > implements Reusable { > > + public static final String module = > EntityFieldValue.class.getName(); > + > protected static final ObjectFactory<EntityFieldValue> > entityFieldValueFactory = new ObjectFactory<EntityFieldValue>() { > @Override > protected EntityFieldValue create() { > @@ -50,17 +56,18 @@ > > protected String fieldName = null; > protected String entityAlias = null; > + protected List<String> entityAliasStack = null; > protected ModelViewEntity modelViewEntity = null; > > public static EntityFieldValue makeFieldValue(String fieldName) { > EntityFieldValue efv = > EntityFieldValue.entityFieldValueFactory.object(); > - efv.init(fieldName, null, null); > + efv.init(fieldName, null, null, null); > return efv; > } > > - public static EntityFieldValue makeFieldValue(String fieldName, > String entityAlias, ModelViewEntity modelViewEntity) { > + public static EntityFieldValue makeFieldValue(String fieldName, > String entityAlias, List<String> entityAliasStack, ModelViewEntity > modelViewEntity) { > EntityFieldValue efv = > EntityFieldValue.entityFieldValueFactory.object(); > - efv.init(fieldName, entityAlias, modelViewEntity); > + efv.init(fieldName, entityAlias, entityAliasStack, > modelViewEntity); > return efv; > } > > @@ -69,17 +76,33 @@ > /** @deprecated Use EntityFieldValue.makeFieldValue() instead */ > @Deprecated > public EntityFieldValue(String fieldName) { > - this.init(fieldName, null, null); > + this.init(fieldName, null, null, null); > } > > - public void init(String fieldName, String entityAlias, > ModelViewEntity modelViewEntity) { > + public void init(String fieldName, String entityAlias, > List<String> entityAliasStack, ModelViewEntity modelViewEntity) { > this.fieldName = fieldName; > this.entityAlias = entityAlias; > + if (UtilValidate.isNotEmpty(entityAliasStack)) { > + this.entityAliasStack = FastList.newInstance(); > + this.entityAliasStack.addAll(entityAliasStack); > + } > this.modelViewEntity = modelViewEntity; > + if (UtilValidate.isNotEmpty(this.entityAliasStack) && > UtilValidate.isEmpty(this.entityAlias)) { > + // look it up on the view entity so it can be part of > the big list, this only happens for aliased fields, so find the > entity-alias and field-name for the alias > + ModelAlias modelAlias = > this.modelViewEntity.getAlias(this.fieldName); > + if (modelAlias != null) { > + this.entityAlias = modelAlias.getEntityAlias(); > + this.fieldName = modelAlias.getField(); > + } > + // TODO/NOTE: this will ignore function, group-by, > etc... should maybe support those in conditions too at some point > + } > } > > public void reset() { > - this.fieldName = null; > + this.fieldName = null; > + this.entityAlias = null; > + this.entityAliasStack = null; > + this.modelViewEntity = null; > } > > public String getFieldName() { > @@ -88,14 +111,21 @@ > > @Override > public int hashCode() { > - return fieldName.hashCode(); > + int hash = fieldName.hashCode(); > + if (this.entityAlias != null) hash |= > this.entityAlias.hashCode(); > + if (this.entityAliasStack != null) hash |= > this.entityAliasStack.hashCode(); > + if (this.modelViewEntity != null) hash |= > this.modelViewEntity.hashCode(); > + return hash; > } > > @Override > public boolean equals(Object obj) { > if (!(obj instanceof EntityFieldValue)) return false; > EntityFieldValue otherValue = (EntityFieldValue) obj; > - return fieldName.equals(otherValue.fieldName); > + if (!fieldName.equals(otherValue.fieldName)) return false; > + if (UtilMisc.compare(this.entityAlias, > otherValue.entityAlias) != 0) return false; > + if (UtilMisc.compare(this.entityAliasStack, > otherValue.entityAliasStack) != 0) return false; > + return true; > } > > @Override > @@ -106,12 +136,33 @@ > @Override > public void addSqlValue(StringBuilder sql, Map<String, String> > tableAliases, ModelEntity modelEntity, List<EntityConditionParam> > entityConditionParams, boolean includeTableNamePrefix, > DatasourceInfo datasourceInfo) { > if (this.modelViewEntity != null) { > + // NOTE: this section is a bit of a hack; the other > code is terribly complex and really needs to be refactored to > incorporate support for this > + > if (UtilValidate.isNotEmpty(entityAlias)) { > ModelEntity memberModelEntity = > modelViewEntity.getMemberModelEntity(entityAlias); > ModelField modelField = > memberModelEntity.getField(fieldName); > - sql.append(entityAlias); > - sql.append("."); > - sql.append(modelField.getColName()); > + > + // using entityAliasStack (ordered top to bottom) > build a big long alias; not that dots will be replaced after it is > combined with the column name in the SQL gen > + if (UtilValidate.isNotEmpty(this.entityAliasStack)) { > + boolean dotUsed = false; > + for (String curEntityAlias: entityAliasStack) { > + sql.append(curEntityAlias); > + if (dotUsed) { > + sql.append("_"); > + } else { > + sql.append("."); > + dotUsed = true; > + } > + > + } > + sql.append(entityAlias); > + sql.append("_"); > + sql.append(modelField.getColName()); > + } else { > + sql.append(entityAlias); > + sql.append("."); > + sql.append(modelField.getColName()); > + } > } else { > sql.append(getColName(tableAliases, modelViewEntity, > fieldName, includeTableNamePrefix, datasourceInfo)); > } > > Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/ > datasource/GenericDAO.java > URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/datasource/GenericDAO.java?rev=792836&r1=792835&r2=792836&view=diff > = > = > = > = > = > = > = > = > ====================================================================== > --- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/datasource/ > GenericDAO.java (original) > +++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/datasource/ > GenericDAO.java Fri Jul 10 08:47:16 2009 > @@ -670,12 +670,23 @@ > sqlBuffer.append("*"); > } > > + // populate the info from entity-condition in the view- > entity, if it is one and there is one > + List<EntityCondition> viewWhereConditions = null; > + List<EntityCondition> viewHavingConditions = null; > + List<String> viewOrderByList = null; > + if (modelViewEntity != null) { > + viewWhereConditions = FastList.newInstance(); > + viewHavingConditions = FastList.newInstance(); > + viewOrderByList = FastList.newInstance(); > + > modelViewEntity > .populateViewEntityConditionInformation(modelFieldTypeReader, > viewWhereConditions, viewHavingConditions, viewOrderByList, null); > + } > + > // FROM clause and when necessary the JOIN or LEFT JOIN > clause(s) as well > sqlBuffer.append(SqlJdbcUtil.makeFromClause(modelEntity, > datasourceInfo)); > - > + > // WHERE clause > List<EntityConditionParam> whereEntityConditionParams = > FastList.newInstance(); > - StringBuilder whereString = > makeConditionWhereString(modelEntity, whereEntityCondition, > whereEntityConditionParams); > + StringBuilder whereString = > makeConditionWhereString(modelEntity, whereEntityCondition, > viewWhereConditions, whereEntityConditionParams); > if (whereString.length() > 0) { > sqlBuffer.append(" WHERE "); > sqlBuffer.append(whereString.toString()); > @@ -693,7 +704,7 @@ > > // HAVING clause > List<EntityConditionParam> havingEntityConditionParams = > FastList.newInstance(); > - StringBuilder havingString = > makeConditionHavingString(modelEntity, havingEntityCondition, > havingEntityConditionParams); > + StringBuilder havingString = > makeConditionHavingString(modelEntity, havingEntityCondition, > viewHavingConditions, havingEntityConditionParams); > if (havingString.length() > 0) { > sqlBuffer.append(" HAVING "); > sqlBuffer.append(havingString); > @@ -705,11 +716,9 @@ > if (orderBy != null) { > orderByExpanded.addAll(orderBy); > } > - if (modelViewEntity != null) { > - List<String> viewOrderBy = > modelViewEntity.getViewEntityConditionOrderBy(); > - if (viewOrderBy != null && viewOrderBy.size() > 0) { > - orderByExpanded.addAll(viewOrderBy); > - } > + if (viewOrderByList != null) { > + // add to end of other order by so that those in method > call will override those in view > + orderByExpanded.addAll(viewOrderByList); > } > sqlBuffer.append(SqlJdbcUtil.makeOrderByClause(modelEntity, > orderByExpanded, datasourceInfo)); > > @@ -752,7 +761,7 @@ > return new EntityListIterator(sqlP, modelEntity, > selectFields, modelFieldTypeReader); > } > > - protected StringBuilder makeConditionWhereString(ModelEntity > modelEntity, EntityCondition whereEntityCondition, > List<EntityConditionParam> whereEntityConditionParams) throws > GenericEntityException { > + protected StringBuilder makeConditionWhereString(ModelEntity > modelEntity, EntityCondition whereEntityCondition, > List<EntityCondition> viewWhereConditions, > List<EntityConditionParam> whereEntityConditionParams) throws > GenericEntityException { > ModelViewEntity modelViewEntity = null; > if (modelEntity instanceof ModelViewEntity) { > modelViewEntity = (ModelViewEntity) modelEntity; > @@ -765,7 +774,7 @@ > > String viewEntityCondWhereString = null; > if (modelViewEntity != null) { > - EntityCondition viewWhereEntityCondition = > modelViewEntity > .getViewEntityConditionWhere(this.modelFieldTypeReader); > + EntityCondition viewWhereEntityCondition = > EntityCondition.makeCondition(viewWhereConditions); > if (viewWhereEntityCondition != null) { > viewEntityCondWhereString = > viewWhereEntityCondition.makeWhereString(modelEntity, > whereEntityConditionParams, this.datasourceInfo); > } > @@ -803,7 +812,7 @@ > return whereString; > } > > - protected StringBuilder makeConditionHavingString(ModelEntity > modelEntity, EntityCondition havingEntityCondition, > List<EntityConditionParam> havingEntityConditionParams) throws > GenericEntityException { > + protected StringBuilder makeConditionHavingString(ModelEntity > modelEntity, EntityCondition havingEntityCondition, > List<EntityCondition> viewHavingConditions, > List<EntityConditionParam> havingEntityConditionParams) throws > GenericEntityException { > ModelViewEntity modelViewEntity = null; > if (modelEntity instanceof ModelViewEntity) { > modelViewEntity = (ModelViewEntity) modelEntity; > @@ -816,7 +825,7 @@ > > String viewEntityCondHavingString = null; > if (modelViewEntity != null) { > - EntityCondition viewHavingEntityCondition = > modelViewEntity > .getViewEntityConditionHaving(this.modelFieldTypeReader); > + EntityCondition viewHavingEntityCondition = > EntityCondition.makeCondition(viewHavingConditions); > if (viewHavingEntityCondition != null) { > viewEntityCondHavingString = > viewHavingEntityCondition.makeWhereString(modelEntity, > havingEntityConditionParams, this.datasourceInfo); > } > @@ -996,13 +1005,23 @@ > sqlBuffer.append("COUNT(1) "); > } > > + // populate the info from entity-condition in the view- > entity, if it is one and there is one > + List<EntityCondition> viewWhereConditions = null; > + List<EntityCondition> viewHavingConditions = null; > + List<String> viewOrderByList = null; > + if (modelViewEntity != null) { > + viewWhereConditions = FastList.newInstance(); > + viewHavingConditions = FastList.newInstance(); > + viewOrderByList = FastList.newInstance(); > + > modelViewEntity > .populateViewEntityConditionInformation(modelFieldTypeReader, > viewWhereConditions, viewHavingConditions, viewOrderByList, null); > + } > > // FROM clause and when necessary the JOIN or LEFT JOIN > clause(s) as well > sqlBuffer.append(SqlJdbcUtil.makeFromClause(modelEntity, > datasourceInfo)); > > // WHERE clause > List<EntityConditionParam> whereEntityConditionParams = > FastList.newInstance(); > - StringBuilder whereString = > makeConditionWhereString(modelEntity, whereEntityCondition, > whereEntityConditionParams); > + StringBuilder whereString = > makeConditionWhereString(modelEntity, whereEntityCondition, > viewWhereConditions, whereEntityConditionParams); > if (whereString.length() > 0) { > sqlBuffer.append(" WHERE "); > sqlBuffer.append(whereString.toString()); > @@ -1018,7 +1037,7 @@ > > // HAVING clause > List<EntityConditionParam> havingEntityConditionParams = > FastList.newInstance(); > - StringBuilder havingString = > makeConditionHavingString(modelEntity, havingEntityCondition, > havingEntityConditionParams); > + StringBuilder havingString = > makeConditionHavingString(modelEntity, havingEntityCondition, > viewHavingConditions, havingEntityConditionParams); > if (havingString.length() > 0) { > sqlBuffer.append(" HAVING "); > sqlBuffer.append(havingString); > > Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ > ModelViewEntity.java > URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelViewEntity.java?rev=792836&r1=792835&r2=792836&view=diff > = > = > = > = > = > = > = > = > ====================================================================== > --- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ > ModelViewEntity.java (original) > +++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ > ModelViewEntity.java Fri Jul 10 08:47:16 2009 > @@ -32,25 +32,18 @@ > import javolution.util.FastMap; > > import org.ofbiz.base.util.Debug; > -import org.ofbiz.base.util.ObjectType; > import org.ofbiz.base.util.StringUtil; > import org.ofbiz.base.util.UtilFormatOut; > import org.ofbiz.base.util.UtilTimer; > import org.ofbiz.base.util.UtilValidate; > import org.ofbiz.base.util.UtilXml; > -import org.ofbiz.base.util.collections.FlexibleMapAccessor; > -import org.ofbiz.base.util.string.FlexibleStringExpander; > import org.ofbiz.entity.condition.EntityComparisonOperator; > import org.ofbiz.entity.condition.EntityCondition; > +import org.ofbiz.entity.condition.EntityConditionValue; > import org.ofbiz.entity.condition.EntityFieldValue; > import org.ofbiz.entity.condition.EntityFunction; > import org.ofbiz.entity.condition.EntityJoinOperator; > import org.ofbiz.entity.condition.EntityOperator; > -import org.ofbiz.entity.finder.ByConditionFinder; > -import org.ofbiz.entity.finder.EntityFinderUtil.Condition; > -import org.ofbiz.entity.finder.EntityFinderUtil.ConditionExpr; > -import org.ofbiz.entity.finder.EntityFinderUtil.ConditionList; > -import org.ofbiz.entity.finder.EntityFinderUtil.ConditionObject; > import org.ofbiz.entity.jdbc.SqlJdbcUtil; > import org.w3c.dom.Element; > import org.w3c.dom.NodeList; > @@ -292,19 +285,41 @@ > this.viewLinks.add(viewLink); > } > > - public EntityCondition > getViewEntityConditionWhere(ModelFieldTypeReader > modelFieldTypeReader) { > - if (this.viewEntityCondition == null) return null; > - EntityCondition viewEntityConditionWhere = > this.viewEntityCondition.getWhereCondition(modelFieldTypeReader); > - return viewEntityConditionWhere; > - } > - public EntityCondition > getViewEntityConditionHaving(ModelFieldTypeReader > modelFieldTypeReader) { > - if (this.viewEntityCondition == null) return null; > - EntityCondition viewEntityConditionHaving = > this.viewEntityCondition.getHavingCondition(modelFieldTypeReader); > - return viewEntityConditionHaving; > - } > - public List<String> getViewEntityConditionOrderBy() { > - if (this.viewEntityCondition == null) return null; > - return this.viewEntityCondition.getOrderByList(); > + public void > populateViewEntityConditionInformation(ModelFieldTypeReader > modelFieldTypeReader, List<EntityCondition> whereConditions, > List<EntityCondition> havingConditions, List<String> orderByList, > List<String> entityAliasStack) { > + if (entityAliasStack == null) { > + entityAliasStack = FastList.newInstance(); > + } > + > + if (this.viewEntityCondition != null) { > + EntityCondition whereCondition = > this.viewEntityCondition.getWhereCondition(modelFieldTypeReader, > entityAliasStack); > + if (whereCondition != null) { > + whereConditions.add(whereCondition); > + } > + } > + > + if (this.viewEntityCondition != null) { > + EntityCondition havingCondition = > this.viewEntityCondition.getHavingCondition(modelFieldTypeReader, > entityAliasStack); > + if (havingCondition != null) { > + havingConditions.add(havingCondition); > + } > + } > + > + // add the current one first so it overrides the lower > level ones > + if (this.viewEntityCondition != null) { > + List<String> currentOrderByList = > this.viewEntityCondition.getOrderByList(); > + if (currentOrderByList != null) { > + orderByList.addAll(currentOrderByList); > + } > + } > + > + for (Map.Entry<String, ModelEntity> memberEntityEntry: > this.memberModelEntities.entrySet()) { > + if (memberEntityEntry.getValue() instanceof > ModelViewEntity) { > + ModelViewEntity memberViewEntity = > (ModelViewEntity) memberEntityEntry.getValue(); > + entityAliasStack.add(memberEntityEntry.getKey()); > + > memberViewEntity > .populateViewEntityConditionInformation(modelFieldTypeReader, > whereConditions, havingConditions, orderByList, entityAliasStack); > + entityAliasStack.remove(entityAliasStack.size() - 1); > + } > + } > } > > @Override > @@ -1115,6 +1130,7 @@ > > public static class ViewEntityCondition { > protected ModelViewEntity modelViewEntity; > + protected ModelViewLink modelViewLink; > protected boolean filterByDate; > protected boolean distinct; > protected List<String> orderByList; > @@ -1123,6 +1139,7 @@ > > public ViewEntityCondition(ModelViewEntity modelViewEntity, > ModelViewLink modelViewLink, Element element) { > this.modelViewEntity = modelViewEntity; > + this.modelViewLink = modelViewLink; > this.filterByDate = > "true".equals(element.getAttribute("filter-by-date")); > this.distinct = > "true".equals(element.getAttribute("distinct")); > // process order-by > @@ -1152,17 +1169,17 @@ > return this.orderByList; > } > > - public EntityCondition > getWhereCondition(ModelFieldTypeReader modelFieldTypeReader) { > + public EntityCondition > getWhereCondition(ModelFieldTypeReader modelFieldTypeReader, > List<String> entityAliasStack) { > if (this.whereCondition != null) { > - return > this.whereCondition.createCondition(modelFieldTypeReader); > + return > this.whereCondition.createCondition(modelFieldTypeReader, > entityAliasStack); > } else { > return null; > } > } > > - public EntityCondition > getHavingCondition(ModelFieldTypeReader modelFieldTypeReader) { > + public EntityCondition > getHavingCondition(ModelFieldTypeReader modelFieldTypeReader, > List<String> entityAliasStack) { > if (this.havingCondition != null) { > - return > this.havingCondition.createCondition(modelFieldTypeReader); > + return > this.havingCondition.createCondition(modelFieldTypeReader, > entityAliasStack); > } else { > return null; > } > @@ -1170,8 +1187,9 @@ > } > > public static interface ViewCondition extends Serializable { > - public EntityCondition createCondition(ModelFieldTypeReader > modelFieldTypeReader); > + public EntityCondition createCondition(ModelFieldTypeReader > modelFieldTypeReader, List<String> entityAliasStack); > } > + > public static class ViewConditionExpr implements ViewCondition { > protected ViewEntityCondition viewEntityCondition; > protected String entityAlias; > @@ -1192,10 +1210,20 @@ > this.relFieldName = > conditionExprElement.getAttribute("rel-field-name"); > this.value = conditionExprElement.getAttribute("value"); > this.ignoreCase = > "true".equals(conditionExprElement.getAttribute("ignore-case")); > + > + // if we are in a view-link, default to the entity- > alias and rel-entity-alias there > + if (this.viewEntityCondition.modelViewLink != null) { > + if (UtilValidate.isEmpty(this.entityAlias)) { > + this.entityAlias = > this.viewEntityCondition.modelViewLink.getEntityAlias(); > + } > + if (UtilValidate.isEmpty(this.relEntityAlias)) { > + this.relEntityAlias = > this.viewEntityCondition.modelViewLink.getRelEntityAlias(); > + } > + } > } > - > - public EntityCondition createCondition(ModelFieldTypeReader > modelFieldTypeReader) { > - EntityOperator operator = > EntityOperator.lookup(this.operator); > + > + public EntityCondition createCondition(ModelFieldTypeReader > modelFieldTypeReader, List<String> entityAliasStack) { > + EntityOperator<?> operator = > EntityOperator.lookup(this.operator); > if (operator == null) { > throw new IllegalArgumentException("Could not find > an entity operator for the name: " + this.operator); > } > @@ -1227,12 +1255,12 @@ > > if (Debug.verboseOn()) Debug.logVerbose("Got value for > fieldName [" + fieldName + "]: " + value, module); > > - Object lhs = EntityFieldValue.makeFieldValue(fieldName, > entityAlias, this.viewEntityCondition.modelViewEntity); > + EntityConditionValue lhs = > EntityFieldValue.makeFieldValue(this.fieldName, this.entityAlias, > entityAliasStack, this.viewEntityCondition.modelViewEntity); > Object rhs = null; > if (value != null) { > rhs = value; > } else { > - rhs = EntityFieldValue.makeFieldValue(relFieldName, > relEntityAlias, this.viewEntityCondition.modelViewEntity); > + rhs = > EntityFieldValue.makeFieldValue(this.relFieldName, > this.relEntityAlias, entityAliasStack, > this.viewEntityCondition.modelViewEntity); > } > > if (operator == EntityOperator.NOT_EQUAL && value != > null) { > @@ -1281,24 +1309,24 @@ > } > } > > - public EntityCondition createCondition(ModelFieldTypeReader > modelFieldTypeReader) { > + public EntityCondition createCondition(ModelFieldTypeReader > modelFieldTypeReader, List<String> entityAliasStack) { > if (this.conditionList.size() == 0) { > return null; > } > if (this.conditionList.size() == 1) { > ViewCondition condition = this.conditionList.get(0); > - return > condition.createCondition(modelFieldTypeReader); > + return > condition.createCondition(modelFieldTypeReader, entityAliasStack); > } > > List<EntityCondition> entityConditionList = > FastList.<EntityCondition>newInstance(); > for (ViewCondition curCondition: conditionList) { > - EntityCondition econd = > curCondition.createCondition(modelFieldTypeReader); > + EntityCondition econd = > curCondition.createCondition(modelFieldTypeReader, entityAliasStack); > if (econd != null) { > entityConditionList.add(econd); > } > } > > - EntityOperator operator = > EntityOperator.lookup(this.combine); > + EntityOperator<?> operator = > EntityOperator.lookup(this.combine); > if (operator == null) { > throw new IllegalArgumentException("Could not find > an entity operator for the name: " + operator); > } > > Modified: ofbiz/trunk/framework/example/entitydef/entitymodel_view.xml > URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/example/entitydef/entitymodel_view.xml?rev=792836&r1=792835&r2=792836&view=diff > = > = > = > = > = > = > = > = > ====================================================================== > --- ofbiz/trunk/framework/example/entitydef/entitymodel_view.xml > (original) > +++ ofbiz/trunk/framework/example/entitydef/entitymodel_view.xml Fri > Jul 10 08:47:16 2009 > @@ -70,7 +70,6 @@ > <view-link entity-alias="EXFTAP" rel-entity-alias="EXFTAPTP"> > <key-map field-name="exampleFeatureApplTypeId"/> > </view-link> > - <entity-condition filter-by-date="true"/> > </view-entity> > <view-entity entity-name="ExampleFeatureAndApplAndType" package- > name="org.ofbiz.example.example"> > <member-entity entity-alias="EXFT" entity- > name="ExampleFeature"/> > @@ -101,16 +100,36 @@ > <order-by field-name="exampleName"/> > </entity-condition> > </view-entity> > + > + <!-- example for nested view-entity with conditions on nested > views --> > + <view-entity entity-name="ExampleFeatureApplAndTypeDesired" > package-name="org.ofbiz.example.example"> > + <member-entity entity-alias="EXFTAP" entity- > name="ExampleFeatureAppl"/> > + <member-entity entity-alias="EXFTAPTP" entity- > name="ExampleFeatureApplType"/> > + <alias-all entity-alias="EXFTAP"/> > + <alias-all entity-alias="EXFTAPTP"/> > + <view-link entity-alias="EXFTAP" rel-entity-alias="EXFTAPTP"> > + <key-map field-name="exampleFeatureApplTypeId"/> > + </view-link> > + <entity-condition> > + <condition-expr field-name="exampleFeatureApplTypeId" > value="DESIRED"/> > + </entity-condition> > + </view-entity> > <view-entity entity- > name="AllExamplesWithDesiredCustomerFeaturesReport" package- > name="org.ofbiz.example.example"> > - <member-entity entity-alias="EFAAFV" entity- > name="ExampleFeatureAndApplFullView"/> > - <alias-all entity-alias="EFAAFV"/> > + <member-entity entity-alias="EFAATD" entity- > name="ExampleFeatureApplAndTypeDesired"/> > + <member-entity entity-alias="EXFT" entity- > name="ExampleFeature"/> > + <member-entity entity-alias="EX" entity-name="Example"/> > + <alias-all entity-alias="EFAATD"/> > + <alias-all entity-alias="EXFT"/> > + <alias-all entity-alias="EX"/> > + <view-link entity-alias="EFAATD" rel-entity-alias="EXFT"> > + <key-map field-name="exampleFeatureId"/> > + </view-link> > + <view-link entity-alias="EFAATD" rel-entity-alias="EX"> > + <key-map field-name="exampleId"/> > + </view-link> > <entity-condition> > - <condition-list combine="and"> > - <condition-expr field-name="featureSourceEnumId" > value="EXFTSRC_CUSTOMER"/> > - <condition-expr field- > name="exampleFeatureApplTypeId" value="DESIRED"/> > - </condition-list> > + <condition-expr field-name="featureSourceEnumId" > value="EXFTSRC_CUSTOMER"/> > <order-by field-name="exampleName"/> > </entity-condition> > </view-entity> > - <!-- TODO: add example for nested view-entity with conditions > on nested views, and fix underlying code since probably won't work > right now --> > </entitymodel> > > |
Free forum by Nabble | Edit this page |