Code cleaning / documentation
authorMathieu Baudier <mbaudier@argeo.org>
Thu, 8 Sep 2011 12:16:23 +0000 (12:16 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Thu, 8 Sep 2011 12:16:23 +0000 (12:16 +0000)
Remote JCR

git-svn-id: https://svn.argeo.org/commons/trunk@4736 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

23 files changed:
demo/log4j.properties
eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/AddFileFolder.java
eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/DeleteNode.java
eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/editors/AbstractJcrQueryEditor.java
eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/views/AbstractJcrBrowser.java
eclipse/runtime/org.argeo.eclipse.ui/src/main/java/org/argeo/eclipse/ui/Error.java
eclipse/runtime/org.argeo.eclipse.ui/src/main/java/org/argeo/eclipse/ui/ErrorFeedback.java [new file with mode: 0644]
eclipse/runtime/org.argeo.eclipse.ui/src/main/java/org/argeo/eclipse/ui/dialogs/Error.java
eclipse/runtime/org.argeo.eclipse.ui/src/main/java/org/argeo/eclipse/ui/dialogs/SingleValue.java
security/plugins/org.argeo.security.ui/src/main/java/org/argeo/security/ui/dialogs/ChangePasswordDialog.java
server/plugins/org.argeo.jcr.ui.explorer/META-INF/MANIFEST.MF
server/plugins/org.argeo.jcr.ui.explorer/META-INF/spring/commands.xml
server/plugins/org.argeo.jcr.ui.explorer/META-INF/spring/osgi.xml
server/plugins/org.argeo.jcr.ui.explorer/plugin.xml
server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/JcrExplorerConstants.java
server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/browser/RepositoryNode.java
server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/browser/WorkspaceNode.java
server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/commands/AddRemoteRepository.java [new file with mode: 0644]
server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/commands/EditNode.java
server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/commands/ImportFileSystem.java
server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/commands/OpenGenericNodeEditor.java
server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/jackrabbit/JackrabbitRepositoryFactory.java
server/runtime/org.argeo.server.jcr/src/main/java/org/argeo/jcr/DefaultRepositoryRegister.java

index c4fba851e2ecd53f3e63b32376bf3aebe793becc..b81332d45c2aae318700f682ce75e7bcbb1d6f2b 100644 (file)
@@ -6,6 +6,7 @@ log4j.logger.org.argeo.jackrabbit.remote.ExtendedDispatcherServlet=WARN
 log4j.logger.org.argeo.server.webextender.TomcatDeployer=WARN
 
 log4j.logger.org.apache.catalina=INFO
+log4j.logger.org.apache.coyote=INFO
 log4j.logger.org.apache.directory.server=ERROR
 log4j.logger.org.apache.jackrabbit.core.query.lucene=ERROR
 
index 03062e6af41c512ec76ee4ae513225c06203834b..487c2f629119054a6f516f924c18084b653c8d43 100644 (file)
@@ -4,7 +4,7 @@ import javax.jcr.Node;
 import javax.jcr.RepositoryException;
 import javax.jcr.nodetype.NodeType;
 
-import org.argeo.eclipse.ui.dialogs.Error;
+import org.argeo.eclipse.ui.ErrorFeedback;
 import org.argeo.eclipse.ui.dialogs.SingleValue;
 import org.argeo.eclipse.ui.jcr.views.AbstractJcrBrowser;
 import org.eclipse.core.commands.AbstractHandler;
@@ -14,6 +14,7 @@ import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.ui.handlers.HandlerUtil;
 
+/** Adds a node of type nt:folder */
 public class AddFileFolder extends AbstractHandler {
 
        public Object execute(ExecutionEvent event) throws ExecutionException {
@@ -36,12 +37,12 @@ public class AddFileFolder extends AbstractHandler {
                                                view.nodeAdded(parentNode, newNode);
                                                parentNode.getSession().save();
                                        } catch (RepositoryException e) {
-                                               Error.show("Cannot create folder " + folderName
+                                               ErrorFeedback.show("Cannot create folder " + folderName
                                                                + " under " + parentNode, e);
                                        }
                                }
                        } else {
-                               Error.show("Can only add file folder to a node");
+                               ErrorFeedback.show("Can only add file folder to a node");
                        }
                }
                return null;
index f7a99415ff57f19f602316c838f2d70c7e06dbda..4141375ce9281ac1d8c37ae222fd2254aa19fdcb 100644 (file)
@@ -5,10 +5,8 @@ import java.util.Iterator;
 import javax.jcr.Node;
 import javax.jcr.RepositoryException;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
 import org.argeo.ArgeoException;
-import org.argeo.eclipse.ui.dialogs.Error;
+import org.argeo.eclipse.ui.ErrorFeedback;
 import org.argeo.eclipse.ui.jcr.views.AbstractJcrBrowser;
 import org.eclipse.core.commands.AbstractHandler;
 import org.eclipse.core.commands.ExecutionEvent;
@@ -19,8 +17,6 @@ import org.eclipse.ui.handlers.HandlerUtil;
 
 /** Deletes the selected nodes */
 public class DeleteNode extends AbstractHandler {
-       private final static Log log = LogFactory.getLog(DeleteNode.class);
-
        public Object execute(ExecutionEvent event) throws ExecutionException {
                ISelection selection = HandlerUtil.getActiveWorkbenchWindow(event)
                                .getActivePage().getSelection();
@@ -46,7 +42,7 @@ public class DeleteNode extends AbstractHandler {
                                if (ancestor != null)
                                        view.nodeRemoved(ancestor);
                        } catch (Exception e) {
-                               Error.show("Cannot delete node " + obj, e);
+                               ErrorFeedback.show("Cannot delete node " + obj, e);
                        }
                }
                return null;
index e395bcad9d0aabca1d85c168fc07123c387dd783..462386e7badd7fd5365ebc14bf0f809263de09d9 100644 (file)
@@ -235,7 +235,7 @@ public abstract class AbstractJcrQueryEditor extends EditorPart {
                public Object[] getElements(Object inputElement) {
 
                        if (inputElement instanceof List)
-                               return ((List) inputElement).toArray();
+                               return ((List<?>) inputElement).toArray();
 
                        // Never reached might be deleted in future release
                        if (!(inputElement instanceof QueryResult))
index 604151c6d9adceeee7348b44970f361b9e8dacd9..db19ab3428937920eea2371f7e8bbc1d0d76746c 100644 (file)
@@ -15,18 +15,18 @@ public abstract class AbstractJcrBrowser extends ViewPart {
        public abstract void createPartControl(Composite parent);
 
        /**
-        * To be overidden to adapt size of form and result frames.
+        * To be overridden to adapt size of form and result frames.
         */
        abstract protected int[] getWeights();
 
        /**
-        * To be overidden to provide an adapted size nodeViewer
+        * To be overridden to provide an adapted size nodeViewer
         */
        abstract protected TreeViewer createNodeViewer(Composite parent,
                        ITreeContentProvider nodeContentProvider);
 
        /**
-        * To be overidden to retrieve the current nodeViewer
+        * To be overridden to retrieve the current nodeViewer
         */
        abstract protected TreeViewer getNodeViewer();
 
index 04971d15545da6dd1393677df94da8597a3a2fc3..0022f17d2c62f45a95dd7404ddcf767d031bbc12 100644 (file)
 package org.argeo.eclipse.ui;
 
-import java.io.PrintWriter;
-import java.io.StringWriter;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.eclipse.jface.dialogs.IMessageProvider;
-import org.eclipse.jface.dialogs.TitleAreaDialog;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Text;
-import org.eclipse.ui.PlatformUI;
-
-/** Generic error dialog to be used in try/catch blocks */
-public class Error extends TitleAreaDialog {
-       private final static Log log = LogFactory.getLog(Error.class);
 
-       private final String message;
-       private final Throwable exception;
-
-       public static void show(String message, Throwable e) {
-               // rethrow ThreaDeath in order to make sure that RAP will properly clean
-               // up the UI thread
-               if (e instanceof ThreadDeath)
-                       throw (ThreadDeath) e;
-               
-               new Error(getDisplay().getActiveShell(), message, e).open();
-       }
-
-       public static void show(String message) {
-               new Error(getDisplay().getActiveShell(), message, null).open();
-       }
-
-       /** Tries to find a display */
-       private static Display getDisplay() {
-               try {
-                       Display display = PlatformUI.getWorkbench().getDisplay();
-                       if (display != null)
-                               return display;
-                       else
-                               return Display.getDefault();
-               } catch (Exception e) {
-                       return Display.getCurrent();
-               }
-       }
+/**
+ * @deprecated deprecated because of poor naming, use {@link ErrorFeedback}
+ *             instead
+ */
+@Deprecated
+public class Error extends ErrorFeedback {
 
        public Error(Shell parentShell, String message, Throwable e) {
-               super(parentShell);
-               this.message = message;
-               this.exception = e;
-               log.error(message, e);
-       }
-
-       protected Point getInitialSize() {
-               if (exception != null)
-                       return new Point(800, 600);
-               else
-                       return new Point(400, 300);
-       }
-
-       @Override
-       protected Control createDialogArea(Composite parent) {
-               Composite dialogarea = (Composite) super.createDialogArea(parent);
-               dialogarea.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
-               Composite composite = new Composite(dialogarea, SWT.NONE);
-               composite.setLayout(new GridLayout(2, false));
-               composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
-
-               setMessage(message != null ? message
-                               + (exception != null ? ": " + exception.getMessage() : "")
-                               : exception != null ? exception.getMessage() : "Unkown Error",
-                               IMessageProvider.ERROR);
-
-               if (exception != null) {
-                       Text stack = new Text(composite, SWT.MULTI | SWT.LEAD | SWT.BORDER
-                                       | SWT.V_SCROLL | SWT.H_SCROLL);
-                       stack.setEditable(false);
-                       stack.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
-                       StringWriter sw = new StringWriter();
-                       exception.printStackTrace(new PrintWriter(sw));
-                       stack.setText(sw.toString());
-               }
-
-               parent.pack();
-               return composite;
-       }
-
-       protected void configureShell(Shell shell) {
-               super.configureShell(shell);
-               shell.setText("Error");
+               super(parentShell, message, e);
+               // TODO Auto-generated constructor stub
        }
 
 }
diff --git a/eclipse/runtime/org.argeo.eclipse.ui/src/main/java/org/argeo/eclipse/ui/ErrorFeedback.java b/eclipse/runtime/org.argeo.eclipse.ui/src/main/java/org/argeo/eclipse/ui/ErrorFeedback.java
new file mode 100644 (file)
index 0000000..bdbf642
--- /dev/null
@@ -0,0 +1,100 @@
+package org.argeo.eclipse.ui;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.eclipse.jface.dialogs.IMessageProvider;
+import org.eclipse.jface.dialogs.TitleAreaDialog;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.PlatformUI;
+
+/** Generic error dialog to be used in try/catch blocks */
+public class ErrorFeedback extends TitleAreaDialog {
+       private final static Log log = LogFactory.getLog(ErrorFeedback.class);
+
+       private final String message;
+       private final Throwable exception;
+
+       public static void show(String message, Throwable e) {
+               // rethrow ThreaDeath in order to make sure that RAP will properly clean
+               // up the UI thread
+               if (e instanceof ThreadDeath)
+                       throw (ThreadDeath) e;
+               
+               new ErrorFeedback(getDisplay().getActiveShell(), message, e).open();
+       }
+
+       public static void show(String message) {
+               new ErrorFeedback(getDisplay().getActiveShell(), message, null).open();
+       }
+
+       /** Tries to find a display */
+       private static Display getDisplay() {
+               try {
+                       Display display = PlatformUI.getWorkbench().getDisplay();
+                       if (display != null)
+                               return display;
+                       else
+                               return Display.getDefault();
+               } catch (Exception e) {
+                       return Display.getCurrent();
+               }
+       }
+
+       public ErrorFeedback(Shell parentShell, String message, Throwable e) {
+               super(parentShell);
+               this.message = message;
+               this.exception = e;
+               log.error(message, e);
+       }
+
+       protected Point getInitialSize() {
+               if (exception != null)
+                       return new Point(800, 600);
+               else
+                       return new Point(400, 300);
+       }
+
+       @Override
+       protected Control createDialogArea(Composite parent) {
+               Composite dialogarea = (Composite) super.createDialogArea(parent);
+               dialogarea.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+               Composite composite = new Composite(dialogarea, SWT.NONE);
+               composite.setLayout(new GridLayout(2, false));
+               composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+
+               setMessage(message != null ? message
+                               + (exception != null ? ": " + exception.getMessage() : "")
+                               : exception != null ? exception.getMessage() : "Unkown Error",
+                               IMessageProvider.ERROR);
+
+               if (exception != null) {
+                       Text stack = new Text(composite, SWT.MULTI | SWT.LEAD | SWT.BORDER
+                                       | SWT.V_SCROLL | SWT.H_SCROLL);
+                       stack.setEditable(false);
+                       stack.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+                       StringWriter sw = new StringWriter();
+                       exception.printStackTrace(new PrintWriter(sw));
+                       stack.setText(sw.toString());
+               }
+
+               parent.pack();
+               return composite;
+       }
+
+       protected void configureShell(Shell shell) {
+               super.configureShell(shell);
+               shell.setText("Error");
+       }
+
+}
index 75a4318b7ef7631c83916f6ce8a83d7b1c9745e4..52a351f839266871ec9887ad5b7a459ac7f07bcc 100644 (file)
@@ -5,9 +5,9 @@ import org.eclipse.swt.widgets.Shell;
 /**
  * Generic error dialog to be used in try/catch blocks
  * 
- * @deprecated use {@link org.argeo.eclipse.ui.Error} instead.
+ * @deprecated use {@link org.argeo.eclipse.ui.ErrorFeedback} instead.
  */
-public class Error extends org.argeo.eclipse.ui.Error {
+public class Error extends org.argeo.eclipse.ui.ErrorFeedback {
        public Error(Shell parentShell, String message, Throwable e) {
                super(parentShell, message, e);
        }
index c15a76736528b0fdd849b892071923e05e3507c1..4b5068ca27ce8723d4fac3e3486959d5273d3269 100644 (file)
@@ -72,6 +72,7 @@ public class SingleValue extends TitleAreaDialog {
                valueT = createLT(composite, label);
 
                setMessage(message, IMessageProvider.NONE);
+
                parent.pack();
                return composite;
        }
index 9544698d5c08cd17199be972a60ba6e332f074ab..943a00e30d0e54d61d56a92a12e465fc683e5343 100644 (file)
@@ -1,7 +1,7 @@
 package org.argeo.security.ui.dialogs;
 
 import org.argeo.ArgeoException;
-import org.argeo.eclipse.ui.Error;
+import org.argeo.eclipse.ui.ErrorFeedback;
 import org.eclipse.jface.dialogs.IMessageProvider;
 import org.eclipse.jface.dialogs.TitleAreaDialog;
 import org.eclipse.swt.SWT;
@@ -54,7 +54,7 @@ public class ChangePasswordDialog extends TitleAreaDialog {
                                        newPassword1.getText());
                        close();
                } catch (Exception e) {
-                       Error.show("Cannot change password", e);
+                       ErrorFeedback.show("Cannot change password", e);
                }
        }
 
index 869e0a2aa7e151dc7f3d0f9fb54b7a7d9b46abf3..e67562c113e0c60e406f51efea139f300aaf3785 100644 (file)
@@ -20,6 +20,7 @@ Import-Package: javax.jcr,
  org.argeo,
  org.argeo.eclipse.spring,
  org.argeo.eclipse.ui,
+ org.argeo.eclipse.ui.dialogs,
  org.argeo.eclipse.ui.jcr,
  org.argeo.eclipse.ui.jcr.commands,
  org.argeo.eclipse.ui.jcr.editors,
index 16f4adfa6ace06a5b6228f887c236bb0b1ff7cb4..0a6e9b68d7bb23bcd248613985bbe6430e7c2f39 100644 (file)
                scope="prototype">
        </bean>
 
+       <bean id="addRemoteRepository"
+               class="org.argeo.jcr.ui.explorer.commands.AddRemoteRepository">
+               <property name="repositoryFactory" ref="repositoryFactory"/>
+               <property name="bundleContext" ref="bundleContext"/>
+       </bean>
+
        <bean id="addFileFolder" class="org.argeo.eclipse.ui.jcr.commands.AddFileFolder"
                scope="prototype" />
 
index 0d0e37ec053134210cf21bf78044fba05bfead16..0aa6ff3a3b401c69108c2ff60a3a48e6e61572d2 100644 (file)
@@ -8,8 +8,12 @@
        http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"\r
        osgi:default-timeout="30000">\r
 \r
-       <set id="repositories" interface="javax.jcr.Repository" cardinality="0..N">\r
+       <set id="repositories" interface="javax.jcr.Repository"\r
+               cardinality="0..N">\r
                <listener ref="repositoryRegister" bind-method="register"\r
                        unbind-method="unregister" />\r
        </set>\r
+\r
+       <reference id="repositoryFactory" interface="javax.jcr.RepositoryFactory" />\r
+\r
 </beans:beans>
\ No newline at end of file
index 933aad083ebf7951a75bcdaf3626a7fa4bed1adc..8521924ae009e2d0d24e28b9d97ddb2f34b7e3d1 100644 (file)
                                name="Node path">
                        </commandParameter>
                </command>    
+       <command
+                       defaultHandler="org.argeo.eclipse.spring.SpringCommandHandler"
+                       id="org.argeo.jcr.ui.explorer.addRemoteRepository"
+                       name="Add remote JCR repository">
+                       <commandParameter
+                               id="org.argeo.jcr.ui.explorer.repositoryUri"
+                               name="Repository URI">
+                       </commandParameter>
+               </command>    
          <command
                defaultHandler="org.argeo.eclipse.spring.SpringCommandHandler"
                id="org.argeo.jcr.ui.explorer.addFileFolder"
                       style="push">
                 </command>
           </menuContribution>
+               <menuContribution
+                locationURI="menu:org.argeo.jcr.ui.explorer.browserView">
+                <command
+                      commandId="org.argeo.jcr.ui.explorer.addRemoteRepository"
+                      icon="icons/add.gif"
+                      style="push">
+                </command>
+          </menuContribution>
   <menuContribution
         locationURI="popup:org.argeo.jcr.ui.explorer.browserView">
      <command
index a410fcaec97ca6bae80140f926e57d2a01cc7f3c..c526d4564c1cb32ce0a4afeb29c66dd4fb524a3f 100644 (file)
@@ -2,10 +2,13 @@ package org.argeo.jcr.ui.explorer;
 
 /** Constants used across the application. */
 public interface JcrExplorerConstants {
+       public final static String PARAM_REPOSITORY_URI = "org.argeo.jcr.ui.explorer.repositoryUri";
 
        /*
         * MISCEALLENEOUS
         */
        public final static String DATE_TIME_FORMAT = "dd/MM/yyyy, HH:mm";
 
+       public final static String PARAM_PATH = "org.argeo.jcr.ui.explorer.nodePath";
+
 }
index a09661e37a04b09a35d494b87edb8f42383c47be..582e2185585896ce9ff81eecee73d7ad8a3bd199 100644 (file)
@@ -3,6 +3,7 @@ package org.argeo.jcr.ui.explorer.browser;
 import javax.jcr.Repository;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
+import javax.jcr.SimpleCredentials;
 
 import org.argeo.ArgeoException;
 import org.argeo.eclipse.ui.TreeParent;
@@ -14,10 +15,10 @@ public class RepositoryNode extends TreeParent {
        private final Repository repository;
        private Session defaultSession = null;
        public final static Image REPOSITORY_DISCONNECTED = JcrUiPlugin
-       .getImageDescriptor("icons/repository_disconnected.gif")
-       .createImage();
+                       .getImageDescriptor("icons/repository_disconnected.gif")
+                       .createImage();
        public final static Image REPOSITORY_CONNECTED = JcrUiPlugin
-       .getImageDescriptor("icons/repository_connected.gif").createImage();
+                       .getImageDescriptor("icons/repository_connected.gif").createImage();
 
        public RepositoryNode(String name, Repository repository) {
                super(name);
@@ -27,6 +28,9 @@ public class RepositoryNode extends TreeParent {
 
        public void login() {
                try {
+//                     SimpleCredentials sc = new SimpleCredentials("root",
+//                                     "demo".toCharArray());
+//                     defaultSession = repository.login(sc);
                        defaultSession = repository.login();
                        String[] wkpNames = defaultSession.getWorkspace()
                                        .getAccessibleWorkspaceNames();
index 6c8b7dbfefd0ffc3001739c90e7c5178d6faeef0..4bff1674f82e291ee94d924118c0d0865a93c9ad 100644 (file)
@@ -1,8 +1,10 @@
 package org.argeo.jcr.ui.explorer.browser;
 
+import javax.jcr.Node;
 import javax.jcr.Repository;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
+import javax.jcr.Workspace;
 import javax.jcr.observation.EventIterator;
 import javax.jcr.observation.EventListener;
 
@@ -11,18 +13,22 @@ import org.argeo.eclipse.ui.TreeParent;
 import org.argeo.eclipse.ui.jcr.JcrUiPlugin;
 import org.eclipse.swt.graphics.Image;
 
+/**
+ * Wraps a JCR {@link Workspace}, or more precisely a {@link Session} to it.
+ * Implicitly also the root node of this session.
+ */
 public class WorkspaceNode extends TreeParent implements EventListener {
        private final String name;
        private final Repository repository;
        private Session session = null;
        public final static Image WORKSPACE_DISCONNECTED = JcrUiPlugin
-       .getImageDescriptor("icons/workspace_disconnected.png")
-       .createImage();
+                       .getImageDescriptor("icons/workspace_disconnected.png")
+                       .createImage();
        public final static Image WORKSPACE_CONNECTED = JcrUiPlugin
-       .getImageDescriptor("icons/workspace_connected.png").createImage();
+                       .getImageDescriptor("icons/workspace_connected.png").createImage();
 
        public WorkspaceNode(Repository repository, String name) {
-               this(repository, name, null); 
+               this(repository, name, null);
        }
 
        public WorkspaceNode(Repository repository, String name, Session session) {
@@ -38,6 +44,18 @@ public class WorkspaceNode extends TreeParent implements EventListener {
                return session;
        }
 
+       public Node getRootNode() {
+               try {
+                       if (session != null)
+                               return session.getRootNode();
+                       else
+                               return null;
+               } catch (RepositoryException e) {
+                       throw new ArgeoException("Cannot get root node of workspace "
+                                       + name, e);
+               }
+       }
+
        public void login() {
                try {
                        logout();
diff --git a/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/commands/AddRemoteRepository.java b/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/commands/AddRemoteRepository.java
new file mode 100644 (file)
index 0000000..4e604e8
--- /dev/null
@@ -0,0 +1,65 @@
+package org.argeo.jcr.ui.explorer.commands;
+
+import java.util.Hashtable;
+import java.util.Map;
+
+import javax.jcr.Repository;
+import javax.jcr.RepositoryFactory;
+
+import org.argeo.eclipse.ui.ErrorFeedback;
+import org.argeo.eclipse.ui.dialogs.SingleValue;
+import org.argeo.jcr.ArgeoJcrConstants;
+import org.argeo.jcr.ui.explorer.JcrExplorerConstants;
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.jface.dialogs.TitleAreaDialog;
+import org.eclipse.swt.widgets.Shell;
+import org.osgi.framework.BundleContext;
+
+/**
+ * Connect to a remote repository and, if usccessful publish it as an OSGi
+ * service.
+ */
+public class AddRemoteRepository extends AbstractHandler implements
+               JcrExplorerConstants {
+
+       private RepositoryFactory repositoryFactory;
+       private BundleContext bundleContext;
+
+       public Object execute(ExecutionEvent event) throws ExecutionException {
+               String uri;
+               if (event.getParameters().containsKey(PARAM_REPOSITORY_URI))
+                       uri = event.getParameter(PARAM_REPOSITORY_URI);
+               else
+                       uri = SingleValue
+                                       .ask("URI",
+                                                       "Remote repository URI"
+                                                                       + " (e.g. http://localhost:7070/org.argeo.jcr.webapp/remoting/node)");
+
+               if (uri == null)
+                       return null;
+
+               try {
+                       Hashtable<String, String> params = new Hashtable<String, String>();
+                       params.put(ArgeoJcrConstants.JCR_REPOSITORY_URI, uri);
+                       // by default we use the URI as alias
+                       params.put(ArgeoJcrConstants.JCR_REPOSITORY_ALIAS, uri);
+                       Repository repository = repositoryFactory.getRepository(params);
+                       bundleContext.registerService(Repository.class.getName(),
+                                       repository, params);
+               } catch (Exception e) {
+                       ErrorFeedback.show("Cannot add remote repository " + uri, e);
+               }
+               return null;
+       }
+
+       public void setRepositoryFactory(RepositoryFactory repositoryFactory) {
+               this.repositoryFactory = repositoryFactory;
+       }
+
+       public void setBundleContext(BundleContext bundleContext) {
+               this.bundleContext = bundleContext;
+       }
+
+}
index 16bb1b36d05d9f25327c972e420023f841db2346..2f82dc2b49a4ae2093862c5648cb48481be7c588 100644 (file)
@@ -6,7 +6,7 @@ import java.util.Map;
 import javax.jcr.Property;
 import javax.jcr.nodetype.NodeType;
 
-import org.argeo.eclipse.ui.dialogs.Error;
+import org.argeo.eclipse.ui.ErrorFeedback;
 import org.argeo.eclipse.ui.jcr.editors.NodeEditorInput;
 import org.eclipse.core.commands.AbstractHandler;
 import org.eclipse.core.commands.ExecutionEvent;
@@ -40,7 +40,7 @@ public class EditNode extends AbstractHandler {
                        HandlerUtil.getActiveWorkbenchWindow(event).getActivePage()
                                        .openEditor(nei, editorId);
                } catch (PartInitException e) {
-                       Error.show("Cannot open " + editorId + " with " + path
+                       ErrorFeedback.show("Cannot open " + editorId + " with " + path
                                        + " of type " + type, e);
                }
                // TODO Auto-generated method stub
index 12880bad0de4d51e9b92c14c8280d349aa86af2a..e52694a1ca738736dc4b73404c0efd4a6d3d1ee5 100644 (file)
@@ -2,9 +2,7 @@ package org.argeo.jcr.ui.explorer.commands;
 
 import javax.jcr.Node;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.argeo.eclipse.ui.dialogs.Error;
+import org.argeo.eclipse.ui.ErrorFeedback;
 import org.argeo.eclipse.ui.jcr.views.AbstractJcrBrowser;
 import org.argeo.jcr.ui.explorer.wizards.ImportFileSystemWizard;
 import org.eclipse.core.commands.AbstractHandler;
@@ -15,9 +13,8 @@ import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.wizard.WizardDialog;
 import org.eclipse.ui.handlers.HandlerUtil;
 
+/** Import a local file system directory tree. */
 public class ImportFileSystem extends AbstractHandler {
-       private static Log log = LogFactory.getLog(ImportFileSystem.class);
-
        public Object execute(ExecutionEvent event) throws ExecutionException {
                ISelection selection = HandlerUtil.getActiveWorkbenchWindow(event)
                                .getActivePage().getSelection();
@@ -30,11 +27,6 @@ public class ImportFileSystem extends AbstractHandler {
                        try {
                                if (obj instanceof Node) {
                                        Node folder = (Node) obj;
-                                       // if (!folder.getPrimaryNodeType().getName()
-                                       // .equals(NodeType.NT_FOLDER)) {
-                                       // Error.show("Can only import to a folder node");
-                                       // return null;
-                                       // }
                                        ImportFileSystemWizard wizard = new ImportFileSystemWizard(
                                                        folder);
                                        WizardDialog dialog = new WizardDialog(
@@ -42,10 +34,10 @@ public class ImportFileSystem extends AbstractHandler {
                                        dialog.open();
                                        view.refresh(folder);
                                } else {
-                                       Error.show("Can only import to a node");
+                                       ErrorFeedback.show("Can only import to a node");
                                }
                        } catch (Exception e) {
-                               Error.show("Cannot import files to " + obj, e);
+                               ErrorFeedback.show("Cannot import files to " + obj, e);
                        }
                }
                return null;
index 63d53fa3f800c78904f88890149b50cd5651a216..076e207c607710bf67b0cc90afda6d87c45f2f2f 100644 (file)
@@ -1,23 +1,20 @@
 package org.argeo.jcr.ui.explorer.commands;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
 import org.argeo.ArgeoException;
 import org.argeo.eclipse.ui.jcr.editors.NodeEditorInput;
+import org.argeo.jcr.ui.explorer.JcrExplorerConstants;
 import org.argeo.jcr.ui.explorer.editors.GenericNodeEditor;
 import org.eclipse.core.commands.AbstractHandler;
 import org.eclipse.core.commands.ExecutionEvent;
 import org.eclipse.core.commands.ExecutionException;
 import org.eclipse.ui.handlers.HandlerUtil;
 
+/** Opens the generic node editor. */
 public class OpenGenericNodeEditor extends AbstractHandler {
-       private final static Log log = LogFactory
-                       .getLog(OpenGenericNodeEditor.class);
        public final static String ID = "org.argeo.jcr.ui.explorer.openGenericNodeEditor";
-       public final static String PARAM_PATH = "org.argeo.jcr.ui.explorer.nodePath";
 
        public Object execute(ExecutionEvent event) throws ExecutionException {
-               String path = event.getParameter(PARAM_PATH);
+               String path = event.getParameter(JcrExplorerConstants.PARAM_PATH);
                try {
                        NodeEditorInput nei = new NodeEditorInput(path);
                        HandlerUtil.getActiveWorkbenchWindow(event).getActivePage()
index 9f2926cb34d635d35e33215d6c811e70d80007d8..bcf02a3c1e564896a9dffb7b6b73ceabcdb2577b 100644 (file)
@@ -26,21 +26,23 @@ public class JackrabbitRepositoryFactory extends DefaultRepositoryFactory
                if (repository != null)
                        return repository;
 
-               if (parameters.containsKey(JCR_REPOSITORY_URI)) {
-                       String uri = parameters.get(JCR_REPOSITORY_URI).toString();
-                       Map<String, String> params = new HashMap<String, String>();
-                       
-                       params.put(JcrUtils.REPOSITORY_URI, uri);
-                       repository = new Jcr2davRepositoryFactory().getRepository(params);
-                       if (repository == null)
-                               throw new ArgeoException("Remote Davex repository " + uri
-                                               + " not found");
-                       log.info("Initialized remote Jackrabbit repository " + repository
-                                       + " from uri " + uri);
-
-               }
+               String uri;
+               if (parameters.containsKey(JCR_REPOSITORY_URI))
+                       uri = parameters.get(JCR_REPOSITORY_URI).toString();
+               else if (parameters.containsKey(JcrUtils.REPOSITORY_URI))
+                       uri = parameters.get(JcrUtils.REPOSITORY_URI).toString();
+               else
+                       return null;
+               
+               Map<String, String> params = new HashMap<String, String>();
+               params.put(JcrUtils.REPOSITORY_URI, uri);
+               repository = new Jcr2davRepositoryFactory().getRepository(params);
+               if (repository == null)
+                       throw new ArgeoException("Remote Davex repository " + uri
+                                       + " not found");
+               log.info("Initialized remote Jackrabbit repository " + repository
+                               + " from uri " + uri);
 
                return repository;
        }
-
 }
index a39ab8751af77e6bfb819b2dfccbfb4ea4f498f9..bbe0f93cc875c7ccc32bf97a91c8623ffd7d6961 100644 (file)
@@ -12,7 +12,7 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
 public class DefaultRepositoryRegister extends Observable implements
-               RepositoryRegister {
+               RepositoryRegister, ArgeoJcrConstants {
        private final static Log log = LogFactory
                        .getLog(DefaultRepositoryRegister.class);
 
@@ -23,10 +23,10 @@ public class DefaultRepositoryRegister extends Observable implements
        @SuppressWarnings("rawtypes")
        public synchronized Repository getRepository(Map parameters)
                        throws RepositoryException {
-               if (!parameters.containsKey(ArgeoJcrConstants.JCR_REPOSITORY_ALIAS))
-                       throw new RepositoryException("Parameter " + ArgeoJcrConstants.JCR_REPOSITORY_ALIAS
+               if (!parameters.containsKey(JCR_REPOSITORY_ALIAS))
+                       throw new RepositoryException("Parameter " + JCR_REPOSITORY_ALIAS
                                        + " has to be defined.");
-               String alias = parameters.get(ArgeoJcrConstants.JCR_REPOSITORY_ALIAS).toString();
+               String alias = parameters.get(JCR_REPOSITORY_ALIAS).toString();
                if (!repositories.containsKey(alias))
                        throw new RepositoryException(
                                        "No repository registered with alias " + alias);
@@ -43,13 +43,13 @@ public class DefaultRepositoryRegister extends Observable implements
        @SuppressWarnings("rawtypes")
        public synchronized void register(Repository repository, Map properties) {
                // TODO: also check bean name?
-               if (properties == null || !properties.containsKey(ArgeoJcrConstants.JCR_REPOSITORY_ALIAS)) {
-                       log.warn("Cannot register a repository without property "
-                                       + ArgeoJcrConstants.JCR_REPOSITORY_ALIAS);
+               String alias;
+               if (properties == null || !properties.containsKey(JCR_REPOSITORY_ALIAS)) {
+                       log.warn("Cannot register a repository if no "
+                                       + JCR_REPOSITORY_ALIAS + " property is speecified.");
                        return;
                }
-
-               String alias = properties.get(ArgeoJcrConstants.JCR_REPOSITORY_ALIAS).toString();
+               alias = properties.get(JCR_REPOSITORY_ALIAS).toString();
                Map<String, Repository> map = new TreeMap<String, Repository>(
                                repositories);
                map.put(alias, repository);
@@ -62,13 +62,13 @@ public class DefaultRepositoryRegister extends Observable implements
        @SuppressWarnings("rawtypes")
        public synchronized void unregister(Repository repository, Map properties) {
                // TODO: also check bean name?
-               if (properties == null || !properties.containsKey(ArgeoJcrConstants.JCR_REPOSITORY_ALIAS)) {
+               if (properties == null || !properties.containsKey(JCR_REPOSITORY_ALIAS)) {
                        log.warn("Cannot unregister a repository without property "
-                                       + ArgeoJcrConstants.JCR_REPOSITORY_ALIAS);
+                                       + JCR_REPOSITORY_ALIAS);
                        return;
                }
 
-               String alias = properties.get(ArgeoJcrConstants.JCR_REPOSITORY_ALIAS).toString();
+               String alias = properties.get(JCR_REPOSITORY_ALIAS).toString();
                Map<String, Repository> map = new TreeMap<String, Repository>(
                                repositories);
                map.put(alias, repository);