/** * Copyright (C) 2012 Red Hat, Inc. and/or its affiliates. * * Licensed 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.jbpm.formModeler.api.model; import org.jbpm.formModeler.core.config.FormManager; import java.io.Serializable; import java.util.*; public class Form implements Serializable, Comparable{ public static final String RENDER_MODE_FORM = "form"; public static final String RENDER_MODE_DISPLAY = "display"; public static final String RENDER_MODE_TEMPLATE_EDIT = "templateEdit"; public static final String RENDER_MODE_WYSIWYG_FORM = "wysiwyg-form"; public static final String RENDER_MODE_WYSIWYG_DISPLAY = "wysiwyg-display"; public static final String LABEL_MODE_UNDEFINED = "undefined"; public static final String LABEL_MODE_BEFORE = "before"; public static final String LABEL_MODE_AFTER = "after"; public static final String LABEL_MODE_RIGHT = "right"; public static final String LABEL_MODE_LEFT = "left"; public static final String LABEL_MODE_HIDDEN = "hidden"; public static final String DISPLAY_MODE_DEFAULT = "default"; public static final String DISPLAY_MODE_ALIGNED = "aligned"; public static final String DISPLAY_MODE_TEMPLATE = "template"; public static final String DISPLAY_MODE_NONE = "none"; public static final String TEMPLATE_FIELD = "$field"; public static final String TEMPLATE_LABEL = "$label"; private Long id; private String subject; private String name; private String displayMode; private String labelMode; private String showMode; private Long status; private Set<FormDisplayInfo> formDisplayInfos; private Set<Field> formFields = new TreeSet<Field>(); private Set<DataHolder> holders; private HashMap subForms = new HashMap(); private HashMap dataHolderRenderInfo = new HashMap(); public Form() { formDisplayInfos = new TreeSet<FormDisplayInfo>(); holders = new TreeSet<DataHolder>(); } public Long getId() { return this.id; } public String getItemClassName() { return Form.class.getName(); } public void setId(Long id) { this.id = id; } public String getSubject() { return this.subject; } public void setSubject(String subject) { this.subject = subject; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDisplayMode() { return this.displayMode; } public void setDisplayMode(String displayMode) { this.displayMode = displayMode; } public String getLabelMode() { return labelMode; } public void setLabelMode(String labelMode) { this.labelMode = labelMode; } public String getShowMode() { return showMode; } public void setShowMode(String showMode) { this.showMode = showMode; } public Long getStatus() { return this.status; } public void setStatus(Long status) { this.status = status; } public boolean isVisibleStatus() { return FormManager.FORMSTATUS_NORMAL == getStatus().longValue(); } public Set<FormDisplayInfo> getFormDisplayInfos() { return this.formDisplayInfos; } public void setFormDisplayInfos(Set<FormDisplayInfo> formDisplayInfos) { this.formDisplayInfos = formDisplayInfos; } public Set<Field> getFormFields() { return this.formFields; } public void setFormFields(Set <Field>formFields) { this.formFields = formFields; } public void setDataHolder(DataHolder holder) { if (holder == null) return; if ((holder.getInputId() == null || holder.getInputId().trim().length() == 0) && (holder.getOuputId()==null || holder.getOuputId().trim().length() == 0)) return; if(getDataHolderById(holder.getInputId()) != null || getDataHolderById(holder.getOuputId()) != null){ holders.remove(holder); } holders.add(holder); } public void removeDataHolder(String id) { if (id == null || id.trim().length() == 0) return; if(getDataHolderById(id) != null){ for (Iterator it = holders.iterator(); it.hasNext();) { DataHolder holder = (DataHolder) it.next(); if (id.equals(holder.getUniqeId())) it.remove(); } } } public DataHolder getDataHolderByIds(String inputId, String outputId) { if (inputId == null || inputId.trim().length() == 0) return null; if (outputId == null || outputId.trim().length() == 0) return null; if (getHolders() != null) { for (DataHolder dataHolder : holders) { if (inputId.equals(dataHolder.getInputId()) || outputId.equals(dataHolder.getOuputId())) return dataHolder; } } return null; } public DataHolder getDataHolderById(String srcId) { if (srcId == null || srcId.trim().length() == 0) return null; if (getHolders() != null) { for (DataHolder dataHolder : holders) { if (srcId.equals(dataHolder.getUniqeId())) //if (srcId.equals(dataHolder.getInputId()) || srcId.equals(dataHolder.getOuputId())) return dataHolder; } } return null; } public String toString() { return "Form [" + getName() + "]"; } public boolean equals(Object other) { if (!(other instanceof Form)) return false; Form castOther = (Form) other; return this.getId().equals(castOther.getId()); } public int hashCode() { return getId().hashCode(); } /** * Get field by name * * @param name Desired field name, must be not null * @return field by given name or null if it doesn't exist. */ public Field getField(String name) { if (name == null || name.trim().length() == 0) return null; if (getFormFields() != null) { for (Field field : formFields) { if (name.equals(field.getFieldName())) return field; } } return null; } protected String getDisplayModeText(String selector) { String text = null; if (getFormDisplayInfos() != null) for (Iterator it = getFormDisplayInfos().iterator(); it.hasNext();) { FormDisplayInfo dInfo = (FormDisplayInfo) it.next(); if (selector.equals(dInfo.getDisplayMode())) { text = dInfo.getDisplayData(); break; } } return text; } protected void setDisplayModeText(final String selector, final String data) { if (getFormDisplayInfos() == null) setFormDisplayInfos(new HashSet()); FormDisplayInfo theTemplateInfo = null; for (Iterator it = getFormDisplayInfos().iterator(); it.hasNext();) { FormDisplayInfo dInfo = (FormDisplayInfo) it.next(); if (selector.equals(dInfo.getDisplayMode())) { theTemplateInfo = dInfo; break; } } if (theTemplateInfo == null) { theTemplateInfo = new FormDisplayInfo(); getFormDisplayInfos().add(theTemplateInfo); } theTemplateInfo.setDisplayData(data); theTemplateInfo.setDisplayMode(selector); } public Set<DataHolder> getHolders() { return holders; } public void setHolders(Set<DataHolder> holders) { this.holders = holders; } public String getFormTemplate() { return getDisplayModeText(DISPLAY_MODE_TEMPLATE); } public void setFormTemplate(final String data) { setDisplayModeText(DISPLAY_MODE_TEMPLATE, data); } public boolean containsFormField(String fieldName) { if (formFields != null && fieldName != null && !"".equals(fieldName)) for (Field formField : formFields) { if (formField.getFieldName().equals(fieldName)) return true; } return false; } public String getSynchronizationObject() { return ("JBPM Form " + this.getId()).intern(); } /** * Get a Set with all field names (Strings) present in this form * * @return a Set with all field names present in this form */ public Set getFieldNames() { Set s = new TreeSet(); for (Field formField : formFields) { s.add(formField.getFieldName()); } return s; } @Override public int compareTo(Object o) { return id.compareTo(((Form)o).getId()); } public boolean isFieldBinded(DataHolder dataHolder, String fieldName){ if (dataHolder==null || fieldName==null) return false; String inputBinding = dataHolder.getInputBinding(fieldName); String outputBinding = dataHolder.getOuputBinding(fieldName); for (Field field : formFields) { if(dataHolder.getInputId()!=null && dataHolder.getInputId().trim().length()>0){ if (!inputBinding.isEmpty() && inputBinding.equals(field.getInputBinding())){ return true; } } if(dataHolder.getOuputId()!=null && dataHolder.getOuputId().trim().length()>0){ if (!outputBinding.isEmpty() && outputBinding.equals(field.getOutputBinding())){ return true; } } } return false; } public String generateBindingStr(DataHolder dataHolder,String fieldName ){ if (dataHolder==null || fieldName==null) return ""; if(dataHolder.getDataFieldHolderById(fieldName)!=null) { //return a valid binding return "{" + dataHolder.getInputId() + "/" + fieldName+"}" ; } return ""; } public String getDataFieldHolderNameFromBindingStr(String bindingStr){ if(bindingStr!=null && bindingStr.indexOf('/')!=-1 && bindingStr.length()>1) return bindingStr.substring(bindingStr.indexOf('/')+1,bindingStr.length()-1); return ""; } public DataHolder getDataHolderFromInputExpression(String inputExpression) { return getDataHolderFromExpression(inputExpression, true); } public DataHolder getDataHolderFromOutputExpression(String outputExpression) { return getDataHolderFromExpression(outputExpression, false); } protected DataHolder getDataHolderFromExpression(String bindingExpression, boolean checkInput) { if (bindingExpression == null) return null; for (DataHolder holder : holders) { if (checkInput && holder.containsInputBinding(bindingExpression)) return holder; else if (!checkInput && holder.containsOutputBinding(bindingExpression)) return holder; } return null; } public DataHolder getDataHolderByField(Field field) { if (field == null || (field.getInputBinding() == null && field.getOutputBinding() == null)) return null; for (DataHolder holder : holders) { if (holder.containsBinding(field.getInputBinding())){ return holder; } else if (holder.containsBinding(field.getOutputBinding())){ return holder; } } return null; } public boolean containsHolder(DataHolder aholder) { for (DataHolder holder : holders) { if (holder.equals(aholder)) return true; } return false; } public HashMap getSubForms() { return subForms; } public void setSubForms(HashMap subForms) { this.subForms = subForms; } public void addSubForm(String path, Form subForm) { this.subForms.put(path, subForm); } }