/* * 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.Property; import javax.jcr.PropertyIterator; import javax.jcr.PropertyType; import javax.jcr.RepositoryException; import org.hippoecm.tools.cli.Command; import org.hippoecm.tools.cli.JcrWrapper; /** * List properties of current node. */ public class PropList implements Command { /** * {@inheritDoc} */ public final String getCommand() { return "proplist"; } /** * {@inheritDoc} */ public final String[] getAliases() { return new String[] { "listprops", "list" }; } /** * {@inheritDoc} */ public final String usage() { return "proplist"; } /** * {@inheritDoc} */ public final String help() { return "show a list of properties of the current node"; } /** * {@inheritDoc} */ public final boolean execute(final String[] args) { if (args.length > 2) { System.out.println(usage()); System.out.println(help()); return true; } Node node = JcrWrapper.getCurrentNode(); if (node == null) { return false; } String path = null; if (args.length == 2) { path = args[1]; } PropertyIterator iter = JcrWrapper.getProperties(path); if (iter == null) { System.out.println("Path not found: " + path); return false; } try { System.out.printf("%-28s%-12s%s\n", "Name", "Type", "Value"); System.out.printf("%-28s%-12s%s\n", "--------------------", "--------", "--------------------"); while (iter.hasNext()) { Property p = iter.nextProperty(); System.out.printf("%-28s%-12s%s\n", JcrWrapper.fullName(p), PropertyType.nameFromValue(p.getType()), printValue(p)); } System.out.printf("%-28s%-12s%s\n", "--------------------", "--------", "--------------------"); } catch (RepositoryException e) { // TODO Auto-generated catch block e.printStackTrace(); } return true; } /** * Helper method for pretty printing property list. * @param p Property * @return String formatted String * @throws RepositoryException when unable to print property */ private String printValue(final Property p) throws RepositoryException { if (p.getDefinition().isMultiple()) { return "[mulitvalue]"; } int type = p.getType(); switch (type) { case PropertyType.STRING: case PropertyType.LONG: case PropertyType.BOOLEAN: case PropertyType.DOUBLE: case PropertyType.PATH: case PropertyType.REFERENCE: case PropertyType.NAME: String val = p.getString(); if (val.length() > 50) { return val.substring(0, 42) + " [more..]"; } else { return val; } case PropertyType.BINARY: return "[binary data]"; case PropertyType.UNDEFINED: return "[undefined]"; case PropertyType.DATE: return p.getValue().getString(); default: return "[unknown type]: " + type; } } }