import javax.jcr.Node;
import javax.jcr.Property;
import javax.jcr.PropertyType;
+import javax.jcr.Repository;
import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+import javax.jcr.nodetype.NodeType;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.argeo.ArgeoException;
import org.argeo.eclipse.ui.jcr.browser.NodeContentProvider;
import org.argeo.eclipse.ui.jcr.browser.NodeLabelProvider;
import org.argeo.eclipse.ui.jcr.browser.PropertiesContentProvider;
import org.argeo.eclipse.ui.jcr.browser.RepositoryNode;
import org.argeo.eclipse.ui.jcr.browser.WorkspaceNode;
+import org.argeo.eclipse.ui.jcr.utils.JcrFileProvider;
+import org.argeo.eclipse.ui.jcr.utils.NodeViewerComparer;
+import org.argeo.eclipse.ui.specific.FileHandler;
+import org.argeo.jcr.ArgeoJcrConstants;
+import org.argeo.jcr.JcrUtils;
import org.argeo.jcr.RepositoryRegister;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.ui.part.ViewPart;
public class GenericJcrBrowser extends ViewPart {
+ private final static Log log = LogFactory.getLog(GenericJcrBrowser.class);
+
+ private Session session;
+
private TreeViewer nodesViewer;
+ private NodeContentProvider nodeContentProvider;
private TableViewer propertiesViewer;
private RepositoryRegister repositoryRegister;
@Override
public void createPartControl(Composite parent) {
+
+ // Instantiate the generic object that fits for
+ // both RCP & RAP, must be final to be accessed in the double click
+ // listener.
+ // Not that in RAP, it registers a service handler that provide the
+ // access to the files.
+
+ final JcrFileProvider jfp = new JcrFileProvider();
+ final FileHandler fh = new FileHandler(jfp);
+
parent.setLayout(new FillLayout());
SashForm sashForm = new SashForm(parent, SWT.VERTICAL);
| SWT.V_SCROLL);
nodesViewer.getTree().setLayoutData(
new GridData(SWT.FILL, SWT.FILL, true, true));
- nodesViewer.setContentProvider(new NodeContentProvider());
+
+ // look for session
+ Session nodeSession = session;
+ if (nodeSession == null) {
+ Repository nodeRepository = JcrUtils.getRepositoryByAlias(
+ repositoryRegister, ArgeoJcrConstants.ALIAS_NODE);
+ if (nodeRepository != null)
+ try {
+ nodeSession = nodeRepository.login();
+ } catch (RepositoryException e1) {
+ throw new ArgeoException("Cannot login to node repository");
+ }
+ }
+ nodeContentProvider = new NodeContentProvider(nodeSession,
+ repositoryRegister);
+ nodesViewer.setContentProvider(nodeContentProvider);
nodesViewer.setLabelProvider(new NodeLabelProvider());
nodesViewer
.addSelectionChangedListener(new ISelectionChangedListener() {
}
}
});
+
nodesViewer.addDoubleClickListener(new IDoubleClickListener() {
public void doubleClick(DoubleClickEvent event) {
if (event.getSelection() == null
Object obj = ((IStructuredSelection) event.getSelection())
.getFirstElement();
if (obj instanceof RepositoryNode) {
- ((RepositoryNode) obj).login();
+ RepositoryNode rpNode = (RepositoryNode) obj;
+ rpNode.login();
nodesViewer.refresh(obj);
} else if (obj instanceof WorkspaceNode) {
((WorkspaceNode) obj).login();
nodesViewer.refresh(obj);
- }
+ } else if (obj instanceof Node) {
+ Node node = (Node) obj;
+ // double clic on a file node triggers its opening
+ try {
+ if (node.isNodeType(NodeType.NT_FILE)) {
+ String name = node.getName();
+ String id = node.getIdentifier();
+ // For the file provider to be able to browse the
+ // various
+ // repository.
+ // TODO : enhanced that.
+ jfp.setRootNodes((Object[]) nodeContentProvider
+ .getElements(null));
+
+ fh.openFile(name, id);
+ }
+ } catch (RepositoryException re) {
+ throw new ArgeoException(
+ "Repository error while getting Node file info",
+ re);
+ }
+ }
}
});
getSite().registerContextMenu(menuManager, nodesViewer);
getSite().setSelectionProvider(nodesViewer);
- nodesViewer.setInput(repositoryRegister);
+ nodesViewer.setInput(getViewSite());
Composite bottom = new Composite(sashForm, SWT.NONE);
bottom.setLayout(new GridLayout(1, false));
sashForm.setWeights(getWeights());
+ nodesViewer.setComparer(new NodeViewerComparer());
+
}
@Override
}
public void nodeRemoved(Node parentNode) {
- nodesViewer.refresh(parentNode);
+
+ IStructuredSelection newSel = new StructuredSelection(parentNode);
+ nodesViewer.setSelection(newSel, true);
+ // Force refresh
+ IStructuredSelection tmpSel = (IStructuredSelection) nodesViewer
+ .getSelection();
+ nodesViewer.refresh(tmpSel.getFirstElement());
}
+ // IoC
public void setRepositoryRegister(RepositoryRegister repositoryRegister) {
this.repositoryRegister = repositoryRegister;
}
+
+ public void setSession(Session session) {
+ this.session = session;
+ }
+
}