X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=plugins%2Forg.argeo.slc.client.ui.dist%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fclient%2Fui%2Fdist%2Fcommands%2FCreateWorkspace.java;h=73de37384931bd754bd5632b06e414ca878733a2;hb=bca1c6afbc73093b9dacb47b4dfd304d4d1b32cb;hp=09694af5e12ecbe72a4aa2e3aa0799c21b467383;hpb=0d236262a853a1286b317c30d64d4692bc21c7a4;p=gpl%2Fargeo-slc.git diff --git a/plugins/org.argeo.slc.client.ui.dist/src/main/java/org/argeo/slc/client/ui/dist/commands/CreateWorkspace.java b/plugins/org.argeo.slc.client.ui.dist/src/main/java/org/argeo/slc/client/ui/dist/commands/CreateWorkspace.java index 09694af5e..73de37384 100644 --- a/plugins/org.argeo.slc.client.ui.dist/src/main/java/org/argeo/slc/client/ui/dist/commands/CreateWorkspace.java +++ b/plugins/org.argeo.slc.client.ui.dist/src/main/java/org/argeo/slc/client/ui/dist/commands/CreateWorkspace.java @@ -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);