You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ofbiz.apache.org by Adrian Crum <ad...@sandglass-software.com> on 2014/11/15 22:38:07 UTC

Re: svn commit: r1639927 [1/3] - in /ofbiz/trunk/framework/widget/src/org/ofbiz/widget: artifact/ fo/ form/ html/ text/ xml/

Oops, this commit includes some unintentional formatting changes. Sorry 
about that.

Adrian Crum
Sandglass Software
www.sandglass-software.com

On 11/15/2014 9:33 PM, adrianc@apache.org wrote:
> Author: adrianc
> Date: Sat Nov 15 21:33:51 2014
> New Revision: 1639927
>
> URL: http://svn.apache.org/r1639927
> Log:
> ModelFormField.java refactor:
>
> 1. Extract FieldInfo class to a separate file.
> 2. Make FieldInfo thread-safe.
> 3. Modify FieldInfo subclasses so they include a thread-safe copy method.
>
> This commit fixes a major flaw in the original design. When a widget form is extended, the original design would copy the child FieldInfo state to the parent FieldInfo - so the parent FieldInfo referenced the child form instead of the parent form. With this commit, parent FieldInfo instances  are copied as new instances to the child form - so the parent FieldInfo instances remain unchanged.
>
> Added:
>      ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/FieldInfo.java
> Modified:
>      ofbiz/trunk/framework/widget/src/org/ofbiz/widget/artifact/ArtifactInfoGatherer.java
>      ofbiz/trunk/framework/widget/src/org/ofbiz/widget/fo/FoFormRenderer.java
>      ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/FormRenderer.java
>      ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/MacroFormRenderer.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/html/HtmlFormRenderer.java
>      ofbiz/trunk/framework/widget/src/org/ofbiz/widget/text/TextFormRenderer.java
>      ofbiz/trunk/framework/widget/src/org/ofbiz/widget/xml/XmlFormRenderer.java
>
> Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/artifact/ArtifactInfoGatherer.java
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/artifact/ArtifactInfoGatherer.java?rev=1639927&r1=1639926&r2=1639927&view=diff
> ==============================================================================
> --- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/artifact/ArtifactInfoGatherer.java (original)
> +++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/artifact/ArtifactInfoGatherer.java Sat Nov 15 21:33:51 2014
> @@ -37,6 +37,7 @@ import org.ofbiz.widget.ModelWidgetActio
>   import org.ofbiz.widget.ModelWidgetAction.Service;
>   import org.ofbiz.widget.ModelWidgetAction.SetField;
>   import org.ofbiz.widget.ModelWidgetVisitor;
> +import org.ofbiz.widget.form.FieldInfo;
>   import org.ofbiz.widget.form.ModelForm;
>   import org.ofbiz.widget.form.ModelForm.AltTarget;
>   import org.ofbiz.widget.form.ModelForm.AutoFieldsEntity;
> @@ -51,7 +52,7 @@ import org.ofbiz.widget.form.ModelFormFi
>   import org.ofbiz.widget.form.ModelFormField.DisplayEntityField;
>   import org.ofbiz.widget.form.ModelFormField.DisplayField;
>   import org.ofbiz.widget.form.ModelFormField.DropDownField;
> -import org.ofbiz.widget.form.ModelFormField.FieldInfo;
> +import org.ofbiz.widget.form.ModelFormField.FieldInfoWithOptions;
>   import org.ofbiz.widget.form.ModelFormField.FileField;
>   import org.ofbiz.widget.form.ModelFormField.HiddenField;
>   import org.ofbiz.widget.form.ModelFormField.HyperlinkField;
> @@ -245,8 +246,8 @@ public final class ArtifactInfoGatherer
>               if (modelFormField.getFieldInfo() instanceof ModelFormField.DisplayEntityField) {
>                   infoContext.addEntityName(((ModelFormField.DisplayEntityField) modelFormField.getFieldInfo()).getEntityName());
>               }
> -            if (modelFormField.getFieldInfo() instanceof ModelFormField.FieldInfoWithOptions) {
> -                for (ModelFormField.OptionSource optionSource : ((ModelFormField.FieldInfoWithOptions) modelFormField
> +            if (modelFormField.getFieldInfo() instanceof FieldInfoWithOptions) {
> +                for (ModelFormField.OptionSource optionSource : ((FieldInfoWithOptions) modelFormField
>                           .getFieldInfo()).getOptionSources()) {
>                       if (optionSource instanceof ModelFormField.EntityOptions) {
>                           infoContext.addEntityName(((ModelFormField.EntityOptions) optionSource).getEntityName());
>
> Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/fo/FoFormRenderer.java
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/fo/FoFormRenderer.java?rev=1639927&r1=1639926&r2=1639927&view=diff
> ==============================================================================
> --- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/fo/FoFormRenderer.java (original)
> +++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/fo/FoFormRenderer.java Sat Nov 15 21:33:51 2014
> @@ -29,6 +29,7 @@ import org.ofbiz.base.util.UtilFormatOut
>   import org.ofbiz.base.util.UtilValidate;
>   import org.ofbiz.widget.ModelWidget;
>   import org.ofbiz.widget.WidgetWorker;
> +import org.ofbiz.widget.form.FieldInfo;
>   import org.ofbiz.widget.form.FormStringRenderer;
>   import org.ofbiz.widget.form.ModelForm;
>   import org.ofbiz.widget.form.ModelFormField;
> @@ -38,6 +39,7 @@ import org.ofbiz.widget.form.ModelFormFi
>   import org.ofbiz.widget.form.ModelFormField.DateTimeField;
>   import org.ofbiz.widget.form.ModelFormField.DisplayField;
>   import org.ofbiz.widget.form.ModelFormField.DropDownField;
> +import org.ofbiz.widget.form.ModelFormField.FieldInfoWithOptions;
>   import org.ofbiz.widget.form.ModelFormField.FileField;
>   import org.ofbiz.widget.form.ModelFormField.HiddenField;
>   import org.ofbiz.widget.form.ModelFormField.HyperlinkField;
> @@ -124,7 +126,7 @@ public class FoFormRenderer extends Html
>               if (UtilValidate.isNotEmpty(explicitDescription)) {
>                   this.makeBlockString(writer, modelFormField.getWidgetStyle(), explicitDescription);
>               } else {
> -                this.makeBlockString(writer, modelFormField.getWidgetStyle(), ModelFormField.FieldInfoWithOptions.getDescriptionForOptionKey(currentValue, allOptionValues));
> +                this.makeBlockString(writer, modelFormField.getWidgetStyle(), FieldInfoWithOptions.getDescriptionForOptionKey(currentValue, allOptionValues));
>               }
>           } else {
>               boolean optionSelected = false;
> @@ -196,7 +198,7 @@ public class FoFormRenderer extends Html
>           List<ModelFormField> childFieldList = modelForm.getFieldList();
>           for (ModelFormField childField : childFieldList) {
>               int childFieldType = childField.getFieldInfo().getFieldType();
> -            if (childFieldType == ModelFormField.FieldInfo.HIDDEN || childFieldType == ModelFormField.FieldInfo.IGNORED) {
> +            if (childFieldType == FieldInfo.HIDDEN || childFieldType == FieldInfo.IGNORED) {
>                   continue;
>               }
>               writer.append("<fo:table-column");
>
> Added: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/FieldInfo.java
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/FieldInfo.java?rev=1639927&view=auto
> ==============================================================================
> --- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/FieldInfo.java (added)
> +++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/FieldInfo.java Sat Nov 15 21:33:51 2014
> @@ -0,0 +1,135 @@
> +/*******************************************************************************
> + * Licensed to the Apache Software Foundation (ASF) under one
> + * or more contributor license agreements.  See the NOTICE file
> + * distributed with this work for additional information
> + * regarding copyright ownership.  The ASF licenses this file
> + * to you under the Apache License, Version 2.0 (the
> + * "License"); you may not use this file except in compliance
> + * with the License.  You may obtain a copy of the License at
> + *
> + * http://www.apache.org/licenses/LICENSE-2.0
> + *
> + * Unless required by applicable law or agreed to in writing,
> + * software distributed under the License is distributed on an
> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
> + * KIND, either express or implied.  See the License for the
> + * specific language governing permissions and limitations
> + * under the License.
> + *******************************************************************************/
> +package org.ofbiz.widget.form;
> +
> +import java.io.IOException;
> +import java.util.Collections;
> +import java.util.HashMap;
> +import java.util.Map;
> +
> +import org.ofbiz.widget.ModelFieldVisitor;
> +import org.w3c.dom.Element;
> +
> +/**
> + * Form field abstract class.
> + */
> +public abstract class FieldInfo {
> +
> +    public static final String module = FieldInfo.class.getName();
> +    public static final int DISPLAY = 1;
> +    public static final int HYPERLINK = 2;
> +    public static final int TEXT = 3;
> +    public static final int TEXTAREA = 4;
> +    public static final int DATE_TIME = 5;
> +    public static final int DROP_DOWN = 6;
> +    public static final int CHECK = 7;
> +    public static final int RADIO = 8;
> +    public static final int SUBMIT = 9;
> +    public static final int RESET = 10;
> +    public static final int HIDDEN = 11;
> +    public static final int IGNORED = 12;
> +    public static final int TEXTQBE = 13;
> +    public static final int DATEQBE = 14;
> +    public static final int RANGEQBE = 15;
> +    public static final int LOOKUP = 16;
> +    public static final int FILE = 17;
> +    public static final int PASSWORD = 18;
> +    public static final int IMAGE = 19;
> +    public static final int DISPLAY_ENTITY = 20;
> +    // the numbering here represents the priority of the source;
> +    //when setting a new fieldInfo on a modelFormField it will only set
> +    //the new one if the fieldSource is less than or equal to the existing
> +    //fieldSource, which should always be passed as one of the following...
> +    public static final int SOURCE_EXPLICIT = 1;
> +    public static final int SOURCE_AUTO_ENTITY = 2;
> +    public static final int SOURCE_AUTO_SERVICE = 3;
> +    private static Map<String, Integer> fieldTypeByName = createFieldTypeMap();
> +
> +    private static Map<String, Integer> createFieldTypeMap() {
> +        Map<String, Integer> fieldTypeByName = new HashMap<String, Integer>();
> +        fieldTypeByName.put("display", Integer.valueOf(1));
> +        fieldTypeByName.put("hyperlink", Integer.valueOf(2));
> +        fieldTypeByName.put("text", Integer.valueOf(3));
> +        fieldTypeByName.put("textarea", Integer.valueOf(4));
> +        fieldTypeByName.put("date-time", Integer.valueOf(5));
> +        fieldTypeByName.put("drop-down", Integer.valueOf(6));
> +        fieldTypeByName.put("check", Integer.valueOf(7));
> +        fieldTypeByName.put("radio", Integer.valueOf(8));
> +        fieldTypeByName.put("submit", Integer.valueOf(9));
> +        fieldTypeByName.put("reset", Integer.valueOf(10));
> +        fieldTypeByName.put("hidden", Integer.valueOf(11));
> +        fieldTypeByName.put("ignored", Integer.valueOf(12));
> +        fieldTypeByName.put("text-find", Integer.valueOf(13));
> +        fieldTypeByName.put("date-find", Integer.valueOf(14));
> +        fieldTypeByName.put("range-find", Integer.valueOf(15));
> +        fieldTypeByName.put("lookup", Integer.valueOf(16));
> +        fieldTypeByName.put("file", Integer.valueOf(17));
> +        fieldTypeByName.put("password", Integer.valueOf(18));
> +        fieldTypeByName.put("image", Integer.valueOf(19));
> +        fieldTypeByName.put("display-entity", Integer.valueOf(20));
> +        fieldTypeByName.put("container", Integer.valueOf(21));
> +        return Collections.unmodifiableMap(fieldTypeByName);
> +    }
> +
> +    public static int findFieldTypeFromName(String name) {
> +        Integer fieldTypeInt = FieldInfo.fieldTypeByName.get(name);
> +        if (fieldTypeInt != null) {
> +            return fieldTypeInt;
> +        } else {
> +            throw new IllegalArgumentException("Could not get fieldType for field type name " + name);
> +        }
> +    }
> +
> +    private final int fieldType;
> +    private final int fieldSource;
> +    private final ModelFormField modelFormField;
> +
> +    /** XML Constructor */
> +    protected FieldInfo(Element element, ModelFormField modelFormField) {
> +        this.fieldSource = FieldInfo.SOURCE_EXPLICIT;
> +        this.fieldType = findFieldTypeFromName(element.getTagName());
> +        this.modelFormField = modelFormField;
> +    }
> +
> +    /** Value Constructor */
> +    protected FieldInfo(int fieldSource, int fieldType, ModelFormField modelFormField) {
> +        this.fieldType = fieldType;
> +        this.fieldSource = fieldSource;
> +        this.modelFormField = modelFormField;
> +    }
> +
> +    public abstract void accept(ModelFieldVisitor visitor);
> +
> +    public abstract FieldInfo copy(ModelFormField modelFormField);
> +
> +    public int getFieldSource() {
> +        return fieldSource;
> +    }
> +
> +    public int getFieldType() {
> +        return fieldType;
> +    }
> +
> +    public ModelFormField getModelFormField() {
> +        return modelFormField;
> +    }
> +
> +    public abstract void renderFieldString(Appendable writer, Map<String, Object> context, FormStringRenderer formStringRenderer)
> +            throws IOException;
> +}
>
> Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/FormRenderer.java
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/FormRenderer.java?rev=1639927&r1=1639926&r2=1639927&view=diff
> ==============================================================================
> --- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/FormRenderer.java (original)
> +++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/FormRenderer.java Sat Nov 15 21:33:51 2014
> @@ -122,12 +122,12 @@ public class FormRenderer {
>               if (position != -1 && modelFormField.getPosition() != position) {
>                   continue;
>               }
> -            ModelFormField.FieldInfo fieldInfo = modelFormField.getFieldInfo();
> +            FieldInfo fieldInfo = modelFormField.getFieldInfo();
>
>               // render hidden/ignored field widget
>               switch (fieldInfo.getFieldType()) {
> -            case ModelFormField.FieldInfo.HIDDEN:
> -            case ModelFormField.FieldInfo.IGNORED:
> +            case FieldInfo.HIDDEN:
> +            case FieldInfo.IGNORED:
>                   if (modelFormField.shouldUse(context)) {
>                       hiddenIgnoredFieldList.add(modelFormField);
>                       if (alreadyRendered != null)
> @@ -135,8 +135,8 @@ public class FormRenderer {
>                   }
>                   break;
>
> -            case ModelFormField.FieldInfo.DISPLAY:
> -            case ModelFormField.FieldInfo.DISPLAY_ENTITY:
> +            case FieldInfo.DISPLAY:
> +            case FieldInfo.DISPLAY_ENTITY:
>                   ModelFormField.DisplayField displayField = (ModelFormField.DisplayField) fieldInfo;
>                   if (displayField.getAlsoHidden() && modelFormField.shouldUse(context)) {
>                       hiddenIgnoredFieldList.add(modelFormField);
> @@ -144,7 +144,7 @@ public class FormRenderer {
>                   }
>                   break;
>
> -            case ModelFormField.FieldInfo.HYPERLINK:
> +            case FieldInfo.HYPERLINK:
>                   ModelFormField.HyperlinkField hyperlinkField = (ModelFormField.HyperlinkField) fieldInfo;
>                   if (hyperlinkField.getAlsoHidden() && modelFormField.shouldUse(context)) {
>                       hiddenIgnoredFieldList.add(modelFormField);
> @@ -236,7 +236,7 @@ public class FormRenderer {
>               if (curPos > positions) {
>                   positions = curPos;
>               }
> -            ModelFormField.FieldInfo currentFieldInfo = modelFormField.getFieldInfo();
> +            FieldInfo currentFieldInfo = modelFormField.getFieldInfo();
>               if (currentFieldInfo != null) {
>                   ModelFormField fieldInfoFormField = currentFieldInfo.getModelFormField();
>                   if (fieldInfoFormField != null) {
> @@ -317,7 +317,7 @@ public class FormRenderer {
>               // will be rendered as columns after it
>               boolean inputFieldFound = false;
>               for (ModelFormField modelFormField : mainFieldList) {
> -                ModelFormField.FieldInfo fieldInfo = modelFormField.getFieldInfo();
> +                FieldInfo fieldInfo = modelFormField.getFieldInfo();
>
>                   // if the field's title is explicitly set to "" (title="") then
>                   // the header is not created for it; this is useful for position list
> @@ -328,14 +328,14 @@ public class FormRenderer {
>                       continue;
>                   }
>                   // don't do any header for hidden or ignored fields
> -                if (fieldInfo.getFieldType() == ModelFormField.FieldInfo.HIDDEN
> -                        || fieldInfo.getFieldType() == ModelFormField.FieldInfo.IGNORED) {
> +                if (fieldInfo.getFieldType() == FieldInfo.HIDDEN
> +                        || fieldInfo.getFieldType() == FieldInfo.IGNORED) {
>                       continue;
>                   }
>
> -                if (fieldInfo.getFieldType() != ModelFormField.FieldInfo.DISPLAY
> -                        && fieldInfo.getFieldType() != ModelFormField.FieldInfo.DISPLAY_ENTITY
> -                        && fieldInfo.getFieldType() != ModelFormField.FieldInfo.HYPERLINK) {
> +                if (fieldInfo.getFieldType() != FieldInfo.DISPLAY
> +                        && fieldInfo.getFieldType() != FieldInfo.DISPLAY_ENTITY
> +                        && fieldInfo.getFieldType() != FieldInfo.HYPERLINK) {
>                       inputFieldFound = true;
>                       continue;
>                   }
> @@ -351,18 +351,18 @@ public class FormRenderer {
>
>               // prepare the combined title for the column that will contain the form/input fields
>               for (ModelFormField modelFormField : mainFieldList) {
> -                ModelFormField.FieldInfo fieldInfo = modelFormField.getFieldInfo();
> +                FieldInfo fieldInfo = modelFormField.getFieldInfo();
>
>                   // don't do any header for hidden or ignored fields
> -                if (fieldInfo.getFieldType() == ModelFormField.FieldInfo.HIDDEN
> -                        || fieldInfo.getFieldType() == ModelFormField.FieldInfo.IGNORED) {
> +                if (fieldInfo.getFieldType() == FieldInfo.HIDDEN
> +                        || fieldInfo.getFieldType() == FieldInfo.IGNORED) {
>                       continue;
>                   }
>
>                   // skip all of the display/hyperlink fields
> -                if (fieldInfo.getFieldType() == ModelFormField.FieldInfo.DISPLAY
> -                        || fieldInfo.getFieldType() == ModelFormField.FieldInfo.DISPLAY_ENTITY
> -                        || fieldInfo.getFieldType() == ModelFormField.FieldInfo.HYPERLINK) {
> +                if (fieldInfo.getFieldType() == FieldInfo.DISPLAY
> +                        || fieldInfo.getFieldType() == FieldInfo.DISPLAY_ENTITY
> +                        || fieldInfo.getFieldType() == FieldInfo.HYPERLINK) {
>                       continue;
>                   }
>
> @@ -461,9 +461,9 @@ public class FormRenderer {
>                           ModelFormField modelFormField = mainFieldListIter.next();
>
>                           // don't do any header for hidden or ignored fields
> -                        ModelFormField.FieldInfo fieldInfo = modelFormField.getFieldInfo();
> -                        if (fieldInfo.getFieldType() == ModelFormField.FieldInfo.HIDDEN
> -                                || fieldInfo.getFieldType() == ModelFormField.FieldInfo.IGNORED) {
> +                        FieldInfo fieldInfo = modelFormField.getFieldInfo();
> +                        if (fieldInfo.getFieldType() == FieldInfo.HIDDEN
> +                                || fieldInfo.getFieldType() == FieldInfo.IGNORED) {
>                               continue;
>                           }
>
> @@ -489,18 +489,18 @@ public class FormRenderer {
>       private void renderHiddenIgnoredFields(Appendable writer, Map<String, Object> context, FormStringRenderer formStringRenderer,
>               List<ModelFormField> fieldList) throws IOException {
>           for (ModelFormField modelFormField : fieldList) {
> -            ModelFormField.FieldInfo fieldInfo = modelFormField.getFieldInfo();
> +            FieldInfo fieldInfo = modelFormField.getFieldInfo();
>
>               // render hidden/ignored field widget
>               switch (fieldInfo.getFieldType()) {
> -            case ModelFormField.FieldInfo.HIDDEN:
> -            case ModelFormField.FieldInfo.IGNORED:
> +            case FieldInfo.HIDDEN:
> +            case FieldInfo.IGNORED:
>                   modelFormField.renderFieldString(writer, context, formStringRenderer);
>                   break;
>
> -            case ModelFormField.FieldInfo.DISPLAY:
> -            case ModelFormField.FieldInfo.DISPLAY_ENTITY:
> -            case ModelFormField.FieldInfo.HYPERLINK:
> +            case FieldInfo.DISPLAY:
> +            case FieldInfo.DISPLAY_ENTITY:
> +            case FieldInfo.HYPERLINK:
>                   formStringRenderer.renderHiddenField(writer, context, modelFormField, modelFormField.getEntry(context));
>                   break;
>               }
> @@ -631,9 +631,9 @@ public class FormRenderer {
>                   ModelFormField modelFormField = mainFieldIter.next();
>
>                   // don't do any header for hidden or ignored fields inside this loop
> -                ModelFormField.FieldInfo fieldInfo = modelFormField.getFieldInfo();
> -                if (fieldInfo.getFieldType() == ModelFormField.FieldInfo.HIDDEN
> -                        || fieldInfo.getFieldType() == ModelFormField.FieldInfo.IGNORED) {
> +                FieldInfo fieldInfo = modelFormField.getFieldInfo();
> +                if (fieldInfo.getFieldType() == FieldInfo.HIDDEN
> +                        || fieldInfo.getFieldType() == FieldInfo.IGNORED) {
>                       continue;
>                   }
>
> @@ -795,17 +795,17 @@ public class FormRenderer {
>                       int currentPosition = 1;
>                       while (innerDisplayHyperlinkFieldIter.hasNext()) {
>                           ModelFormField modelFormField = innerDisplayHyperlinkFieldIter.next();
> -                        ModelFormField.FieldInfo fieldInfo = modelFormField.getFieldInfo();
> +                        FieldInfo fieldInfo = modelFormField.getFieldInfo();
>
>                           // don't do any header for hidden or ignored fields
> -                        if (fieldInfo.getFieldType() == ModelFormField.FieldInfo.HIDDEN
> -                                || fieldInfo.getFieldType() == ModelFormField.FieldInfo.IGNORED) {
> +                        if (fieldInfo.getFieldType() == FieldInfo.HIDDEN
> +                                || fieldInfo.getFieldType() == FieldInfo.IGNORED) {
>                               continue;
>                           }
>
> -                        if (fieldInfo.getFieldType() != ModelFormField.FieldInfo.DISPLAY
> -                                && fieldInfo.getFieldType() != ModelFormField.FieldInfo.DISPLAY_ENTITY
> -                                && fieldInfo.getFieldType() != ModelFormField.FieldInfo.HYPERLINK) {
> +                        if (fieldInfo.getFieldType() != FieldInfo.DISPLAY
> +                                && fieldInfo.getFieldType() != FieldInfo.DISPLAY_ENTITY
> +                                && fieldInfo.getFieldType() != FieldInfo.HYPERLINK) {
>                               // okay, now do the form cell
>                               break;
>                           }
> @@ -821,18 +821,18 @@ public class FormRenderer {
>                       Iterator<ModelFormField> innerFormFieldIter = fieldListByPosition.iterator();
>                       while (innerFormFieldIter.hasNext()) {
>                           ModelFormField modelFormField = innerFormFieldIter.next();
> -                        ModelFormField.FieldInfo fieldInfo = modelFormField.getFieldInfo();
> +                        FieldInfo fieldInfo = modelFormField.getFieldInfo();
>
>                           // don't do any header for hidden or ignored fields
> -                        if (fieldInfo.getFieldType() == ModelFormField.FieldInfo.HIDDEN
> -                                || fieldInfo.getFieldType() == ModelFormField.FieldInfo.IGNORED) {
> +                        if (fieldInfo.getFieldType() == FieldInfo.HIDDEN
> +                                || fieldInfo.getFieldType() == FieldInfo.IGNORED) {
>                               continue;
>                           }
>
>                           // skip all of the display/hyperlink fields
> -                        if (fieldInfo.getFieldType() == ModelFormField.FieldInfo.DISPLAY
> -                                || fieldInfo.getFieldType() == ModelFormField.FieldInfo.DISPLAY_ENTITY
> -                                || fieldInfo.getFieldType() == ModelFormField.FieldInfo.HYPERLINK) {
> +                        if (fieldInfo.getFieldType() == FieldInfo.DISPLAY
> +                                || fieldInfo.getFieldType() == FieldInfo.DISPLAY_ENTITY
> +                                || fieldInfo.getFieldType() == FieldInfo.HYPERLINK) {
>                               continue;
>                           }
>
> @@ -846,18 +846,18 @@ public class FormRenderer {
>                       }
>                       while (innerDisplayHyperlinkFieldIter.hasNext()) {
>                           ModelFormField modelFormField = innerDisplayHyperlinkFieldIter.next();
> -                        ModelFormField.FieldInfo fieldInfo = modelFormField.getFieldInfo();
> +                        FieldInfo fieldInfo = modelFormField.getFieldInfo();
>
>                           // don't do any header for hidden or ignored fields
> -                        if (fieldInfo.getFieldType() == ModelFormField.FieldInfo.HIDDEN
> -                                || fieldInfo.getFieldType() == ModelFormField.FieldInfo.IGNORED) {
> +                        if (fieldInfo.getFieldType() == FieldInfo.HIDDEN
> +                                || fieldInfo.getFieldType() == FieldInfo.IGNORED) {
>                               continue;
>                           }
>
>                           // skip all non-display and non-hyperlink fields
> -                        if (fieldInfo.getFieldType() != ModelFormField.FieldInfo.DISPLAY
> -                                && fieldInfo.getFieldType() != ModelFormField.FieldInfo.DISPLAY_ENTITY
> -                                && fieldInfo.getFieldType() != ModelFormField.FieldInfo.HYPERLINK) {
> +                        if (fieldInfo.getFieldType() != FieldInfo.DISPLAY
> +                                && fieldInfo.getFieldType() != FieldInfo.DISPLAY_ENTITY
> +                                && fieldInfo.getFieldType() != FieldInfo.HYPERLINK) {
>                               continue;
>                           }
>
> @@ -1087,9 +1087,9 @@ public class FormRenderer {
>                   }
>               }
>
> -            ModelFormField.FieldInfo fieldInfo = currentFormField.getFieldInfo();
> -            if (fieldInfo.getFieldType() == ModelFormField.FieldInfo.HIDDEN
> -                    || fieldInfo.getFieldType() == ModelFormField.FieldInfo.IGNORED) {
> +            FieldInfo fieldInfo = currentFormField.getFieldInfo();
> +            if (fieldInfo.getFieldType() == FieldInfo.HIDDEN
> +                    || fieldInfo.getFieldType() == FieldInfo.IGNORED) {
>                   continue;
>               }
>               if (alreadyRendered.contains(currentFormField.getName())) {
> @@ -1158,8 +1158,8 @@ public class FormRenderer {
>               formStringRenderer.renderFormatFieldRowTitleCellOpen(writer, context, currentFormField);
>
>               // render title (unless this is a submit or a reset field)
> -            if (fieldInfo.getFieldType() != ModelFormField.FieldInfo.SUBMIT
> -                    && fieldInfo.getFieldType() != ModelFormField.FieldInfo.RESET) {
> +            if (fieldInfo.getFieldType() != FieldInfo.SUBMIT
> +                    && fieldInfo.getFieldType() != FieldInfo.RESET) {
>                   formStringRenderer.renderFieldTitle(writer, context, currentFormField);
>               } else {
>                   formStringRenderer.renderFormatEmptySpace(writer, context, modelForm);
>
> Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/MacroFormRenderer.java
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/MacroFormRenderer.java?rev=1639927&r1=1639926&r2=1639927&view=diff
> ==============================================================================
> --- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/MacroFormRenderer.java (original)
> +++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/MacroFormRenderer.java Sat Nov 15 21:33:51 2014
> @@ -60,6 +60,7 @@ import org.ofbiz.widget.form.ModelFormFi
>   import org.ofbiz.widget.form.ModelFormField.DisplayEntityField;
>   import org.ofbiz.widget.form.ModelFormField.DisplayField;
>   import org.ofbiz.widget.form.ModelFormField.DropDownField;
> +import org.ofbiz.widget.form.ModelFormField.FieldInfoWithOptions;
>   import org.ofbiz.widget.form.ModelFormField.FileField;
>   import org.ofbiz.widget.form.ModelFormField.HiddenField;
>   import org.ofbiz.widget.form.ModelFormField.HyperlinkField;
> @@ -779,7 +780,7 @@ public final class MacroFormRenderer imp
>           }
>           explicitDescription = (currentDescription != null ? currentDescription : dropDownField.getCurrentDescription(context));
>           if (UtilValidate.isEmpty(explicitDescription)) {
> -            explicitDescription = (ModelFormField.FieldInfoWithOptions.getDescriptionForOptionKey(currentValue, allOptionValues));
> +            explicitDescription = (FieldInfoWithOptions.getDescriptionForOptionKey(currentValue, allOptionValues));
>           }
>           if (textSize > 0 && UtilValidate.isNotEmpty(explicitDescription) && explicitDescription.length() > textSize) {
>               explicitDescription = explicitDescription.substring(0, textSize - 8) + "..." + explicitDescription.substring(explicitDescription.length() - 5);
> @@ -1418,7 +1419,7 @@ public final class MacroFormRenderer imp
>           List<String> fieldNameList = new LinkedList<String>();
>           for (ModelFormField childField : childFieldList) {
>               int childFieldType = childField.getFieldInfo().getFieldType();
> -            if (childFieldType == ModelFormField.FieldInfo.HIDDEN || childFieldType == ModelFormField.FieldInfo.IGNORED) {
> +            if (childFieldType == FieldInfo.HIDDEN || childFieldType == FieldInfo.IGNORED) {
>                   continue;
>               }
>               String areaStyle = childField.getTitleAreaStyle();
>
> 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=1639927&r1=1639926&r2=1639927&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 Sat Nov 15 21:33:51 2014
> @@ -749,7 +749,7 @@ public class ModelForm extends ModelWidg
>           String thisType = this.getType();
>           for (Element fieldElement : UtilXml.childElementList(formElement, "field")) {
>               ModelFormField modelFormField = new ModelFormField(fieldElement, this, entityModelReader, dispatchContext);
> -            ModelFormField.FieldInfo fieldInfo = modelFormField.getFieldInfo();
> +            FieldInfo fieldInfo = modelFormField.getFieldInfo();
>               if (thisType.equals("multi") && fieldInfo instanceof ModelFormField.SubmitField) {
>                   multiSubmitFields.add(modelFormField);
>               } else {
>
>