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