import javax.jcr.Session;
import org.argeo.ArgeoException;
+import org.argeo.jcr.JcrUtils;
import org.argeo.jcr.RepositoryRegister;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.Viewer;
public class NodeContentProvider implements ITreeContentProvider {
private ItemComparator itemComparator = new ItemComparator();
+ private RepositoryRegister repositoryRegister;
+ private Session userSession;
+
+ public NodeContentProvider(Session userSession,
+ RepositoryRegister repositoryRegister) {
+ this.userSession = userSession;
+ this.repositoryRegister = repositoryRegister;
+ }
+
public Object[] getElements(Object inputElement) {
- return getChildren(inputElement);
+ List<Object> objs = new ArrayList<Object>();
+ if (userSession != null)
+ objs.add(JcrUtils.getUserHome(userSession));
+ if (repositoryRegister != null)
+ objs.add(repositoryRegister);
+ return objs.toArray();
}
public Object[] getChildren(Object parentElement) {
try {
if (element instanceof Node) {
Node node = (Node) element;
+ if(!node.getPath().equals("/"))
return node.getParent();
+ else
+ return null;
}
return null;
} catch (RepositoryException e) {
return ((RepositoryNode) element).hasChildren();
} else if (element instanceof WorkspaceNode) {
return ((WorkspaceNode) element).getSession() != null;
+ } else if (element instanceof RepositoryRegister) {
+ return ((RepositoryRegister) element).getRepositories().size() > 0;
}
return false;
} catch (RepositoryException e) {
import org.argeo.ArgeoException;
import org.argeo.eclipse.ui.jcr.JcrUiPlugin;
+import org.argeo.jcr.ArgeoTypes;
+import org.argeo.jcr.RepositoryRegister;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.graphics.Image;
"icons/file.gif").createImage();
public final static Image BINARY = JcrUiPlugin.getImageDescriptor(
"icons/binary.png").createImage();
+ public final static Image HOME = JcrUiPlugin.getImageDescriptor(
+ "icons/home.gif").createImage();
+ public final static Image REPOSITORIES = JcrUiPlugin.getImageDescriptor(
+ "icons/repositories.gif").createImage();
public String getText(Object element) {
try {
if (element instanceof Node) {
Node node = (Node) element;
String label = node.getName();
- // try {
- // Item primaryItem = node.getPrimaryItem();
- // label = primaryItem instanceof Property ? ((Property)
- // primaryItem)
- // .getValue().getString()
- // + " ("
- // + node.getName()
- // + ")" : node.getName();
- // } catch (RepositoryException e) {
- // label = node.getName();
- // }
StringBuffer mixins = new StringBuffer("");
for (NodeType type : node.getMixinNodeTypes())
mixins.append(' ').append(type.getName());
- // System.out.println("URL : "
- // + createDownloadHtml("test.pdf", "Downlad"));
-
return label + " [" + node.getPrimaryNodeType().getName()
+ mixins + "]";
- // + createDownloadHtml("test.pdf", "Downlad");
+ } else if (element instanceof RepositoryRegister) {
+ return "Repositories";
}
return element.toString();
} catch (RepositoryException e) {
if (element instanceof Node) {
Node node = (Node) element;
try {
- if (node.getPrimaryNodeType().isNodeType(NodeType.NT_FOLDER))
- return FOLDER;
- else if (node.getPrimaryNodeType().isNodeType(NodeType.NT_FILE))
+ // optimized order
+ if (node.getPrimaryNodeType().isNodeType(NodeType.NT_FILE))
return FILE;
+ else if (node.getPrimaryNodeType().isNodeType(
+ NodeType.NT_FOLDER))
+ return FOLDER;
else if (node.getPrimaryNodeType().isNodeType(
NodeType.NT_RESOURCE))
return BINARY;
+ else if (node.isNodeType(ArgeoTypes.ARGEO_USER_HOME))
+ return HOME;
} catch (RepositoryException e) {
// silent
}
return WorkspaceNode.WORKSPACE_DISCONNECTED;
else
return WorkspaceNode.WORKSPACE_CONNECTED;
+ } else if (element instanceof RepositoryRegister) {
+ return REPOSITORIES;
}
return super.getImage(element);
}
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 org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
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;
public class GenericJcrBrowser extends ViewPart {
private final static Log log = LogFactory.getLog(GenericJcrBrowser.class);
+ private Session session;
+
private TreeViewer nodesViewer;
private TableViewer propertiesViewer;
| 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");
+ }
+ }
+ nodesViewer.setContentProvider(new NodeContentProvider(nodeSession,
+ repositoryRegister));
nodesViewer.setLabelProvider(new NodeLabelProvider());
nodesViewer
.addSelectionChangedListener(new ISelectionChangedListener() {
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("nt:file")) {
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));
this.repositoryRegister = repositoryRegister;
}
+ public void setSession(Session session) {
+ this.session = session;
+ }
+
}
+++ /dev/null
-package org.argeo.eclipse.ui.jcr.views;
-
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-
-import org.argeo.ArgeoException;
-import org.argeo.eclipse.ui.jcr.SimpleNodeContentProvider;
-import org.argeo.eclipse.ui.jcr.browser.HomeContentProvider;
-import org.argeo.eclipse.ui.jcr.browser.NodeLabelProvider;
-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.eclipse.jface.action.MenuManager;
-import org.eclipse.jface.viewers.DoubleClickEvent;
-import org.eclipse.jface.viewers.IDoubleClickListener;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.jface.viewers.TreeViewer;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.FillLayout;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Menu;
-import org.eclipse.ui.part.ViewPart;
-
-/** JCR browser organized around a user home node. */
-public class UserCentricJcrBrowser extends ViewPart {
- // private final static Log log = LogFactory.getLog(UserBrowser.class);
-
- private TreeViewer nodesViewer;
-
- private Session session;
-
- @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());
-
- Composite top = new Composite(parent, SWT.NONE);
- GridLayout gl = new GridLayout(1, false);
- top.setLayout(gl);
-
- // nodes viewer
- nodesViewer = new TreeViewer(top, SWT.MULTI | SWT.H_SCROLL
- | SWT.V_SCROLL);
- nodesViewer.getTree().setLayoutData(
- new GridData(SWT.FILL, SWT.FILL, true, true));
-
- SimpleNodeContentProvider contentProvider = new HomeContentProvider(
- session);
- nodesViewer.setContentProvider(contentProvider);
- nodesViewer.setLabelProvider(new NodeLabelProvider());
-
- nodesViewer.addDoubleClickListener(new IDoubleClickListener() {
- public void doubleClick(DoubleClickEvent event) {
- if (event.getSelection() == null
- || event.getSelection().isEmpty())
- return;
- Object obj = ((IStructuredSelection) event.getSelection())
- .getFirstElement();
- if (obj instanceof RepositoryNode) {
- RepositoryNode rpNode = (RepositoryNode) obj;
- rpNode.login();
- // For the file provider to be able to browse the various
- // repository.
- // TODO : enhanced that.
- jfp.setRepositoryNode(rpNode);
- 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("nt:file")) {
- String name = node.getName();
- String id = node.getIdentifier();
- fh.openFile(name, id);
- }
- } catch (RepositoryException re) {
- throw new ArgeoException(
- "Repository error while getting Node file info",
- re);
- }
- }
- }
- });
-
- // context menu
- MenuManager menuManager = new MenuManager();
- Menu menu = menuManager.createContextMenu(nodesViewer.getTree());
- nodesViewer.getTree().setMenu(menu);
- getSite().registerContextMenu(menuManager, nodesViewer);
- getSite().setSelectionProvider(nodesViewer);
-
- nodesViewer.setInput(session);
-
- nodesViewer.setComparer(new NodeViewerComparer());
-
- }
-
- @Override
- public void setFocus() {
- nodesViewer.getTree().setFocus();
- }
-
- /**
- * To be overidden to adapt size of form and result frames.
- *
- * @return
- */
- protected int[] getWeights() {
- return new int[] { 70, 30 };
- }
-
- /*
- * 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());
- }
-
- public void setSession(Session session) {
- this.session = session;
- }
-
-}
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.argeo.ArgeoException;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.commands.IHandler;
// TODO: make it more flexible and robust
ApplicationContext applicationContext = ApplicationContextTracker
.getApplicationContext(bundleSymbolicName);
+ if (applicationContext == null)
+ throw new ArgeoException("No application context found for "
+ + bundleSymbolicName);
// retrieve the command via its id
String beanName = event.getCommand().getId();
final Repository repository = getRepositoryBlocking();
systemExecutor.execute(new Runnable() {
public void run() {
+ Session session = null;
try {
- Session session = repository.login(workspace);
+ session = repository.login(workspace);
// WARNING: at this stage we assume that teh java properties
// will have the same value
String userName = System.getProperty("user.name");
if (userHome == null)
userHome = JcrUtils.createUserHome(session,
homeBasePath, userName);
- //authen.setDetails(getUserDetails(userHome, authen));
+ // authen.setDetails(getUserDetails(userHome, authen));
} catch (RepositoryException e) {
throw new ArgeoException(
"Unexpected exception when synchronizing OS and JCR security ",
e);
+ } finally {
+ JcrUtils.logoutQuietly(session);
}
}
});
org.argeo.eclipse.ui.jcr.editors,
org.argeo.eclipse.ui.jcr.views,
org.argeo.jcr
+Export-Package: org.argeo.eclipse.ui.jcr.explorer
id="org.argeo.jcr.ui.explorer.openGenericJcrQueryEditor"
name="New generic JCR query">
</command>
- <command
- defaultHandler="org.argeo.eclipse.spring.SpringCommandHandler"
- id="org.argeo.jcr.ui.explorer.addFileFolder"
- name="Add file folder...">
- </command>
- <command
- defaultHandler="org.argeo.eclipse.spring.SpringCommandHandler"
- id="org.argeo.jcr.ui.explorer.refresh"
- name="Refresh">
- </command>
- <command
- defaultHandler="org.argeo.eclipse.spring.SpringCommandHandler"
- id="org.argeo.jcr.ui.explorer.deleteNode"
- name="Delete node">
- </command>
- <command
- defaultHandler="org.argeo.eclipse.spring.SpringCommandHandler"
- id="org.argeo.jcr.ui.explorer.importFileSystem"
- name="Import files...">
- </command>
- <command
- defaultHandler="org.argeo.eclipse.spring.SpringCommandHandler"
- id="org.argeo.jcr.ui.explorer.openFile"
- name="Open current file">
- </command>
+ <command
+ defaultHandler="org.argeo.eclipse.spring.SpringCommandHandler"
+ id="org.argeo.jcr.ui.explorer.addFileFolder"
+ icon="icons/add.gif"
+ name="Add file folder...">
+ </command>
+ <command
+ defaultHandler="org.argeo.eclipse.spring.SpringCommandHandler"
+ id="org.argeo.jcr.ui.explorer.refresh"
+ icon="icons/refresh.png"
+ name="Refresh">
+ </command>
+ <command
+ defaultHandler="org.argeo.eclipse.spring.SpringCommandHandler"
+ id="org.argeo.jcr.ui.explorer.deleteNode"
+ name="Delete node">
+ </command>
+ <command
+ defaultHandler="org.argeo.eclipse.spring.SpringCommandHandler"
+ id="org.argeo.jcr.ui.explorer.importFileSystem"
+ name="Import files...">
+ </command>
+ <command
+ defaultHandler="org.argeo.eclipse.spring.SpringCommandHandler"
+ id="org.argeo.jcr.ui.explorer.openFile"
+ name="Open current file">
+ </command>
</extension>
<extension point="org.eclipse.ui.menus">
<menuContribution
--- /dev/null
+package org.argeo.eclipse.ui.jcr.explorer;
+
+import org.argeo.eclipse.ui.jcr.views.GenericJcrBrowser;
+
+public class JcrExplorerView extends GenericJcrBrowser {
+
+}