/* * Copyright 2008 Hippo. * * 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.hippoecm.tools.cli.commands; import javax.jcr.Node; import javax.jcr.RepositoryException; import javax.jcr.nodetype.NodeDefinition; import javax.jcr.nodetype.NodeType; import org.hippoecm.tools.cli.Command; import org.hippoecm.tools.cli.JcrCompactNodeTypeDefWriter; import org.hippoecm.tools.cli.JcrWrapper; /** * List allowed child nodes of current node. */ public class NodeAllowed implements Command { /** * {@inheritDoc} */ public final String getCommand() { return "nodeallowed"; } /** * {@inheritDoc} */ public final String[] getAliases() { return new String[] { "allowednodes" }; } /** * {@inheritDoc} */ public final String usage() { return "nodeallowed"; } /** * {@inheritDoc} */ public final String help() { return "show a list of (child) nodes allowed for current node"; } /** * {@inheritDoc} */ public final boolean execute(final String[] args) { if (args.length > 1) { System.out.println(usage()); System.out.println(help()); return true; } Node node = JcrWrapper.getCurrentNode(); if (node == null) { return false; } NodeType nt; try { nt = node.getPrimaryNodeType(); } catch (RepositoryException e) { System.out.println("error: " + e.getMessage()); return false; } System.out.println("Allowed child nodes: "); System.out.println(""); System.out.println("main: "); NodeDefinition[] nodeDefs = nt.getDeclaredChildNodeDefinitions(); for (NodeDefinition nodeDef : nodeDefs) { System.out.println(getNodeDefString(nodeDef)); } System.out.println(""); System.out.println("inherited: "); NodeType[] superTypes = nt.getDeclaredSupertypes(); for (NodeType superType : superTypes) { NodeDefinition[] superDefs = superType.getDeclaredChildNodeDefinitions(); for (NodeDefinition nodeDef : superDefs) { System.out.println(getNodeDefString(nodeDef)); } } System.out.println(""); return true; } private String getNodeDefString(NodeDefinition nodeDef) { StringBuffer def = new StringBuffer("+ "); String name = nodeDef.getName(); if (name.equals("*")) { def.append('*'); } else { def.append(JcrCompactNodeTypeDefWriter.resolve(name)); } NodeType[] reqTypes = nodeDef.getRequiredPrimaryTypes(); if (reqTypes != null && reqTypes.length > 0) { String delim = " ("; for (int i = 0; i < reqTypes.length; i++) { def.append(delim); def.append(JcrCompactNodeTypeDefWriter.resolve(reqTypes[i].getName())); delim = ", "; } def.append(")"); } NodeType defaultType = nodeDef.getDefaultPrimaryType(); if (defaultType != null && !defaultType.getName().equals("*")) { def.append(" = "); def.append(JcrCompactNodeTypeDefWriter.resolve(defaultType.getName())); } if (nodeDef.isMandatory()) { def.append(" mandatory"); } if (nodeDef.isAutoCreated()) { def.append(" autocreated"); } if (nodeDef.isProtected()) { def.append(" protected"); } if (nodeDef.allowsSameNameSiblings()) { def.append(" multiple"); } return def.toString(); } }