diff --git a/zanata-war/src/main/java/org/zanata/action/CopyTransManager.java b/zanata-war/src/main/java/org/zanata/action/CopyTransManager.java
index 7522baad71..af91d99e01 100644
--- a/zanata-war/src/main/java/org/zanata/action/CopyTransManager.java
+++ b/zanata-war/src/main/java/org/zanata/action/CopyTransManager.java
@@ -29,6 +29,8 @@
import org.jboss.seam.annotations.Startup;
import org.jboss.seam.security.Identity;
import org.zanata.async.tasks.CopyTransTask;
+import org.zanata.async.tasks.DocumentCopyTransTask;
+import org.zanata.async.tasks.IterationCopyTransTask;
import org.zanata.model.HCopyTransOptions;
import org.zanata.model.HDocument;
import org.zanata.model.HProjectIteration;
@@ -106,7 +108,7 @@ public void startCopyTrans( HDocument document, HCopyTransOptions options )
}
CopyTransProcessKey key = CopyTransProcessKey.getKey(document);
- CopyTransTask task = new CopyTransTask(document, options);
+ CopyTransTask task = new DocumentCopyTransTask(document, options);
asyncTaskManagerServiceImpl.startTask(task, key);
}
@@ -122,7 +124,7 @@ public void startCopyTrans( HProjectIteration iteration, HCopyTransOptions optio
}
CopyTransProcessKey key = CopyTransProcessKey.getKey(iteration);
- CopyTransTask task = new CopyTransTask(iteration, options);
+ CopyTransTask task = new IterationCopyTransTask(iteration, options);
asyncTaskManagerServiceImpl.startTask(task, key);
}
diff --git a/zanata-war/src/main/java/org/zanata/async/tasks/CopyTransTask.java b/zanata-war/src/main/java/org/zanata/async/tasks/CopyTransTask.java
index ea5d397777..19e40a76e7 100644
--- a/zanata-war/src/main/java/org/zanata/async/tasks/CopyTransTask.java
+++ b/zanata-war/src/main/java/org/zanata/async/tasks/CopyTransTask.java
@@ -40,30 +40,19 @@
/**
* Asynchronous Task that runs copy trans.
- * This task can run against a document or against a project iteration depending
- * on which constructor is used.
+ * Subclasses should allow for running copy trans against different targets.
*
* @author Carlos Munoz camunoz@redhat.com
*/
-public class CopyTransTask implements AsyncTask
+public abstract class CopyTransTask implements AsyncTask
{
- private HDocument document;
- private HProjectIteration projectIteration;
-
- private HCopyTransOptions copyTransOptions;
+ protected HCopyTransOptions copyTransOptions;
private final CopyTransTaskHandle handle = new CopyTransTaskHandle();
- public CopyTransTask(HDocument document, HCopyTransOptions copyTransOptions)
- {
- this.document = document;
- this.copyTransOptions = copyTransOptions;
- }
-
- public CopyTransTask(HProjectIteration projectIteration, HCopyTransOptions copyTransOptions)
+ public CopyTransTask(HCopyTransOptions copyTransOptions)
{
- this.projectIteration = projectIteration;
this.copyTransOptions = copyTransOptions;
}
@@ -73,52 +62,26 @@ public CopyTransTaskHandle getHandle()
return handle;
}
+ /**
+ * @return The maximum progress for the copy trans task.
+ */
+ protected abstract int getMaxProgress();
+
+ protected abstract void callCopyTrans();
+
@Override
public Void call() throws Exception
{
getHandle().startTiming();
getHandle().setTriggeredBy(Identity.instance().getPrincipal().getName());
- calculateMaxProgress();
-
- CopyTransService copyTransServiceImpl =
- (CopyTransService) Component.getInstance(CopyTransServiceImpl.class);
+ getHandle().setMaxProgress( getMaxProgress() );
- if( projectIteration != null )
- {
- copyTransServiceImpl.copyTransForIteration( projectIteration, copyTransOptions );
- }
- else
- {
- copyTransServiceImpl.copyTransForDocument( document );
- }
+ callCopyTrans();
getHandle().finishTiming();
return null;
}
- private void calculateMaxProgress()
- {
- LocaleService localeService = (LocaleService)Component.getInstance(LocaleServiceImpl.class);
- if( projectIteration != null )
- {
- List localeList =
- localeService.getSupportedLangugeByProjectIteration(projectIteration.getProject().getSlug(),
- projectIteration.getSlug());
-
- getHandle().setMaxProgress( projectIteration.getDocuments().size() * localeList.size() );
- }
- else
- {
- // Set the max progress only if it hasn't been set yet
- List localeList =
- localeService.getSupportedLangugeByProjectIteration(document.getProjectIteration().getProject().getSlug(),
- document.getProjectIteration().getSlug());
-
- getHandle().setMaxProgress(localeList.size());
- }
-
- }
-
public static class CopyTransTaskHandle extends TimedAsyncHandle
{
@Getter
diff --git a/zanata-war/src/main/java/org/zanata/async/tasks/DocumentCopyTransTask.java b/zanata-war/src/main/java/org/zanata/async/tasks/DocumentCopyTransTask.java
new file mode 100644
index 0000000000..ccc1d89e1e
--- /dev/null
+++ b/zanata-war/src/main/java/org/zanata/async/tasks/DocumentCopyTransTask.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright 2013, Red Hat, Inc. and individual contributors as indicated by the
+ * @author tags. See the copyright.txt file in the distribution for a full
+ * listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it under the
+ * terms of the GNU Lesser General Public License as published by the Free
+ * Software Foundation; either version 2.1 of the License, or (at your option)
+ * any later version.
+ *
+ * This software is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this software; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA, or see the FSF
+ * site: http://www.fsf.org.
+ */
+package org.zanata.async.tasks;
+
+import java.util.List;
+
+import org.jboss.seam.Component;
+import org.jboss.seam.security.Identity;
+import org.zanata.model.HCopyTransOptions;
+import org.zanata.model.HDocument;
+import org.zanata.model.HLocale;
+import org.zanata.service.CopyTransService;
+import org.zanata.service.LocaleService;
+import org.zanata.service.impl.CopyTransServiceImpl;
+import org.zanata.service.impl.LocaleServiceImpl;
+
+/**
+ * Copy Trans task that runs copy trans on a single document and all languages
+ * available to its iteration.
+ *
+ * @author Carlos Munoz camunoz@redhat.com
+ */
+public class DocumentCopyTransTask extends CopyTransTask
+{
+ private HDocument document;
+
+ public DocumentCopyTransTask(HDocument document, HCopyTransOptions copyTransOptions)
+ {
+ super(copyTransOptions);
+ this.document = document;
+ }
+
+ @Override
+ protected int getMaxProgress()
+ {
+ LocaleService localeService = (LocaleService)Component.getInstance(LocaleServiceImpl.class);
+ List localeList =
+ localeService.getSupportedLangugeByProjectIteration(document.getProjectIteration().getProject().getSlug(),
+ document.getProjectIteration().getSlug());
+
+ return localeList.size();
+ }
+
+ @Override
+ protected void callCopyTrans()
+ {
+ CopyTransService copyTransServiceImpl =
+ (CopyTransService) Component.getInstance(CopyTransServiceImpl.class);
+ copyTransServiceImpl.copyTransForDocument(document, copyTransOptions);
+ }
+}
diff --git a/zanata-war/src/main/java/org/zanata/async/tasks/IterationCopyTransTask.java b/zanata-war/src/main/java/org/zanata/async/tasks/IterationCopyTransTask.java
new file mode 100644
index 0000000000..d2a36e204c
--- /dev/null
+++ b/zanata-war/src/main/java/org/zanata/async/tasks/IterationCopyTransTask.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright 2013, Red Hat, Inc. and individual contributors as indicated by the
+ * @author tags. See the copyright.txt file in the distribution for a full
+ * listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it under the
+ * terms of the GNU Lesser General Public License as published by the Free
+ * Software Foundation; either version 2.1 of the License, or (at your option)
+ * any later version.
+ *
+ * This software is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this software; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA, or see the FSF
+ * site: http://www.fsf.org.
+ */
+package org.zanata.async.tasks;
+
+import java.util.List;
+
+import org.jboss.seam.Component;
+import org.jboss.seam.security.Identity;
+import org.zanata.model.HCopyTransOptions;
+import org.zanata.model.HLocale;
+import org.zanata.model.HProjectIteration;
+import org.zanata.service.CopyTransService;
+import org.zanata.service.LocaleService;
+import org.zanata.service.impl.CopyTransServiceImpl;
+import org.zanata.service.impl.LocaleServiceImpl;
+
+/**
+ * Copy Trans task that runs copy trans for a whole project iteration and all languages.
+ *
+ * @author Carlos Munoz camunoz@redhat.com
+ */
+public class IterationCopyTransTask extends CopyTransTask
+{
+ private HProjectIteration projectIteration;
+
+ public IterationCopyTransTask(HProjectIteration projectIteration, HCopyTransOptions options)
+ {
+ super(options);
+ this.projectIteration = projectIteration;
+ }
+
+ @Override
+ protected int getMaxProgress()
+ {
+ LocaleService localeService = (LocaleService)Component.getInstance(LocaleServiceImpl.class);
+ List localeList =
+ localeService.getSupportedLangugeByProjectIteration(projectIteration.getProject().getSlug(),
+ projectIteration.getSlug());
+
+ return projectIteration.getDocuments().size() * localeList.size();
+ }
+
+ @Override
+ protected void callCopyTrans()
+ {
+ CopyTransService copyTransServiceImpl =
+ (CopyTransService) Component.getInstance(CopyTransServiceImpl.class);
+ copyTransServiceImpl.copyTransForIteration(projectIteration, copyTransOptions);
+ }
+}