blob: d2979f6bcd61d9588b59db2c57282ccbfe79b3e2 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. The ASF licenses this file to You
* 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.apache.jackrabbit.command.info;
import java.util.Iterator;
import java.util.ResourceBundle;
import javax.jcr.Item;
import javax.jcr.Node;
import javax.jcr.Property;
import javax.jcr.PropertyType;
import javax.jcr.RepositoryException;
import org.apache.commons.chain.Context;
import org.apache.jackrabbit.command.CommandException;
import org.apache.jackrabbit.command.CommandHelper;
/**
* List items superclass
*/
public abstract class AbstractLsItems extends AbstractLs {
/** bundle */
private static ResourceBundle bundle = CommandHelper.getBundle();
/** name width */
private int nameWidth = 30;
/** node type width */
private int typeWidth = 15;
/**
* @param ctx
* the <code>Context</code>
* @return Iterator containing the Items to list
* @throws CommandException
* if an errors occurs
* @throws RepositoryException
* if the current <code>Repository</code> throws a
* <code>RepositoryException<code>
*/
protected abstract Iterator getItems(Context ctx) throws CommandException,
RepositoryException;
/**
* {@inheritDoc}
*/
public final boolean execute(Context ctx) throws Exception {
int nodes = 0;
int properties = 0;
// header
int[] width = new int[] {
nameWidth, typeWidth, longWidth, longWidth, longWidth
};
String[] header = new String[] {
bundle.getString("word.name"), bundle.getString("word.type"),
bundle.getString("word.node"), bundle.getString("word.new"),
bundle.getString("word.modified")
};
// print header
PrintHelper.printRow(ctx, width, header);
// print separator
PrintHelper.printSeparatorRow(ctx, width, '-');
// nodes
Iterator iter = getItems(ctx);
int index = 0;
int maxItems = getMaxItems(ctx);
// Print nodes
while (iter.hasNext() && index < maxItems) {
Item i = (Item) iter.next();
String type = null;
// Show name or path
String name = null;
if (this.isPath()) {
name = i.getPath();
} else {
name = i.getName();
}
if (i.isNode()) {
nodes++;
// name
Node n = (Node) i;
if (!isPath() && n.getIndex() > 1) {
name = n.getName() + "[" + n.getIndex() + "]";
}
// type
type = n.getPrimaryNodeType().getName();
} else {
properties++;
type = PropertyType.nameFromValue(((Property) i).getType());
}
PrintHelper.printRow(ctx, width, new String[] {
name, type, Boolean.toString(i.isNode()),
Boolean.valueOf(i.isNew()).toString(),
Boolean.valueOf(i.isModified()).toString()
});
index++;
}
// Footer
printFooter(ctx, iter);
return false;
}
}