jackrabbit-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Fabián Mandelbaum <fmandelb...@gmail.com>
Subject Re: repo browser
Date Mon, 08 Feb 2010 19:52:42 GMT
Even if there are lots of tools out there in the links everyone
provide they are mostly toys, commercial, or not actively developed...

It's not very hard to create a method that given a session dumps an
excerpt of the repository, for example (code below taken from our
CalencoV2 system. The code below is part of Calenco's
PooledRepoManager class, released under the AGPL license):

static String NL = System.getProperty("line.separator");

    public void dump(Appendable appendable) {
        Session session = null;
        try {
            session = getSessionRO(); // Get a JCR Read-only session
            dump(session.getRootNode(), appendable);
        } catch (Exception e) {
            String msg = String.format("Cannot dump repository content
into %s", appendable.getClass().getName());
            throw new RuntimeException(msg, e);
        } finally {
            releaseSessionRO(session); // Logout from the Read-only session

    public void dump(Node node, Appendable appendable) throws
RepositoryException, IOException {
        String nname = node.getName();
        if (!nname.equals("jcr:system")) { // Skip the JCR system node // NOI18N
            appendable.append("------------------------ Node
[%s]",	(nname.isEmpty() ? "Root Node" : nname),
            appendable.append("····················· Properties
            PropertyIterator pit = node.getProperties();
            if (pit.hasNext()) {
                while (pit.hasNext()) {
                    Property p = pit.nextProperty();
                    String pname = p.getName();
                    int ptype = p.getType();
                    if (!p.getDefinition().isMultiple()) {
                        if (ptype == PropertyType.BINARY) {

pname)).append(NL); // NOI18N
                        } else {

appendable.append(String.format("@%s=\"%s\"", pname,
p.getString())).append(NL); // NOI18N
                    } else {
                        int i = 0;
                        for (Value value : p.getValues()) {

appendable.append(String.format("@%s[%d]=\"%s\"", pname, i, (ptype ==
PropertyType.BINARY ? "BINARY_VALUE" :
value.getString()))).append(NL); // NOI18N
            } else {
// NOI18N
            NodeIterator nodes = node.getNodes();
            while (nodes.hasNext()) {
                dump(nodes.nextNode(), appendable);

The above method skips the system (jcr:system) node, feel free to
adapt it to your needs. Using a similar algorithm as the above one, it
was nearly trivial to build a JSON representation of the JCR
repository with a format suitable for dojo's tree widget, having a
web-based read-only view of a running JCR repository.

On Mon, Feb 8, 2010 at 2:54 PM, ChadDavis <chadmichaeldavis@gmail.com> wrote:
> Is there a repo browser that can show me the node structure, complete
> with properties, node types, property types, etc.?

Fabián Mandelbaum
IS Engineer

View raw message