/** * 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.components.editor; import org.jbpm.formModeler.api.model.DataHolder; import org.jbpm.formModeler.api.model.Field; import org.jbpm.formModeler.api.model.FieldType; import org.jbpm.formModeler.api.model.Form; import org.jbpm.formModeler.components.renderer.ContextRemovedEvent; import org.jbpm.formModeler.core.FormCoreServices; import org.jbpm.formModeler.core.config.DataHolderManager; import org.jbpm.formModeler.core.config.FieldTypeManager; import org.jbpm.formModeler.core.config.FormManager; import org.jbpm.formModeler.core.config.builders.dataHolder.DataHolderBuildConfig; import org.jbpm.formModeler.core.processing.*; import org.jbpm.formModeler.core.wrappers.HTMLi18n; import org.jbpm.formModeler.api.client.FormEditorContext; import org.jbpm.formModeler.api.client.FormEditorContextManager; import org.jbpm.formModeler.service.LocaleManager; import org.jbpm.formModeler.service.annotation.config.Config; import org.jbpm.formModeler.service.bb.mvc.components.handling.BaseUIComponent; import org.jbpm.formModeler.service.bb.mvc.controller.CommandRequest; import org.jbpm.formModeler.service.bb.mvc.controller.CommandResponse; import org.slf4j.Logger; import org.jbpm.formModeler.core.config.FormManagerImpl; import org.jbpm.formModeler.api.model.wrappers.I18nSet; import org.apache.commons.lang3.StringUtils; import org.jbpm.formModeler.service.cdi.CDIBeanLocator; import org.slf4j.LoggerFactory; import javax.enterprise.context.SessionScoped; import javax.enterprise.event.Observes; import javax.inject.Inject; import javax.inject.Named; import javax.servlet.http.HttpServletRequest; import java.util.*; /** * Component to edit forms in a WYSIWYG way */ @SessionScoped @Named("wysiwygfe") public class WysiwygFormEditor extends BaseUIComponent { @Inject private DataHolderManager dataHolderManager; public static WysiwygFormEditor lookup() { return (WysiwygFormEditor) CDIBeanLocator.getBeanByType(WysiwygFormEditor.class); } private Logger log = LoggerFactory.getLogger(WysiwygFormEditor.class); @Inject private FormTemplateEditor formTemplateEditor; @Inject private FormEditorContextManager formEditorContextManager; @Inject @Config("/formModeler/components/WysiwygFormEdit/component.jsp") private String componentIncludeJSP; @Inject @Config("/formModeler/components/WysiwygFormEdit/show.jsp") private String baseComponentJSP; private static final String PARAM_CTX_UID = "ctxUID"; public static final String TOP_FIELD_MODIFIER = "topModifier"; public static final String LEFT_FIELD_MODIFIER = "leftModifier"; public static final String RIGHT_FIELD_MODIFIER = "rightModifier"; public static final String BOTTOM_FIELD_MODIFIER = "bottomModifier"; public static final String EDITION_OPTION_FIELDTYPES = "fieldTypes"; public static final String EDITION_OPTION_FORM_PROPERTIES = "formProperties"; public static final String EDITION_OPTION_BINDINGS_FIELDS = "dataHoldersFields"; public static final String EDITION_OPTION_BINDINGS_SOURCES = "dataHoldersSources"; public static final String EDITION_OPTION_IMG_FIELDTYPES = "general/AddFieldsByType.png"; public static final String EDITION_OPTION_IMG_FORM_PROPERTIES = "general/FormProperties.png"; public static final String EDITION_OPTION_IMG_BINDINGS_FIELDS = "general/FieldsBindings.png"; public static final String EDITION_OPTION_IMG_BINDINGS_SOURCES = "general/Bindings.png"; public static final String EDITION_OPTION_VIS_MODE_FIELDTYPES = "shared"; public static final String EDITION_OPTION_VIS_MODE_FORM_PROPERTIES = "shared"; public static final String EDITION_OPTION_VIS_MODE_BINDINGS_FIELDS = "shared"; public static final String EDITION_OPTION_VIS_MODE_BINDINGS_SOURCE = "full"; public static final String ACTION_TO_DO = "actionToDo"; public static final String ACTION_CHANGE_FIELD_TYPE = "changeFieldType"; public static final String ACTION_SAVE_FIELD_PROPERTIES = "saveFieldProperties"; public static final String ACTION_CLOSE_FIELD_EDITION = "closeFieldEdition"; public static final String CHANGED_FIELD = "changedField"; public static final String ACTION_REMOVE_DATA_HOLDER = "removeDataHolder"; public static final String ACTION_ADD_DATA_HOLDER = "addDataHolder"; public static final String ACTION_ADD_DATA_HOLDER_FIELDS = "addDataHolderFields"; public static final String PARAMETER_HOLDER_ID = "holderId"; public static final String PARAMETER_HOLDER_INPUT_ID = "holderInputId"; public static final String PARAMETER_HOLDER_OUTPUT_ID = "holderOutputId"; public static final String PARAMETER_HOLDER_TYPE = "holderType"; public static final String PARAMETER_HOLDER_COMBO_VALUE = "holderComboValue"; public static final String PARAMETER_HOLDER_INPUT_VALUE = "holderInputValue"; public static final String PARAMETER_FIELD_NAME = "fieldName"; public static final String PARAMETER_FIELD_CLASS = "className"; public static final String PARAMETER_HOLDER_RENDERCOLOR = "holderRenderColor"; private FormEditorContext editionContext; public FormEditorContext getEditionContext() { return editionContext; } public String getRenderMode() { return getEditionContext().getRenderMode(); } public void setRenderMode(String renderMode) { getEditionContext().setRenderMode(renderMode); } public FormManager getFormManager() { return FormCoreServices.lookup().getFormManager(); } public FormProcessor getFormProcessor() { return FormProcessingServices.lookup().getFormProcessor(); } public String getBaseComponentJSP() { return baseComponentJSP; } public String getBeanJSP() { return componentIncludeJSP; } public String getLastDataHolderUsedId() { return editionContext.getLastDataHolderUsedId(); } public void setLastDataHolderUsedId(String lastDataHolderUsedId) { getEditionContext().setLastDataHolderUsedId(lastDataHolderUsedId); } public Boolean getDisplayBindings() { return getEditionContext().getDisplayBindings(); } public void setDisplayBindings(Boolean displayBindings) { getEditionContext().setDisplayBindings(displayBindings); } public Boolean getDisplayGrid() { return getEditionContext().getDisplayGrid(); } public void setDisplayGrid(Boolean displayGrid) { getEditionContext().setDisplayGrid(displayGrid); } public Form getCurrentForm() { return getEditionContext().getForm(); } public String getNamespace() { return getEditionContext().getUID(); } public FormTemplateEditor getFormTemplateEditor() { return formTemplateEditor; } public void setFormTemplateEditor(FormTemplateEditor formTemplateEditor) { this.formTemplateEditor = formTemplateEditor; } public FormEditorContext getCurrentEditionContext() { return getEditionContext(); } public String getCurrentEditionOption() { if (getEditionContext().getCurrentEditionOption() == null) { if (getCurrentForm().getFormFields() != null && getCurrentForm().getFormFields().size() > 0) { setCurrentEditionOption(EDITION_OPTION_FIELDTYPES); } else { setCurrentEditionOption(EDITION_OPTION_BINDINGS_SOURCES); } } return getEditionContext().getCurrentEditionOption(); } public void setCurrentEditionOption(String currentEditionOption) { getEditionContext().setCurrentEditionOption(currentEditionOption); } public int getCurrentEditFieldPosition() { return getEditionContext().getCurrentEditFieldPosition(); } public void setCurrentEditFieldPosition(int currentEditFieldPosition) { getEditionContext().setCurrentEditFieldPosition(currentEditFieldPosition); Field field = getCurrentEditField(); if (field != null) setFieldTypeToView(field.getFieldType().getCode()); } public String getComponentIncludeJSP() { return componentIncludeJSP; } public void setComponentIncludeJSP(String componentIncludeJSP) { this.componentIncludeJSP = componentIncludeJSP; } public FieldTypeManager getFieldTypesManager() { return FormCoreServices.lookup().getFieldTypeManager(); } public BindingManager getBindingManager() { return FormCoreServices.lookup().getBindingManager(); } public String getFieldTypeToView() { return getEditionContext().getFieldTypeToView(); } public void setFieldTypeToView(String fieldTypeToView) { getEditionContext().setFieldTypeToView(fieldTypeToView); } public int getLastMovedFieldPosition() { return getEditionContext().getLastMovedFieldPosition(); } public void setLastMovedFieldPosition(int lastMovedFieldPosition) { getEditionContext().setLastMovedFieldPosition(lastMovedFieldPosition); } public CommandResponse handle(CommandRequest commandRequest, String string) throws Exception { return super.handle(commandRequest, string); } public Field getCurrentEditField() { return getFieldInPosition( getCurrentEditFieldPosition() ); } protected Field getFieldInPosition(int position) { if (position != -1) { Form form = getCurrentForm(); if (form != null) { for (Field field : form.getFormFields()) { if (field.getPosition() == position) { return field; } } } } return null; } @Override public void doStart(CommandRequest commandRequest) { String ctxUID = commandRequest.getRequestObject().getParameter(PARAM_CTX_UID); if (!StringUtils.isEmpty(ctxUID)) { setEditionContext(ctxUID); setLastMovedFieldPosition(-1); setCurrentEditFieldPosition(-1); setFieldTypeToView(null); } } protected void setEditionContext(String ctxUID) { editionContext = formEditorContextManager.getFormEditorContext(ctxUID); getExtraActionParams().put(PARAM_CTX_UID, ctxUID); } protected void checkEditionContext(CommandRequest request) { String ctxUID = request.getRequestObject().getParameter(PARAM_CTX_UID); if (StringUtils.isEmpty(ctxUID)) throw new IllegalArgumentException("NULL edition context id"); if (editionContext == null || !editionContext.getUID().equals(ctxUID)) { setEditionContext(ctxUID); } } public void actionDelete(CommandRequest request) throws Exception { checkEditionContext(request); Long pos = Long.decode(request.getParameter("position")); Form form = getCurrentForm(); if (form == null) { log.error("Cannot modify unexistant form."); } else { Field fieldNextToDeleted = getFieldInPosition(pos.intValue() + 1); if (fieldNextToDeleted != null) { Field fieldToDelete = getFieldInPosition(pos.intValue()); if (!Boolean.TRUE.equals(fieldToDelete.getGroupWithPrevious())) { fieldNextToDeleted.setGroupWithPrevious(fieldToDelete.getGroupWithPrevious()); } } getFormManager().deleteField( form, pos.intValue() ); if (getCurrentEditFieldPosition() == pos.intValue()) setCurrentEditFieldPosition(-1); else if (getCurrentEditFieldPosition() > pos.intValue()) setCurrentEditFieldPosition(getCurrentEditFieldPosition() - 1); } } public void actionStartEdit(CommandRequest request) throws Exception { checkEditionContext(request); Integer pos = Integer.decode(request.getParameter("position")); setCurrentEditFieldPosition( pos.intValue() ); Field editField = getCurrentEditField(); Form formToEdit = getFormForFieldEdition( editField ); if (formToEdit != null) { String editNamespace = getFieldEditionNamespace( editField ); getFormProcessor().clear(formToEdit, editNamespace); getFormProcessor().read( formToEdit, editNamespace, editField.asMap() ); } getEditionContext().setOriginalFieldType(editField.getFieldType()); } protected String getFieldEditionNamespace(Field field) { if (field == null) return ""; String editionNamespace = formEditorContextManager.generateFieldEditionNamespace(editionContext.getUID(), field); return editionNamespace; } public String getCurrentFieldEditionNamespace() { return getFieldEditionNamespace(getCurrentEditField()); } public void actionAddField(CommandRequest request) throws Exception { String action = request.getRequestObject().getParameter( "action" ); if (action.equals( "addDecoratorToForm" )) actionAddDecoratorToForm( request ); else actionAddFieldToForm( request ); } protected void addFieldToForm(Form form, String typeId) throws Exception { if (form == null) { log.error("Cannot modify unexistant form."); } else { FieldType fType = getFieldTypesManager().getTypeByCode(typeId); getFormManager().addFieldToForm(form, fType); } } public void actionAddFieldToForm(CommandRequest request) throws Exception { checkEditionContext(request); final String fieldType = request.getParameter("fieldType"); Form form = getCurrentForm(); addFieldToForm(form, fieldType); } public void actionAddDecoratorToForm(CommandRequest request) throws Exception { checkEditionContext(request); final String fieldType = request.getParameter("fieldType"); Form form = getCurrentForm(); if (form == null) { log.error("Cannot modify unexistant form."); } else { final String name = generateDecoratorName(form); I18nSet label = new I18nSet(); String lang = LocaleManager.lookup().getDefaultLang(); FieldType fType = getFieldTypesManager().getTypeByCode(fieldType); Field formField = getFormManager().addFieldToForm(form, name, fType, label); if ("HTMLLabel".equals(fType.getCode())) { HTMLi18n val = new HTMLi18n(); val.setValue(lang, "HTML"); formField.setHtmlContent(val); } } } protected synchronized String generateDecoratorName(Form form) { TreeSet names = new TreeSet(); for (Field pff : form.getFormFields()) { names.add(pff.getFieldName()); } String name = ":decorator_0"; for (int i = 1; names.contains(name); name = ":decorator_" + (i++)) ; return name; } public Form getFormForFieldEdition(Field field) { if (getFieldTypeToView() != null) { return getFormManager().getFormForFieldEdition(getFieldTypesManager().getTypeByCode(getFieldTypeToView())); } return getFormManager().getFormForFieldEdition(field.getFieldType()); } public void actionSaveFieldProperties(final CommandRequest request) throws Exception { checkEditionContext(request); String action = request.getRequestObject().getParameter(ACTION_TO_DO); Field editField = getCurrentEditField(); Map parameterMap = request.getRequestObject().getParameterMap(); Map filesMap = request.getFilesByParamName(); if (editField == null) { log.error("Cannot update unexistant field."); } else { String editNamespace = getFieldEditionNamespace(editField); Form editForm = getFormForFieldEdition(editField); getFormProcessor().setValues(editForm, editNamespace, parameterMap, filesMap); FormStatusData data = getFormProcessor().read(editForm, editNamespace); if (ACTION_CHANGE_FIELD_TYPE.equals(action)) { setFieldTypeToView(((String[]) parameterMap.get("fieldType"))[0]); editField.setFieldType(getFieldTypesManager().getTypeByCode(getFieldTypeToView(), editionContext.getOriginalFieldType().getFieldClass())); Form formToEdit = getFormForFieldEdition(editField); if (formToEdit != null) { getFormProcessor().clear(formToEdit, editNamespace); getFormProcessor().read(formToEdit, editNamespace, data.getCurrentValues()); } } else { editionContext.setChangedField(request.getRequestObject().getParameter(CHANGED_FIELD)); if (data.isValid()) { Set names = editField.getPropertyNames(); for (Iterator it = data.getCurrentValues().keySet().iterator(); it.hasNext(); ) { String propertyName = (String) it.next(); if (names.contains(propertyName)) { Object value = data.getCurrentValue(propertyName); try { if("fieldName".equals(propertyName)){ if(!editField.getFieldName().equals((String)value)){ if(getCurrentForm().getField((String)value) !=null) return; } } getBindingManager().setPropertyValue(editField, propertyName, value); } catch (Exception e) { log.error("Error setting property '" + propertyName + "' on field " + editField.getFieldName(), e); } } } if (ACTION_CLOSE_FIELD_EDITION.equals(action)) { getFormProcessor().clear(editForm, editNamespace); getEditionContext().setOriginalFieldType(null); setCurrentEditFieldPosition(-1); editionContext.setChangedField(null); } } } } } public synchronized void actionMoveField(CommandRequest request) throws Exception { checkEditionContext(request); String selectedField = request.getRequestObject().getParameter("selectedField"); String newPosition = request.getRequestObject().getParameter("newPosition"); String modifier = request.getRequestObject().getParameter( "modifier" ); String promote = request.getRequestObject().getParameter( "promote" ); if (StringUtils.isEmpty(selectedField) || StringUtils.isEmpty(newPosition) || StringUtils.isEmpty(modifier) || StringUtils.isEmpty(promote)) return; Form form = getCurrentForm(); if (form == null) { log.error("Cannot modify unexistant form."); } else { int origPosition = Integer.parseInt( selectedField ); int destPosition = Integer.parseInt( newPosition ); boolean groupWithPrevious = RIGHT_FIELD_MODIFIER.equals(modifier); boolean nextGrouped = LEFT_FIELD_MODIFIER.equals(modifier); setLastMovedFieldPosition( destPosition ); if (getCurrentEditFieldPosition() == origPosition) setCurrentEditFieldPosition(getLastMovedFieldPosition()); if (Boolean.parseBoolean( promote )) { getFormManager().promoteField( form, origPosition, destPosition, groupWithPrevious, nextGrouped ); if (getCurrentEditFieldPosition() < origPosition && destPosition <= getCurrentEditFieldPosition()) setCurrentEditFieldPosition(getCurrentEditFieldPosition() + 1); } else { getFormManager().degradeField( form, origPosition, destPosition, groupWithPrevious, nextGrouped ); if (getCurrentEditFieldPosition() > origPosition && destPosition >= getCurrentEditFieldPosition()) setCurrentEditFieldPosition(getCurrentEditFieldPosition() - 1); } } } public synchronized void actionMoveFirst(CommandRequest request) throws Exception { checkEditionContext(request); int fieldPosition = Integer.decode( request.getParameter( "position" ) ).intValue(); Form form = getCurrentForm(); if (form == null) { log.error("Cannot modify unexistant form."); } else { getFormManager().moveTop(form, fieldPosition); setLastMovedFieldPosition(0); if (getCurrentEditFieldPosition() == fieldPosition) setCurrentEditFieldPosition(getLastMovedFieldPosition()); else if (getCurrentEditFieldPosition() > -1 && fieldPosition > getCurrentEditFieldPosition()) setCurrentEditFieldPosition(getCurrentEditFieldPosition() + 1); } } public synchronized void actionMoveLast(CommandRequest request) throws Exception { checkEditionContext(request); int fieldPosition = Integer.decode(request.getParameter("position")).intValue(); Form form = getCurrentForm(); if (form == null) { log.error("Cannot modify unexistant form."); } else { getFormManager().moveBottom( form, fieldPosition ); setLastMovedFieldPosition(form.getFormFields().size() - 1); if (getCurrentEditFieldPosition() == fieldPosition) setCurrentEditFieldPosition(getLastMovedFieldPosition()); else if (fieldPosition < getCurrentEditFieldPosition()) setCurrentEditFieldPosition(getCurrentEditFieldPosition() - 1); } } public synchronized void actionSaveCurrentForm(CommandRequest request) throws Exception { checkEditionContext(request); saveCurrentForm(request.getRequestObject().getParameterMap()); } public synchronized void actionSwitchRenderMode(CommandRequest request) throws Exception { checkEditionContext(request); String renderMode = request.getRequestObject().getParameter("renderMode"); String displayBindings = request.getRequestObject().getParameter("displayBindings"); String displayGrid = request.getRequestObject().getParameter("displayGrid"); if ((displayBindings != null) && !Boolean.parseBoolean(displayBindings)) { setDisplayBindings(Boolean.FALSE); } else { setDisplayBindings(Boolean.TRUE); } if ((displayGrid != null) && !Boolean.parseBoolean(displayGrid)) { setDisplayGrid(Boolean.FALSE); } else { setDisplayGrid(Boolean.TRUE); } if (Form.RENDER_MODE_WYSIWYG_DISPLAY.equals(renderMode) || Form.RENDER_MODE_WYSIWYG_FORM.equals(renderMode)) setRenderMode(renderMode); } public synchronized void actionChangeMainOption(CommandRequest request) throws Exception { checkEditionContext(request); String option = request.getRequestObject().getParameter("newMainOption"); setCurrentEditionOption(option); } public synchronized void actionButtonAction(CommandRequest request) throws Exception { checkEditionContext(request); String action = request.getRequestObject().getParameter( "action" ); if ("delete".equals( action )) actionDelete( request ); else if ("startEdit".equals( action )) actionStartEdit( request ); else if ("moveFirst".equals( action )) actionMoveFirst( request ); else if ("moveLast".equals( action )) actionMoveLast( request ); else if ("unGroupWithPrevious".equals( action )) actionUnGroupWithPrevious( request ); else if ("groupWithPrevious".equals( action )) actionGroupWithPrevious( request ); } public void saveCurrentForm(Map parameterMap) throws Exception { Map map = fillFormFromForm(parameterMap); String name = (String) map.get("name"); String displayMode = (String) map.get("displayMode"); String displayModeAligned = (String) map.get("displayModeAligned"); String labelMode = (String) map.get("labelMode"); Long status = (Long) map.get("status"); Form form = getCurrentForm(); form.setName(name); if (!Form.DISPLAY_MODE_TEMPLATE.equals(displayMode)) { if (Form.DISPLAY_MODE_ALIGNED.equals(displayModeAligned)) form.setDisplayMode(Form.DISPLAY_MODE_ALIGNED); else form.setDisplayMode(Form.DISPLAY_MODE_NONE); } else { form.setDisplayMode(Form.DISPLAY_MODE_TEMPLATE); } //form.setDisplayMode(displayMode); form.setLabelMode(labelMode); form.setStatus(status); if (!Form.DISPLAY_MODE_TEMPLATE.equals(displayMode)) { getFormTemplateEditor().setFormId(null); } String[] editTemplateParams = (String[]) parameterMap.get("editTemplate"); if (editTemplateParams != null && editTemplateParams.length > 0 && "true".equals(editTemplateParams[0])) { form.setDisplayMode(Form.DISPLAY_MODE_TEMPLATE); getFormTemplateEditor().setFormId(form.getId()); getFormTemplateEditor().setTemplateContent(form.getFormTemplate()); Long formId = form.getId(); if (formId != null) getFormTemplateEditor().setFormId(formId); getEditionContext().setShowTemplateEdition(true); } } protected Map fillFormFromForm(Map parameterMap) { Map m = new HashMap(); String[] name = (String[]) parameterMap.get("name"); String[] displayMode = (String[]) parameterMap.get("displayMode"); String[] displayModeAligned = (String[]) parameterMap.get("displayModeAligned"); String[] labelMode = (String[]) parameterMap.get("labelMode"); String[] status = (String[]) parameterMap.get("status"); String[] copyingFrom = (String[]) parameterMap.get("copyingFrom"); if (status == null || status.length == 0) { status = new String[]{String.valueOf(FormManagerImpl.FORMSTATUS_NORMAL)}; } m.put("name", (name != null && name.length > 0) ? name[0] : null); m.put("displayModeAligned", (displayModeAligned != null && displayModeAligned.length > 0) ? displayModeAligned[0] : Form.DISPLAY_MODE_NONE); m.put("displayMode", (displayMode != null && displayMode.length > 0) ? displayMode[0] : "default"); m.put("labelMode", (labelMode != null && labelMode.length > 0) ? labelMode[0] : "undefined"); m.put("status", Long.decode(status[0])); m.put("copyingFrom", (copyingFrom != null && !"".equals(copyingFrom[0].trim())) ? (Long.decode(copyingFrom[0])) : null); return m; } public void actionUnGroupWithPrevious(CommandRequest request) throws Exception { checkEditionContext(request); groupField(request, false); } public void actionGroupWithPrevious(CommandRequest request) throws Exception { checkEditionContext(request); groupField(request, true); } protected void groupField(CommandRequest request, final boolean groupIt) throws Exception { setLastMovedFieldPosition(Integer.decode(request.getParameter("position")).intValue()); Form form = getCurrentForm(); if (form == null) { log.error("Cannot modify unexistant form."); } else { Field fieldToMove = getFieldInPosition(getLastMovedFieldPosition()); if (fieldToMove != null) { fieldToMove.setGroupWithPrevious(Boolean.valueOf(groupIt)); } else { log.error("Cannot modify unexistant field"); } } } public synchronized void actionAddFieldFromDataHolder(CommandRequest request) throws Exception { checkEditionContext(request); addDataHolderFieldToForm(request.getRequestObject().getParameterMap()); } public synchronized void actionFormDataHolders(CommandRequest request) throws Exception { checkEditionContext(request); String action = request.getRequestObject().getParameter(ACTION_TO_DO); if (ACTION_ADD_DATA_HOLDER.equals(action)) { addDataHolder(request.getRequestObject()); } else if (ACTION_REMOVE_DATA_HOLDER.equals(action)) { removeDataHolder(request.getRequestObject().getParameterMap()); } else if (ACTION_ADD_DATA_HOLDER_FIELDS.equals(action)) { addAllDataHolderFieldsToForm(request.getRequestObject().getParameterMap()); } } public void addDataHolder(HttpServletRequest request) throws Exception { String holderType = request.getParameter(PARAMETER_HOLDER_TYPE); String holderId = request.getParameter(PARAMETER_HOLDER_ID); String holderInputId = request.getParameter(PARAMETER_HOLDER_INPUT_ID); String holderOutId = request.getParameter(PARAMETER_HOLDER_OUTPUT_ID); String holderRenderColor = request.getParameter(PARAMETER_HOLDER_RENDERCOLOR); String holderInputValue = request.getParameter(PARAMETER_HOLDER_INPUT_VALUE); String holderComboValue = request.getParameter(PARAMETER_HOLDER_COMBO_VALUE); String holderValue = StringUtils.defaultIfEmpty(holderInputValue, holderComboValue); DataHolderBuildConfig config = new DataHolderBuildConfig(holderId, holderInputId, holderOutId, holderRenderColor, holderValue); config.addAttribute("path", getCurrentEditionContext().getPath()); DataHolder holder = dataHolderManager.createDataHolderByType(holderType, config); getFormManager().addDataHolderToForm(getCurrentForm(), holder); } public void removeDataHolder(Map parameterMap) throws Exception { String[] holderIdArray = (String[]) parameterMap.get(PARAMETER_HOLDER_ID); String holderId = null; if (holderIdArray != null && holderIdArray.length > 0) holderId = holderIdArray[0]; getFormManager().removeDataHolderFromForm(getCurrentForm(), holderId); } public void addAllDataHolderFieldsToForm(Map parameterMap) throws Exception { String[] holderIdArray = (String[]) parameterMap.get(PARAMETER_HOLDER_ID); String holderId = null; if (holderIdArray != null && holderIdArray.length > 0) holderId = holderIdArray[0]; if (holderId != null) { getFormManager().addAllDataHolderFieldsToForm(getCurrentForm(), holderId); setLastDataHolderUsedId(holderId); } } public void addDataHolderFieldToForm(Map parameterMap) throws Exception { String[] holderIdArray = (String[]) parameterMap.get(PARAMETER_HOLDER_ID); String[] fieldNameArray = (String[]) parameterMap.get(PARAMETER_FIELD_NAME); String holderId = null; String fieldName = null; if (holderIdArray != null && holderIdArray.length > 0) holderId = holderIdArray[0]; if (fieldNameArray != null && fieldNameArray.length > 0) fieldName = fieldNameArray[0]; if (holderId != null) { getFormManager().addDataHolderField(getCurrentForm(), holderId, fieldName); setLastDataHolderUsedId(holderId); } } public boolean isShowingTemplateEdition() { if (getFormTemplateEditor() != null) { return getFormTemplateEditor().isOn() && getEditionContext().getShowTemplateEdition(); } return false; } public void actionSaveTemplate(CommandRequest request) throws Exception { checkEditionContext(request); String loadTemplate = request.getRequestObject().getParameter("loadTemplate"); String templateContent = request.getRequestObject().getParameter("templateContent"); String genModeTemplate = request.getRequestObject().getParameter("genModeTemplate"); getFormTemplateEditor().setTemplateContent(templateContent); if (getFormTemplateEditor().isCancel()) { getFormTemplateEditor().setFormId(null); } else { getCurrentForm().setFormTemplate(getFormTemplateEditor().getTemplateContent()); //FormCoreServices.lookup().getFormManager().saveTemplateForForm(getFormTemplateEditor().getFormId(), getFormTemplateEditor().getTemplateContent()); } if (loadTemplate != null && Boolean.valueOf(loadTemplate).booleanValue()) { getFormTemplateEditor().setLoadTemplate(true); getFormTemplateEditor().setGenMode(genModeTemplate); getEditionContext().setShowTemplateEdition(true); } else { getFormTemplateEditor().setLoadTemplate(false); getFormTemplateEditor().setFormId(null); getEditionContext().setShowTemplateEdition(false); } } public void removedContext(@Observes ContextRemovedEvent event) { if (editionContext != null && editionContext.getUID().equals(event.getCtxUID())) { formEditorContextManager.removeEditingForm(event.getCtxUID()); editionContext = null; } } public String getChangedField() { return editionContext.getChangedField(); } }