Prevent creation of project with spaces in their name

Gerrit allows spaces in project names but this is not well supported.
Some part of the code is not working with spaces, e.g. reindex-if-stale
task is always failing.

Even if would support project with spaces perfectly, we still want to
forbid creating project with spaces for various reasons:

-Confusion: project starting with a space will not be kept by Git in the
cloned folder name.
-On server side git folder, admins need to deal with spaces, especially
in scripts.
-...
Change-Id: Ia55617781fc1cd6a1a0a6b35533b75b4a264c4f5
diff --git a/src/main/java/com/ericsson/gerrit/plugins/projectgroupstructure/ProjectCreationValidator.java b/src/main/java/com/ericsson/gerrit/plugins/projectgroupstructure/ProjectCreationValidator.java
index 409d9be..b7923bc 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/projectgroupstructure/ProjectCreationValidator.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/projectgroupstructure/ProjectCreationValidator.java
@@ -60,6 +60,9 @@
       "You must be owner of the parent project \"%s\" to create a nested project."
           + SEE_DOCUMENTATION_MSG;
 
+  private static final String PROJECT_CANNOT_CONTAINS_SPACES_MSG =
+      "Project name cannot contains spaces." + SEE_DOCUMENTATION_MSG;
+
   private static final String ROOT_PROJECT_CANNOT_CONTAINS_SLASHES_MSG =
       "Root project name cannot contains slashes." + SEE_DOCUMENTATION_MSG;
 
@@ -107,6 +110,11 @@
       throws ValidationException {
     String name = args.getProjectName();
     log.debug("validating creation of {}", name);
+    if (name.contains(" ")) {
+      throw new ValidationException(
+          String.format(PROJECT_CANNOT_CONTAINS_SPACES_MSG, documentationUrl));
+    }
+
     ProjectControl parentCtrl = args.newParent;
     if (parentCtrl.getUser().getCapabilities().canAdministrateServer()) {
       // Admins can bypass any rules to support creating projects that doesn't
diff --git a/src/main/resources/Documentation/about.md b/src/main/resources/Documentation/about.md
index a967a52..216ccc2 100644
--- a/src/main/resources/Documentation/about.md
+++ b/src/main/resources/Documentation/about.md
@@ -1,5 +1,7 @@
 This plugin enforce a project group structure and restrict project creation
-within this structure to project group owners only.
+within this structure to project group owners only. Besides the rules the plugin
+enforce for the project group structure, it also enforce other naming
+rules like project name cannot contain spaces.
 
 To start creating a project group structure, simply create a root project, i.e.
 a project which inherits rights from `All-Projects`. The root project name
diff --git a/src/test/java/com/ericsson/gerrit/plugins/projectgroupstructure/ProjectCreationValidatorIT.java b/src/test/java/com/ericsson/gerrit/plugins/projectgroupstructure/ProjectCreationValidatorIT.java
index a5609bb..f5adb68 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/projectgroupstructure/ProjectCreationValidatorIT.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/projectgroupstructure/ProjectCreationValidatorIT.java
@@ -55,6 +55,17 @@
   }
 
   @Test
+  public void shouldProjectWithASpaceInTheirName() throws Exception {
+    ProjectInput in = new ProjectInput();
+    in.permissionsOnly = true;
+    RestResponse r =
+        userRestSession.put("/projects/" + Url.encode("project with space"), in);
+    r.assertConflict();
+    assertThat(r.getEntityContent())
+        .contains("Project name cannot contains spaces");
+  }
+
+  @Test
   public void shouldAllowAnyUsersToCreateUnderAllProjects() throws Exception {
     ProjectInput in = new ProjectInput();
     in.permissionsOnly = true;