/*
* 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.PropertyType;
import javax.jcr.RepositoryException;
import javax.jcr.Value;
import javax.jcr.nodetype.NodeType;
import javax.jcr.nodetype.PropertyDefinition;
import org.hippoecm.tools.cli.Command;
import org.hippoecm.tools.cli.JcrCompactNodeTypeDefWriter;
import org.hippoecm.tools.cli.JcrWrapper;
/**
* List allowed properties of current node.
*/
public class PropAllowed implements Command {
/**
* {@inheritDoc}
*/
public final String getCommand() {
return "propallowed";
}
/**
* {@inheritDoc}
*/
public final String[] getAliases() {
return new String[] { "allowedprops" };
}
/**
* {@inheritDoc}
*/
public final String usage() {
return "propallowed";
}
/**
* {@inheritDoc}
*/
public final String help() {
return "show a list of properties of 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: ");
PropertyDefinition[] propDefs = nt.getDeclaredPropertyDefinitions();
for (PropertyDefinition propDef : propDefs) {
System.out.println(getPropDefString(propDef));
}
System.out.println("");
System.out.println("inherited: ");
NodeType[] superTypes = nt.getDeclaredSupertypes();
for (NodeType superType : superTypes) {
PropertyDefinition[] superDefs = superType.getDeclaredPropertyDefinitions();
for (PropertyDefinition propDef : superDefs) {
System.out.println(getPropDefString(propDef));
}
}
System.out.println("");
return true;
}
private String getPropDefString(PropertyDefinition propDef) {
StringBuffer def = new StringBuffer("- ");
def.append(JcrCompactNodeTypeDefWriter.resolve(propDef.getName()));
def.append(" (").append(PropertyType.nameFromValue(propDef.getRequiredType())).append(')');
Value[] dv = propDef.getDefaultValues();
if (dv != null && dv.length > 0) {
String delim = " = '";
for (int i = 0; i < dv.length; i++) {
def.append(delim);
try {
def.append(JcrCompactNodeTypeDefWriter.escape(dv[i].getString()));
} catch (RepositoryException e) {
def.append(JcrCompactNodeTypeDefWriter.escape(dv[i].toString()));
}
def.append("'");
delim = ", '";
}
}
if (propDef.isMandatory()) {
def.append(" mandatory");
}
if (propDef.isAutoCreated()) {
def.append(" autocreated");
}
if (propDef.isProtected()) {
def.append(" protected");
}
if (propDef.isMultiple()) {
def.append(" multiple");
}
String[] vca = propDef.getValueConstraints();
if (vca != null && vca.length > 0) {
String vc = vca[0];
def.append(" < '");
def.append(JcrCompactNodeTypeDefWriter.escape(vc));
def.append("'");
for (int i = 1; i < vca.length; i++) {
vc = vca[i];
def.append(", '");
def.append(JcrCompactNodeTypeDefWriter.escape(vc));
def.append("'");
}
}
return def.toString();
}
}