/* * Copyright (C) 2003-2007 eXo Platform SAS. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License * as published by the Free Software Foundation; either version 3 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see<http://www.gnu.org/licenses/>. */ package org.exoplatform.ecm.webui.component.admin.nodetype; import java.util.ArrayList; import java.util.List; import javax.jcr.nodetype.NodeType; import javax.jcr.nodetype.PropertyDefinition; import org.exoplatform.ecm.webui.form.UIFormInputSetWithAction; import org.exoplatform.services.jcr.RepositoryService; import org.exoplatform.services.jcr.core.nodetype.PropertyDefinitionValue; import org.exoplatform.web.application.ApplicationMessage; import org.exoplatform.webui.application.WebuiRequestContext; import org.exoplatform.webui.config.annotation.ComponentConfig; import org.exoplatform.webui.core.UIApplication; import org.exoplatform.webui.core.model.SelectItemOption; import org.exoplatform.webui.event.Event; import org.exoplatform.webui.event.EventListener; import org.exoplatform.webui.form.UIFormMultiValueInputSet; import org.exoplatform.webui.form.UIFormSelectBox; import org.exoplatform.webui.form.UIFormStringInput; import org.exoplatform.webui.form.input.UICheckBoxInput; /** * Created by The eXo Platform SARL * Author : Dang Van Minh * minh.dang@exoplatform.com * Sep 21, 2006 * 3:36:17 PM */ @ComponentConfig( template = "classpath:groovy/ecm/webui/form/UIFormInputSetWithAction.gtmpl" ) public class UIPropertyDefinitionForm extends UIFormInputSetWithAction { final static public String NAMESPACE = "propertyNamespace"; final static public String DEFINITION_NAME = "propertyname"; final static public String REQUIRED_TYPE = "requiredType"; final static public String MULTIPLE = "multiple"; final static public String MANDATORY = "mandatory"; final static public String AUTOCREATED = "autoCreated"; final static public String PROTECTED = "protected"; final static public String PARENTVERSION = "parentversion"; final static public String CONSTRAINTS = "constraints"; final static public String VALUE_CONSTRAINTS = "valueconstraints"; final static public String TRUE = "true"; final static public String FALSE = "false"; final static public String ACTION_UPDATE_PROPERTY = "UpdateProperty"; final static public String ACTION_CANCEL_PROPERTY = "CancelProperty"; private String requiredValue_; public UIPropertyDefinitionForm(String name) throws Exception { super(name); setComponentConfig(getClass(), null); List<SelectItemOption<String>> autoListItem = new ArrayList<SelectItemOption<String>>(); autoListItem.add(new SelectItemOption<String>(FALSE, FALSE)); autoListItem.add(new SelectItemOption<String>(TRUE, TRUE)); List<SelectItemOption<String>> mandoListItem = new ArrayList<SelectItemOption<String>>(); mandoListItem.add(new SelectItemOption<String>(FALSE, FALSE)); mandoListItem.add(new SelectItemOption<String>(TRUE, TRUE)); List<SelectItemOption<String>> multiListItem = new ArrayList<SelectItemOption<String>>(); multiListItem.add(new SelectItemOption<String>(FALSE, FALSE)); multiListItem.add(new SelectItemOption<String>(TRUE, TRUE)); List<SelectItemOption<String>> protectedItem = new ArrayList<SelectItemOption<String>>(); protectedItem.add(new SelectItemOption<String>(FALSE, FALSE)); protectedItem.add(new SelectItemOption<String>(TRUE, TRUE)); addUIFormInput(new UIFormSelectBox(NAMESPACE, NAMESPACE, getNamespaces())); addUIFormInput(new UIFormStringInput(DEFINITION_NAME, DEFINITION_NAME, null)); UIFormSelectBox uiRequired = new UIFormSelectBox(REQUIRED_TYPE, REQUIRED_TYPE, getRequiredTypes()); uiRequired.setOnChange("ChangeRequiredType"); addUIFormInput(uiRequired); addUIFormInput(new UIFormSelectBox(AUTOCREATED, AUTOCREATED, autoListItem)); addUIFormInput(new UIFormSelectBox(MANDATORY, MANDATORY, mandoListItem)); addUIFormInput(new UIFormSelectBox(PARENTVERSION, PARENTVERSION, getParentVersions())); addUIFormInput(new UIFormSelectBox(PROTECTED, PROTECTED, protectedItem)); addUIFormInput(new UIFormSelectBox(MULTIPLE, MULTIPLE, multiListItem)); addUIFormInput(new UIFormStringInput(VALUE_CONSTRAINTS, VALUE_CONSTRAINTS, null)); } public void processRender(WebuiRequestContext context) throws Exception { super.processRender(context); } private List<SelectItemOption<String>> getParentVersions() { List<SelectItemOption<String>> versionItem = new ArrayList<SelectItemOption<String>>(); versionItem.add(new SelectItemOption<String>("COPY", "1")); versionItem.add(new SelectItemOption<String>("VERSION", "2")); versionItem.add(new SelectItemOption<String>("INITIALIZE", "3")); versionItem.add(new SelectItemOption<String>("COMPUTE", "4")); versionItem.add(new SelectItemOption<String>("IGNORE", "5")); versionItem.add(new SelectItemOption<String>("ABORT", "6")); return versionItem; } private List<SelectItemOption<String>> getRequiredTypes() { List<SelectItemOption<String>> requireType = new ArrayList<SelectItemOption<String>>(); requireType.add(new SelectItemOption<String>("STRING", "1")); requireType.add(new SelectItemOption<String>("BINARY", "2")); requireType.add(new SelectItemOption<String>("LONG", "3")); requireType.add(new SelectItemOption<String>("DOUBLE", "4")); requireType.add(new SelectItemOption<String>("DATE", "5")); requireType.add(new SelectItemOption<String>("BOOLEAN", "6")); requireType.add(new SelectItemOption<String>("NAME", "7")); requireType.add(new SelectItemOption<String>("PATH", "8")); requireType.add(new SelectItemOption<String>("REFERENCE", "9")); requireType.add(new SelectItemOption<String>("UNDEFINED", "0")); return requireType; } public List<SelectItemOption<String>> getNamespaces() throws Exception { List<SelectItemOption<String>> namespacesOptions = new ArrayList<SelectItemOption<String>>(); String[] namespaces = getApplicationComponent(RepositoryService.class) .getCurrentRepository().getNamespaceRegistry().getPrefixes(); for(int i = 0; i < namespaces.length; i ++){ namespacesOptions.add(new SelectItemOption<String>(namespaces[i], namespaces[i])); } return namespacesOptions; } public void refresh() throws Exception { List<SelectItemOption<String>> autoListItem = new ArrayList<SelectItemOption<String>>(); autoListItem.add(new SelectItemOption<String>(FALSE, FALSE)); autoListItem.add(new SelectItemOption<String>(TRUE, TRUE)); List<SelectItemOption<String>> mandoListItem = new ArrayList<SelectItemOption<String>>(); mandoListItem.add(new SelectItemOption<String>(FALSE, FALSE)); mandoListItem.add(new SelectItemOption<String>(TRUE, TRUE)); List<SelectItemOption<String>> multiListItem = new ArrayList<SelectItemOption<String>>(); multiListItem.add(new SelectItemOption<String>(FALSE, FALSE)); multiListItem.add(new SelectItemOption<String>(TRUE, TRUE)); List<SelectItemOption<String>> protectedItem = new ArrayList<SelectItemOption<String>>(); protectedItem.add(new SelectItemOption<String>(FALSE, FALSE)); protectedItem.add(new SelectItemOption<String>(TRUE, TRUE)); getUIFormSelectBox(NAMESPACE).setOptions(getNamespaces()).setDisabled(false); getUIStringInput(DEFINITION_NAME).setReadOnly(false).setValue(null); getUIFormSelectBox(REQUIRED_TYPE).setOptions(getRequiredTypes()).setDisabled(false); getUIFormSelectBox(AUTOCREATED).setOptions(autoListItem).setDisabled(false); getUIFormSelectBox(MANDATORY).setOptions(mandoListItem).setDisabled(false); getUIFormSelectBox(PARENTVERSION).setOptions(getParentVersions()).setDisabled(false); getUIFormSelectBox(PROTECTED).setOptions(protectedItem).setDisabled(false); getUIFormSelectBox(MULTIPLE).setOptions(multiListItem).setDisabled(false); getUIStringInput(VALUE_CONSTRAINTS).setReadOnly(false).setValue(null); UINodeTypeForm uiForm = getParent(); UIFormInputSetWithAction uiPropertyTab = uiForm.getChildById(UINodeTypeForm.PROPERTY_DEFINITION); uiForm.setActionInTab(uiPropertyTab); } private void setRequiredValue(String requiredValue) { requiredValue_ = requiredValue; } private String getRequiredValue() { return requiredValue_ == null ? "1" : requiredValue_; } public void update(NodeType nodeType, String propertyName) throws Exception { if(propertyName != null) { PropertyDefinition[] propertyDefinitions = nodeType.getPropertyDefinitions(); for(int i = 0; i < propertyDefinitions.length; i++) { String name = propertyDefinitions[i].getName(); if(name.equals(propertyName)) { if (propertyName.indexOf(":") > -1) { getUIStringInput(DEFINITION_NAME). setValue(propertyName.substring(propertyName.indexOf(":") + 1)); getUIFormSelectBox(NAMESPACE). setValue(propertyName.substring(0, propertyName.indexOf(":"))); } else { getUIStringInput(DEFINITION_NAME).setValue(propertyName); getUIFormSelectBox(NAMESPACE).setValue(""); } String requiredType = Integer.toString(propertyDefinitions[i].getRequiredType()); getUIFormSelectBox(REQUIRED_TYPE).setValue(requiredType); getUIFormSelectBox(MULTIPLE). setValue(String.valueOf(propertyDefinitions[i].isMultiple())); getUIFormSelectBox(MANDATORY). setValue(String.valueOf(propertyDefinitions[i].isMandatory())); getUIFormSelectBox(AUTOCREATED). setValue(String.valueOf(propertyDefinitions[i].isAutoCreated())); getUIFormSelectBox(PROTECTED). setValue(String.valueOf(propertyDefinitions[i].isProtected())); String[] cons = propertyDefinitions[i].getValueConstraints(); StringBuilder conValues = new StringBuilder(); if(cons != null && cons.length > 0) { for(int j = 0; j < cons.length; j ++) { if(conValues.length() > 0) conValues.append(", "); conValues.append(cons[j]); } } getUIStringInput(VALUE_CONSTRAINTS).setValue(conValues.toString()); String parentVersion = Integer.toString(propertyDefinitions[i].getOnParentVersion()); getUIFormSelectBox(PARENTVERSION).setValue(parentVersion); break; } } } getUIFormSelectBox(NAMESPACE).setDisabled(true); getUIStringInput(DEFINITION_NAME).setReadOnly(true); getUIFormSelectBox(REQUIRED_TYPE).setDisabled(true); getUIFormSelectBox(AUTOCREATED).setDisabled(true); getUIFormSelectBox(MANDATORY).setDisabled(true); getUIFormSelectBox(PARENTVERSION).setDisabled(true); getUIFormSelectBox(PROTECTED).setDisabled(true); getUIFormSelectBox(MULTIPLE).setDisabled(true); getUIStringInput(VALUE_CONSTRAINTS).setReadOnly(true); } private PropertyDefinitionValue getPropertyByName(String propertyName, List<PropertyDefinitionValue> listProperty) { for(PropertyDefinitionValue property : listProperty) { if(property.getName().equals(propertyName)) return property; } return null; } private void setValues(PropertyDefinitionValue property) throws Exception { String propertyName = property.getName(); if (propertyName.indexOf(":") > -1) { getUIStringInput(DEFINITION_NAME). setValue(propertyName.substring(propertyName.indexOf(":") + 1)); getUIFormSelectBox(NAMESPACE).setValue(propertyName.substring(0, propertyName.indexOf(":"))); } else { getUIStringInput(DEFINITION_NAME).setValue(propertyName); getUIFormSelectBox(NAMESPACE).setValue(""); } String requiredType = Integer.toString(property.getRequiredType()); getUIFormSelectBox(REQUIRED_TYPE).setValue(requiredType); getUIFormSelectBox(MULTIPLE).setValue(String.valueOf(property.isMultiple())); getUIFormSelectBox(MANDATORY).setValue(String.valueOf(property.isMandatory())); getUIFormSelectBox(AUTOCREATED).setValue(String.valueOf(property.isAutoCreate())); getUIFormSelectBox(PROTECTED).setValue(String.valueOf(property.isReadOnly())); List<String> cons = property.getValueConstraints(); StringBuffer valueConstraints = null; for (String value : cons) { if (valueConstraints == null) { valueConstraints = new StringBuffer(value); } else { valueConstraints.append(",").append(value); } } getUIStringInput(VALUE_CONSTRAINTS).setValue(valueConstraints.toString()); String parentVersion = Integer.toString(property.getOnVersion()); getUIFormSelectBox(PARENTVERSION).setValue(parentVersion); } static public class RemovePropertyActionListener extends EventListener<UINodeTypeForm> { public void execute(Event<UINodeTypeForm> event) throws Exception { UINodeTypeForm uiForm = event.getSource(); String propertyName = event.getRequestContext().getRequestParameter(OBJECTID); if(propertyName == null || propertyName.trim().length() == 0) { uiForm.setTabRender(UINodeTypeForm.PROPERTY_DEFINITION); UIApplication uiApp = uiForm.getAncestorOfType(UIApplication.class); uiApp.addMessage(new ApplicationMessage("UIPropertyDefinitionForm.msg.property-name", null)); return; } for(PropertyDefinitionValue property : uiForm.addedPropertiesDef_) { if(property.getName().equals(propertyName)) { uiForm.addedPropertiesDef_.remove(property); break; } } uiForm.setPropertyValue(uiForm.addedPropertiesDef_); uiForm.setTabRender(UINodeTypeForm.NODETYPE_DEFINITION); event.getRequestContext().addUIComponentToUpdateByAjax(uiForm.getParent()); } } static public class EditPropertyActionListener extends EventListener<UINodeTypeForm> { public void execute(Event<UINodeTypeForm> event) throws Exception { UINodeTypeForm uiForm = event.getSource(); UIPropertyDefinitionForm uiPropertyForm = uiForm.getChild(UIPropertyDefinitionForm.class); String propertyName = event.getRequestContext().getRequestParameter(OBJECTID); if(propertyName == null || propertyName.trim().length() == 0) { uiForm.setTabRender(UINodeTypeForm.PROPERTY_DEFINITION); UIApplication uiApp = uiForm.getAncestorOfType(UIApplication.class); uiApp.addMessage(new ApplicationMessage("UIPropertyDefinitionForm.msg.property-name", null)); return; } PropertyDefinitionValue property = uiPropertyForm.getPropertyByName(propertyName, uiForm.addedPropertiesDef_); uiPropertyForm.setValues(property); uiPropertyForm.setRequiredValue(Integer.toString(property.getRequiredType())); UIFormInputSetWithAction propertyTab = uiForm.getChildById(UINodeTypeForm.PROPERTY_DEFINITION); String[] actionNames = {ACTION_UPDATE_PROPERTY, ACTION_CANCEL_PROPERTY}; String[] fieldNames = {propertyName, null}; propertyTab.setActions(actionNames, fieldNames); uiForm.setTabRender(UINodeTypeForm.PROPERTY_DEFINITION); event.getRequestContext().addUIComponentToUpdateByAjax(uiForm.getParent()); } } static public class UpdatePropertyActionListener extends EventListener<UINodeTypeForm> { public void execute(Event<UINodeTypeForm> event) throws Exception { UINodeTypeForm uiForm = event.getSource(); UIPropertyDefinitionForm uiPropertyForm = uiForm.getChild(UIPropertyDefinitionForm.class); String propertyName = event.getRequestContext().getRequestParameter(OBJECTID); PropertyDefinitionValue propertyInfo = uiPropertyForm.getPropertyByName(propertyName, uiForm.addedPropertiesDef_); UIApplication uiApp = uiForm.getAncestorOfType(UIApplication.class); String prefix = uiForm.getUIFormSelectBox(NAMESPACE).getValue(); String name = uiPropertyForm.getUIStringInput(DEFINITION_NAME).getValue(); if(name == null || name.trim().length() == 0) { uiForm.setTabRender(UINodeTypeForm.PROPERTY_DEFINITION); uiApp.addMessage(new ApplicationMessage("UIPropertyDefinitionForm.msg.property-name", null)); return; } for (int i = 0; i < name.length(); i++) { char c = name.charAt(i); if(Character.isLetter(c) || Character.isDigit(c) || Character.isSpaceChar(c) || c=='_' || c=='-' || c=='.' || c==':' || c=='@' || c=='^' || c=='[' || c==']' || c==',') { continue ; } uiApp.addMessage(new ApplicationMessage("UIPropertyDefinitionForm.msg.property-name", null, ApplicationMessage.WARNING)); return; } if (propertyInfo == null) { propertyInfo = new PropertyDefinitionValue(); } if (prefix != null && prefix.length() > 0) { propertyInfo.setName(prefix + ":" + name); } else { propertyInfo.setName(name); } String requiredType = uiForm.getUIFormSelectBox(REQUIRED_TYPE).getValue(); propertyInfo.setRequiredType(Integer.parseInt(requiredType)); String isMultiple = uiForm.getUIFormSelectBox(MULTIPLE).getValue(); propertyInfo.setMultiple(Boolean.parseBoolean(isMultiple)); String isMandatory = uiForm.getUIFormSelectBox(MANDATORY).getValue(); propertyInfo.setMandatory(Boolean.parseBoolean(isMandatory)); String autoCreate = uiForm.getUIFormSelectBox(AUTOCREATED).getValue(); propertyInfo.setAutoCreate(Boolean.parseBoolean(autoCreate)); String isProtected = uiForm.getUIFormSelectBox(PROTECTED).getValue(); propertyInfo.setReadOnly(Boolean.parseBoolean(isProtected)); String onParent = uiForm.getUIFormSelectBox(PARENTVERSION).getValue(); propertyInfo.setOnVersion(Integer.parseInt(onParent)); String valueConstraints = uiForm.getUIStringInput(VALUE_CONSTRAINTS).getValue(); List<String> constraintValues = new ArrayList<String>(); if(valueConstraints != null) { if(valueConstraints.indexOf(",") > -1) { String[] arrValues = valueConstraints.split(","); for(int i = 0; i < arrValues.length; i++) { constraintValues.add(arrValues[i]); } } else { constraintValues.add(valueConstraints); } } propertyInfo.setValueConstraints(constraintValues); uiForm.setPropertyValue(uiForm.addedPropertiesDef_); uiPropertyForm.refresh(); UIFormInputSetWithAction propertyTab = uiForm.getChildById(UINodeTypeForm.PROPERTY_DEFINITION); propertyTab.setActions(new String[] {UINodeTypeForm.ADD_PROPERTY}, null); uiForm.setTabRender(UINodeTypeForm.NODETYPE_DEFINITION); event.getRequestContext().addUIComponentToUpdateByAjax(uiForm.getParent()); } } static public class AddPropertyActionListener extends EventListener<UINodeTypeForm> { public void execute(Event<UINodeTypeForm> event) throws Exception { UINodeTypeForm uiForm = event.getSource(); UIApplication uiApp = uiForm.getAncestorOfType(UIApplication.class); String prefix = uiForm.getUIFormSelectBox(NAMESPACE).getValue(); String propertyName = uiForm.getUIStringInput(DEFINITION_NAME).getValue(); if(propertyName == null || propertyName.trim().length() == 0) { uiForm.setTabRender(UINodeTypeForm.PROPERTY_DEFINITION); uiApp.addMessage(new ApplicationMessage("UIPropertyDefinitionForm.msg.property-name", null)); return; } for(int i = 0; i < propertyName.length(); i ++){ char c = propertyName.charAt(i); if(Character.isLetter(c) || Character.isDigit(c) || Character.isSpaceChar(c) || c=='_' || c=='-' || c=='.' || c==':' || c=='@' || c=='^' || c=='[' || c==']' || c==',') { continue ; } uiApp.addMessage(new ApplicationMessage("UIPropertyDefinitionForm.msg.property-name", null, ApplicationMessage.WARNING)); return; } PropertyDefinitionValue propertyInfo = new PropertyDefinitionValue(); if (prefix != null && prefix.length() > 0) { propertyInfo.setName(prefix + ":" + propertyName); } else { propertyInfo.setName(propertyName); } UIPropertyDefinitionForm uiPropertyForm = uiForm.getChild(UIPropertyDefinitionForm.class); String requiredType = uiForm.getUIFormSelectBox(REQUIRED_TYPE).getValue(); propertyInfo.setRequiredType(Integer.parseInt(requiredType)); String multipleValue = uiForm.getUIFormSelectBox(MULTIPLE).getValue(); propertyInfo.setMultiple(Boolean.parseBoolean(multipleValue)); String mandatory = uiForm.getUIFormSelectBox(MANDATORY).getValue(); propertyInfo.setMandatory(Boolean.parseBoolean(mandatory)); String autoCreate = uiForm.getUIFormSelectBox(AUTOCREATED).getValue(); propertyInfo.setAutoCreate(Boolean.parseBoolean(autoCreate)); String isProtected = uiForm.getUIFormSelectBox(PROTECTED).getValue(); propertyInfo.setReadOnly(Boolean.parseBoolean(isProtected)); String onParent = uiForm.getUIFormSelectBox(PARENTVERSION).getValue(); propertyInfo.setOnVersion(Integer.parseInt(onParent)); String valueConstraints = uiForm.getUIStringInput(VALUE_CONSTRAINTS).getValue(); List<String> constraintValues = new ArrayList<String>(); if(valueConstraints != null) { if(valueConstraints.indexOf(",") > -1) { String[] arrValues = valueConstraints.split(","); for(int i = 0; i < arrValues.length; i++) { constraintValues.add(arrValues[i].toString()); } } else { constraintValues.add(valueConstraints); } } propertyInfo.setValueConstraints(constraintValues); uiForm.addedPropertiesDef_.add(propertyInfo); uiForm.setPropertyValue(uiForm.addedPropertiesDef_); uiPropertyForm.refresh(); uiForm.setTabRender(UINodeTypeForm.NODETYPE_DEFINITION); UIFormInputSetWithAction nodeTypeTab = uiForm.getChildById(UINodeTypeForm.NODETYPE_DEFINITION); nodeTypeTab.setIsView(false); event.getRequestContext().addUIComponentToUpdateByAjax(uiForm.getParent()); } } static public class ChangeRequiredTypeActionListener extends EventListener<UINodeTypeForm> { public void execute(Event<UINodeTypeForm> event) throws Exception { UINodeTypeForm uiForm = event.getSource(); UIPropertyDefinitionForm uiPropertyForm = uiForm.getChild(UIPropertyDefinitionForm.class); String value = uiForm.getUIFormSelectBox(REQUIRED_TYPE).getValue(); uiPropertyForm.setRequiredValue(value); if(value.equals("1") || value.equals("9")) { uiForm.getUIStringInput(VALUE_CONSTRAINTS).setReadOnly(false); } else { uiForm.getUIStringInput(VALUE_CONSTRAINTS).setReadOnly(true); } uiForm.getUIStringInput(VALUE_CONSTRAINTS).setValue(null); event.getRequestContext().addUIComponentToUpdateByAjax(uiForm.getParent()); } } static public class AddConstraintsActionListener extends EventListener<UINodeTypeForm> { public void execute(Event<UINodeTypeForm> event) throws Exception { UINodeTypeForm uiForm = event.getSource(); UIPropertyDefinitionForm uiPropertyForm = uiForm.getChild(UIPropertyDefinitionForm.class); uiForm.removeChildById("Contraints"); String values = uiForm.getUIStringInput(VALUE_CONSTRAINTS).getValue(); UIFormInputSetWithAction constraintTab = null; if(uiPropertyForm.getRequiredValue().equals("9")) { constraintTab = new UINodeTypeOptionList("Contraints"); uiForm.addUIComponentInput(constraintTab); uiForm.setSelectedTab(constraintTab.getId()); UINodeTypeOptionList uiOptionList = uiForm.getChild(UINodeTypeOptionList.class); uiOptionList.update(values); } else if(uiPropertyForm.getRequiredValue().equals("1")) { constraintTab = new UIFormInputSetWithAction("Contraints"); UIFormMultiValueInputSet valuesConstraint = uiPropertyForm.createUIComponent(UIFormMultiValueInputSet.class, null, CONSTRAINTS); valuesConstraint.setType(UIFormStringInput.class); constraintTab.addUIFormInput(valuesConstraint); uiForm.addUIComponentInput(constraintTab); uiForm.setSelectedTab(constraintTab.getId()); } else { UIApplication uiApp = uiForm.getAncestorOfType(UIApplication.class); String message = "UIPropertyDefinitionForm.msg.not-supported-value-constraints"; uiApp.addMessage(new ApplicationMessage(message, null)); return; } uiForm.setSelectedTab("Contraints"); String[] actionNames = new String[] {"AddValue", "CancelConstraints"}; constraintTab.setActions(actionNames, null); } } static public class CancelPropertyActionListener extends EventListener<UINodeTypeForm> { public void execute(Event<UINodeTypeForm> event) throws Exception { UINodeTypeForm uiForm = event.getSource(); UIPropertyDefinitionForm uiPropertyForm = uiForm.getChild(UIPropertyDefinitionForm.class); uiPropertyForm.refresh(); UIFormInputSetWithAction childTab = uiForm.getChildById(UINodeTypeForm.PROPERTY_DEFINITION); childTab.setActions(new String[] {UINodeTypeForm.ADD_PROPERTY} , null); uiForm.setTabRender(UINodeTypeForm.NODETYPE_DEFINITION); event.getRequestContext().addUIComponentToUpdateByAjax(uiForm.getParent()); } } static public class AddActionListener extends EventListener<UINodeTypeForm> { public void execute(Event<UINodeTypeForm> event) throws Exception { UINodeTypeForm uiForm = event.getSource(); uiForm.setSelectedTab("Contraints"); event.getRequestContext().addUIComponentToUpdateByAjax(uiForm); event.getRequestContext().addUIComponentToUpdateByAjax(uiForm.getParent()); } } static public class RemoveActionListener extends EventListener<UINodeTypeForm> { public void execute(Event<UINodeTypeForm> event) throws Exception { UINodeTypeForm uiForm = event.getSource(); uiForm.setSelectedTab("Contraints"); event.getRequestContext().addUIComponentToUpdateByAjax(uiForm.getParent()); } } @SuppressWarnings("unchecked") static public class AddValueActionListener extends EventListener<UINodeTypeForm> { public void execute(Event<UINodeTypeForm> event) throws Exception { UINodeTypeForm uiForm = event.getSource(); UIPropertyDefinitionForm uiPropertyForm = uiForm.getChild(UIPropertyDefinitionForm.class); StringBuffer strValues = null; if(uiPropertyForm.getRequiredValue().equals("9")) { List<String> selectedNodes = new ArrayList<String>(); List<UICheckBoxInput> listCheckbox = new ArrayList<UICheckBoxInput>(); uiForm.findComponentOfType(listCheckbox, UICheckBoxInput.class); for(int i = 0; i < listCheckbox.size(); i ++) { if(listCheckbox.get(i).isChecked()) { selectedNodes.add(listCheckbox.get(i).getName()); } } for (int i = 0; i < selectedNodes.size(); i++) { if (strValues == null) { strValues = new StringBuffer(selectedNodes.get(i)); } else { strValues.append(",").append(selectedNodes.get(i)); } } } else if(uiPropertyForm.getRequiredValue().equals("1")) { UIFormMultiValueInputSet uiMulti = uiForm.getUIInput(CONSTRAINTS); List<String> constraintValues = (List<String>)uiMulti.getValue(); if(constraintValues == null) constraintValues = new ArrayList<String>(); for (int i = 0; i < constraintValues.size(); i++) { if (strValues == null) { strValues = new StringBuffer(constraintValues.get(i)); } else { strValues.append(",").append(constraintValues.get(i)); } } } uiForm.getUIStringInput(VALUE_CONSTRAINTS).setValue(strValues.toString()); uiForm.removeChildById("Contraints"); uiForm.setTabRender(UINodeTypeForm.PROPERTY_DEFINITION); event.getRequestContext().addUIComponentToUpdateByAjax(uiForm.getParent()); } } static public class CancelConstraintsActionListener extends EventListener<UINodeTypeForm> { public void execute(Event<UINodeTypeForm> event) throws Exception { UINodeTypeForm uiForm = event.getSource(); uiForm.removeChildById("Contraints"); uiForm.setTabRender(UINodeTypeForm.PROPERTY_DEFINITION); event.getRequestContext().addUIComponentToUpdateByAjax(uiForm.getParent()); } } }