diff --git a/functional-test/src/main/java/org/zanata/page/projects/projectsettings/ProjectGeneralTab.java b/functional-test/src/main/java/org/zanata/page/projects/projectsettings/ProjectGeneralTab.java
index 4010f41ebd..57a95d6f03 100644
--- a/functional-test/src/main/java/org/zanata/page/projects/projectsettings/ProjectGeneralTab.java
+++ b/functional-test/src/main/java/org/zanata/page/projects/projectsettings/ProjectGeneralTab.java
@@ -63,6 +63,20 @@ public String getProjectId() {
return readyElement(projectIdField).getAttribute("value");
}
+ /**
+ * Enter a new slug for the project. Removes any existing text.
+ *
+ * @param projectSlug new project slug
+ * @return new Project General Settings page
+ */
+ public ProjectGeneralTab enterProjectSlug(String projectSlug) {
+ log.info("Enter project slug {}", projectSlug);
+ waitForWebElement(projectIdField).clear();
+ waitForWebElement(projectIdField).sendKeys(projectSlug);
+ defocus(projectIdField);
+ return new ProjectGeneralTab(getDriver());
+ }
+
/**
* Enter a new name for the project. Removes any existing text.
*
diff --git a/functional-test/src/test/java/org/zanata/feature/project/EditProjectGeneralTest.java b/functional-test/src/test/java/org/zanata/feature/project/EditProjectGeneralTest.java
index e14b7ca262..c5fc351bfe 100644
--- a/functional-test/src/test/java/org/zanata/feature/project/EditProjectGeneralTest.java
+++ b/functional-test/src/test/java/org/zanata/feature/project/EditProjectGeneralTest.java
@@ -210,4 +210,24 @@ public void changeSourceLinks() throws Exception {
.isEqualTo("http://git.example.com")
.as("The git url is correct");
}
+
+ @Test
+ public void changeProjectSlug() {
+ ProjectGeneralTab projectGeneralTab = new ProjectWorkFlow()
+ .goToProjectByName("about fedora")
+ .gotoSettingsTab()
+ .gotoSettingsGeneral()
+ .enterProjectSlug("fedora-reborn")
+ .updateProject();
+
+ projectGeneralTab.reload();
+ // above will make sure url has been updated to use new slug
+ projectGeneralTab = projectGeneralTab
+ .gotoSettingsTab()
+ .gotoSettingsGeneral();
+
+ assertThat(projectGeneralTab.getProjectId())
+ .isEqualTo("fedora-reborn")
+ .as("The project slug is correct");
+ }
}
diff --git a/zanata-war/src/main/java/org/zanata/service/impl/SlugEntityUpdatedListener.java b/zanata-war/src/main/java/org/zanata/service/impl/SlugEntityUpdatedListener.java
index cead146a1b..9bd43a4ca1 100644
--- a/zanata-war/src/main/java/org/zanata/service/impl/SlugEntityUpdatedListener.java
+++ b/zanata-war/src/main/java/org/zanata/service/impl/SlugEntityUpdatedListener.java
@@ -18,6 +18,8 @@
import org.zanata.model.SlugEntityBase;
import org.zanata.service.IndexingService;
import org.zanata.util.Event;
+import org.zanata.util.ServiceLocator;
+import com.google.common.collect.Lists;
/**
* This class is a hibernate event listener which listens on post commit events
@@ -33,23 +35,9 @@
* @author Patrick Huang pahuang@redhat.com
*/
-@Name("slugEntityUpdatedListener")
-@Scope(ScopeType.APPLICATION)
-@AutoCreate
@Slf4j
public class SlugEntityUpdatedListener implements PostUpdateEventListener {
private static final long serialVersionUID = -1L;
- @In
- private AsyncTaskHandleManager asyncTaskHandleManager;
-
- @In
- private IndexingService indexingServiceImpl;
-
- @In("event")
- private Event projectUpdateEvent;
-
- @In("event")
- private Event projectIterationUpdateEvent;
private static Integer slugFieldIndexInProject;
private static Integer slugFieldIndexInIteration;
@@ -70,7 +58,7 @@ public void onPostUpdate(PostUpdateEvent event) {
slugFieldIndexInProject = getSlugFieldIndex(slugFieldIndexInProject, event);
String oldSlug = event.getOldState()[slugFieldIndexInProject].toString();
String newSlug = event.getState()[slugFieldIndexInProject].toString();
- projectUpdateEvent.fire(new ProjectUpdate(project, oldSlug));
+ getProjectUpdateEvent().fire(new ProjectUpdate(project, oldSlug));
reindexIfProjectSlugHasChanged(oldSlug, newSlug, project);
} else if (slugEntityBase instanceof HProjectIteration) {
@@ -78,7 +66,7 @@ public void onPostUpdate(PostUpdateEvent event) {
(HProjectIteration) slugEntityBase;
slugFieldIndexInIteration = getSlugFieldIndex(slugFieldIndexInIteration, event);
String oldSlug = event.getOldState()[slugFieldIndexInIteration].toString();
- projectIterationUpdateEvent.fire(new ProjectIterationUpdate(
+ getProjectIterationUpdateEvent().fire(new ProjectIterationUpdate(
iteration, oldSlug));
}
}
@@ -89,9 +77,9 @@ public void reindexIfProjectSlugHasChanged(String oldSlug, String newSlug,
log.debug("HProject [{}] changed slug. old slug: {}, new slug: {}",
project, oldSlug, newSlug);
AsyncTaskHandle handle = new AsyncTaskHandle<>();
- asyncTaskHandleManager.registerTaskHandle(handle);
+ getAsyncTaskHandleManager().registerTaskHandle(handle);
try {
- indexingServiceImpl.reindexHTextFlowTargetsForProject(
+ getIndexingServiceImpl().reindexHTextFlowTargetsForProject(
project, handle);
} catch (Exception e) {
log.error("exception happen in async framework", e);
@@ -124,6 +112,25 @@ private static Integer getSlugFieldIndex(Integer slugFieldIndex, PostUpdateEvent
return i;
}
}
- throw new IllegalStateException("can not find slug index in entity properties");
+ log.error("can not find slug index in entity [{}] properties [{}]",
+ event.getEntity(), Lists.newArrayList(propertyNames));
+ throw new IllegalStateException(
+ "can not find slug index in entity properties");
+ }
+
+ public AsyncTaskHandleManager getAsyncTaskHandleManager() {
+ return ServiceLocator.instance().getInstance(AsyncTaskHandleManager.class);
+ }
+
+ public IndexingService getIndexingServiceImpl() {
+ return ServiceLocator.instance().getInstance(IndexingService.class);
+ }
+
+ public Event getProjectUpdateEvent() {
+ return ServiceLocator.instance().getInstance("event", Event.class);
+ }
+
+ public Event getProjectIterationUpdateEvent() {
+ return ServiceLocator.instance().getInstance("event", Event.class);
}
}
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/server/HibernateIntegrator.java b/zanata-war/src/main/java/org/zanata/webtrans/server/HibernateIntegrator.java
index a97565676a..7f29b8baa5 100644
--- a/zanata-war/src/main/java/org/zanata/webtrans/server/HibernateIntegrator.java
+++ b/zanata-war/src/main/java/org/zanata/webtrans/server/HibernateIntegrator.java
@@ -39,7 +39,7 @@ public void integrate(Configuration configuration,
eventListenerRegistry.appendListeners(EventType.POST_INSERT,
updateListener);
eventListenerRegistry.appendListeners(EventType.POST_COMMIT_UPDATE,
- ServiceLocator.instance().getInstance(SlugEntityUpdatedListener.class));
+ new SlugEntityUpdatedListener());
}
}