diff --git a/src/main/java/de/metas/ui/web/document/filter/DocumentFilter.java b/src/main/java/de/metas/ui/web/document/filter/DocumentFilter.java index 9d0223493..887508aee 100644 --- a/src/main/java/de/metas/ui/web/document/filter/DocumentFilter.java +++ b/src/main/java/de/metas/ui/web/document/filter/DocumentFilter.java @@ -14,6 +14,8 @@ import com.google.common.base.MoreObjects; import com.google.common.collect.ImmutableList; +import de.metas.i18n.ITranslatableString; +import de.metas.i18n.ImmutableTranslatableString; import de.metas.ui.web.document.filter.DocumentFilterParam.Operator; import lombok.NonNull; @@ -81,6 +83,7 @@ public static DocumentFilter ofQueryFilter(final String filterId, final IQueryFi } private final String filterId; + private final ITranslatableString caption; private final List parameters; private DocumentFilter(final Builder builder) @@ -89,6 +92,8 @@ private DocumentFilter(final Builder builder) filterId = builder.filterId; Check.assumeNotEmpty(filterId, "filterId is not empty"); + + caption = builder.caption; parameters = builder.parameters == null ? ImmutableList.of() : ImmutableList.copyOf(builder.parameters); } @@ -99,6 +104,7 @@ public String toString() return MoreObjects.toStringHelper(this) .omitNullValues() .add("filterId", filterId) + .add("caption", caption) .add("parameters", parameters.isEmpty() ? null : parameters) .toString(); } @@ -107,6 +113,11 @@ public String getFilterId() { return filterId; } + + public String getCaption(final String adLanguage) + { + return caption != null ? caption.translate(adLanguage) : null; + } public List getParameters() { @@ -125,6 +136,7 @@ public DocumentFilterParam getParameter(@NonNull final String fieldName) public static final class Builder { private String filterId; + private ITranslatableString caption = ImmutableTranslatableString.empty(); private List parameters; private Builder() @@ -143,6 +155,12 @@ public Builder setFilterId(final String filterId) return this; } + public Builder setCaption(@NonNull final ITranslatableString caption) + { + this.caption = caption; + return this; + } + public Builder setParameters(final List parameters) { this.parameters = parameters; diff --git a/src/main/java/de/metas/ui/web/document/filter/MQueryDocumentFilterHelper.java b/src/main/java/de/metas/ui/web/document/filter/MQueryDocumentFilterHelper.java index c331d5970..72c8b4352 100644 --- a/src/main/java/de/metas/ui/web/document/filter/MQueryDocumentFilterHelper.java +++ b/src/main/java/de/metas/ui/web/document/filter/MQueryDocumentFilterHelper.java @@ -9,6 +9,7 @@ import com.google.common.collect.ImmutableMap; +import de.metas.i18n.ITranslatableString; import de.metas.ui.web.document.filter.DocumentFilterParam.Operator; /* @@ -45,7 +46,7 @@ private MQueryDocumentFilterHelper() { } - public static DocumentFilter createDocumentFilterFromMQuery(final MQuery mquery) + public static DocumentFilter createDocumentFilterFromMQuery(final MQuery mquery, final ITranslatableString caption) { final List parameters = new ArrayList<>(); for (int restrictionIdx = 0, restrictionsCount = mquery.getRestrictionCount(); restrictionIdx < restrictionsCount; restrictionIdx++) @@ -66,6 +67,7 @@ public static DocumentFilter createDocumentFilterFromMQuery(final MQuery mquery) return DocumentFilter.builder() .setFilterId(filterId) + .setCaption(caption) .setParameters(parameters) .build(); } diff --git a/src/main/java/de/metas/ui/web/document/filter/json/JSONDocumentFilter.java b/src/main/java/de/metas/ui/web/document/filter/json/JSONDocumentFilter.java index 5f59d3546..babadc25c 100644 --- a/src/main/java/de/metas/ui/web/document/filter/json/JSONDocumentFilter.java +++ b/src/main/java/de/metas/ui/web/document/filter/json/JSONDocumentFilter.java @@ -11,6 +11,7 @@ import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility; import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import com.google.common.collect.ImmutableList; import com.google.common.collect.Maps; @@ -145,7 +146,7 @@ private static DocumentFilter unwrapUsingDescriptor(final JSONDocumentFilter jso return filter.build(); } - public static final List ofList(final List filters) + public static final List ofList(final List filters, final String adLanguage) { if (filters == null || filters.isEmpty()) { @@ -153,11 +154,11 @@ public static final List ofList(final List f } return filters.stream() - .map(filter -> of(filter)) + .map(filter -> of(filter, adLanguage)) .collect(GuavaCollectors.toImmutableList()); } - public static final JSONDocumentFilter of(final DocumentFilter filter) + public static final JSONDocumentFilter of(final DocumentFilter filter, final String adLanguage) { final String filterId = filter.getFilterId(); final List jsonParameters = filter.getParameters() @@ -167,24 +168,29 @@ public static final JSONDocumentFilter of(final DocumentFilter filter) .map(Optional::get) .collect(GuavaCollectors.toImmutableList()); - return new JSONDocumentFilter(filterId, jsonParameters); + return new JSONDocumentFilter(filterId, filter.getCaption(adLanguage), jsonParameters); } @JsonProperty("filterId") private final String filterId; + @JsonProperty("caption") + @JsonInclude(JsonInclude.Include.NON_EMPTY) + private final String caption; + @JsonProperty("parameters") private final List parameters; @JsonCreator private JSONDocumentFilter( - @JsonProperty("filterId") final String filterId // - , @JsonProperty("parameters") final List parameters // - ) + @JsonProperty("filterId") final String filterId, + @JsonProperty("caption") final String caption, + @JsonProperty("parameters") final List parameters) { Check.assumeNotEmpty(filterId, "filterId is not empty"); - + this.filterId = filterId; + this.caption = caption; this.parameters = parameters == null ? ImmutableList.of() : ImmutableList.copyOf(parameters); } } diff --git a/src/main/java/de/metas/ui/web/view/json/JSONViewResult.java b/src/main/java/de/metas/ui/web/view/json/JSONViewResult.java index 22c2a93d1..7878378b7 100644 --- a/src/main/java/de/metas/ui/web/view/json/JSONViewResult.java +++ b/src/main/java/de/metas/ui/web/view/json/JSONViewResult.java @@ -133,8 +133,8 @@ public JSONViewResult(final ViewResult viewResult, final String adLanguage) this.size = size >= 0 ? size : null; // NOTE: stickyFilters are not used by frontend but we are adding them to ease the troubleshooting - stickyFilters = JSONDocumentFilter.ofList(viewResult.getStickyFilters()); - filters = JSONDocumentFilter.ofList(viewResult.getFilters()); + stickyFilters = JSONDocumentFilter.ofList(viewResult.getStickyFilters(), adLanguage); + filters = JSONDocumentFilter.ofList(viewResult.getFilters(), adLanguage); orderBy = JSONViewOrderBy.ofList(viewResult.getOrderBys()); // diff --git a/src/main/java/de/metas/ui/web/window/datatypes/json/JSONDocumentReference.java b/src/main/java/de/metas/ui/web/window/datatypes/json/JSONDocumentReference.java index d6e4e9a54..4df0253b6 100644 --- a/src/main/java/de/metas/ui/web/window/datatypes/json/JSONDocumentReference.java +++ b/src/main/java/de/metas/ui/web/window/datatypes/json/JSONDocumentReference.java @@ -82,12 +82,14 @@ public static final List ofList(final Collection getDocumentReferences(final DocumentPath document } final DocumentAsZoomSource zoomSource = new DocumentAsZoomSource(document); + final ITranslatableString filterCaption = extractFilterCaption(document); return ZoomInfoFactory.get() .retrieveZoomInfos(zoomSource) .stream() - .map(zoomInfo -> createDocumentReference(zoomInfo)) + .map(zoomInfo -> createDocumentReference(zoomInfo, filterCaption)) .collect(ImmutableList.toImmutableList()); }); } @@ -78,18 +82,53 @@ public DocumentReference getDocumentReference(final DocumentPath sourceDocumentP final DocumentAsZoomSource zoomSource = new DocumentAsZoomSource(sourceDocument); final ZoomInfo zoomInfo = ZoomInfoFactory.get().retrieveZoomInfo(zoomSource, targetWindowId.toInt()); - return createDocumentReference(zoomInfo); + final ITranslatableString filterCaption = extractFilterCaption(sourceDocument); + return createDocumentReference(zoomInfo, filterCaption); }); } + + private final ITranslatableString extractFilterCaption(final Document sourceDocument) + { + // + // Window caption + final ITranslatableString windowCaption = sourceDocument.getEntityDescriptor().getCaption(); + + // + // Document info + // TODO: i think we shall use lookup to fetch the document description + final ITranslatableString documentSummary; + if(sourceDocument.hasField(WindowConstants.FIELDNAME_DocumentSummary)) + { + final String documentSummaryStr = sourceDocument.getFieldView(WindowConstants.FIELDNAME_DocumentSummary).getValueAs(String.class); + documentSummary = ImmutableTranslatableString.constant(documentSummaryStr); + } + else if(sourceDocument.hasField(WindowConstants.FIELDNAME_DocumentNo)) + { + final String documentNoStr = sourceDocument.getFieldView(WindowConstants.FIELDNAME_DocumentNo).getValueAs(String.class); + documentSummary = ImmutableTranslatableString.constant(documentNoStr); + } + else if(sourceDocument.hasField(WindowConstants.FIELDNAME_Name)) + { + final String nameStr = sourceDocument.getFieldView(WindowConstants.FIELDNAME_Name).getValueAs(String.class); + documentSummary = ImmutableTranslatableString.constant(nameStr); + } + else + { + documentSummary = ImmutableTranslatableString.constant(sourceDocument.getDocumentId().toString()); + } + + // Window caption + document info + return ITranslatableString.compose(" ", windowCaption, documentSummary); + } - private static final DocumentReference createDocumentReference(final ZoomInfo zoomInfo) + private static final DocumentReference createDocumentReference(final ZoomInfo zoomInfo, ITranslatableString filterCaption) { return DocumentReference.builder() .id(zoomInfo.getId()) .caption(zoomInfo.getLabel()) .windowId(WindowId.of(zoomInfo.getAD_Window_ID())) .documentsCount(zoomInfo.getRecordCount()) - .filter(MQueryDocumentFilterHelper.createDocumentFilterFromMQuery(zoomInfo.getQuery())) + .filter(MQueryDocumentFilterHelper.createDocumentFilterFromMQuery(zoomInfo.getQuery(), filterCaption)) .build(); }