]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - plugins/org.argeo.slc.client.ui.dist/src/main/java/org/argeo/slc/client/ui/dist/commands/CreateWorkspace.java
Fix some glitches in the normalization
[gpl/argeo-slc.git] / plugins / org.argeo.slc.client.ui.dist / src / main / java / org / argeo / slc / client / ui / dist / commands / CreateWorkspace.java
index 09694af5e12ecbe72a4aa2e3aa0799c21b467383..73de37384931bd754bd5632b06e414ca878733a2 100644 (file)
@@ -25,8 +25,9 @@ import javax.jcr.security.Privilege;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.argeo.ArgeoException;
+import org.argeo.eclipse.ui.ErrorFeedback;
 import org.argeo.jcr.JcrUtils;
+import org.argeo.slc.SlcConstants;
 import org.argeo.slc.client.ui.dist.DistPlugin;
 import org.argeo.slc.client.ui.dist.utils.CommandHelpers;
 import org.argeo.slc.repo.RepoUtils;
@@ -36,21 +37,24 @@ import org.eclipse.core.commands.ExecutionEvent;
 import org.eclipse.core.commands.ExecutionException;
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.dialogs.InputDialog;
+import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.ui.handlers.HandlerUtil;
 
 /**
- * Create a new empty workspace in the current repository.
+ * Create a new empty workspace in a remote repository.
  */
-
 public class CreateWorkspace extends AbstractHandler {
        private static final Log log = LogFactory.getLog(CreateWorkspace.class);
+
+       // Exposes commands meta-info
        public final static String ID = DistPlugin.ID + ".createWorkspace";
-       public final static String PARAM_TARGET_REPO_PATH = "targetRepoPath";
-       public final static String PARAM_WORKSPACE_PREFIX = "workspacePrefix";
        public final static String DEFAULT_LABEL = "Create workspace...";
-       public final static String DEFAULT_ICON_PATH = "icons/addItem.gif";
+       public final static ImageDescriptor DEFAULT_ICON = DistPlugin
+                       .getImageDescriptor("icons/addItem.gif");
 
-       private String slcRole = "ROLE_SLC";
+       // Parameters
+       public final static String PARAM_TARGET_REPO_PATH = "targetRepoPath";
+       public final static String PARAM_WORKSPACE_PREFIX = "workspacePrefix";
 
        // DEPENDENCY INJECTION
        private RepositoryFactory repositoryFactory;
@@ -80,7 +84,30 @@ public class CreateWorkspace extends AbstractHandler {
                                        prefix == null ? "" : prefix + "-", null);
                        int result = inputDialog.open();
 
-                       String workspaceName = inputDialog.getValue();
+                       String enteredName = inputDialog.getValue();
+
+                       final String legalChars = "ABCDEFGHIJKLMNOPQRSTUVWXZY0123456789_";
+                       char[] arr = enteredName.toUpperCase().toCharArray();
+                       int count = 0;
+                       for (int i = 0; i < arr.length; i++) {
+                               if (legalChars.indexOf(arr[i]) == -1)
+                                       count = count + 7;
+                               else
+                                       count++;
+                       }
+
+                       if (log.isTraceEnabled())
+                               log.trace("Translated workspace name length: " + count
+                                               + " (name: " + enteredName + " )");
+
+                       if (count > 60) {
+                               ErrorFeedback.show("Workspace name '" + enteredName
+                                               + "' is too long or contains"
+                                               + " too many special characters such as '.' or '-'.");
+                               return null;
+                       }
+
+                       String workspaceName = enteredName;
 
                        // Canceled by user
                        if (result == Dialog.CANCEL || workspaceName == null
@@ -92,13 +119,14 @@ public class CreateWorkspace extends AbstractHandler {
                        JcrUtils.logoutQuietly(session);
                        // init new workspace
                        session = repository.login(credentials, workspaceName);
-                       JcrUtils.addPrivilege(session, "/", slcRole, Privilege.JCR_ALL);
+                       JcrUtils.addPrivilege(session, "/", SlcConstants.ROLE_SLC,
+                                       Privilege.JCR_ALL);
                        CommandHelpers.callCommand(RefreshDistributionsView.ID);
                        if (log.isTraceEnabled())
                                log.trace("WORKSPACE " + workspaceName + " CREATED");
 
                } catch (RepositoryException re) {
-                       throw new ArgeoException(
+                       ErrorFeedback.show(
                                        "Unexpected error while creating the new workspace.", re);
                } finally {
                        JcrUtils.logoutQuietly(session);