Author: jleroux Date: Thu Jul 25 07:52:45 2013 New Revision: 1506835 URL: http://svn.apache.org/r1506835 Log: A slightly modified patch from Niclas Malin for "New elements auto-parameters-[entity/service] for link/hyperlink" https://issues.apache.org/jira/browse/OFBIZ-4472
When you want edit/remove an entity from link call it's needed to give all pk on parameter element as like : {quote} <field name="deleteLink"> <hyperlink target="example_deleteExampleFeatureAppl"> <parameter param-name="exampleId"/> <parameter param-name="exampleFeatureId"/> <parameter param-name="fromDate"/> <hyperlink/> </field> {quote} To simplify, I introduce auto-parameters-entity like this : {quote} <field name="deleteLink"> <hyperlink target="example_deleteExampleFeatureAppl"> <auto-parameters-entity entity-name="ExampleFeatureAppl"/> <hyperlink/> </field> {quote} or {quote} <form name="ListExampleFeatureAppls" type="list" default-entity-name="ExampleFeatureAppl"> <field name="deleteLink"> <hyperlink target="example_deleteExampleFeatureAppl"> <auto-parameters-entity/> <hyperlink/> </field> {quote} This method is inspired from auto-fields-entity and I homogenized on widget renderer screen (link), menu (link) and form (hyperlink, sub-link) jleroux: I simply put returns in case of no dispatcher or delegator Modified: ofbiz/trunk/framework/widget/dtd/widget-form.xsd ofbiz/trunk/framework/widget/dtd/widget-menu.xsd ofbiz/trunk/framework/widget/dtd/widget-screen.xsd ofbiz/trunk/framework/widget/src/org/ofbiz/widget/WidgetWorker.java ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/ModelForm.java ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/ModelFormField.java ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ModelMenuItem.java ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/ModelScreenWidget.java Modified: ofbiz/trunk/framework/widget/dtd/widget-form.xsd URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/dtd/widget-form.xsd?rev=1506835&r1=1506834&r2=1506835&view=diff ============================================================================== --- ofbiz/trunk/framework/widget/dtd/widget-form.xsd (original) +++ ofbiz/trunk/framework/widget/dtd/widget-form.xsd Thu Jul 25 07:52:45 2013 @@ -426,6 +426,8 @@ under the License. </xs:annotation> <xs:complexType> <xs:sequence> + <xs:element minOccurs="0" ref="auto-parameters-service"/> + <xs:element minOccurs="0" ref="auto-parameters-entity"/> <xs:element minOccurs="0" maxOccurs="unbounded" ref="parameter" /> </xs:sequence> <xs:attribute name="event-type" use="required"> @@ -962,6 +964,8 @@ under the License. <xs:element name="hyperlink" substitutionGroup="AllFields"> <xs:complexType> <xs:sequence> + <xs:element minOccurs="0" ref="auto-parameters-service"/> + <xs:element minOccurs="0" ref="auto-parameters-entity"/> <xs:element minOccurs="0" maxOccurs="unbounded" ref="parameter" /> </xs:sequence> <xs:attribute name="also-hidden" default="true"> @@ -1055,6 +1059,60 @@ under the License. <xs:attribute type="xs:string" name="value" /> </xs:complexType> </xs:element> + <xs:element name="auto-parameters-service"> + <xs:complexType> + <xs:sequence> + <xs:element minOccurs="0" maxOccurs="unbounded" ref="exclude"/> + </xs:sequence> + <xs:attribute name="service-name" type="xs:string"> + <xs:annotation> + <xs:documentation>The service name used to resolve parameters. If empty, use form defaultServiceName. Flexible string allowed.</xs:documentation> + </xs:annotation> + </xs:attribute> + <xs:attribute name="send-if-empty" default="true"> + <xs:simpleType> + <xs:restriction base="xs:token"> + <xs:enumeration value="true"/> + <xs:enumeration value="false"/> + </xs:restriction> + </xs:simpleType> + </xs:attribute> + </xs:complexType> + </xs:element> + <xs:element name="auto-parameters-entity"> + <xs:complexType> + <xs:sequence> + <xs:element minOccurs="0" maxOccurs="unbounded" ref="exclude"/> + </xs:sequence> + <xs:attribute name="entity-name" type="xs:string"> + <xs:annotation> + <xs:documentation>The entity name used to resolve parameters. If empty use form defaultEntityName attribute. Flexible string allowed.</xs:documentation> + </xs:annotation> + </xs:attribute> + <xs:attribute name="include" default="pk"> + <xs:simpleType> + <xs:restriction base="xs:token"> + <xs:enumeration value="pk"/> + <xs:enumeration value="nonpk"/> + <xs:enumeration value="all"/> + </xs:restriction> + </xs:simpleType> + </xs:attribute> + <xs:attribute name="send-if-empty" default="true"> + <xs:simpleType> + <xs:restriction base="xs:token"> + <xs:enumeration value="true"/> + <xs:enumeration value="false"/> + </xs:restriction> + </xs:simpleType> + </xs:attribute> + </xs:complexType> + </xs:element> + <xs:element name="exclude"> + <xs:complexType> + <xs:attribute name="field-name" type="xs:string" use="required"/> + </xs:complexType> + </xs:element> <xs:element name="ignored" substitutionGroup="AllFields"> <xs:complexType/> </xs:element> @@ -1699,6 +1757,8 @@ under the License. <xs:element name="sub-hyperlink"> <xs:complexType> <xs:sequence> + <xs:element minOccurs="0" ref="auto-parameters-service"/> + <xs:element minOccurs="0" ref="auto-parameters-entity"/> <xs:element minOccurs="0" maxOccurs="unbounded" ref="parameter" /> </xs:sequence> <xs:attribute type="xs:string" name="use-when" /> Modified: ofbiz/trunk/framework/widget/dtd/widget-menu.xsd URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/dtd/widget-menu.xsd?rev=1506835&r1=1506834&r2=1506835&view=diff ============================================================================== --- ofbiz/trunk/framework/widget/dtd/widget-menu.xsd (original) +++ ofbiz/trunk/framework/widget/dtd/widget-menu.xsd Thu Jul 25 07:52:45 2013 @@ -148,6 +148,8 @@ under the License. <xs:element name="link"> <xs:complexType> <xs:sequence> + <xs:element minOccurs="0" ref="auto-parameters-service"/> + <xs:element minOccurs="0" ref="auto-parameters-entity"/> <xs:element minOccurs="0" maxOccurs="unbounded" ref="parameter" /> <xs:element minOccurs="0" ref="image" /> </xs:sequence> @@ -231,6 +233,60 @@ under the License. <xs:attribute type="xs:string" name="value" /> </xs:complexType> </xs:element> + <xs:element name="auto-parameters-service"> + <xs:complexType> + <xs:sequence> + <xs:element minOccurs="0" maxOccurs="unbounded" ref="exclude"/> + </xs:sequence> + <xs:attribute name="service-name" type="xs:string" use="required"> + <xs:annotation> + <xs:documentation>The service name used to resolve parameters. Flexible string allowed.</xs:documentation> + </xs:annotation> + </xs:attribute> + <xs:attribute name="send-if-empty" default="true"> + <xs:simpleType> + <xs:restriction base="xs:token"> + <xs:enumeration value="true"/> + <xs:enumeration value="false"/> + </xs:restriction> + </xs:simpleType> + </xs:attribute> + </xs:complexType> + </xs:element> + <xs:element name="auto-parameters-entity"> + <xs:complexType> + <xs:sequence> + <xs:element minOccurs="0" maxOccurs="unbounded" ref="exclude"/> + </xs:sequence> + <xs:attribute name="entity-name" type="xs:string"> + <xs:annotation> + <xs:documentation>The entity name used to resolve parameters. If empty try use menu defaultEntityName attribute. Flexible string allowed.</xs:documentation> + </xs:annotation> + </xs:attribute> + <xs:attribute name="include" default="pk"> + <xs:simpleType> + <xs:restriction base="xs:token"> + <xs:enumeration value="pk"/> + <xs:enumeration value="nonpk"/> + <xs:enumeration value="all"/> + </xs:restriction> + </xs:simpleType> + </xs:attribute> + <xs:attribute name="send-if-empty" default="true"> + <xs:simpleType> + <xs:restriction base="xs:token"> + <xs:enumeration value="true"/> + <xs:enumeration value="false"/> + </xs:restriction> + </xs:simpleType> + </xs:attribute> + </xs:complexType> + </xs:element> + <xs:element name="exclude"> + <xs:complexType> + <xs:attribute name="field-name" type="xs:string" use="required"/> + </xs:complexType> + </xs:element> <!-- ================ ACTIONS ================ --> <xs:element name="AllActions" abstract="true"/> Modified: ofbiz/trunk/framework/widget/dtd/widget-screen.xsd URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/dtd/widget-screen.xsd?rev=1506835&r1=1506834&r2=1506835&view=diff ============================================================================== --- ofbiz/trunk/framework/widget/dtd/widget-screen.xsd (original) +++ ofbiz/trunk/framework/widget/dtd/widget-screen.xsd Thu Jul 25 07:52:45 2013 @@ -772,6 +772,8 @@ under the License. <xs:element name="link" substitutionGroup="AllWidgets"> <xs:complexType> <xs:sequence> + <xs:element minOccurs="0" ref="auto-parameters-service"/> + <xs:element minOccurs="0" ref="auto-parameters-entity"/> <xs:element minOccurs="0" maxOccurs="unbounded" ref="parameter" /> <xs:element minOccurs="0" ref="image" /> </xs:sequence> @@ -841,6 +843,60 @@ under the License. <xs:attribute type="xs:string" name="value" /> </xs:complexType> </xs:element> + <xs:element name="auto-parameters-service"> + <xs:complexType> + <xs:sequence> + <xs:element minOccurs="0" maxOccurs="unbounded" ref="exclude"/> + </xs:sequence> + <xs:attribute name="service-name" type="xs:string" use="required"> + <xs:annotation> + <xs:documentation>The service name used to resolve parameters. If empty, use form defaultServiceName. Flexible string allowed.</xs:documentation> + </xs:annotation> + </xs:attribute> + <xs:attribute name="send-if-empty" default="true"> + <xs:simpleType> + <xs:restriction base="xs:token"> + <xs:enumeration value="true"/> + <xs:enumeration value="false"/> + </xs:restriction> + </xs:simpleType> + </xs:attribute> + </xs:complexType> + </xs:element> + <xs:element name="auto-parameters-entity"> + <xs:complexType> + <xs:sequence> + <xs:element minOccurs="0" maxOccurs="unbounded" ref="exclude"/> + </xs:sequence> + <xs:attribute name="entity-name" type="xs:string" use="required"> + <xs:annotation> + <xs:documentation>The entity name used to resolve parameters. If empty use form defaultEntityName attribute. Flexible string allowed.</xs:documentation> + </xs:annotation> + </xs:attribute> + <xs:attribute name="include" default="pk"> + <xs:simpleType> + <xs:restriction base="xs:token"> + <xs:enumeration value="pk"/> + <xs:enumeration value="nonpk"/> + <xs:enumeration value="all"/> + </xs:restriction> + </xs:simpleType> + </xs:attribute> + <xs:attribute name="send-if-empty" default="true"> + <xs:simpleType> + <xs:restriction base="xs:token"> + <xs:enumeration value="true"/> + <xs:enumeration value="false"/> + </xs:restriction> + </xs:simpleType> + </xs:attribute> + </xs:complexType> + </xs:element> + <xs:element name="exclude"> + <xs:complexType> + <xs:attribute name="field-name" type="xs:string" use="required"/> + </xs:complexType> + </xs:element> <xs:element name="screenlet" substitutionGroup="AllWidgets"> <xs:complexType> Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/WidgetWorker.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/WidgetWorker.java?rev=1506835&r1=1506834&r2=1506835&view=diff ============================================================================== --- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/WidgetWorker.java (original) +++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/WidgetWorker.java Thu Jul 25 07:52:45 2013 @@ -25,6 +25,8 @@ import java.math.BigDecimal; import java.net.URLEncoder; import java.nio.charset.Charset; import java.text.DateFormat; +import java.util.Iterator; +import java.util.List; import java.util.Map; import java.util.TimeZone; @@ -32,16 +34,25 @@ import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import javolution.util.FastList; +import javolution.util.FastMap; + import org.ofbiz.base.util.Debug; import org.ofbiz.base.util.StringUtil; import org.ofbiz.base.util.UtilDateTime; import org.ofbiz.base.util.UtilGenerics; import org.ofbiz.base.util.UtilHttp; 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.Delegator; +import org.ofbiz.entity.model.ModelEntity; +import org.ofbiz.entity.model.ModelField; +import org.ofbiz.service.GenericServiceException; import org.ofbiz.service.LocalDispatcher; +import org.ofbiz.service.ModelParam; +import org.ofbiz.service.ModelService; import org.ofbiz.webapp.control.ConfigXMLReader; import org.ofbiz.webapp.control.RequestHandler; import org.ofbiz.webapp.taglib.ContentUrlTag; @@ -396,6 +407,128 @@ public class WidgetWorker { } } + public static class AutoServiceParameters { + private String serviceName; + List<String> excludeList = FastList.newInstance(); + boolean includePk; + boolean includeNonPk; + boolean sendIfEmpty; + public AutoServiceParameters(Element autoElement){ + serviceName = UtilXml.checkEmpty(autoElement.getAttribute("service-name")); + sendIfEmpty = "true".equals(autoElement.getAttribute("send-if-empty")); + List<? extends Element> excludes = UtilXml.childElementList(autoElement, "exclude"); + if (excludes != null) { + for (Element exclude: excludes) { + if (UtilValidate.isNotEmpty(exclude.getAttribute("field-name"))) { + excludeList.add(exclude.getAttribute("field-name")); + } + } + } + } + + public Map<String, String> getParametersMap(Map<String, Object> context, String defaultServiceName) { + Map<String, String> autServiceParams = FastMap.newInstance(); + LocalDispatcher dispatcher = (LocalDispatcher) context.get("dispatcher"); + if (dispatcher == null) { + Debug.logError("We can not append auto service Parameters since we could not find dispatcher in the current context", module); + return autServiceParams; + } + if (UtilValidate.isEmpty(serviceName)) serviceName = defaultServiceName; + FlexibleStringExpander toExpand = FlexibleStringExpander.getInstance(serviceName); + ModelService service = null; + try { + service = dispatcher.getDispatchContext().getModelService(toExpand.toString()); + } catch (GenericServiceException e) { + Debug.logError("Resolve service throw an error : " + e, module); + } + if (service == null) { + Debug.logError("We can not append auto service Parameters since we could not find service with name [" + serviceName + "]", module); + return autServiceParams; + } + + Iterator<ModelParam> paramsIter = service.getInModelParamList().iterator(); + if (paramsIter != null) { + while (paramsIter.hasNext()) { + ModelParam param = paramsIter.next(); + if (param.getInternal()) continue; + String paramName = param.getName(); + FlexibleMapAccessor<Object> fma = FlexibleMapAccessor.getInstance(paramName); + if (!excludeList.contains(paramName)) { + Object flexibleValue = fma.get(context); + if (UtilValidate.isEmpty(flexibleValue) && context.containsKey("parameters")) { + flexibleValue = fma.get((Map<String, ? extends Object>) context.get("parameters")); + } + if (UtilValidate.isNotEmpty(flexibleValue) || sendIfEmpty) { + autServiceParams.put(paramName, String.valueOf(flexibleValue)); + } + } + } + } + return autServiceParams; + } + } + + public static class AutoEntityParameters { + private String entityName; + private String includeType; + List<String> excludeList = FastList.newInstance(); + boolean includePk; + boolean includeNonPk; + boolean sendIfEmpty; + public AutoEntityParameters(Element autoElement){ + entityName = UtilXml.checkEmpty(autoElement.getAttribute("entity-name")); + sendIfEmpty = "true".equals(autoElement.getAttribute("send-if-empty")); + includeType = UtilXml.checkEmpty(autoElement.getAttribute("include")); + includePk = "pk".equals(includeType) || "all".equals(includeType); + includeNonPk = "nonpk".equals(includeType) || "all".equals(includeType); + List<? extends Element> excludes = UtilXml.childElementList(autoElement, "exclude"); + if (excludes != null) { + for (Element exclude: excludes) { + if (UtilValidate.isNotEmpty(exclude.getAttribute("field-name"))) { + excludeList.add(exclude.getAttribute("field-name")); + } + } + } + } + + public Map<String, String> getParametersMap(Map<String, Object> context, String defaultEntityName) { + Map<String, String> autEntityParams = FastMap.newInstance(); + Delegator delegator = (Delegator) context.get("delegator"); + if (delegator == null) { + Debug.logError("We can not append auto entity Parameters since we could not find delegator in the current context", module); + return autEntityParams; + } + if (UtilValidate.isEmpty(entityName)) entityName = defaultEntityName; + FlexibleStringExpander toExpand = FlexibleStringExpander.getInstance(entityName); + ModelEntity entity = delegator.getModelEntity(toExpand.expandString(context)); + if (entity == null) { + Debug.logError("We can not append auto entity Parameters since we could not find entity with name [" + entityName + "]", module); + return autEntityParams; + } + + Iterator<ModelField> fieldsIter = entity.getFieldsIterator(); + if (fieldsIter != null) { + while (fieldsIter.hasNext()) { + ModelField field = fieldsIter.next(); + String fieldName = field.getName(); + FlexibleMapAccessor<Object> fma = FlexibleMapAccessor.getInstance(fieldName); + boolean shouldExclude = excludeList.contains(fieldName); + if ((!shouldExclude) && (!field.getIsAutoCreatedInternal()) + && ((field.getIsPk() && includePk) || (!field.getIsPk() && includeNonPk))) { + Object flexibleValue = fma.get(context); + if (UtilValidate.isEmpty(flexibleValue) && context.containsKey("parameters")) { + flexibleValue = fma.get((Map<String, Object>) context.get("parameters")); + } + if (UtilValidate.isNotEmpty(flexibleValue) || sendIfEmpty) { + autEntityParams.put(fieldName, String.valueOf(flexibleValue)); + } + } + } + } + return autEntityParams; + } + } + public static String determineAutoLinkType(String linkType, String target, String targetType, HttpServletRequest request) { if ("auto".equals(linkType)) { if ("intra-app".equals(targetType)) { Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/ModelForm.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/ModelForm.java?rev=1506835&r1=1506834&r2=1506835&view=diff ============================================================================== --- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/ModelForm.java (original) +++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/ModelForm.java Thu Jul 25 07:52:45 2013 @@ -513,6 +513,9 @@ public class ModelForm extends ModelWidg UpdateArea updateArea = new UpdateArea(updateAreaElement); this.addOnEventUpdateArea(updateArea); } + //propagate defaultEntityName on updateAreas + if (UtilValidate.isNotEmpty(this.defaultEntityName)) this.setDefaultEntityNameOnUpdateAreas(); + if (UtilValidate.isNotEmpty(this.defaultServiceName)) this.setDefaultServiceNameOnUpdateAreas(); // auto-fields-service for (Element autoFieldsServiceElement: UtilXml.childElementList(formElement, "auto-fields-service")) { @@ -2814,6 +2817,28 @@ public class ModelForm extends ModelWidg return this.onSubmitUpdateAreas; } + public void setDefaultEntityNameOnUpdateAreas() { + List<UpdateArea> allUpdateAreas = FastList.newInstance(); + if (UtilValidate.isNotEmpty(this.onSubmitUpdateAreas)) allUpdateAreas.addAll(this.onSubmitUpdateAreas); + if (UtilValidate.isNotEmpty(this.onPaginateUpdateAreas)) allUpdateAreas.addAll(this.onPaginateUpdateAreas); + for (UpdateArea updateArea : allUpdateAreas) { + if (UtilValidate.isEmpty(updateArea.defaultEntityName)) { + updateArea.defaultEntityName = this.defaultEntityName; + } + } + } + + public void setDefaultServiceNameOnUpdateAreas() { + List<UpdateArea> allUpdateAreas = FastList.newInstance(); + if (UtilValidate.isNotEmpty(this.onSubmitUpdateAreas)) allUpdateAreas.addAll(this.onSubmitUpdateAreas); + if (UtilValidate.isNotEmpty(this.onPaginateUpdateAreas)) allUpdateAreas.addAll(this.onPaginateUpdateAreas); + for (UpdateArea updateArea : allUpdateAreas) { + if (UtilValidate.isEmpty(updateArea.defaultServiceName)) { + updateArea.defaultServiceName = this.defaultServiceName; + } + } + } + public static class AltRowStyle { public String useWhen; public String style; @@ -2878,7 +2903,11 @@ public class ModelForm extends ModelWidg protected String eventType; protected String areaId; protected String areaTarget; - List<WidgetWorker.Parameter> parameterList =FastList.newInstance(); + protected String defaultServiceName; + protected String defaultEntityName; + protected WidgetWorker.AutoEntityParameters autoEntityParameters; + protected WidgetWorker.AutoEntityParameters autoServiceParameters; + List<WidgetWorker.Parameter> parameterList = FastList.newInstance(); /** XML constructor. * @param updateAreaElement The <code><on-xxx-update-area></code> * XML element. @@ -2891,6 +2920,14 @@ public class ModelForm extends ModelWidg for (Element parameterElement: parameterElementList) { this.parameterList.add(new WidgetWorker.Parameter(parameterElement)); } + Element autoServiceParamsElement = UtilXml.firstChildElement(updateAreaElement, "auto-parameters-service"); + if (autoServiceParamsElement != null) { + autoServiceParameters = new WidgetWorker.AutoEntityParameters(autoServiceParamsElement); + } + Element autoEntityParamsElement = UtilXml.firstChildElement(updateAreaElement, "auto-parameters-entity"); + if (autoEntityParamsElement != null) { + autoEntityParameters = new WidgetWorker.AutoEntityParameters(autoEntityParamsElement); + } } /** String constructor. * @param areaId The id of the widget element to be updated @@ -2920,10 +2957,16 @@ public class ModelForm extends ModelWidg } public Map<String, String> getParameterMap(Map<String, Object> context) { Map<String, String> fullParameterMap = FastMap.newInstance(); + if (autoServiceParameters != null) { + fullParameterMap.putAll(autoServiceParameters.getParametersMap(context, defaultServiceName)); + } + if (autoEntityParameters != null) { + fullParameterMap.putAll(autoEntityParameters.getParametersMap(context, defaultEntityName)); + } for (WidgetWorker.Parameter parameter: this.parameterList) { fullParameterMap.put(parameter.getName(), parameter.getValue(context)); } - + return fullParameterMap; } } Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/ModelFormField.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/ModelFormField.java?rev=1506835&r1=1506834&r2=1506835&view=diff ============================================================================== --- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/ModelFormField.java (original) +++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/ModelFormField.java Thu Jul 25 07:52:45 2013 @@ -218,13 +218,13 @@ public class ModelFormField { } protected void addOnChangeUpdateArea(UpdateArea updateArea) { - if (onChangeUpdateAreas == null) onChangeUpdateAreas = FastList.newInstance(); + if (onChangeUpdateAreas == null) onChangeUpdateAreas = FastList.newInstance(); onChangeUpdateAreas.add(updateArea); Debug.logInfo(this.modelForm.getName() + ":" + this.name + " onChangeUpdateAreas size = " + onChangeUpdateAreas.size(), module); } protected void addOnClickUpdateArea(UpdateArea updateArea) { - if (onClickUpdateAreas == null) onClickUpdateAreas = FastList.newInstance(); + if (onClickUpdateAreas == null) onClickUpdateAreas = FastList.newInstance(); onClickUpdateAreas.add(updateArea); } @@ -2226,6 +2226,8 @@ public class ModelFormField { protected FlexibleStringExpander targetWindowExdr; protected FlexibleMapAccessor<Map<String, String>> parametersMapAcsr; protected List<WidgetWorker.Parameter> parameterList = FastList.newInstance(); + protected WidgetWorker.AutoServiceParameters autoServiceParameters; + protected WidgetWorker.AutoEntityParameters autoEntityParameters; protected boolean requestConfirmation = false; protected FlexibleStringExpander confirmationMsgExdr; @@ -2261,6 +2263,14 @@ public class ModelFormField { for (Element parameterElement: parameterElementList) { this.parameterList.add(new WidgetWorker.Parameter(parameterElement)); } + Element autoServiceParamsElement = UtilXml.firstChildElement(element, "auto-parameters-service"); + if (autoServiceParamsElement != null) { + autoServiceParameters = new WidgetWorker.AutoServiceParameters(autoServiceParamsElement); + } + Element autoEntityParamsElement = UtilXml.firstChildElement(element, "auto-parameters-entity"); + if (autoEntityParamsElement != null) { + autoEntityParameters = new WidgetWorker.AutoEntityParameters(autoEntityParamsElement); + } } @Override @@ -2278,8 +2288,8 @@ public class ModelFormField { public String getConfirmation(Map<String, Object> context) { String message = getConfirmationMsg(context); - if (UtilValidate.isNotEmpty(message)) return message; - + if (UtilValidate.isNotEmpty(message)) return message; + if (getRequestConfirmation()) { String defaultMessage = UtilProperties.getPropertyValue("general", "default.confirmation.message", "${uiLabelMap.CommonConfirm}"); setConfirmationMsg(defaultMessage); @@ -2333,11 +2343,19 @@ public class ModelFormField { if (addlParamMap != null) { fullParameterMap.putAll(addlParamMap); } - + for (WidgetWorker.Parameter parameter: this.parameterList) { fullParameterMap.put(parameter.getName(), parameter.getValue(context)); } - + + if (autoServiceParameters != null) { + fullParameterMap.putAll(autoServiceParameters.getParametersMap(context, this.getModelFormField().getModelForm().getDefaultServiceName())); + } + + if (autoEntityParameters != null) { + fullParameterMap.putAll(autoEntityParameters.getParametersMap(context, this.getModelFormField().getModelForm().getDefaultEntityName())); + } + return fullParameterMap; } @@ -2419,6 +2437,8 @@ public class ModelFormField { protected boolean requestConfirmation = false; protected FlexibleStringExpander confirmationMsgExdr; protected ModelFormField modelFormField; + protected WidgetWorker.AutoServiceParameters autoServiceParameters; + protected WidgetWorker.AutoEntityParameters autoEntityParameters; public SubHyperlink(Element element, ModelFormField modelFormField) { this.setDescription(element.getAttribute("description")); @@ -2434,7 +2454,14 @@ public class ModelFormField { } setRequestConfirmation("true".equals(element.getAttribute("request-confirmation"))); setConfirmationMsg(element.getAttribute("confirmation-message")); - + Element autoServiceParamsElement = UtilXml.firstChildElement(element, "auto-parameters-service"); + if (autoServiceParamsElement != null) { + autoServiceParameters = new WidgetWorker.AutoServiceParameters(autoServiceParamsElement); + } + Element autoEntityParamsElement = UtilXml.firstChildElement(element, "auto-parameters-entity"); + if (autoEntityParamsElement != null) { + autoEntityParameters = new WidgetWorker.AutoEntityParameters(autoEntityParamsElement); + } this.modelFormField = modelFormField; } @@ -2485,7 +2512,14 @@ public class ModelFormField { for (WidgetWorker.Parameter parameter: this.parameterList) { fullParameterMap.put(parameter.getName(), parameter.getValue(context)); } - + + if (autoServiceParameters != null) { + fullParameterMap.putAll(autoServiceParameters.getParametersMap(context, this.getModelFormField().getModelForm().getDefaultServiceName())); + } + if (autoEntityParameters != null) { + fullParameterMap.putAll(autoEntityParameters.getParametersMap(context, this.getModelFormField().getModelForm().getDefaultEntityName())); + } + return fullParameterMap; } Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ModelMenuItem.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ModelMenuItem.java?rev=1506835&r1=1506834&r2=1506835&view=diff ============================================================================== --- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ModelMenuItem.java (original) +++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ModelMenuItem.java Thu Jul 25 07:52:45 2013 @@ -578,6 +578,8 @@ public class ModelMenuItem { protected boolean secure = false; protected boolean encode = false; protected String linkType; + protected WidgetWorker.AutoServiceParameters autoServiceParameters; + protected WidgetWorker.AutoEntityParameters autoEntityParameters; protected FlexibleMapAccessor<Map<String, String>> parametersMapAcsr; protected List<WidgetWorker.Parameter> parameterList = FastList.newInstance(); protected boolean requestConfirmation = false; @@ -609,6 +611,14 @@ public class ModelMenuItem { } setRequestConfirmation("true".equals(linkElement.getAttribute("request-confirmation"))); setConfirmationMsg(linkElement.getAttribute("confirmation-message")); + Element autoServiceParamsElement = UtilXml.firstChildElement(linkElement, "auto-parameters-service"); + if (autoServiceParamsElement != null) { + autoServiceParameters = new WidgetWorker.AutoServiceParameters(autoServiceParamsElement); + } + Element autoEntityParamsElement = UtilXml.firstChildElement(linkElement, "auto-parameters-entity"); + if (autoEntityParamsElement != null) { + autoEntityParameters = new WidgetWorker.AutoEntityParameters(autoEntityParamsElement); + } } public Link(ModelMenuItem parentMenuItem) { @@ -716,7 +726,12 @@ public class ModelMenuItem { for (WidgetWorker.Parameter parameter: this.parameterList) { fullParameterMap.put(parameter.getName(), parameter.getValue(context)); } - + if (autoServiceParameters != null) { + fullParameterMap.putAll(autoServiceParameters.getParametersMap(context, null)); + } + if (autoEntityParameters != null) { + fullParameterMap.putAll(autoEntityParameters.getParametersMap(context, linkMenuItem.getModelMenu().getDefaultEntityName())); + } return fullParameterMap; } Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/ModelScreenWidget.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/ModelScreenWidget.java?rev=1506835&r1=1506834&r2=1506835&view=diff ============================================================================== --- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/ModelScreenWidget.java (original) +++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/ModelScreenWidget.java Thu Jul 25 07:52:45 2013 @@ -1387,7 +1387,8 @@ public abstract class ModelScreenWidget protected String width; protected String height; protected List<WidgetWorker.Parameter> parameterList = FastList.newInstance(); - + protected WidgetWorker.AutoServiceParameters autoServiceParameters; + protected WidgetWorker.AutoEntityParameters autoEntityParameters; public Link(ModelScreen modelScreen, Element linkElement) { super(modelScreen, linkElement); @@ -1414,6 +1415,15 @@ public abstract class ModelScreenWidget this.parameterList.add(new WidgetWorker.Parameter(parameterElement)); } + Element autoServiceParamsElement = UtilXml.firstChildElement(linkElement, "auto-parameters-service"); + if (autoServiceParamsElement != null) { + autoServiceParameters = new WidgetWorker.AutoServiceParameters(autoServiceParamsElement); + } + Element autoEntityParamsElement = UtilXml.firstChildElement(linkElement, "auto-parameters-entity"); + if (autoEntityParamsElement != null) { + autoEntityParameters = new WidgetWorker.AutoEntityParameters(autoEntityParamsElement); + } + this.width = linkElement.getAttribute("width"); this.height = linkElement.getAttribute("height"); } @@ -1512,7 +1522,14 @@ public abstract class ModelScreenWidget for (WidgetWorker.Parameter parameter: this.parameterList) { fullParameterMap.put(parameter.getName(), parameter.getValue(context)); } - + + if (autoServiceParameters != null) { + fullParameterMap.putAll(autoServiceParameters.getParametersMap(context, null)); + } + if (autoEntityParameters != null) { + fullParameterMap.putAll(autoEntityParameters.getParametersMap(context, null)); + } + return fullParameterMap; }