Author: nmalin
Date: Sat Mar 19 09:01:40 2016 New Revision: 1735741 URL: http://svn.apache.org/viewvc?rev=1735741&view=rev Log: For screen engine drop-down, sort with the locale the entity-list if the related entity have a default resource defined. This work also with view entity. Relate issue OFBIZ-3311 Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelUtil.java ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/EntityUtil.java ofbiz/trunk/framework/widget/src/org/ofbiz/widget/model/ModelFormField.java Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelUtil.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelUtil.java?rev=1735741&r1=1735740&r2=1735741&view=diff ============================================================================== --- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelUtil.java (original) +++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelUtil.java Sat Mar 19 09:01:40 2016 @@ -19,8 +19,16 @@ package org.ofbiz.entity.model; import java.io.File; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Locale; +import java.util.Set; import org.ofbiz.base.util.StringUtil; +import org.ofbiz.base.util.UtilMisc; +import org.ofbiz.base.util.UtilValidate; +import org.ofbiz.entity.model.ModelViewEntity.ModelAlias; /** * Generic Entity - General Utilities @@ -292,4 +300,43 @@ public class ModelUtil { return "invalid-" + sqlTypeName + ":" + length + ":" + precision; } } + + /** + * Check is a ModelEntity have a default resource associate to resolve localized value + * When the ModelEntity is a ModelViewEntity, check with the field to resolve the related entity + * @param modelEntity + * @param fieldName + * @return + */ + public static boolean isPotentialLocalizedField(ModelEntity modelEntity, String fieldName) { + return isPotentialLocalizedFields(modelEntity, UtilMisc.toList(fieldName)); + } + + /** + * Check is a ModelEntity have a default resource associate to resolve localized value + * When the ModelEntity is a ModelViewEntity, check with the list fields to resolve these related entities + * @param modelEntity + * @param fieldName + * @return + */ + public static boolean isPotentialLocalizedFields(ModelEntity modelEntity, List<String> fieldNames) { + if (modelEntity == null) return false; + if (modelEntity instanceof ModelViewEntity) { + // now try to retrieve with the field heading from the real entity linked to the view + ModelViewEntity modelViewEntity = (ModelViewEntity) modelEntity; + Iterator<ModelAlias> it = modelViewEntity.getAliasesIterator(); + while (it.hasNext()) { + ModelAlias modelAlias = it.next(); + if (fieldNames.contains(modelAlias.getName())) { + ModelEntity memberModelEntity = modelViewEntity.getMemberModelEntity(modelAlias.getEntityAlias()); + if (UtilValidate.isNotEmpty(memberModelEntity.getDefaultResourceName())) { + return true; + } + } + } + return false; + } else { + return UtilValidate.isNotEmpty(modelEntity.getDefaultResourceName()); + } + } } Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/EntityUtil.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/EntityUtil.java?rev=1735741&r1=1735740&r2=1735741&view=diff ============================================================================== --- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/EntityUtil.java (original) +++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/EntityUtil.java Sat Mar 19 09:01:40 2016 @@ -21,6 +21,7 @@ package org.ofbiz.entity.util; import java.io.Serializable; import java.sql.Timestamp; +import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.HashMap; @@ -28,6 +29,7 @@ import java.util.HashSet; import java.util.Iterator; import java.util.LinkedList; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.Set; @@ -333,6 +335,30 @@ public class EntityUtil { } return result; } + + /** + *returns the values in the order specified after with localized value + * + *@param values List of GenericValues + *@param orderBy The fields of the named entity to order the query by; + * optionally add a " ASC" for ascending or " DESC" for descending + *@param locale Locale use to retreive localized value + *@return List of GenericValue's in the proper order + */ + public static <T extends GenericEntity> List<T> localizedOrderBy(Collection<T> values, List<String> orderBy, Locale locale) { + if (values == null) return null; + if (values.isEmpty()) return new ArrayList<>(); + //force check entity label before order by + List<T> localizedValues = new ArrayList<T>(); + for (T value : values) { + T newValue = (T) value.clone(); + for (String orderByField : orderBy) { + newValue.put(orderByField, value.get(orderByField, locale)); + } + localizedValues.add(newValue); + } + return orderBy(localizedValues, orderBy); + } /** *returns the values in the order specified @@ -344,14 +370,14 @@ public class EntityUtil { */ public static <T extends GenericEntity> List<T> orderBy(Collection<T> values, List<String> orderBy) { if (values == null) return null; - if (values.size() == 0) return new LinkedList<T>(); + if (values.isEmpty()) return new ArrayList<T>(); if (UtilValidate.isEmpty(orderBy)) { - List<T> newList = new LinkedList<T>(); + List<T> newList = new ArrayList<T>(); newList.addAll(values); return newList; } - List<T> result = new LinkedList<T>(); + List<T> result = new ArrayList<T>(); result.addAll(values); if (Debug.verboseOn()) Debug.logVerbose("Sorting " + values.size() + " values, orderBy=" + orderBy.toString(), module); Collections.sort(result, new OrderByList(orderBy)); Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/model/ModelFormField.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/model/ModelFormField.java?rev=1735741&r1=1735740&r2=1735741&view=diff ============================================================================== --- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/model/ModelFormField.java (original) +++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/model/ModelFormField.java Sat Mar 19 09:01:40 2016 @@ -62,6 +62,7 @@ import org.ofbiz.entity.GenericValue; import org.ofbiz.entity.condition.EntityCondition; import org.ofbiz.entity.finder.EntityFinderUtil; import org.ofbiz.entity.model.ModelEntity; +import org.ofbiz.entity.model.ModelUtil; import org.ofbiz.entity.util.EntityUtil; import org.ofbiz.widget.WidgetWorker; import org.ofbiz.widget.model.CommonWidgetModels.AutoEntityParameters; @@ -1904,16 +1905,24 @@ public class ModelFormField { try { Locale locale = UtilMisc.ensureLocale(context.get("locale")); + ModelEntity modelEntity = delegator.getModelEntity(this.entityName); + Boolean localizedOrderBy = UtilValidate.isNotEmpty(this.orderByList) + && ModelUtil.isPotentialLocalizedFields(modelEntity, this.orderByList); List<GenericValue> values = null; - values = delegator.findList(this.entityName, findCondition, null, this.orderByList, null, this.cache); + if (!localizedOrderBy) { + values = delegator.findList(this.entityName, findCondition, null, this.orderByList, null, this.cache); + } else { + //if entity has localized label + values = delegator.findList(this.entityName, findCondition, null, null, null, this.cache); + values = EntityUtil.localizedOrderBy(values, this.orderByList, locale); + } // filter-by-date if requested if ("true".equals(this.filterByDate)) { values = EntityUtil.filterByDate(values, true); } else if (!"false".equals(this.filterByDate)) { // not explicitly true or false, check to see if has fromDate and thruDate, if so do the filter - ModelEntity modelEntity = delegator.getModelEntity(this.entityName); if (modelEntity != null && modelEntity.isField("fromDate") && modelEntity.isField("thruDate")) { values = EntityUtil.filterByDate(values, true); } |
Free forum by Nabble | Edit this page |