| /******************************************************************************* |
| * 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.apache.ofbiz.widget.model; |
| |
| import java.io.IOException; |
| import java.util.ArrayList; |
| import java.util.Collections; |
| import java.util.HashMap; |
| import java.util.List; |
| import java.util.Map; |
| |
| import org.apache.ofbiz.base.util.Debug; |
| import org.apache.ofbiz.base.util.UtilXml; |
| import org.apache.ofbiz.widget.renderer.FormStringRenderer; |
| 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; |
| public static final int CONTAINER = 21; |
| public static final int MENU = 22; |
| public static final int FORM = 23; |
| public static final int GRID = 24; |
| public static final int SCREEN = 25; |
| // 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 List<Integer> nonInputFieldTypeList = createNonInputFieldTypeList(); |
| |
| 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)); |
| fieldTypeByName.put("include-menu", Integer.valueOf(22)); |
| fieldTypeByName.put("include-form", Integer.valueOf(23)); |
| fieldTypeByName.put("include-grid", Integer.valueOf(24)); |
| fieldTypeByName.put("include-screen", Integer.valueOf(25)); |
| return Collections.unmodifiableMap(fieldTypeByName); |
| } |
| |
| private static List<Integer> createNonInputFieldTypeList() { |
| List<Integer> nonInputFieldTypeList = new ArrayList<Integer>(); |
| nonInputFieldTypeList.add(FieldInfo.IGNORED); |
| nonInputFieldTypeList.add(FieldInfo.HIDDEN); |
| nonInputFieldTypeList.add(FieldInfo.DISPLAY); |
| nonInputFieldTypeList.add(FieldInfo.DISPLAY_ENTITY); |
| nonInputFieldTypeList.add(FieldInfo.HYPERLINK); |
| nonInputFieldTypeList.add(FieldInfo.MENU); |
| nonInputFieldTypeList.add(FieldInfo.FORM); |
| nonInputFieldTypeList.add(FieldInfo.GRID); |
| nonInputFieldTypeList.add(FieldInfo.SCREEN); |
| return Collections.unmodifiableList(nonInputFieldTypeList); |
| } |
| |
| 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); |
| } |
| } |
| |
| public static boolean isInputFieldType(Integer fieldType) { |
| return ! nonInputFieldTypeList.contains(fieldType); |
| } |
| |
| 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(UtilXml.getTagNameIgnorePrefix(element)); |
| 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) throws Exception; |
| |
| /** |
| * Returns a new instance of this object. |
| * |
| * @param modelFormField |
| */ |
| 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; |
| |
| @Override |
| public String toString() { |
| StringBuilder sb = new StringBuilder(); |
| ModelFieldVisitor visitor = new XmlWidgetFieldVisitor(sb); |
| try { |
| accept(visitor); |
| } catch (Exception e) { |
| Debug.logWarning(e, "Exception thrown in XmlWidgetFieldVisitor: ", module); |
| } |
| return sb.toString(); |
| } |
| } |