+/*
+ * Copyright (C) 2007-2012 Mathieu Baudier
+ *
+ * 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.argeo.jcr.ui.explorer.views;
-import java.util.Arrays;
import java.util.List;
import javax.jcr.Property;
import javax.jcr.PropertyType;
-import javax.jcr.Repository;
import javax.jcr.RepositoryException;
-import javax.jcr.Session;
+import javax.jcr.RepositoryFactory;
+import javax.jcr.Value;
import javax.jcr.observation.Event;
import javax.jcr.observation.EventListener;
import javax.jcr.observation.ObservationManager;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
import org.argeo.ArgeoException;
import org.argeo.eclipse.ui.TreeParent;
import org.argeo.eclipse.ui.jcr.AsyncUiEventListener;
import org.argeo.eclipse.ui.jcr.utils.NodeViewerComparer;
import org.argeo.eclipse.ui.jcr.views.AbstractJcrBrowser;
-import org.argeo.eclipse.ui.specific.FileHandler;
-import org.argeo.jcr.ArgeoJcrConstants;
-import org.argeo.jcr.JcrUtils;
import org.argeo.jcr.RepositoryRegister;
+import org.argeo.jcr.security.JcrKeyring;
+import org.argeo.jcr.ui.explorer.JcrExplorerPlugin;
import org.argeo.jcr.ui.explorer.browser.NodeContentProvider;
import org.argeo.jcr.ui.explorer.browser.NodeLabelProvider;
import org.argeo.jcr.ui.explorer.browser.PropertiesContentProvider;
import org.argeo.jcr.ui.explorer.model.SingleJcrNode;
import org.argeo.jcr.ui.explorer.utils.GenericNodeDoubleClickListener;
-import org.argeo.jcr.ui.explorer.utils.JcrFileProvider;
import org.argeo.jcr.ui.explorer.utils.JcrUiUtils;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.viewers.ColumnLabelProvider;
*/
public class GenericJcrBrowser extends AbstractJcrBrowser {
- private final static Log log = LogFactory.getLog(GenericJcrBrowser.class);
+ // private final static Log log =
+ // LogFactory.getLog(GenericJcrBrowser.class);
+ public final static String ID = JcrExplorerPlugin.ID + ".browserView";
+ private boolean sortChildNodes = false;
/* DEPENDENCY INJECTION */
- private Session session;
+ private JcrKeyring jcrKeyring;
private RepositoryRegister repositoryRegister;
+ private RepositoryFactory repositoryFactory;
// This page widgets
private TreeViewer nodesViewer;
private EventListener resultsObserver;
// Manage documents
- private JcrFileProvider jcrFileProvider;
- private FileHandler fileHandler;
+ // private JcrFileProvider jcrFileProvider;
+ // private FileHandler fileHandler;
@Override
public void createPartControl(Composite parent) {
// look for session
- Session nodeSession = session;
- if (nodeSession == null) {
- Repository nodeRepository = JcrUtils.getRepositoryByAlias(
- repositoryRegister, ArgeoJcrConstants.ALIAS_NODE);
- if (nodeRepository != null)
- try {
- nodeSession = nodeRepository.login();
- // TODO : enhance that to enable multirepository listener.
- session = nodeSession;
- } catch (RepositoryException e1) {
- throw new ArgeoException("Cannot login to node repository");
- }
- }
+ // Session nodeSession = jcrKeyring != null ? jcrKeyring.getSession()
+ // : null;
+ // if (nodeSession == null) {
+ // Repository nodeRepository = JcrUtils.getRepositoryByAlias(
+ // repositoryRegister, ArgeoJcrConstants.ALIAS_NODE);
+ // if (nodeRepository != null)
+ // try {
+ // nodeSession = nodeRepository.login();
+ // // TODO : enhance that to enable multirepository listener.
+ // } catch (RepositoryException e1) {
+ // throw new ArgeoException("Cannot login to node repository");
+ // }
+ // }
// Instantiate the generic object that fits for
// both RCP & RAP
// Note that in RAP, it registers a service handler that provide the
// access to the files.
- jcrFileProvider = new JcrFileProvider();
- fileHandler = new FileHandler(jcrFileProvider);
+ // jcrFileProvider = new JcrFileProvider();
+ // fileHandler = new FileHandler(jcrFileProvider);
parent.setLayout(new FillLayout());
SashForm sashForm = new SashForm(parent, SWT.VERTICAL);
GridLayout gl = new GridLayout(1, false);
top.setLayout(gl);
- nodeContentProvider = new NodeContentProvider(nodeSession,
- repositoryRegister);
+ nodeContentProvider = new NodeContentProvider(jcrKeyring,
+ repositoryRegister, repositoryFactory, sortChildNodes);
// nodes viewer
nodesViewer = createNodeViewer(top, nodeContentProvider);
- // context menu
+ // context menu : it is completely defined in the plugin.xml file.
MenuManager menuManager = new MenuManager();
Menu menu = menuManager.createContextMenu(nodesViewer.getTree());
+
nodesViewer.getTree().setMenu(menu);
getSite().registerContextMenu(menuManager, nodesViewer);
getSite().setSelectionProvider(nodesViewer);
// Create the property viewer on the bottom
Composite bottom = new Composite(sashForm, SWT.NONE);
bottom.setLayout(new GridLayout(1, false));
- propertiesViewer = new TableViewer(bottom);
+ propertiesViewer = createPropertiesViewer(bottom);
+
+ sashForm.setWeights(getWeights());
+ nodesViewer.setComparer(new NodeViewerComparer());
+ }
+
+ /**
+ * To be overridden to adapt size of form and result frames.
+ */
+ protected int[] getWeights() {
+ return new int[] { 70, 30 };
+ }
+
+ protected TreeViewer createNodeViewer(Composite parent,
+ final ITreeContentProvider nodeContentProvider) {
+
+ final TreeViewer tmpNodeViewer = new TreeViewer(parent, SWT.MULTI);
+
+ tmpNodeViewer.getTree().setLayoutData(
+ new GridData(SWT.FILL, SWT.FILL, true, true));
+
+ tmpNodeViewer.setContentProvider(nodeContentProvider);
+ tmpNodeViewer.setLabelProvider(new NodeLabelProvider());
+ tmpNodeViewer
+ .addSelectionChangedListener(new ISelectionChangedListener() {
+ public void selectionChanged(SelectionChangedEvent event) {
+ if (!event.getSelection().isEmpty()) {
+ IStructuredSelection sel = (IStructuredSelection) event
+ .getSelection();
+ Object firstItem = sel.getFirstElement();
+ if (firstItem instanceof SingleJcrNode)
+ propertiesViewer
+ .setInput(((SingleJcrNode) firstItem)
+ .getNode());
+ } else {
+ propertiesViewer.setInput(getViewSite());
+ }
+ }
+ });
+
+ resultsObserver = new TreeObserver(tmpNodeViewer.getTree().getDisplay());
+ if (jcrKeyring != null)
+ try {
+ ObservationManager observationManager = jcrKeyring.getSession()
+ .getWorkspace().getObservationManager();
+ observationManager.addEventListener(resultsObserver,
+ Event.PROPERTY_ADDED | Event.PROPERTY_CHANGED, "/",
+ true, null, null, false);
+ } catch (RepositoryException e) {
+ throw new ArgeoException("Cannot register listeners", e);
+ }
+
+ tmpNodeViewer
+ .addDoubleClickListener(new GenericNodeDoubleClickListener(
+ tmpNodeViewer));
+ return tmpNodeViewer;
+ }
+
+ protected TableViewer createPropertiesViewer(Composite parent) {
+ propertiesViewer = new TableViewer(parent);
propertiesViewer.getTable().setLayoutData(
new GridData(SWT.FILL, SWT.FILL, true, true));
propertiesViewer.getTable().setHeaderVisible(true);
Property property = (Property) element;
if (property.getType() == PropertyType.BINARY)
return "<binary>";
- else if (property.isMultiple())
- return Arrays.asList(property.getValues()).toString();
- else
+ else if (property.isMultiple()) {
+ StringBuffer buf = new StringBuffer("[");
+ Value[] values = property.getValues();
+ for (int i = 0; i < values.length; i++) {
+ if (i != 0)
+ buf.append(", ");
+ buf.append(values[i].getString());
+ }
+ buf.append(']');
+ return buf.toString();
+ } else
return property.getValue().getString();
} catch (RepositoryException e) {
throw new ArgeoException(
}
});
propertiesViewer.setInput(getViewSite());
-
- sashForm.setWeights(getWeights());
- nodesViewer.setComparer(new NodeViewerComparer());
- }
-
- /**
- * To be overridden to adapt size of form and result frames.
- */
- protected int[] getWeights() {
- return new int[] { 70, 30 };
+ return propertiesViewer;
}
- // @Override
- // public void setFocus() {
- // nodesViewer.getTree().setFocus();
- // }
- //
- // /*
- // * NOTIFICATION
- // */
- // public void refresh(Object obj) {
- // nodesViewer.refresh(obj);
- // }
- //
- // public void nodeAdded(Node parentNode, Node newNode) {
- // nodesViewer.refresh(parentNode);
- // nodesViewer.expandToLevel(newNode, 0);
- // }
- //
- // public void nodeRemoved(Node parentNode) {
- //
- // IStructuredSelection newSel = new StructuredSelection(parentNode);
- // nodesViewer.setSelection(newSel, true);
- // // Force refresh
- // IStructuredSelection tmpSel = (IStructuredSelection) nodesViewer
- // .getSelection();
- // nodesViewer.refresh(tmpSel.getFirstElement());
- // }
-
- // private JcrFileProvider getJcrFileProvider() {
- // return jcrFileProvider;
- // }
- //
- // private FileHandler getFileHandler() {
- // return fileHandler;
- // }
-
- protected TreeViewer createNodeViewer(Composite parent,
- final ITreeContentProvider nodeContentProvider) {
-
- final TreeViewer tmpNodeViewer = new TreeViewer(parent, SWT.MULTI);
-
- tmpNodeViewer.getTree().setLayoutData(
- new GridData(SWT.FILL, SWT.FILL, true, true));
-
- tmpNodeViewer.setContentProvider(nodeContentProvider);
- tmpNodeViewer.setLabelProvider(new NodeLabelProvider());
- tmpNodeViewer
- .addSelectionChangedListener(new ISelectionChangedListener() {
- public void selectionChanged(SelectionChangedEvent event) {
- if (!event.getSelection().isEmpty()) {
- IStructuredSelection sel = (IStructuredSelection) event
- .getSelection();
- Object firstItem = sel.getFirstElement();
- if (firstItem instanceof SingleJcrNode)
- propertiesViewer
- .setInput(((SingleJcrNode) firstItem)
- .getNode());
- } else {
- propertiesViewer.setInput(getViewSite());
- }
- }
- });
-
- resultsObserver = new TreeObserver(tmpNodeViewer.getTree().getDisplay());
- try {
- ObservationManager observationManager = session.getWorkspace()
- .getObservationManager();
- observationManager.addEventListener(resultsObserver,
- Event.PROPERTY_ADDED | Event.PROPERTY_CHANGED, "/", true,
- null, null, false);
- } catch (RepositoryException e) {
- throw new ArgeoException("Cannot register listeners", e);
- }
-
- tmpNodeViewer
- .addDoubleClickListener(new GenericNodeDoubleClickListener(
- tmpNodeViewer));
- return tmpNodeViewer;
+ @Override
+ public void dispose() {
+ super.dispose();
}
@Override
}
+ public void setSortChildNodes(boolean sortChildNodes) {
+ this.sortChildNodes = sortChildNodes;
+ }
+
+ public boolean getSortChildNodes() {
+ return sortChildNodes;
+ }
+
/* DEPENDENCY INJECTION */
public void setRepositoryRegister(RepositoryRegister repositoryRegister) {
this.repositoryRegister = repositoryRegister;
}
- public void setSession(Session session) {
- this.session = session;
+ public void setJcrKeyring(JcrKeyring jcrKeyring) {
+ this.jcrKeyring = jcrKeyring;
+ }
+
+ public void setRepositoryFactory(RepositoryFactory repositoryFactory) {
+ this.repositoryFactory = repositoryFactory;
}
}