Skip to content

Commit

Permalink
JSONDocumentFilter.caption
Browse files Browse the repository at this point in the history
  • Loading branch information
teosarca committed Jun 12, 2017
1 parent cbfad4a commit 641f6f3
Show file tree
Hide file tree
Showing 6 changed files with 84 additions and 17 deletions.
18 changes: 18 additions & 0 deletions src/main/java/de/metas/ui/web/document/filter/DocumentFilter.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -81,6 +83,7 @@ public static DocumentFilter ofQueryFilter(final String filterId, final IQueryFi
}

private final String filterId;
private final ITranslatableString caption;
private final List<DocumentFilterParam> parameters;

private DocumentFilter(final Builder builder)
Expand All @@ -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);
}
Expand All @@ -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();
}
Expand All @@ -107,6 +113,11 @@ public String getFilterId()
{
return filterId;
}

public String getCaption(final String adLanguage)
{
return caption != null ? caption.translate(adLanguage) : null;
}

public List<DocumentFilterParam> getParameters()
{
Expand All @@ -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<DocumentFilterParam> parameters;

private Builder()
Expand All @@ -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<DocumentFilterParam> parameters)
{
this.parameters = parameters;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@

import com.google.common.collect.ImmutableMap;

import de.metas.i18n.ITranslatableString;
import de.metas.ui.web.document.filter.DocumentFilterParam.Operator;

/*
Expand Down Expand Up @@ -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<DocumentFilterParam> parameters = new ArrayList<>();
for (int restrictionIdx = 0, restrictionsCount = mquery.getRestrictionCount(); restrictionIdx < restrictionsCount; restrictionIdx++)
Expand All @@ -66,6 +67,7 @@ public static DocumentFilter createDocumentFilterFromMQuery(final MQuery mquery)

return DocumentFilter.builder()
.setFilterId(filterId)
.setCaption(caption)
.setParameters(parameters)
.build();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -145,19 +146,19 @@ private static DocumentFilter unwrapUsingDescriptor(final JSONDocumentFilter jso
return filter.build();
}

public static final List<JSONDocumentFilter> ofList(final List<DocumentFilter> filters)
public static final List<JSONDocumentFilter> ofList(final List<DocumentFilter> filters, final String adLanguage)
{
if (filters == null || filters.isEmpty())
{
return ImmutableList.of();
}

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<JSONDocumentFilterParam> jsonParameters = filter.getParameters()
Expand All @@ -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<JSONDocumentFilterParam> parameters;

@JsonCreator
private JSONDocumentFilter(
@JsonProperty("filterId") final String filterId //
, @JsonProperty("parameters") final List<JSONDocumentFilterParam> parameters //
)
@JsonProperty("filterId") final String filterId,
@JsonProperty("caption") final String caption,
@JsonProperty("parameters") final List<JSONDocumentFilterParam> parameters)
{
Check.assumeNotEmpty(filterId, "filterId is not empty");

this.filterId = filterId;
this.caption = caption;
this.parameters = parameters == null ? ImmutableList.of() : ImmutableList.copyOf(parameters);
}
}
4 changes: 2 additions & 2 deletions src/main/java/de/metas/ui/web/view/json/JSONViewResult.java
Original file line number Diff line number Diff line change
Expand Up @@ -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());

//
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,12 +82,14 @@ public static final List<JSONDocumentReference> ofList(final Collection<Document

private JSONDocumentReference(final DocumentReference documentReference, final JSONOptions jsonOpts)
{
final String adLanguage = jsonOpts.getAD_Language();

id = documentReference.getId();
caption = documentReference.getCaption(jsonOpts.getAD_Language());
caption = documentReference.getCaption(adLanguage);
windowId = documentReference.getWindowId();
documentsCount = documentReference.getDocumentsCount();

final DocumentFilter filter = documentReference.getFilter();
this.filter = JSONDocumentFilter.of(filter);
this.filter = JSONDocumentFilter.of(filter, adLanguage);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,10 @@
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.MQueryDocumentFilterHelper;
import de.metas.ui.web.window.WindowConstants;
import de.metas.ui.web.window.datatypes.DocumentPath;
import de.metas.ui.web.window.datatypes.WindowId;
import de.metas.ui.web.window.descriptor.DocumentEntityDescriptor;
Expand Down Expand Up @@ -58,11 +61,12 @@ public List<DocumentReference> 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());
});
}
Expand All @@ -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();
}

Expand Down

0 comments on commit 641f6f3

Please sign in to comment.