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>