/*
* 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.NodeDefinition;
import javax.jcr.nodetype.NodeType;
import org.exoplatform.ecm.webui.form.UIFormInputSetWithAction;
import org.exoplatform.services.jcr.RepositoryService;
import org.exoplatform.services.jcr.core.nodetype.NodeDefinitionValue;
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.UIFormSelectBox;
import org.exoplatform.webui.form.UIFormStringInput;
/**
* Created by The eXo Platform SARL
* Author : Dang Van Minh
* minh.dang@exoplatform.com
* Sep 22, 2006
* 11:50:10 AM
*/
@ComponentConfig(template = "classpath:groovy/ecm/webui/form/UIFormInputSetWithAction.gtmpl")
public class UIChildNodeDefinitionForm extends UIFormInputSetWithAction {
final static public String NAMESPACE = "childNamespace";
final static public String CHILD_NAME = "childNodename";
final static public String REQUIRED_PRIMARY_TYPE = "requiredPrimaryType";
final static public String MULTIPLE = "childMultiple";
final static public String MANDATORY = "childMandatory";
final static public String AUTOCREATED = "childAutocreated";
final static public String PROTECTED = "childProtected";
final static public String PARENTVERSION = "childParentversion";
final static public String DEFAULT_PRIMARY_TYPE = "defaultPrimaryType";
final static public String SAME_NAME = "sameNameSiblings";
final static public String TRUE = "true";
final static public String FALSE = "false";
final static public String ACTION_UPDATE_CHILD = "UpdateChild";
final static public String ACTION_CANCEL_CHILD = "CancelChild";
public UIChildNodeDefinitionForm(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>> sameNameListItem = new ArrayList<SelectItemOption<String>>();
sameNameListItem.add(new SelectItemOption<String>(FALSE, FALSE));
sameNameListItem.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(CHILD_NAME, CHILD_NAME, null));
addUIFormInput(new UIFormStringInput(DEFAULT_PRIMARY_TYPE, DEFAULT_PRIMARY_TYPE, null));
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(SAME_NAME, SAME_NAME, sameNameListItem));
addUIFormInput(new UIFormStringInput(REQUIRED_PRIMARY_TYPE, REQUIRED_PRIMARY_TYPE, 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>> 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>> sameNameListItem = new ArrayList<SelectItemOption<String>>();
sameNameListItem.add(new SelectItemOption<String>(FALSE, FALSE));
sameNameListItem.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(CHILD_NAME).setReadOnly(false).setValue(null);
getUIStringInput(DEFAULT_PRIMARY_TYPE).setReadOnly(false).setValue(null);
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(SAME_NAME).setOptions(sameNameListItem).setDisabled(false);
getUIStringInput(REQUIRED_PRIMARY_TYPE).setReadOnly(false).setValue(null);
UINodeTypeForm uiForm = getParent();
UIFormInputSetWithAction uiChildTab = uiForm.getChildById(UINodeTypeForm.CHILDNODE_DEFINITION);
uiForm.setActionInTab(uiChildTab);
}
public void update(NodeType nodeType, String childNodeName) throws Exception {
if(childNodeName != null) {
NodeDefinition[] nodeDefinitions = nodeType.getChildNodeDefinitions();
for(int i = 0; i < nodeDefinitions.length; i++) {
String name = nodeDefinitions[i].getName();
if(name.equals(childNodeName)) {
if(childNodeName.indexOf(":") > -1) {
String[] arr = childNodeName.split(":");
getUIFormSelectBox(NAMESPACE).setValue(arr[0].trim());
getUIStringInput(CHILD_NAME).setValue(arr[1].trim());
} else {
getUIFormSelectBox(NAMESPACE).setValue("");
getUIStringInput(CHILD_NAME).setValue(childNodeName);
}
NodeType defaultNodeType = nodeDefinitions[i].getDefaultPrimaryType();
if(defaultNodeType != null) {
getUIStringInput(DEFAULT_PRIMARY_TYPE).setValue(defaultNodeType.getName());
}
String sameName = String.valueOf(nodeDefinitions[i].allowsSameNameSiblings());
getUIFormSelectBox(SAME_NAME).setValue(sameName);
getUIFormSelectBox(MANDATORY).setValue(String.valueOf(nodeDefinitions[i].isMandatory()));
getUIFormSelectBox(AUTOCREATED).setValue(String.valueOf(nodeDefinitions[i].isAutoCreated()));
getUIFormSelectBox(PROTECTED).setValue(String.valueOf(nodeDefinitions[i].isProtected()));
String parentVersion = Integer.toString(nodeDefinitions[i].getOnParentVersion());
getUIFormSelectBox(PARENTVERSION).setValue(parentVersion);
StringBuilder requiredType = new StringBuilder();
NodeType[] requiredPrimaryType = nodeDefinitions[i].getRequiredPrimaryTypes();
for(int j = 0; j < requiredPrimaryType.length; j ++){
if(requiredType.length() > 0) requiredType.append(" , ");
requiredType.append(requiredPrimaryType[j].getName());
}
getUIStringInput(REQUIRED_PRIMARY_TYPE).setValue(requiredType.toString());
break;
}
}
}
getUIFormSelectBox(NAMESPACE).setDisabled(true);
getUIStringInput(CHILD_NAME).setReadOnly(true);
getUIStringInput(DEFAULT_PRIMARY_TYPE).setReadOnly(true);
getUIFormSelectBox(AUTOCREATED).setDisabled(true);
getUIFormSelectBox(MANDATORY).setDisabled(true);
getUIFormSelectBox(PARENTVERSION).setDisabled(true);
getUIFormSelectBox(PROTECTED).setDisabled(true);
getUIFormSelectBox(SAME_NAME).setDisabled(true);
getUIStringInput(REQUIRED_PRIMARY_TYPE).setReadOnly(true);
}
private void setValues(NodeDefinitionValue node) {
String childNodeName = node.getName();
if(childNodeName.indexOf(":") > -1) {
String[] arr = childNodeName.split(":");
getUIFormSelectBox(NAMESPACE).setValue(arr[0].trim());
getUIStringInput(CHILD_NAME).setValue(arr[1].trim());
} else {
getUIFormSelectBox(NAMESPACE).setValue("");
getUIStringInput(CHILD_NAME).setValue(childNodeName);
}
getUIStringInput(DEFAULT_PRIMARY_TYPE).setValue(node.getDefaultNodeTypeName());
getUIFormSelectBox(SAME_NAME).setValue(String.valueOf(node.isSameNameSiblings()));
getUIFormSelectBox(MANDATORY).setValue(String.valueOf(node.isMandatory()));
getUIFormSelectBox(AUTOCREATED).setValue(String.valueOf(node.isAutoCreate()));
getUIFormSelectBox(PROTECTED).setValue(String.valueOf(node.isReadOnly()));
String parentVersion = Integer.toString(node.getOnVersion());
getUIFormSelectBox(PARENTVERSION).setValue(parentVersion);
List<String> requiredPrimaryType = node.getRequiredNodeTypeNames();
StringBuilder listRequired = new StringBuilder();
for(int j = 0; j < requiredPrimaryType.size(); j ++){
if(listRequired.length() < 1) {
listRequired.append(requiredPrimaryType.get(j));
} else {
listRequired.append(",").append(requiredPrimaryType.get(j));
}
}
getUIStringInput(REQUIRED_PRIMARY_TYPE).setValue(listRequired.toString());
}
private NodeDefinitionValue getChildNodeByName(String nodeName,
List<NodeDefinitionValue> listNode) {
for(NodeDefinitionValue node : listNode) {
if(node.getName().equals(nodeName)) return node;
}
return null;
}
static public class RemoveChildNodeActionListener extends EventListener<UINodeTypeForm> {
public void execute(Event<UINodeTypeForm> event) throws Exception {
UINodeTypeForm uiForm = event.getSource();
String nodeName = event.getRequestContext().getRequestParameter(OBJECTID);
for(NodeDefinitionValue node : uiForm.addedChildDef_) {
if(node.getName().equals(nodeName)) {
uiForm.addedChildDef_.remove(node);
break;
}
}
uiForm.setChildValue(uiForm.addedChildDef_);
uiForm.setTabRender(UINodeTypeForm.NODETYPE_DEFINITION);
event.getRequestContext().addUIComponentToUpdateByAjax(uiForm.getParent());
}
}
static public class EditChildNodeActionListener extends EventListener<UINodeTypeForm> {
public void execute(Event<UINodeTypeForm> event) throws Exception {
UINodeTypeForm uiForm = event.getSource();
UIChildNodeDefinitionForm uiChildNodeForm = uiForm.getChild(UIChildNodeDefinitionForm.class);
String nodeName = event.getRequestContext().getRequestParameter(OBJECTID);
UIApplication uiApp = uiForm.getAncestorOfType(UIApplication.class);
if(nodeName == null || nodeName.trim().length() == 0) {
uiForm.setTabRender(UINodeTypeForm.CHILDNODE_DEFINITION);
uiApp.addMessage(new ApplicationMessage("UIChildNodeDefinitionForm.msg.child-name", null));
return;
}
for(int i = 0; i < nodeName.length(); i ++){
char c = nodeName.charAt(i);
if(Character.isLetter(c) || Character.isDigit(c) || Character.isSpaceChar(c) || c=='_'
|| c=='-' || c=='.' || c==':' || c=='@' || c=='^' || c=='[' || c==']' || c==',' || nodeName.equals("*")) {
continue ;
}
uiApp.addMessage(new ApplicationMessage(
"UIChildNodeDefinitionForm.msg.child-invalid", null,
ApplicationMessage.WARNING));
return;
}
NodeDefinitionValue nodeDefValue =
uiChildNodeForm.getChildNodeByName(nodeName, uiForm.addedChildDef_);
uiChildNodeForm.setValues(nodeDefValue);
UIFormInputSetWithAction childTab = uiForm.getChildById(UINodeTypeForm.CHILDNODE_DEFINITION);
String[] actionNames = {ACTION_UPDATE_CHILD, ACTION_CANCEL_CHILD};
String[] fieldNames = {nodeName, null};
childTab.setActions(actionNames , fieldNames);
uiForm.setTabRender(UINodeTypeForm.CHILDNODE_DEFINITION);
event.getRequestContext().addUIComponentToUpdateByAjax(uiForm.getParent());
}
}
static public class UpdateChildActionListener extends EventListener<UINodeTypeForm> {
public void execute(Event<UINodeTypeForm> event) throws Exception {
UINodeTypeForm uiForm = event.getSource();
UIChildNodeDefinitionForm uiChildNodeForm = uiForm.getChild(UIChildNodeDefinitionForm.class);
String nodeName = event.getRequestContext().getRequestParameter(OBJECTID);
UIApplication uiApp = uiForm.getAncestorOfType(UIApplication.class);
NodeDefinitionValue nodeTypeValue =
uiChildNodeForm.getChildNodeByName(nodeName, uiForm.addedChildDef_);
ApplicationMessage message;
String prefix = uiForm.getUIFormSelectBox(UIChildNodeDefinitionForm.NAMESPACE).getValue();
String childNodeName =
uiForm.getUIStringInput(UIChildNodeDefinitionForm.CHILD_NAME).getValue();
if(childNodeName == null || childNodeName.trim().length() == 0) {
uiForm.setTabRender(UINodeTypeForm.CHILDNODE_DEFINITION);
uiApp.addMessage(new ApplicationMessage("UIChildNodeDefinitionForm.msg.child-name", null));
return;
}
for(int i = 0; i < childNodeName.length(); i ++){
char c = childNodeName.charAt(i);
if(Character.isLetter(c) || Character.isDigit(c) || Character.isSpaceChar(c) || c=='_'
|| c=='-' || c=='.' || c==':' || c=='@' || c=='^' || c=='[' || c==']' || c==',' || childNodeName.equals("*")) {
continue ;
}
uiApp.addMessage(new ApplicationMessage("UIChildNodeDefinitionForm.msg.child-invalid",
null,
ApplicationMessage.WARNING));
return;
}
if(prefix != null && prefix.length() > 0) {
StringBuffer sb = new StringBuffer();
sb.append(prefix).append(":").append(childNodeName);
childNodeName = sb.toString();
}
if (nodeTypeValue == null) {
nodeTypeValue = new NodeDefinitionValue();
}
nodeTypeValue.setName(childNodeName);
String defaultType =
uiForm.getUIStringInput(UIChildNodeDefinitionForm.DEFAULT_PRIMARY_TYPE).getValue();
if(defaultType == null || defaultType.trim().length() == 0) {
uiForm.setTabRender(UINodeTypeForm.CHILDNODE_DEFINITION);
message = new ApplicationMessage("UIChildNodeDefinitionForm.msg.defaultPrimaryType", null);
uiApp.addMessage(message);
return;
}
nodeTypeValue.setDefaultNodeTypeName(defaultType);
String isSameName =
uiForm.getUIFormSelectBox(UIChildNodeDefinitionForm.SAME_NAME).getValue();
nodeTypeValue.setSameNameSiblings(Boolean.parseBoolean(isSameName));
String isMandatory =
uiForm.getUIFormSelectBox(UIChildNodeDefinitionForm.MANDATORY).getValue();
nodeTypeValue.setMandatory(Boolean.parseBoolean(isMandatory));
String autoCreate =
uiForm.getUIFormSelectBox(UIChildNodeDefinitionForm.AUTOCREATED).getValue();
nodeTypeValue.setAutoCreate(Boolean.parseBoolean(autoCreate));
String isProtected =
uiForm.getUIFormSelectBox(UIChildNodeDefinitionForm.PROTECTED).getValue();
nodeTypeValue.setReadOnly(Boolean.parseBoolean(isProtected));
String parentVer =
uiForm.getUIFormSelectBox(UIChildNodeDefinitionForm.PARENTVERSION).getValue();
nodeTypeValue.setOnVersion(Integer.parseInt(parentVer));
String requiredType =
uiForm.getUIStringInput(UIChildNodeDefinitionForm.REQUIRED_PRIMARY_TYPE).getValue();
if(requiredType == null || requiredType.length() == 0) {
uiForm.setTabRender(UINodeTypeForm.CHILDNODE_DEFINITION);
message = new ApplicationMessage("UIChildNodeDefinitionForm.msg.requiredPrimaryType", null);
uiApp.addMessage(message);
return;
}
String[] types = requiredType.split(",");
List<String> reqList = new ArrayList<String>();
for(int i = 0; i < types.length; i++) {
reqList.add(types[i].trim());
}
nodeTypeValue.setRequiredNodeTypeNames(reqList);
uiForm.setChildValue(uiForm.addedChildDef_);
uiChildNodeForm.refresh();
UIFormInputSetWithAction childTab = uiForm.getChildById(UINodeTypeForm.CHILDNODE_DEFINITION);
childTab.setActions(new String[] {UINodeTypeForm.ADD_CHILD}, null);
uiForm.setTabRender(UINodeTypeForm.NODETYPE_DEFINITION);
event.getRequestContext().addUIComponentToUpdateByAjax(uiForm.getParent());
}
}
static public class AddChildActionListener extends EventListener<UINodeTypeForm> {
public void execute(Event<UINodeTypeForm> event) throws Exception {
UINodeTypeForm uiForm = event.getSource();
UIApplication uiApp = uiForm.getAncestorOfType(UIApplication.class);
NodeDefinitionValue nodeTypeValue = new NodeDefinitionValue();
String prefix = uiForm.getUIFormSelectBox(NAMESPACE).getValue();
ApplicationMessage message;
String childNodeName = uiForm.getUIStringInput(CHILD_NAME).getValue();
if(childNodeName == null || childNodeName.trim().length() == 0) {
uiForm.setTabRender(UINodeTypeForm.CHILDNODE_DEFINITION);
uiApp.addMessage(new ApplicationMessage("UIChildNodeDefinitionForm.msg.child-name", null));
return;
}
for(int i = 0; i < childNodeName.length(); i ++){
char c = childNodeName.charAt(i);
if(Character.isLetter(c) || Character.isDigit(c) || Character.isSpaceChar(c) || c=='_'
|| c=='-' || c=='.' || c==':' || c=='@' || c=='^' || c=='[' || c==']' || c==',' || childNodeName.equals("*")) {
continue ;
}
uiApp.addMessage(new ApplicationMessage(
"UIChildNodeDefinitionForm.msg.child-invalid", null,
ApplicationMessage.WARNING));
return;
}
if (prefix != null && prefix.length() > 0) {
StringBuffer sb = new StringBuffer();
sb.append(prefix).append(":").append(childNodeName);
childNodeName = sb.toString();
}
nodeTypeValue.setName(childNodeName);
String defaultType =
uiForm.getUIStringInput(DEFAULT_PRIMARY_TYPE).getValue();
if(defaultType == null || defaultType.trim().length() == 0) {
uiForm.setTabRender(UINodeTypeForm.CHILDNODE_DEFINITION);
message = new ApplicationMessage("UIChildNodeDefinitionForm.msg.defaultPrimaryType", null);
uiApp.addMessage(message);
return;
}
nodeTypeValue.setDefaultNodeTypeName(defaultType);
String isSameName = uiForm.getUIFormSelectBox(SAME_NAME).getValue();
nodeTypeValue.setSameNameSiblings(Boolean.parseBoolean(isSameName));
String madatory = uiForm.getUIFormSelectBox(MANDATORY).getValue();
nodeTypeValue.setMandatory(Boolean.parseBoolean(madatory));
String autoCreate = uiForm.getUIFormSelectBox(AUTOCREATED).getValue();
nodeTypeValue.setAutoCreate(Boolean.parseBoolean(autoCreate));
String isProtected = uiForm.getUIFormSelectBox(PROTECTED).getValue();
nodeTypeValue.setReadOnly(Boolean.parseBoolean(isProtected));
String parentVer = uiForm.getUIFormSelectBox(PARENTVERSION).getValue();
nodeTypeValue.setOnVersion(Integer.parseInt(parentVer));
String requiredType = uiForm.getUIStringInput(REQUIRED_PRIMARY_TYPE).getValue();
if(requiredType == null || requiredType.trim().length() == 0) {
uiForm.setTabRender(UINodeTypeForm.CHILDNODE_DEFINITION);
message = new ApplicationMessage("UIChildNodeDefinitionForm.msg.requiredPrimaryType", null);
uiApp.addMessage(message);
return;
}
String[] types = requiredType.split(",");
List<String> reqList = new ArrayList<String>();
for(int i = 0; i < types.length; i++){
reqList.add(types[i].trim());
}
nodeTypeValue.setRequiredNodeTypeNames(reqList);
uiForm.addedChildDef_.add(nodeTypeValue);
uiForm.setChildValue(uiForm.addedChildDef_);
UIChildNodeDefinitionForm uiChildNodeForm = uiForm.getChild(UIChildNodeDefinitionForm.class);
uiChildNodeForm.refresh();
uiForm.setTabRender(UINodeTypeForm.NODETYPE_DEFINITION);
UIFormInputSetWithAction nodeTypeTab = uiForm.getChildById(UINodeTypeForm.NODETYPE_DEFINITION);
nodeTypeTab.setIsView(false);
event.getRequestContext().addUIComponentToUpdateByAjax(uiForm.getParent());
}
}
static public class AddDefaultTypeActionListener extends EventListener<UINodeTypeForm> {
public void execute(Event<UINodeTypeForm> event) throws Exception {
UINodeTypeForm uiForm = event.getSource();
UIFormInputSetWithAction defaultPrimaryTypeTab =
new UINodeTypeOptionList(UINodeTypeForm.DEFAULT_PRIMARY_TYPE_TAB);
uiForm.removeChildTabs(new String[] {UINodeTypeForm.SUPER_TYPE_TAB,
UINodeTypeForm.REQUIRED_PRIMARY_TYPE_TAB});
if(defaultPrimaryTypeTab.isRendered()) {
uiForm.removeChildById(UINodeTypeForm.DEFAULT_PRIMARY_TYPE_TAB);
}
String[] actionNames = {UINodeTypeForm.ADD_TYPE, UINodeTypeForm.ACTION_CANCEL_TAB};
String[] fieldNames = {DEFAULT_PRIMARY_TYPE,
UINodeTypeForm.DEFAULT_PRIMARY_TYPE_TAB};
defaultPrimaryTypeTab.setActions(actionNames, fieldNames);
uiForm.addUIComponentInput(defaultPrimaryTypeTab);
uiForm.setTabRender(UINodeTypeForm.DEFAULT_PRIMARY_TYPE_TAB);
UINodeTypeOptionList uiOptionList = uiForm.getChild(UINodeTypeOptionList.class);
String defaultTypeValue = uiForm.getUIStringInput(DEFAULT_PRIMARY_TYPE).getValue();
uiOptionList.update(defaultTypeValue);
event.getRequestContext().addUIComponentToUpdateByAjax(uiForm.getParent());
}
}
static public class AddRequiredTypeActionListener extends EventListener<UINodeTypeForm> {
public void execute(Event<UINodeTypeForm> event) throws Exception {
UINodeTypeForm uiForm = event.getSource();
UIFormInputSetWithAction requiredPrimaryTypeTab =
new UINodeTypeOptionList(UINodeTypeForm.REQUIRED_PRIMARY_TYPE_TAB);
uiForm.removeChildTabs(new String[] {UINodeTypeForm.SUPER_TYPE_TAB,
UINodeTypeForm.DEFAULT_PRIMARY_TYPE_TAB});
if(requiredPrimaryTypeTab.isRendered()) {
uiForm.removeChildById(UINodeTypeForm.REQUIRED_PRIMARY_TYPE_TAB);
}
String[] actionNames = {UINodeTypeForm.ADD_TYPE, UINodeTypeForm.ACTION_CANCEL_TAB};
String[] fieldNames = {REQUIRED_PRIMARY_TYPE, UINodeTypeForm.REQUIRED_PRIMARY_TYPE_TAB};
requiredPrimaryTypeTab.setActions(actionNames, fieldNames);
uiForm.addUIComponentInput(requiredPrimaryTypeTab);
uiForm.setTabRender(UINodeTypeForm.REQUIRED_PRIMARY_TYPE_TAB);
UINodeTypeOptionList uiOptionList = uiForm.getChild(UINodeTypeOptionList.class);
String requiredTypeValue = uiForm.getUIStringInput(REQUIRED_PRIMARY_TYPE).getValue();
uiOptionList.update(requiredTypeValue);
event.getRequestContext().addUIComponentToUpdateByAjax(uiForm.getParent());
}
}
static public class CancelChildActionListener extends EventListener<UINodeTypeForm> {
public void execute(Event<UINodeTypeForm> event) throws Exception {
UINodeTypeForm uiForm = event.getSource();
UIChildNodeDefinitionForm uiChildNodeForm = uiForm.getChild(UIChildNodeDefinitionForm.class);
uiChildNodeForm.refresh();
UIFormInputSetWithAction childTab = uiForm.getChildById(UINodeTypeForm.CHILDNODE_DEFINITION);
childTab.setActions(new String[] {UINodeTypeForm.ADD_CHILD}, null);
uiForm.setTabRender(UINodeTypeForm.NODETYPE_DEFINITION);
event.getRequestContext().addUIComponentToUpdateByAjax(uiForm.getParent());
}
}
}