package org.argeo.jcr.ui.explorer.model; import java.util.Map; import javax.jcr.Repository; import javax.jcr.RepositoryFactory; import org.argeo.eclipse.ui.TreeParent; import org.argeo.jcr.RepositoryRegister; /** * UI Tree component. Implements the Argeo abstraction of a * {@link RepositoryFactory} that enable a user to "mount" various repositories * in a single Tree like View. It is usually meant to be at the root of the UI * Tree and thus {@link getParent()} method will return null. * * The {@link RepositoryFactory} is injected at instantiation time and must be * use get or register new {@link Repository} objects upon which a reference is * kept here. */ public class RepositoriesNode extends TreeParent { private final String name; private final RepositoryRegister repositoryRegister; public RepositoriesNode(String name, RepositoryRegister repositoryRegister, TreeParent parent) { super(name); this.name = name; this.repositoryRegister = repositoryRegister; } /** * Override normal behaviour to initialize the various repositories only at * request time */ @Override public synchronized Object[] getChildren() { if (isLoaded()) { return super.getChildren(); } else { // initialize current object Map refRepos = repositoryRegister .getRepositories(); for (String name : refRepos.keySet()) { super.addChild(new RepositoryNode(name, refRepos.get(name), this)); } return super.getChildren(); } } public void registerNewRepository(String alias, Repository repository) { // TODO: implement this // Create a new RepositoryNode Object // add it // super.addChild(new RepositoriesNode(...)); } /** Returns the {@link RepositoryRegister} wrapped by thgis object. */ public RepositoryRegister getRepositoryRegister() { return repositoryRegister; } }