From 120eb90b9ab7e9e3caec091b21ca25c94dfbd075 Mon Sep 17 00:00:00 2001 From: Alex Eng Date: Mon, 29 Sep 2014 16:01:00 +1000 Subject: [PATCH] Add document statistic endpoint --- ...ervice.java => ProjectVersionService.java} | 8 ++-- .../zanata/rest/service/TransUnitService.java | 18 ++------- .../service/impl/StatisticsServiceImpl.java | 40 ++++++++++++++++++- 3 files changed, 45 insertions(+), 21 deletions(-) rename zanata-war/src/main/java/org/zanata/rest/service/{VersionLocalesService.java => ProjectVersionService.java} (94%) diff --git a/zanata-war/src/main/java/org/zanata/rest/service/VersionLocalesService.java b/zanata-war/src/main/java/org/zanata/rest/service/ProjectVersionService.java similarity index 94% rename from zanata-war/src/main/java/org/zanata/rest/service/VersionLocalesService.java rename to zanata-war/src/main/java/org/zanata/rest/service/ProjectVersionService.java index b2fbe6cf4e..745002f475 100644 --- a/zanata-war/src/main/java/org/zanata/rest/service/VersionLocalesService.java +++ b/zanata-war/src/main/java/org/zanata/rest/service/ProjectVersionService.java @@ -40,10 +40,10 @@ import com.google.common.collect.Lists; -@Name("versionLocalesService") -@Path(VersionLocalesResource.SERVICE_PATH) +@Name("projectVersionService") +@Path(ProjectVersionResource.SERVICE_PATH) @Transactional -public class VersionLocalesService implements VersionLocalesResource { +public class ProjectVersionService implements ProjectVersionResource { @PathParam("projectSlug") private String projectSlug; @@ -58,7 +58,7 @@ public class VersionLocalesService implements VersionLocalesResource { private ProjectIterationDAO projectIterationDAO; @Override - public Response get() { + public Response getLocales() { HProjectIteration version = projectIterationDAO.getBySlug(projectSlug, versionSlug); if (version == null) { diff --git a/zanata-war/src/main/java/org/zanata/rest/service/TransUnitService.java b/zanata-war/src/main/java/org/zanata/rest/service/TransUnitService.java index 8ee1474fb5..4f4db54ae3 100644 --- a/zanata-war/src/main/java/org/zanata/rest/service/TransUnitService.java +++ b/zanata-war/src/main/java/org/zanata/rest/service/TransUnitService.java @@ -48,23 +48,10 @@ import com.google.common.collect.Lists; -@Name("transUnitStatusService") +@Name("transUnitService") @Path(TransUnitResource.SERVICE_PATH) @Transactional public class TransUnitService implements TransUnitResource { - - @PathParam("projectSlug") - private String projectSlug; - - @PathParam("versionSlug") - private String versionSlug; - - @PathParam("docId") - private String docId; - - @PathParam("localeId") - private String localeId; - @In private TextFlowTargetDAO textFlowTargetDAO; @@ -75,7 +62,8 @@ public class TransUnitService implements TransUnitResource { private LocaleDAO localeDAO; @Override - public Response getStatus() { + public Response getStatus(String projectSlug, String versionSlug, + String docId, String localeId) { HDocument document = documentDAO.getByProjectIterationAndDocId(projectSlug, diff --git a/zanata-war/src/main/java/org/zanata/service/impl/StatisticsServiceImpl.java b/zanata-war/src/main/java/org/zanata/service/impl/StatisticsServiceImpl.java index 3cb1fdee04..ce7cc9bacb 100644 --- a/zanata-war/src/main/java/org/zanata/service/impl/StatisticsServiceImpl.java +++ b/zanata-war/src/main/java/org/zanata/service/impl/StatisticsServiceImpl.java @@ -20,14 +20,18 @@ */ package org.zanata.service.impl; +import java.lang.reflect.Type; import java.net.URI; import java.util.Date; import java.util.List; import java.util.Map; import javax.ws.rs.Path; +import javax.ws.rs.core.GenericEntity; +import javax.ws.rs.core.Response; import org.apache.commons.lang.StringUtils; +import org.jboss.resteasy.util.GenericType; import org.jboss.seam.ScopeType; import org.jboss.seam.annotations.In; import org.jboss.seam.annotations.Name; @@ -43,6 +47,8 @@ import org.zanata.model.HTextFlowTarget; import org.zanata.rest.NoSuchEntityException; import org.zanata.rest.dto.Link; +import org.zanata.rest.dto.Locale; +import org.zanata.rest.dto.TransUnitStatus; import org.zanata.rest.dto.stats.ContainerTranslationStatistics; import org.zanata.rest.dto.stats.TranslationStatistics; import org.zanata.rest.dto.stats.TranslationStatistics.StatUnit; @@ -53,6 +59,8 @@ import org.zanata.util.StatisticsUtil; import org.zanata.webtrans.shared.model.DocumentStatus; +import com.google.common.collect.Lists; + /** * Default implementation for the * {@link org.zanata.rest.service.StatisticsResource} interface. This is a @@ -93,7 +101,7 @@ public ContainerTranslationStatistics getStatistics(String projectSlug, if (locales.length == 0) { List iterationLocales = localeServiceImpl.getSupportedLanguageByProjectIteration( - projectSlug, iterationSlug); + projectSlug, iterationSlug); localeIds = new LocaleId[iterationLocales.size()]; for (int i = 0, iterationLocalesSize = iterationLocales.size(); i < iterationLocalesSize; i++) { HLocale loc = iterationLocales.get(i); @@ -201,7 +209,7 @@ public ContainerTranslationStatistics getStatistics(String projectSlug, if (locales.length == 0) { List iterationLocales = localeServiceImpl.getSupportedLanguageByProjectIteration( - projectSlug, iterationSlug); + projectSlug, iterationSlug); localeIds = new LocaleId[iterationLocales.size()]; for (int i = 0, iterationLocalesSize = iterationLocales.size(); i < iterationLocalesSize; i++) { HLocale loc = iterationLocales.get(i); @@ -266,6 +274,34 @@ public ContainerTranslationStatistics getStatistics(String projectSlug, return docStatistics; } + @Override + public Response getDocumentStatistics(String projectSlug, + String versionSlug, String docId, String localeId) { + HDocument doc = + documentDAO.getByProjectIterationAndDocId(projectSlug, + versionSlug, docId); + + if(doc == null) { + return Response.status(Response.Status.NOT_FOUND).build(); + } + + ContainerTranslationStatistics docStats = + getDocStatistics(doc.getId(), new LocaleId(localeId)); + + TranslationStatistics docWordStatistic = + docStats.getStats(localeId, StatUnit.WORD); + TranslationStatistics docMsgStatistic = + docStats.getStats(localeId, StatUnit.MESSAGE); + + Type genericType = new GenericType>() { + }.getGenericType(); + Object entity = + new GenericEntity>( + Lists.newArrayList(docWordStatistic, docMsgStatistic), + genericType); + return Response.ok(entity).build(); + } + private TranslationStatistics getWordsStats(TransUnitWords wordCount, LocaleId locale, Date lastChanged, String lastModifiedBy) { TranslationStatistics stats =