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;
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;
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
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);