From 33e5375531661c64bfdf396606287491bee40e0e Mon Sep 17 00:00:00 2001 From: David Mason Date: Wed, 10 Jul 2013 13:10:15 +1000 Subject: [PATCH] Rename ActiveStates to ContentStateGroup, rename methods and move to gwt shared. Move to gwt includes a few minor changes to allow gwt-rpc serialization. --- .../main/java/org/zanata/dao/TextFlowDAO.java | 10 +- .../java/org/zanata/search/ActiveStates.java | 146 -------------- .../search/FilterConstraintToQuery.java | 2 +- .../org/zanata/search/FilterConstraints.java | 38 ++-- .../impl/TextFlowSearchServiceImpl.java | 14 +- .../server/rpc/GetTransUnitListHandler.java | 2 +- .../shared/model/ContentStateGroup.java | 183 ++++++++++++++++++ .../webtrans/shared/rpc/GetTransUnitList.java | 28 +-- .../shared/rpc/GetTransUnitsNavigation.java | 21 +- 9 files changed, 243 insertions(+), 201 deletions(-) delete mode 100644 zanata-war/src/main/java/org/zanata/search/ActiveStates.java create mode 100644 zanata-war/src/main/java/org/zanata/webtrans/shared/model/ContentStateGroup.java diff --git a/zanata-war/src/main/java/org/zanata/dao/TextFlowDAO.java b/zanata-war/src/main/java/org/zanata/dao/TextFlowDAO.java index 467e2c6f6f..8ed888ded6 100644 --- a/zanata-war/src/main/java/org/zanata/dao/TextFlowDAO.java +++ b/zanata-war/src/main/java/org/zanata/dao/TextFlowDAO.java @@ -41,9 +41,9 @@ import org.zanata.model.HDocument; import org.zanata.model.HLocale; import org.zanata.model.HTextFlow; -import org.zanata.search.ActiveStates; import org.zanata.search.FilterConstraintToQuery; import org.zanata.search.FilterConstraints; +import org.zanata.webtrans.shared.model.ContentStateGroup; import org.zanata.webtrans.shared.model.DocumentId; import com.google.common.base.Joiner; @@ -172,7 +172,7 @@ public List getNavigationByDocumentId(Long documentId, HLocale hLocal protected static String buildContentStateCondition(FilterConstraints constraints, String alias) { - ActiveStates includedStates = constraints.getIncludedStates(); + ContentStateGroup includedStates = constraints.getIncludedStates(); if (includedStates.hasAllStates() || includedStates.hasNoStates()) { return "1"; @@ -181,17 +181,17 @@ protected static String buildContentStateCondition(FilterConstraints constraints builder.append("("); List conditions = Lists.newArrayList(); final String column = alias + ".state"; - if (constraints.getIncludedStates().isTranslatedOn()) + if (constraints.getIncludedStates().hasTranslated()) { conditions.add(column + "=2"); // Translated conditions.add(column + "=3"); // Approved } - if (constraints.getIncludedStates().isFuzzyOn()) + if (constraints.getIncludedStates().hasFuzzy()) { conditions.add(column + "=1"); // Fuzzy conditions.add(column + "=4"); // Rejected } - if (constraints.getIncludedStates().isNewOn()) + if (constraints.getIncludedStates().hasNew()) { conditions.add(column + "=0 or " + column + " is null"); } diff --git a/zanata-war/src/main/java/org/zanata/search/ActiveStates.java b/zanata-war/src/main/java/org/zanata/search/ActiveStates.java deleted file mode 100644 index eeabfa61bb..0000000000 --- a/zanata-war/src/main/java/org/zanata/search/ActiveStates.java +++ /dev/null @@ -1,146 +0,0 @@ -package org.zanata.search; - -import java.util.List; - -import org.zanata.common.ContentState; - -import com.google.common.collect.Lists; - -import lombok.Getter; -import lombok.AllArgsConstructor; -import lombok.ToString; - -@ToString -@AllArgsConstructor -@Getter -public class ActiveStates -{ - private boolean newOn; - private boolean fuzzyOn; - private boolean translatedOn; - private boolean approvedOn; - private boolean rejectedOn; - - /** - * @return a Builder with all states on by default - */ - public static Builder builder() - { - return new Builder(); - } - - public boolean hasAllStates() - { - return newOn && fuzzyOn && translatedOn && approvedOn && rejectedOn; - } - - public boolean hasNoStates() - { - return !(newOn || fuzzyOn || translatedOn || approvedOn || rejectedOn); - } - - public List asList() - { - List result = Lists.newArrayList(); - if (newOn) - { - result.add(ContentState.New); - } - if (fuzzyOn) - { - result.add(ContentState.NeedReview); - } - if (translatedOn) - { - result.add(ContentState.Translated); - } - if (approvedOn) - { - result.add(ContentState.Approved); - } - if (rejectedOn) - { - result.add(ContentState.Rejected); - } - return result; - } - - public static class Builder - { - private boolean newOn; - private boolean fuzzyOn; - private boolean translatedOn; - private boolean approvedOn; - private boolean rejectedOn; - - public Builder() - { - allOn(); - } - - public ActiveStates build() - { - return new ActiveStates(newOn, fuzzyOn, translatedOn, approvedOn, rejectedOn); - } - - public Builder allOn() - { - this.newOn = true; - this.fuzzyOn = true; - this.translatedOn = true; - this.approvedOn = true; - this.rejectedOn = true; - return this; - } - - public Builder allOff() - { - this.newOn = false; - this.fuzzyOn = false; - this.translatedOn = false; - this.approvedOn = false; - this.rejectedOn = false; - return this; - } - - public Builder fromStates(ActiveStates states) - { - this.newOn = states.newOn; - this.fuzzyOn = states.fuzzyOn; - this.translatedOn = states.translatedOn; - this.approvedOn = states.approvedOn; - this.rejectedOn = states.rejectedOn; - return this; - } - - public Builder setNewOn(boolean on) - { - newOn = on; - return this; - } - - public Builder setFuzzyOn(boolean on) - { - fuzzyOn = on; - return this; - } - - public Builder setTranslatedOn(boolean on) - { - translatedOn = on; - return this; - } - - public Builder setApprovedOn(boolean on) - { - approvedOn = on; - return this; - } - - public Builder setRejectedOn(boolean on) - { - rejectedOn = on; - return this; - } - } -} diff --git a/zanata-war/src/main/java/org/zanata/search/FilterConstraintToQuery.java b/zanata-war/src/main/java/org/zanata/search/FilterConstraintToQuery.java index a6cf05e406..6f46ff3ca2 100644 --- a/zanata-war/src/main/java/org/zanata/search/FilterConstraintToQuery.java +++ b/zanata-war/src/main/java/org/zanata/search/FilterConstraintToQuery.java @@ -148,7 +148,7 @@ protected String buildStateCondition() String stateInListWhereClause = and(textFlowAndLocaleRestriction.toString(), String.format("state in (%s)", STATE_LIST_PLACEHOLDER)); String stateInListCondition = QueryBuilder.exists().from("HTextFlowTarget").where(stateInListWhereClause).toQueryString(); - if (constraints.getIncludedStates().isNewOn()) + if (constraints.getIncludedStates().hasNew()) { String nullTargetCondition = String.format("%s not in indices(tf.targets)", LOCALE_PLACEHOLDER); if (hasSearch && constraints.isSearchInSource()) diff --git a/zanata-war/src/main/java/org/zanata/search/FilterConstraints.java b/zanata-war/src/main/java/org/zanata/search/FilterConstraints.java index 8f52112a8f..d5803bb1da 100644 --- a/zanata-war/src/main/java/org/zanata/search/FilterConstraints.java +++ b/zanata-war/src/main/java/org/zanata/search/FilterConstraints.java @@ -23,6 +23,8 @@ //TODO May want to add document(someDocument) to these constraints //so that only one search method is needed on the interface. +import org.zanata.webtrans.shared.model.ContentStateGroup; + import lombok.Getter; import com.google.common.base.Objects; @@ -39,11 +41,11 @@ public class FilterConstraints private boolean isCaseSensitive; private boolean searchInSource; private boolean searchInTarget; - private ActiveStates includedStates; + private ContentStateGroup includedStates; private FilterConstraints(String searchString, boolean caseSensitive, boolean searchInSource, boolean searchInTarget, - ActiveStates includedStates) + ContentStateGroup includedStates) { this.searchString = searchString; this.isCaseSensitive = caseSensitive; @@ -77,11 +79,11 @@ public static class Builder private boolean caseSensitive; private boolean searchInSource; private boolean searchInTarget; - private ActiveStates.Builder states; + private ContentStateGroup.Builder states; public Builder() { - states = ActiveStates.builder(); + states = ContentStateGroup.builder(); setKeepAll(); } @@ -103,7 +105,7 @@ private void setKeepAll() caseSensitive = false; searchInSource = true; searchInTarget = true; - states.allOn(); + states.addAll(); } public Builder keepNone() @@ -112,7 +114,7 @@ public Builder keepNone() caseSensitive = false; searchInSource = false; searchInTarget = false; - states.allOff(); + states.removeAll(); return this; } @@ -140,7 +142,7 @@ public Builder checkInTarget(boolean check) return this; } - public Builder includeStates(ActiveStates states) + public Builder includeStates(ContentStateGroup states) { //FIXME this behaviour is too surprising. // It exists because the editor UI should show all states when either @@ -148,7 +150,7 @@ public Builder includeStates(ActiveStates states) // in the editor backend *before* sending a request to the server. if (states.hasNoStates()) { - this.states.allOn(); + this.states.addAll(); } else { @@ -159,61 +161,61 @@ public Builder includeStates(ActiveStates states) public Builder includeNew() { - states.setNewOn(true); + states.includeNew(true); return this; } public Builder excludeNew() { - states.setNewOn(false); + states.includeNew(false); return this; } public Builder includeFuzzy() { - states.setFuzzyOn(true); + states.includeFuzzy(true); return this; } public Builder excludeFuzzy() { - states.setFuzzyOn(false); + states.includeFuzzy(false); return this; } public Builder includeTranslated() { - states.setTranslatedOn(true); + states.includeTranslated(true); return this; } public Builder excludeTranslated() { - states.setTranslatedOn(false); + states.includeTranslated(false); return this; } public Builder includeApproved() { - states.setApprovedOn(true); + states.includeApproved(true); return this; } public Builder excludeApproved() { - states.setApprovedOn(false); + states.includeApproved(false); return this; } public Builder includeRejected() { - states.setRejectedOn(true); + states.includeRejected(true); return this; } public Builder excludeRejected() { - states.setRejectedOn(false); + states.includeRejected(false); return this; } diff --git a/zanata-war/src/main/java/org/zanata/service/impl/TextFlowSearchServiceImpl.java b/zanata-war/src/main/java/org/zanata/service/impl/TextFlowSearchServiceImpl.java index e31a97de91..f3016803af 100644 --- a/zanata-war/src/main/java/org/zanata/service/impl/TextFlowSearchServiceImpl.java +++ b/zanata-war/src/main/java/org/zanata/service/impl/TextFlowSearchServiceImpl.java @@ -57,11 +57,11 @@ import org.zanata.model.HProjectIteration; import org.zanata.model.HTextFlow; import org.zanata.model.HTextFlowTarget; -import org.zanata.search.ActiveStates; import org.zanata.search.FilterConstraintToQuery; import org.zanata.search.FilterConstraints; import org.zanata.service.LocaleService; import org.zanata.service.TextFlowSearchService; +import org.zanata.webtrans.shared.model.ContentStateGroup; import org.zanata.webtrans.shared.model.DocumentId; import org.zanata.webtrans.shared.model.WorkspaceId; @@ -140,8 +140,10 @@ private List findTextFlowsByDocumentPaths(WorkspaceId workspace, List return Collections.emptyList(); } - ActiveStates includedStates = constraints.getIncludedStates(); - if (!includedStates.isNewOn() && !includedStates.isFuzzyOn() && !includedStates.isTranslatedOn()) + // FIXME this looks like it assumes only 3 states and would not work properly for getting + // e.g. only approved strings while there is a search active. + ContentStateGroup includedStates = constraints.getIncludedStates(); + if (!includedStates.hasNew() && !includedStates.hasFuzzy() && !includedStates.hasTranslated()) { // including nothing return Collections.emptyList(); @@ -300,19 +302,19 @@ private List findTextFlowsWithHibernateSearch(String projectSlug, Str } targetQuery.add(localeQuery, Occur.MUST); - if (!constraints.getIncludedStates().isTranslatedOn()) + if (!constraints.getIncludedStates().hasTranslated()) { TermQuery approvedStateQuery = new TermQuery(new Term(IndexFieldLabels.CONTENT_STATE_FIELD, ContentState.Approved.toString())); targetQuery.add(approvedStateQuery, Occur.MUST_NOT); } - if (!constraints.getIncludedStates().isFuzzyOn()) + if (!constraints.getIncludedStates().hasFuzzy()) { TermQuery approvedStateQuery = new TermQuery(new Term(IndexFieldLabels.CONTENT_STATE_FIELD, ContentState.NeedReview.toString())); targetQuery.add(approvedStateQuery, Occur.MUST_NOT); } - if (!constraints.getIncludedStates().isNewOn()) + if (!constraints.getIncludedStates().hasNew()) { TermQuery approvedStateQuery = new TermQuery(new Term(IndexFieldLabels.CONTENT_STATE_FIELD, ContentState.New.toString())); targetQuery.add(approvedStateQuery, Occur.MUST_NOT); diff --git a/zanata-war/src/main/java/org/zanata/webtrans/server/rpc/GetTransUnitListHandler.java b/zanata-war/src/main/java/org/zanata/webtrans/server/rpc/GetTransUnitListHandler.java index fe76eb80dd..a412836c76 100755 --- a/zanata-war/src/main/java/org/zanata/webtrans/server/rpc/GetTransUnitListHandler.java +++ b/zanata-war/src/main/java/org/zanata/webtrans/server/rpc/GetTransUnitListHandler.java @@ -35,12 +35,12 @@ import org.zanata.exception.ZanataServiceException; import org.zanata.model.HLocale; import org.zanata.model.HTextFlow; -import org.zanata.search.ActiveStates; import org.zanata.search.FilterConstraints; import org.zanata.security.ZanataIdentity; import org.zanata.service.LocaleService; import org.zanata.service.ValidationService; import org.zanata.webtrans.server.ActionHandlerFor; +import org.zanata.webtrans.shared.model.ContentStateGroup; import org.zanata.webtrans.shared.model.TransUnit; import org.zanata.webtrans.shared.rpc.GetTransUnitList; import org.zanata.webtrans.shared.rpc.GetTransUnitListResult; diff --git a/zanata-war/src/main/java/org/zanata/webtrans/shared/model/ContentStateGroup.java b/zanata-war/src/main/java/org/zanata/webtrans/shared/model/ContentStateGroup.java new file mode 100644 index 0000000000..a104b68cd7 --- /dev/null +++ b/zanata-war/src/main/java/org/zanata/webtrans/shared/model/ContentStateGroup.java @@ -0,0 +1,183 @@ +package org.zanata.webtrans.shared.model; + +import java.util.List; + +import org.zanata.common.ContentState; + +import com.google.common.collect.Lists; +import com.google.gwt.user.client.rpc.IsSerializable; + +import lombok.ToString; + +@ToString +public class ContentStateGroup implements IsSerializable +{ + private boolean hasNew; + private boolean hasFuzzy; + private boolean hasTranslated; + private boolean hasApproved; + private boolean hasRejected; + + private ContentStateGroup() + { + // This exists to allow GWT to serialize + } + + private ContentStateGroup(boolean includeNew, boolean includeFuzzy, boolean includeTranslated, + boolean includeApproved, boolean includeRejected) + { + hasNew = includeNew; + hasFuzzy = includeFuzzy; + hasTranslated = includeTranslated; + hasApproved = includeApproved; + hasRejected = includeRejected; + } + + /** + * @return a Builder with all states on by default + */ + public static Builder builder() + { + return new Builder(); + } + + public boolean hasNew() + { + return hasNew; + } + + public boolean hasFuzzy() + { + return hasFuzzy; + } + + public boolean hasTranslated() + { + return hasTranslated; + } + + public boolean hasApproved() + { + return hasApproved; + } + + public boolean hasRejected() + { + return hasRejected; + } + + public boolean hasAllStates() + { + return hasNew && hasFuzzy && hasTranslated && hasApproved && hasRejected; + } + + public boolean hasNoStates() + { + return !(hasNew || hasFuzzy || hasTranslated || hasApproved || hasRejected); + } + + public List asList() + { + List result = Lists.newArrayList(); + if (hasNew) + { + result.add(ContentState.New); + } + if (hasFuzzy) + { + result.add(ContentState.NeedReview); + } + if (hasTranslated) + { + result.add(ContentState.Translated); + } + if (hasApproved) + { + result.add(ContentState.Approved); + } + if (hasRejected) + { + result.add(ContentState.Rejected); + } + return result; + } + + public static class Builder + { + private boolean hasNew; + private boolean hasFuzzy; + private boolean hasTranslated; + private boolean hasApproved; + private boolean hasRejected; + + public Builder() + { + addAll(); + } + + public ContentStateGroup build() + { + return new ContentStateGroup(hasNew, hasFuzzy, hasTranslated, hasApproved, hasRejected); + } + + public Builder addAll() + { + this.hasNew = true; + this.hasFuzzy = true; + this.hasTranslated = true; + this.hasApproved = true; + this.hasRejected = true; + return this; + } + + public Builder removeAll() + { + this.hasNew = false; + this.hasFuzzy = false; + this.hasTranslated = false; + this.hasApproved = false; + this.hasRejected = false; + return this; + } + + public Builder fromStates(ContentStateGroup states) + { + this.hasNew = states.hasNew; + this.hasFuzzy = states.hasFuzzy; + this.hasTranslated = states.hasTranslated; + this.hasApproved = states.hasApproved; + this.hasRejected = states.hasRejected; + return this; + } + + public Builder includeNew(boolean on) + { + hasNew = on; + return this; + } + + public Builder includeFuzzy(boolean on) + { + hasFuzzy = on; + return this; + } + + public Builder includeTranslated(boolean on) + { + hasTranslated = on; + return this; + } + + public Builder includeApproved(boolean on) + { + hasApproved = on; + return this; + } + + public Builder includeRejected(boolean on) + { + hasRejected = on; + return this; + } + } +} diff --git a/zanata-war/src/main/java/org/zanata/webtrans/shared/rpc/GetTransUnitList.java b/zanata-war/src/main/java/org/zanata/webtrans/shared/rpc/GetTransUnitList.java index 8d543385ba..00f3645aea 100644 --- a/zanata-war/src/main/java/org/zanata/webtrans/shared/rpc/GetTransUnitList.java +++ b/zanata-war/src/main/java/org/zanata/webtrans/shared/rpc/GetTransUnitList.java @@ -2,8 +2,8 @@ import java.util.List; -import org.zanata.search.ActiveStates; import org.zanata.webtrans.client.service.GetTransUnitActionContext; +import org.zanata.webtrans.shared.model.ContentStateGroup; import org.zanata.webtrans.shared.model.DocumentId; import org.zanata.webtrans.shared.model.TransUnitId; import org.zanata.webtrans.shared.model.ValidationId; @@ -17,7 +17,7 @@ public class GetTransUnitList extends AbstractWorkspaceAction validationIds; private TransUnitId targetTransUnitId; @@ -34,12 +34,12 @@ private GetTransUnitList(GetTransUnitActionContext context) count = context.getCount(); phrase = context.getFindMessage(); // @formatter :off - filterStates = ActiveStates.builder() - .setNewOn(context.isFilterUntranslated()) - .setFuzzyOn(context.isFilterNeedReview()) - .setTranslatedOn(context.isFilterTranslated()) - .setApprovedOn(context.isFilterApproved()) - .setRejectedOn(context.isFilterRejected()) + filterStates = ContentStateGroup.builder() + .includeNew(context.isFilterUntranslated()) + .includeFuzzy(context.isFilterNeedReview()) + .includeTranslated(context.isFilterTranslated()) + .includeApproved(context.isFilterApproved()) + .includeRejected(context.isFilterRejected()) .build(); // @formatter :on filterHasError = context.isFilterHasError(); @@ -83,34 +83,34 @@ public String getPhrase() return this.phrase; } - public ActiveStates getFilterStates() + public ContentStateGroup getFilterStates() { return filterStates; } public boolean isFilterTranslated() { - return filterStates.isTranslatedOn(); + return filterStates.hasTranslated(); } public boolean isFilterNeedReview() { - return filterStates.isFuzzyOn(); + return filterStates.hasFuzzy(); } public boolean isFilterUntranslated() { - return filterStates.isNewOn(); + return filterStates.hasNew(); } public boolean isFilterApproved() { - return filterStates.isApprovedOn(); + return filterStates.hasApproved(); } public boolean isFilterRejected() { - return filterStates.isRejectedOn(); + return filterStates.hasRejected(); } public boolean isFilterHasError() diff --git a/zanata-war/src/main/java/org/zanata/webtrans/shared/rpc/GetTransUnitsNavigation.java b/zanata-war/src/main/java/org/zanata/webtrans/shared/rpc/GetTransUnitsNavigation.java index 1ca50389b7..1f8cb9a861 100644 --- a/zanata-war/src/main/java/org/zanata/webtrans/shared/rpc/GetTransUnitsNavigation.java +++ b/zanata-war/src/main/java/org/zanata/webtrans/shared/rpc/GetTransUnitsNavigation.java @@ -21,8 +21,9 @@ package org.zanata.webtrans.shared.rpc; -import org.zanata.search.ActiveStates; import org.zanata.webtrans.client.service.GetTransUnitActionContext; +import org.zanata.webtrans.shared.model.ContentStateGroup; + import com.google.common.base.Objects; public class GetTransUnitsNavigation @@ -30,14 +31,14 @@ public class GetTransUnitsNavigation private Long id; private String phrase; - private ActiveStates activeStates; + private ContentStateGroup activeStates; @SuppressWarnings("unused") private GetTransUnitsNavigation() { } - public GetTransUnitsNavigation(Long id, String phrase, ActiveStates activeStates) + public GetTransUnitsNavigation(Long id, String phrase, ContentStateGroup activeStates) { this.id = id; this.phrase = phrase; @@ -48,12 +49,12 @@ public GetTransUnitsNavigation(GetTransUnitActionContext context) { this(context.getDocument().getId().getId(), context.getFindMessage(), - ActiveStates.builder() - .setNewOn(context.isFilterUntranslated()) - .setFuzzyOn(context.isFilterNeedReview()) - .setTranslatedOn(context.isFilterTranslated()) - .setApprovedOn(context.isFilterApproved()) - .setRejectedOn(context.isFilterRejected()) + ContentStateGroup.builder() + .includeNew(context.isFilterUntranslated()) + .includeFuzzy(context.isFilterNeedReview()) + .includeTranslated(context.isFilterTranslated()) + .includeApproved(context.isFilterApproved()) + .includeRejected(context.isFilterRejected()) .build()); } @@ -72,7 +73,7 @@ public String getPhrase() return this.phrase; } - public ActiveStates getActiveStates() + public ContentStateGroup getActiveStates() { return activeStates; }