You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by do...@apache.org on 2011/06/26 21:19:07 UTC
svn commit: r1139922 - in /ofbiz/trunk/framework/entity: dtd/
src/org/ofbiz/entity/datasource/ src/org/ofbiz/entity/model/
Author: doogie
Date: Sun Jun 26 19:19:06 2011
New Revision: 1139922
URL: http://svn.apache.org/viewvc?rev=1139922&view=rev
Log:
FEATURE: Add field-set feature to entity engine. You can now
put different fields into different field sets, and when you select any
field in a particular set, all fields in that set will be fetched. This
also cascades upwards thru views, including alias-all and alias.
Modified:
ofbiz/trunk/framework/entity/dtd/entitymodel.xsd
ofbiz/trunk/framework/entity/src/org/ofbiz/entity/datasource/GenericDAO.java
ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/DynamicViewEntity.java
ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelField.java
ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelViewEntity.java
Modified: ofbiz/trunk/framework/entity/dtd/entitymodel.xsd
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/dtd/entitymodel.xsd?rev=1139922&r1=1139921&r2=1139922&view=diff
==============================================================================
--- ofbiz/trunk/framework/entity/dtd/entitymodel.xsd (original)
+++ ofbiz/trunk/framework/entity/dtd/entitymodel.xsd Sun Jun 26 19:19:06 2011
@@ -139,6 +139,13 @@ under the License.
</xs:documentation>
</xs:annotation>
</xs:attribute>
+ <xs:attribute name="field-set" default="" type="xs:string">
+ <xs:annotation>
+ <xs:documentation>
+ Any fields that have the same field-set will be selected together in generated queries.
+ </xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
</xs:attributeGroup>
<xs:element name="validate">
<xs:complexType>
@@ -267,6 +274,13 @@ under the License.
<xs:attribute name="prefix" type="xs:string"/>
<xs:attribute name="group-by" default="false" type="boolean"/>
<xs:attribute name="function" type="aggregate-function"/>
+ <xs:attribute name="field-set" default="" type="xs:string">
+ <xs:annotation>
+ <xs:documentation>
+ Any fields that have the same field-set will be selected together in generated queries.
+ </xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
</xs:attributeGroup>
<xs:element name="exclude">
<xs:complexType>
@@ -293,6 +307,13 @@ under the License.
<xs:attribute name="prim-key" type="xs:string"/>
<xs:attribute name="group-by" default="false" type="boolean"/>
<xs:attribute name="function" type="aggregate-function"/>
+ <xs:attribute name="field-set" default="" type="xs:string">
+ <xs:annotation>
+ <xs:documentation>
+ Any fields that have the same field-set will be selected together in generated queries.
+ </xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
</xs:attributeGroup>
<xs:element name="complex-alias">
<xs:annotation>
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=1139922&r1=1139921&r2=1139922&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 Sun Jun 26 19:19:06 2011
@@ -660,12 +660,16 @@ public class GenericDAO {
if (UtilValidate.isNotEmpty(fieldsToSelect)) {
Set<String> tempKeys = FastSet.newInstance();
tempKeys.addAll(fieldsToSelect);
+ Set<String> fieldSetsToInclude = FastSet.newInstance();
+ Set<String> addedFields = FastSet.newInstance();
for (String fieldToSelect : fieldsToSelect) {
if (tempKeys.contains(fieldToSelect)) {
ModelField curField = modelEntity.getField(fieldToSelect);
if (curField != null) {
+ fieldSetsToInclude.add(curField.getFieldSet());
selectFields.add(curField);
tempKeys.remove(fieldToSelect);
+ addedFields.add(fieldToSelect);
}
}
}
@@ -673,6 +677,37 @@ public class GenericDAO {
if (tempKeys.size() > 0) {
throw new GenericModelException("In selectListIteratorByCondition invalid field names specified: " + tempKeys.toString());
}
+ fieldSetsToInclude.remove("");
+ if (verboseOn) {
+ Debug.logInfo("[" + modelEntity.getEntityName() + "]: field-sets to include: " + fieldSetsToInclude, module);
+ }
+ if (UtilValidate.isNotEmpty(fieldSetsToInclude)) {
+ Iterator<ModelField> fieldIter = modelEntity.getFieldsIterator();
+ Set<String> extraFields = FastSet.newInstance();
+ Set<String> reasonSets = FastSet.newInstance();
+ while (fieldIter.hasNext()) {
+ ModelField curField = fieldIter.next();
+ String fieldSet = curField.getFieldSet();
+ if (UtilValidate.isEmpty(fieldSet)) {
+ continue;
+ }
+ if (!fieldSetsToInclude.contains(fieldSet)) {
+ continue;
+ }
+ String fieldName = curField.getName();
+ if (addedFields.contains(fieldName)) {
+ continue;
+ }
+ reasonSets.add(fieldSet);
+ extraFields.add(fieldName);
+ addedFields.add(fieldName);
+ selectFields.add(curField);
+ }
+ if (verboseOn) {
+ Debug.logInfo("[" + modelEntity.getEntityName() + "]: auto-added select fields: " + extraFields, module);
+ Debug.logInfo("[" + modelEntity.getEntityName() + "]: auto-added field-sets: " + reasonSets, module);
+ }
+ }
} else {
selectFields = modelEntity.getFieldsUnmodifiable();
}
Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/DynamicViewEntity.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/DynamicViewEntity.java?rev=1139922&r1=1139921&r2=1139922&view=diff
==============================================================================
--- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/DynamicViewEntity.java (original)
+++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/DynamicViewEntity.java Sun Jun 26 19:19:06 2011
@@ -238,7 +238,7 @@ public class DynamicViewEntity {
}
public void addAliasAll(String entityAlias, String prefix, Collection<String> excludes) {
- ModelAliasAll aliasAll = new ModelAliasAll(entityAlias, prefix, false, null, excludes);
+ ModelAliasAll aliasAll = new ModelAliasAll(entityAlias, prefix, false, null, null, excludes);
this.aliasAlls.add(aliasAll);
}
@@ -252,10 +252,14 @@ public class DynamicViewEntity {
/** Add an alias, full detail. All parameters can be null except entityAlias and name. */
public void addAlias(String entityAlias, String name, String field, String colAlias, Boolean primKey, Boolean groupBy, String function) {
- addAlias(entityAlias, name, field, colAlias, primKey, groupBy, function, null);
+ addAlias(entityAlias, name, field, colAlias, primKey, groupBy, function, null, null);
}
public void addAlias(String entityAlias, String name, String field, String colAlias, Boolean primKey, Boolean groupBy, String function, ComplexAliasMember complexAliasMember) {
+ addAlias(entityAlias, name, field, colAlias, primKey, groupBy, function, null, complexAliasMember);
+ }
+
+ public void addAlias(String entityAlias, String name, String field, String colAlias, Boolean primKey, Boolean groupBy, String function, String fieldSet, ComplexAliasMember complexAliasMember) {
if (entityAlias == null && complexAliasMember == null) {
throw new IllegalArgumentException("entityAlias cannot be null if this is not a complex alias in call to DynamicViewEntity.addAlias");
}
@@ -263,7 +267,7 @@ public class DynamicViewEntity {
throw new IllegalArgumentException("name cannot be null in call to DynamicViewEntity.addAlias");
}
- ModelAlias alias = new ModelAlias(entityAlias, name, field, colAlias, primKey, groupBy, function);
+ ModelAlias alias = new ModelAlias(entityAlias, name, field, colAlias, primKey, groupBy, function, fieldSet);
if (complexAliasMember != null) {
alias.setComplexAliasMember(complexAliasMember);
}
Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelField.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelField.java?rev=1139922&r1=1139921&r2=1139922&view=diff
==============================================================================
--- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelField.java (original)
+++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelField.java Sun Jun 26 19:19:06 2011
@@ -55,6 +55,9 @@ public class ModelField extends ModelChi
protected boolean isAutoCreatedInternal = false;
protected boolean enableAuditLog = false;
+ /** when any field in the same set is selected in a query, all fields in that set will be selected */
+ protected String fieldSet = "";
+
/** validators to be called when an update is done */
protected List<String> validators = new ArrayList<String>();
@@ -85,6 +88,7 @@ public class ModelField extends ModelChi
this.description = UtilXml.childElementValue(fieldElement, "description");
this.enableAuditLog = UtilXml.checkBoolean(fieldElement.getAttribute("enable-audit-log"), false);
this.isNotNull = UtilXml.checkBoolean(fieldElement.getAttribute("not-null"), false);
+ this.fieldSet = UtilXml.checkEmpty(fieldElement.getAttribute("field-set")).intern();
NodeList validateList = fieldElement.getElementsByTagName("validate");
@@ -184,6 +188,14 @@ public class ModelField extends ModelChi
this.isAutoCreatedInternal = isAutoCreatedInternal;
}
+ public String getFieldSet() {
+ return fieldSet;
+ }
+
+ public void setFieldSet(String fieldSet) {
+ this.fieldSet = fieldSet;
+ }
+
/** validators to be called when an update is done */
public String getValidator(int index) {
return this.validators.get(index);
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=1139922&r1=1139921&r2=1139922&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 Sun Jun 26 19:19:06 2011
@@ -459,6 +459,7 @@ public class ModelViewEntity extends Mod
field.colName = ModelUtil.javaNameToDbName(alias.name);
field.type = fieldTypeBuffer.toString();
field.isPk = false;
+ field.fieldSet = alias.getFieldSet();
} else {
ModelEntity aliasedEntity = getAliasedEntity(alias.entityAlias, modelReader);
ModelField aliasedField = getAliasedField(aliasedEntity, alias.field, modelReader);
@@ -484,6 +485,21 @@ public class ModelViewEntity extends Mod
if (UtilValidate.isEmpty(field.description)) {
field.description = aliasedField.description;
}
+ if (UtilValidate.isEmpty(alias.getFieldSet())) {
+ String aliasedFieldSet = aliasedField.getFieldSet();
+ if (UtilValidate.isNotEmpty(aliasedFieldSet)) {
+ StringBuilder fieldSetBuffer = new StringBuilder(alias.entityAlias);
+ fieldSetBuffer.append("_");
+ fieldSetBuffer.append(Character.toUpperCase(aliasedFieldSet.charAt(0)));
+ fieldSetBuffer.append(aliasedFieldSet.substring(1));
+ field.fieldSet = fieldSetBuffer.toString().intern();
+ Debug.logInfo("[" + this.getEntityName() + "]: copied field set on [" + field.name + "]: " + field.fieldSet, module);
+ } else {
+ field.fieldSet = "";
+ }
+ } else {
+ field.fieldSet = alias.getFieldSet();
+ }
}
this.fields.add(field);
@@ -627,6 +643,7 @@ public class ModelViewEntity extends Mod
String prefix = aliasAll.getPrefix();
String function = aliasAll.getFunction();
boolean groupBy = aliasAll.getGroupBy();
+ String aliasAllFieldSet = aliasAll.getFieldSet();
ModelMemberEntity modelMemberEntity = memberModelMemberEntities.get(entityAlias);
if (modelMemberEntity == null) {
@@ -667,6 +684,27 @@ public class ModelViewEntity extends Mod
newAliasBuffer.append(aliasName.substring(1));
aliasName = newAliasBuffer.toString();
}
+ String fieldSet;
+ if (UtilValidate.isEmpty(aliasAllFieldSet)) {
+ String aliasedFieldSet = modelField.getFieldSet();
+ if (UtilValidate.isNotEmpty(aliasedFieldSet)) {
+ StringBuilder fieldSetBuffer = new StringBuilder(entityAlias);
+ if (UtilValidate.isNotEmpty(prefix)) {
+ fieldSetBuffer.append(Character.toUpperCase(prefix.charAt(0)));
+ fieldSetBuffer.append(prefix.substring(1));
+ }
+ fieldSetBuffer.append(Character.toUpperCase(aliasedFieldSet.charAt(0)));
+ fieldSetBuffer.append(aliasedFieldSet.substring(1));
+ fieldSet = fieldSetBuffer.toString();
+ } else {
+ fieldSet = "";
+ }
+ } else {
+ fieldSet = aliasAllFieldSet;
+ }
+ if (UtilValidate.isNotEmpty(fieldSet)) {
+ Debug.logInfo("[" + this.getEntityName() + "]: set field-set on [" + aliasName + "]: " + fieldSet, module);
+ }
ModelAlias existingAlias = this.getAlias(aliasName);
if (existingAlias != null) {
@@ -703,7 +741,7 @@ public class ModelViewEntity extends Mod
continue;
}
- ModelAlias expandedAlias = new ModelAlias(aliasAll.getEntityAlias(), aliasName, fieldName, ModelUtil.javaNameToDbName(UtilXml.checkEmpty(aliasName)), null, groupBy, function, true);
+ ModelAlias expandedAlias = new ModelAlias(aliasAll.getEntityAlias(), aliasName, fieldName, ModelUtil.javaNameToDbName(UtilXml.checkEmpty(aliasName)), null, groupBy, function, fieldSet, true);
expandedAlias.setDescription(modelField.getDescription());
aliases.add(expandedAlias);
@@ -741,17 +779,24 @@ public class ModelViewEntity extends Mod
protected final boolean groupBy;
// is specified this alias is a calculated value; can be: min, max, sum, avg, count, count-distinct
protected final String function;
+ protected final String fieldSet;
@Deprecated
public ModelAliasAll(String entityAlias, String prefix) {
- this(entityAlias, prefix, false, null, null);
+ this(entityAlias, prefix, false, null, null, null);
}
+ @Deprecated
public ModelAliasAll(String entityAlias, String prefix, boolean groupBy, String function, Collection<String> excludes) {
+ this(entityAlias, prefix, groupBy, function, null, excludes);
+ }
+
+ public ModelAliasAll(String entityAlias, String prefix, boolean groupBy, String function, String fieldSet, Collection<String> excludes) {
this.entityAlias = entityAlias;
this.prefix = prefix;
this.groupBy = groupBy;
this.function = function;
+ this.fieldSet = fieldSet;
if (UtilValidate.isNotEmpty(excludes)) {
this.fieldsToExclude = new HashSet<String>(excludes.size());
this.fieldsToExclude.addAll(excludes);
@@ -765,6 +810,7 @@ public class ModelViewEntity extends Mod
this.prefix = UtilXml.checkEmpty(aliasAllElement.getAttribute("prefix")).intern();
this.groupBy = "true".equals(UtilXml.checkEmpty(aliasAllElement.getAttribute("group-by")));
this.function = UtilXml.checkEmpty(aliasAllElement.getAttribute("function"));
+ this.fieldSet = UtilXml.checkEmpty(aliasAllElement.getAttribute("field-set")).intern();
List<? extends Element> excludes = UtilXml.childElementList(aliasAllElement, "exclude");
if (UtilValidate.isNotEmpty(excludes)) {
@@ -794,6 +840,10 @@ public class ModelViewEntity extends Mod
return this.function;
}
+ public String getFieldSet() {
+ return this.fieldSet;
+ }
+
public boolean shouldExclude(String fieldName) {
if (this.fieldsToExclude == null) {
return false;
@@ -821,6 +871,7 @@ public class ModelViewEntity extends Mod
protected final boolean groupBy;
// is specified this alias is a calculated value; can be: min, max, sum, avg, count, count-distinct
protected final String function;
+ protected final String fieldSet;
protected final boolean isFromAliasAll;
protected ComplexAliasMember complexAliasMember;
// The description for documentation purposes
@@ -840,6 +891,7 @@ public class ModelViewEntity extends Mod
}
this.groupBy = "true".equals(UtilXml.checkEmpty(aliasElement.getAttribute("group-by")));
this.function = UtilXml.checkEmpty(aliasElement.getAttribute("function")).intern();
+ this.fieldSet = UtilXml.checkEmpty(aliasElement.getAttribute("field-set")).intern();
this.isFromAliasAll = false;
this.description = UtilXml.checkEmpty(UtilXml.childElementValue(aliasElement, "description")).intern();
@@ -849,11 +901,16 @@ public class ModelViewEntity extends Mod
}
}
+ @Deprecated
public ModelAlias(String entityAlias, String name, String field, String colAlias, Boolean isPk, Boolean groupBy, String function) {
- this(entityAlias, name, field, colAlias, isPk, groupBy, function, false);
+ this(entityAlias, name, field, colAlias, isPk, groupBy, function, null, false);
+ }
+
+ public ModelAlias(String entityAlias, String name, String field, String colAlias, Boolean isPk, Boolean groupBy, String function, String fieldSet) {
+ this(entityAlias, name, field, colAlias, isPk, groupBy, function, fieldSet, false);
}
- protected ModelAlias(String entityAlias, String name, String field, String colAlias, Boolean isPk, Boolean groupBy, String function, boolean isFromAliasAll) {
+ protected ModelAlias(String entityAlias, String name, String field, String colAlias, Boolean isPk, Boolean groupBy, String function, String fieldSet, boolean isFromAliasAll) {
this.entityAlias = entityAlias;
this.name = name;
this.field = UtilXml.checkEmpty(field, this.name);
@@ -865,6 +922,7 @@ public class ModelViewEntity extends Mod
this.groupBy = false;
}
this.function = function;
+ this.fieldSet = UtilXml.checkEmpty(fieldSet).intern();
this.isFromAliasAll = isFromAliasAll;
}
@@ -910,6 +968,10 @@ public class ModelViewEntity extends Mod
return this.function;
}
+ public String getFieldSet() {
+ return fieldSet;
+ }
+
public String getDescription() {
return this.description;
}
Re: svn commit: r1139922 - in /ofbiz/trunk/framework/entity: dtd/
src/org/ofbiz/entity/datasource/ src/org/ofbiz/entity/model/
Posted by Adam Heath <do...@brainfood.com>.
On 06/26/2011 02:19 PM, doogie@apache.org wrote:
> Author: doogie
> Date: Sun Jun 26 19:19:06 2011
> New Revision: 1139922
>
> URL: http://svn.apache.org/viewvc?rev=1139922&view=rev
> Log:
> FEATURE: Add field-set feature to entity engine. You can now
> put different fields into different field sets, and when you select any
> field in a particular set, all fields in that set will be fetched. This
> also cascades upwards thru views, including alias-all and alias.
Yet another major feature.
I use this feature in views, when I am combining date-filtered
entities. I put all the PK fields of the date-filtered entity into
the same group. Then, any time there is an <alias-all>, <alias>, etc
that pull them in, and I then eventually do a query with just the
fooId field, the fromDate/thruDate fields automatically get added to
the select.
Because, when you think about it, if the entity is date-filtered, you
*must* also select the fromDate/thruDate, and it *must* be filtered in
memory(or at least, not cached).
> Modified:
> ofbiz/trunk/framework/entity/dtd/entitymodel.xsd
> ofbiz/trunk/framework/entity/src/org/ofbiz/entity/datasource/GenericDAO.java
> ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/DynamicViewEntity.java
> ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelField.java
> ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelViewEntity.java
>
> Modified: ofbiz/trunk/framework/entity/dtd/entitymodel.xsd
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/dtd/entitymodel.xsd?rev=1139922&r1=1139921&r2=1139922&view=diff
> ==============================================================================
> --- ofbiz/trunk/framework/entity/dtd/entitymodel.xsd (original)
> +++ ofbiz/trunk/framework/entity/dtd/entitymodel.xsd Sun Jun 26 19:19:06 2011
> @@ -139,6 +139,13 @@ under the License.
> </xs:documentation>
> </xs:annotation>
> </xs:attribute>
> +<xs:attribute name="field-set" default="" type="xs:string">
> +<xs:annotation>
> +<xs:documentation>
> + Any fields that have the same field-set will be selected together in generated queries.
> +</xs:documentation>
> +</xs:annotation>
> +</xs:attribute>
> </xs:attributeGroup>
> <xs:element name="validate">
> <xs:complexType>
> @@ -267,6 +274,13 @@ under the License.
> <xs:attribute name="prefix" type="xs:string"/>
> <xs:attribute name="group-by" default="false" type="boolean"/>
> <xs:attribute name="function" type="aggregate-function"/>
> +<xs:attribute name="field-set" default="" type="xs:string">
> +<xs:annotation>
> +<xs:documentation>
> + Any fields that have the same field-set will be selected together in generated queries.
> +</xs:documentation>
> +</xs:annotation>
> +</xs:attribute>
> </xs:attributeGroup>
> <xs:element name="exclude">
> <xs:complexType>
> @@ -293,6 +307,13 @@ under the License.
> <xs:attribute name="prim-key" type="xs:string"/>
> <xs:attribute name="group-by" default="false" type="boolean"/>
> <xs:attribute name="function" type="aggregate-function"/>
> +<xs:attribute name="field-set" default="" type="xs:string">
> +<xs:annotation>
> +<xs:documentation>
> + Any fields that have the same field-set will be selected together in generated queries.
> +</xs:documentation>
> +</xs:annotation>
> +</xs:attribute>
> </xs:attributeGroup>
> <xs:element name="complex-alias">
> <xs:annotation>
>
> 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=1139922&r1=1139921&r2=1139922&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 Sun Jun 26 19:19:06 2011
> @@ -660,12 +660,16 @@ public class GenericDAO {
> if (UtilValidate.isNotEmpty(fieldsToSelect)) {
> Set<String> tempKeys = FastSet.newInstance();
> tempKeys.addAll(fieldsToSelect);
> + Set<String> fieldSetsToInclude = FastSet.newInstance();
> + Set<String> addedFields = FastSet.newInstance();
> for (String fieldToSelect : fieldsToSelect) {
> if (tempKeys.contains(fieldToSelect)) {
> ModelField curField = modelEntity.getField(fieldToSelect);
> if (curField != null) {
> + fieldSetsToInclude.add(curField.getFieldSet());
> selectFields.add(curField);
> tempKeys.remove(fieldToSelect);
> + addedFields.add(fieldToSelect);
> }
> }
> }
> @@ -673,6 +677,37 @@ public class GenericDAO {
> if (tempKeys.size()> 0) {
> throw new GenericModelException("In selectListIteratorByCondition invalid field names specified: " + tempKeys.toString());
> }
> + fieldSetsToInclude.remove("");
> + if (verboseOn) {
> + Debug.logInfo("[" + modelEntity.getEntityName() + "]: field-sets to include: " + fieldSetsToInclude, module);
> + }
> + if (UtilValidate.isNotEmpty(fieldSetsToInclude)) {
> + Iterator<ModelField> fieldIter = modelEntity.getFieldsIterator();
> + Set<String> extraFields = FastSet.newInstance();
> + Set<String> reasonSets = FastSet.newInstance();
> + while (fieldIter.hasNext()) {
> + ModelField curField = fieldIter.next();
> + String fieldSet = curField.getFieldSet();
> + if (UtilValidate.isEmpty(fieldSet)) {
> + continue;
> + }
> + if (!fieldSetsToInclude.contains(fieldSet)) {
> + continue;
> + }
> + String fieldName = curField.getName();
> + if (addedFields.contains(fieldName)) {
> + continue;
> + }
> + reasonSets.add(fieldSet);
> + extraFields.add(fieldName);
> + addedFields.add(fieldName);
> + selectFields.add(curField);
> + }
> + if (verboseOn) {
> + Debug.logInfo("[" + modelEntity.getEntityName() + "]: auto-added select fields: " + extraFields, module);
> + Debug.logInfo("[" + modelEntity.getEntityName() + "]: auto-added field-sets: " + reasonSets, module);
> + }
> + }
> } else {
> selectFields = modelEntity.getFieldsUnmodifiable();
> }
>
> Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/DynamicViewEntity.java
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/DynamicViewEntity.java?rev=1139922&r1=1139921&r2=1139922&view=diff
> ==============================================================================
> --- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/DynamicViewEntity.java (original)
> +++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/DynamicViewEntity.java Sun Jun 26 19:19:06 2011
> @@ -238,7 +238,7 @@ public class DynamicViewEntity {
> }
>
> public void addAliasAll(String entityAlias, String prefix, Collection<String> excludes) {
> - ModelAliasAll aliasAll = new ModelAliasAll(entityAlias, prefix, false, null, excludes);
> + ModelAliasAll aliasAll = new ModelAliasAll(entityAlias, prefix, false, null, null, excludes);
> this.aliasAlls.add(aliasAll);
> }
>
> @@ -252,10 +252,14 @@ public class DynamicViewEntity {
>
> /** Add an alias, full detail. All parameters can be null except entityAlias and name. */
> public void addAlias(String entityAlias, String name, String field, String colAlias, Boolean primKey, Boolean groupBy, String function) {
> - addAlias(entityAlias, name, field, colAlias, primKey, groupBy, function, null);
> + addAlias(entityAlias, name, field, colAlias, primKey, groupBy, function, null, null);
> }
>
> public void addAlias(String entityAlias, String name, String field, String colAlias, Boolean primKey, Boolean groupBy, String function, ComplexAliasMember complexAliasMember) {
> + addAlias(entityAlias, name, field, colAlias, primKey, groupBy, function, null, complexAliasMember);
> + }
> +
> + public void addAlias(String entityAlias, String name, String field, String colAlias, Boolean primKey, Boolean groupBy, String function, String fieldSet, ComplexAliasMember complexAliasMember) {
> if (entityAlias == null&& complexAliasMember == null) {
> throw new IllegalArgumentException("entityAlias cannot be null if this is not a complex alias in call to DynamicViewEntity.addAlias");
> }
> @@ -263,7 +267,7 @@ public class DynamicViewEntity {
> throw new IllegalArgumentException("name cannot be null in call to DynamicViewEntity.addAlias");
> }
>
> - ModelAlias alias = new ModelAlias(entityAlias, name, field, colAlias, primKey, groupBy, function);
> + ModelAlias alias = new ModelAlias(entityAlias, name, field, colAlias, primKey, groupBy, function, fieldSet);
> if (complexAliasMember != null) {
> alias.setComplexAliasMember(complexAliasMember);
> }
>
> Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelField.java
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelField.java?rev=1139922&r1=1139921&r2=1139922&view=diff
> ==============================================================================
> --- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelField.java (original)
> +++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelField.java Sun Jun 26 19:19:06 2011
> @@ -55,6 +55,9 @@ public class ModelField extends ModelChi
> protected boolean isAutoCreatedInternal = false;
> protected boolean enableAuditLog = false;
>
> + /** when any field in the same set is selected in a query, all fields in that set will be selected */
> + protected String fieldSet = "";
> +
> /** validators to be called when an update is done */
> protected List<String> validators = new ArrayList<String>();
>
> @@ -85,6 +88,7 @@ public class ModelField extends ModelChi
> this.description = UtilXml.childElementValue(fieldElement, "description");
> this.enableAuditLog = UtilXml.checkBoolean(fieldElement.getAttribute("enable-audit-log"), false);
> this.isNotNull = UtilXml.checkBoolean(fieldElement.getAttribute("not-null"), false);
> + this.fieldSet = UtilXml.checkEmpty(fieldElement.getAttribute("field-set")).intern();
>
> NodeList validateList = fieldElement.getElementsByTagName("validate");
>
> @@ -184,6 +188,14 @@ public class ModelField extends ModelChi
> this.isAutoCreatedInternal = isAutoCreatedInternal;
> }
>
> + public String getFieldSet() {
> + return fieldSet;
> + }
> +
> + public void setFieldSet(String fieldSet) {
> + this.fieldSet = fieldSet;
> + }
> +
> /** validators to be called when an update is done */
> public String getValidator(int index) {
> return this.validators.get(index);
>
> 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=1139922&r1=1139921&r2=1139922&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 Sun Jun 26 19:19:06 2011
> @@ -459,6 +459,7 @@ public class ModelViewEntity extends Mod
> field.colName = ModelUtil.javaNameToDbName(alias.name);
> field.type = fieldTypeBuffer.toString();
> field.isPk = false;
> + field.fieldSet = alias.getFieldSet();
> } else {
> ModelEntity aliasedEntity = getAliasedEntity(alias.entityAlias, modelReader);
> ModelField aliasedField = getAliasedField(aliasedEntity, alias.field, modelReader);
> @@ -484,6 +485,21 @@ public class ModelViewEntity extends Mod
> if (UtilValidate.isEmpty(field.description)) {
> field.description = aliasedField.description;
> }
> + if (UtilValidate.isEmpty(alias.getFieldSet())) {
> + String aliasedFieldSet = aliasedField.getFieldSet();
> + if (UtilValidate.isNotEmpty(aliasedFieldSet)) {
> + StringBuilder fieldSetBuffer = new StringBuilder(alias.entityAlias);
> + fieldSetBuffer.append("_");
> + fieldSetBuffer.append(Character.toUpperCase(aliasedFieldSet.charAt(0)));
> + fieldSetBuffer.append(aliasedFieldSet.substring(1));
> + field.fieldSet = fieldSetBuffer.toString().intern();
> + Debug.logInfo("[" + this.getEntityName() + "]: copied field set on [" + field.name + "]: " + field.fieldSet, module);
> + } else {
> + field.fieldSet = "";
> + }
> + } else {
> + field.fieldSet = alias.getFieldSet();
> + }
> }
>
> this.fields.add(field);
> @@ -627,6 +643,7 @@ public class ModelViewEntity extends Mod
> String prefix = aliasAll.getPrefix();
> String function = aliasAll.getFunction();
> boolean groupBy = aliasAll.getGroupBy();
> + String aliasAllFieldSet = aliasAll.getFieldSet();
>
> ModelMemberEntity modelMemberEntity = memberModelMemberEntities.get(entityAlias);
> if (modelMemberEntity == null) {
> @@ -667,6 +684,27 @@ public class ModelViewEntity extends Mod
> newAliasBuffer.append(aliasName.substring(1));
> aliasName = newAliasBuffer.toString();
> }
> + String fieldSet;
> + if (UtilValidate.isEmpty(aliasAllFieldSet)) {
> + String aliasedFieldSet = modelField.getFieldSet();
> + if (UtilValidate.isNotEmpty(aliasedFieldSet)) {
> + StringBuilder fieldSetBuffer = new StringBuilder(entityAlias);
> + if (UtilValidate.isNotEmpty(prefix)) {
> + fieldSetBuffer.append(Character.toUpperCase(prefix.charAt(0)));
> + fieldSetBuffer.append(prefix.substring(1));
> + }
> + fieldSetBuffer.append(Character.toUpperCase(aliasedFieldSet.charAt(0)));
> + fieldSetBuffer.append(aliasedFieldSet.substring(1));
> + fieldSet = fieldSetBuffer.toString();
> + } else {
> + fieldSet = "";
> + }
> + } else {
> + fieldSet = aliasAllFieldSet;
> + }
> + if (UtilValidate.isNotEmpty(fieldSet)) {
> + Debug.logInfo("[" + this.getEntityName() + "]: set field-set on [" + aliasName + "]: " + fieldSet, module);
> + }
>
> ModelAlias existingAlias = this.getAlias(aliasName);
> if (existingAlias != null) {
> @@ -703,7 +741,7 @@ public class ModelViewEntity extends Mod
> continue;
> }
>
> - ModelAlias expandedAlias = new ModelAlias(aliasAll.getEntityAlias(), aliasName, fieldName, ModelUtil.javaNameToDbName(UtilXml.checkEmpty(aliasName)), null, groupBy, function, true);
> + ModelAlias expandedAlias = new ModelAlias(aliasAll.getEntityAlias(), aliasName, fieldName, ModelUtil.javaNameToDbName(UtilXml.checkEmpty(aliasName)), null, groupBy, function, fieldSet, true);
> expandedAlias.setDescription(modelField.getDescription());
>
> aliases.add(expandedAlias);
> @@ -741,17 +779,24 @@ public class ModelViewEntity extends Mod
> protected final boolean groupBy;
> // is specified this alias is a calculated value; can be: min, max, sum, avg, count, count-distinct
> protected final String function;
> + protected final String fieldSet;
>
> @Deprecated
> public ModelAliasAll(String entityAlias, String prefix) {
> - this(entityAlias, prefix, false, null, null);
> + this(entityAlias, prefix, false, null, null, null);
> }
>
> + @Deprecated
> public ModelAliasAll(String entityAlias, String prefix, boolean groupBy, String function, Collection<String> excludes) {
> + this(entityAlias, prefix, groupBy, function, null, excludes);
> + }
> +
> + public ModelAliasAll(String entityAlias, String prefix, boolean groupBy, String function, String fieldSet, Collection<String> excludes) {
> this.entityAlias = entityAlias;
> this.prefix = prefix;
> this.groupBy = groupBy;
> this.function = function;
> + this.fieldSet = fieldSet;
> if (UtilValidate.isNotEmpty(excludes)) {
> this.fieldsToExclude = new HashSet<String>(excludes.size());
> this.fieldsToExclude.addAll(excludes);
> @@ -765,6 +810,7 @@ public class ModelViewEntity extends Mod
> this.prefix = UtilXml.checkEmpty(aliasAllElement.getAttribute("prefix")).intern();
> this.groupBy = "true".equals(UtilXml.checkEmpty(aliasAllElement.getAttribute("group-by")));
> this.function = UtilXml.checkEmpty(aliasAllElement.getAttribute("function"));
> + this.fieldSet = UtilXml.checkEmpty(aliasAllElement.getAttribute("field-set")).intern();
>
> List<? extends Element> excludes = UtilXml.childElementList(aliasAllElement, "exclude");
> if (UtilValidate.isNotEmpty(excludes)) {
> @@ -794,6 +840,10 @@ public class ModelViewEntity extends Mod
> return this.function;
> }
>
> + public String getFieldSet() {
> + return this.fieldSet;
> + }
> +
> public boolean shouldExclude(String fieldName) {
> if (this.fieldsToExclude == null) {
> return false;
> @@ -821,6 +871,7 @@ public class ModelViewEntity extends Mod
> protected final boolean groupBy;
> // is specified this alias is a calculated value; can be: min, max, sum, avg, count, count-distinct
> protected final String function;
> + protected final String fieldSet;
> protected final boolean isFromAliasAll;
> protected ComplexAliasMember complexAliasMember;
> // The description for documentation purposes
> @@ -840,6 +891,7 @@ public class ModelViewEntity extends Mod
> }
> this.groupBy = "true".equals(UtilXml.checkEmpty(aliasElement.getAttribute("group-by")));
> this.function = UtilXml.checkEmpty(aliasElement.getAttribute("function")).intern();
> + this.fieldSet = UtilXml.checkEmpty(aliasElement.getAttribute("field-set")).intern();
> this.isFromAliasAll = false;
> this.description = UtilXml.checkEmpty(UtilXml.childElementValue(aliasElement, "description")).intern();
>
> @@ -849,11 +901,16 @@ public class ModelViewEntity extends Mod
> }
> }
>
> + @Deprecated
> public ModelAlias(String entityAlias, String name, String field, String colAlias, Boolean isPk, Boolean groupBy, String function) {
> - this(entityAlias, name, field, colAlias, isPk, groupBy, function, false);
> + this(entityAlias, name, field, colAlias, isPk, groupBy, function, null, false);
> + }
> +
> + public ModelAlias(String entityAlias, String name, String field, String colAlias, Boolean isPk, Boolean groupBy, String function, String fieldSet) {
> + this(entityAlias, name, field, colAlias, isPk, groupBy, function, fieldSet, false);
> }
>
> - protected ModelAlias(String entityAlias, String name, String field, String colAlias, Boolean isPk, Boolean groupBy, String function, boolean isFromAliasAll) {
> + protected ModelAlias(String entityAlias, String name, String field, String colAlias, Boolean isPk, Boolean groupBy, String function, String fieldSet, boolean isFromAliasAll) {
> this.entityAlias = entityAlias;
> this.name = name;
> this.field = UtilXml.checkEmpty(field, this.name);
> @@ -865,6 +922,7 @@ public class ModelViewEntity extends Mod
> this.groupBy = false;
> }
> this.function = function;
> + this.fieldSet = UtilXml.checkEmpty(fieldSet).intern();
> this.isFromAliasAll = isFromAliasAll;
> }
>
> @@ -910,6 +968,10 @@ public class ModelViewEntity extends Mod
> return this.function;
> }
>
> + public String getFieldSet() {
> + return fieldSet;
> + }
> +
> public String getDescription() {
> return this.description;
> }
>
>