Skip to content

Commit

Permalink
Merge pull request #634 from metasfresh/gh632-api
Browse files Browse the repository at this point in the history
HU-Trace: show all connected records #632
  • Loading branch information
metas-ts authored Oct 15, 2017
2 parents faa81d8 + ec8c28a commit f361453
Show file tree
Hide file tree
Showing 14 changed files with 755 additions and 53 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,9 @@ public String getCaption(@Nullable final String adLanguage)
return caption != null ? caption.translate(adLanguage) : null;
}

/**
* @return never returns {@code null}
*/
public List<DocumentFilterParam> getParameters()
{
return parameters;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,19 +39,6 @@
@EqualsAndHashCode // required for (ETag) caching
public class DocumentFilterParam
{
public static final Builder builder()
{
return new Builder();
}

public static final DocumentFilterParam ofSqlWhereClause(final boolean joinAnd, final String sqlWhereClause)
{
// NOTE: avoid having sqlWhereClauseParams because they might introduce issues when we have to convert to SQL code without params.
final List<Object> sqlWhereClauseParams = ImmutableList.of();
return new DocumentFilterParam(joinAnd, sqlWhereClause, sqlWhereClauseParams);
}


public static enum Operator
{
EQUAL, NOT_EQUAL, //
Expand Down Expand Up @@ -84,10 +71,31 @@ public boolean isRangeOperator()
private final String sqlWhereClause;
private final List<Object> sqlWhereClauseParams;

private DocumentFilterParam(final Builder builder)
public static final Builder builder()
{
super();
return new Builder();
}

public static final DocumentFilterParam ofSqlWhereClause(final boolean joinAnd, final String sqlWhereClause)
{
// NOTE: avoid having sqlWhereClauseParams because they might introduce issues when we have to convert to SQL code without params.
final List<Object> sqlWhereClauseParams = ImmutableList.of();
return new DocumentFilterParam(joinAnd, sqlWhereClause, sqlWhereClauseParams);
}

/**
* Shortcut to create an often-used kind of parameters.
*/
public static final DocumentFilterParam ofNameOperatorValue(
@NonNull final String fieldName,
@NonNull final Operator operator,
@NonNull final Object value)
{
return builder().setFieldName(fieldName).setOperator(operator).setValue(value).build();
}

private DocumentFilterParam(final Builder builder)
{
joinAnd = builder.joinAnd;

fieldName = builder.fieldName;
Expand All @@ -105,8 +113,6 @@ private DocumentFilterParam(final Builder builder)

private DocumentFilterParam(final boolean joinAnd, final String sqlWhereClause, final List<Object> sqlWhereClauseParams)
{
super();

this.joinAnd = joinAnd;

fieldName = null;
Expand Down Expand Up @@ -147,7 +153,7 @@ public String getSqlWhereClause()
{
return sqlWhereClause;
}

public List<Object> getSqlWhereClauseParams()
{
return sqlWhereClauseParams;
Expand Down Expand Up @@ -191,8 +197,8 @@ public <T> List<T> getValueAsList(@NonNull final Function<Object, T> itemConvert
{
throw new IllegalStateException("Cannot convert null value to List<Integer>");
}
if(valueAsCollection.isEmpty())

if (valueAsCollection.isEmpty())
{
return ImmutableList.of();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,10 @@ public String toString()

/** Build document filter where clause */
@Override
public String getSql(final SqlParamsCollector sqlParams, final DocumentFilter filter, final SqlOptions sqlOpts)
public String getSql(
@NonNull final SqlParamsCollector sqlParams,
@NonNull final DocumentFilter filter,
@NonNull final SqlOptions sqlOpts)
{
final StringBuilder sql = new StringBuilder();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import de.metas.printing.esb.base.util.Check;
import de.metas.ui.web.document.filter.DocumentFilter;
import de.metas.ui.web.window.model.sql.SqlOptions;
import lombok.NonNull;

/*
* #%L
Expand Down Expand Up @@ -50,7 +51,10 @@ public interface SqlDocumentFilterConverter
*/
String getSql(SqlParamsCollector sqlParamsOut, DocumentFilter filter, final SqlOptions sqlOpts);

default String getSql(final SqlParamsCollector sqlParamsOut, final List<DocumentFilter> filters, final SqlOptions sqlOpts)
default String getSql(
@NonNull final SqlParamsCollector sqlParamsOut,
@NonNull final List<DocumentFilter> filters,
@NonNull final SqlOptions sqlOpts)
{
if (filters.isEmpty())
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@
*/
public interface SqlDocumentFilterConverterDecorator
{
public WindowId getWindowId();
WindowId getWindowId();

public SqlDocumentFilterConverter decorate(SqlDocumentFilterConverter converter);
SqlDocumentFilterConverter decorate(SqlDocumentFilterConverter converter);
}
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,10 @@ private SqlDocumentFilterConvertersListWithFallback(@NonNull final SqlDocumentFi
}

@Override
public String getSql(final SqlParamsCollector sqlParamsOut, final DocumentFilter filter, final SqlOptions sqlOpts)
public String getSql(
@NonNull final SqlParamsCollector sqlParamsOut,
@NonNull final DocumentFilter filter,
@NonNull final SqlOptions sqlOpts)
{
// Find the effective converter to be used for given filter
final String filterId = filter.getFilterId();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
*/

/**
* Helper class used to collect SQL parameters between method calls.
* Helper class used to collect SQL parameters and convert parameter values to strings with correct SQL syntax. See the unit tests for usage examples.
*
* @author metas-dev <dev@metasfresh.com>
*
Expand All @@ -52,7 +52,10 @@ public static SqlParamsCollector newInstance()
}

/**
* Wraps the given list. All changes will be directed to that list.
* Wraps the given list if not {@code null}. All changes will be directed the list.
* If the list is null, the new instance is in "not-collecting" mode.
*
* @param list may be {@code null}, but not immutable.
*/
public static SqlParamsCollector wrapNullable(@Nullable final List<Object> list)
{
Expand All @@ -79,7 +82,7 @@ private SqlParamsCollector(final List<Object> params)
this.params = params;
paramsRO = params != null ? Collections.unmodifiableList(params) : null;
}

@Override
public String toString()
{
Expand Down Expand Up @@ -126,7 +129,7 @@ public void collectAll(@NonNull final ISqlQueryFilter sqlQueryFilter)
}
params.addAll(sqlParams);
}

public void collect(final SqlParamsCollector from)
{
collectAll(from.params);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -322,7 +322,10 @@ private HUBarcodeSqlDocumentFilterConverter()
}

@Override
public String getSql(final SqlParamsCollector sqlParamsOut, final DocumentFilter filter, final SqlOptions sqlOpts_NOTUSED)
public String getSql(
@NonNull final SqlParamsCollector sqlParamsOut,
@NonNull final DocumentFilter filter,
final SqlOptions sqlOpts_NOTUSED)
{
final Object barcodeObj = filter.getParameter(PARAM_Barcode).getValue();
if (barcodeObj == null)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -275,7 +275,10 @@ private HUIdsSqlDocumentFilterConverter()
}

@Override
public String getSql(final SqlParamsCollector sqlParamsOut, final DocumentFilter filter, final SqlOptions sqlOpts_NOTUSED)
public String getSql(
@NonNull final SqlParamsCollector sqlParamsOut,
@NonNull final DocumentFilter filter,
final SqlOptions sqlOpts_NOTUSED)
{
final HUIdsFilterData huIdsFilter = extractFilterData(filter);
final ImmutableList<Integer> onlyHUIds;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
package de.metas.ui.web.handlingunits.trace;

import de.metas.handlingunits.trace.HUTraceEventQuery;
import de.metas.handlingunits.trace.HUTraceRepository;
import de.metas.ui.web.document.filter.DocumentFilter;
import de.metas.ui.web.document.filter.sql.SqlDocumentFilterConverter;
import de.metas.ui.web.document.filter.sql.SqlParamsCollector;
import de.metas.ui.web.window.model.sql.SqlOptions;
import lombok.NonNull;

/*
* #%L
* metasfresh-webui-api
* %%
* Copyright (C) 2017 metas GmbH
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 2 of the
* License, or (at your option) any later version.
*
* This program 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program. If not, see
* <http://www.gnu.org/licenses/gpl-2.0.html>.
* #L%
*/

public class HUTraceResultExtender implements SqlDocumentFilterConverter
{
private static final String WHERE_IN_T_SELECTION = "(M_HU_Trace_ID IN (select T_Selection_ID from T_Selection where AD_PInstance_ID=%s))";

public static HUTraceResultExtender createForRepositoryAndconverter(
@NonNull final HUTraceRepository huTraceRepository,
@NonNull final SqlDocumentFilterConverter converter)
{
return new HUTraceResultExtender(huTraceRepository, converter);
}

private final HUTraceRepository huTraceRepository;
private final SqlDocumentFilterConverter converter;

private HUTraceResultExtender(
@NonNull final HUTraceRepository huTraceRepository,
@NonNull final SqlDocumentFilterConverter converter)
{
this.huTraceRepository = huTraceRepository;
this.converter = converter;
}

@Override
public String getSql(
@NonNull final SqlParamsCollector sqlParamsOut,
@NonNull final DocumentFilter filter,
@NonNull final SqlOptions sqlOpts)
{
if (filter.getParameters() == null || filter.getParameters().isEmpty())
{
return converter.getSql(sqlParamsOut, filter, sqlOpts); // do whatever the system usually does
}
final HUTraceEventQuery huTraceQuery = HuTraceQueryCreator.createTraceQueryFromDocumentFilter(filter);
final int selectionId = huTraceRepository.queryToSelection(huTraceQuery);

final String sqlPlaceHolder = sqlParamsOut.placeholder(selectionId);
return String.format(WHERE_IN_T_SELECTION, sqlPlaceHolder);
}
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
package de.metas.ui.web.handlingunits;
package de.metas.ui.web.handlingunits.trace;

import org.springframework.stereotype.Component;

import de.metas.ui.web.document.filter.DocumentFilter;
import de.metas.handlingunits.trace.HUTraceRepository;
import de.metas.ui.web.document.filter.sql.SqlDocumentFilterConverter;
import de.metas.ui.web.document.filter.sql.SqlDocumentFilterConverterDecorator;
import de.metas.ui.web.document.filter.sql.SqlParamsCollector;
import de.metas.ui.web.handlingunits.WEBUI_HU_Constants;
import de.metas.ui.web.window.datatypes.WindowId;
import de.metas.ui.web.window.model.sql.SqlOptions;
import lombok.NonNull;

/*
Expand Down Expand Up @@ -41,6 +40,13 @@
@Component
public class HUTraceSqlConverterDecorator implements SqlDocumentFilterConverterDecorator
{
private final HUTraceRepository huTraceRepository;

public HUTraceSqlConverterDecorator(final HUTraceRepository huTRaceRepository)
{
this.huTraceRepository = huTRaceRepository;
}

@Override
public WindowId getWindowId()
{
Expand All @@ -49,23 +55,6 @@ public WindowId getWindowId()

public SqlDocumentFilterConverter decorate(@NonNull final SqlDocumentFilterConverter converter)
{
return new HUTraceResultExtender(converter);
}

public static class HUTraceResultExtender implements SqlDocumentFilterConverter
{
private final SqlDocumentFilterConverter converter;

private HUTraceResultExtender(SqlDocumentFilterConverter converter)
{
this.converter = converter;
}

@Override
public String getSql(SqlParamsCollector sqlParamsOut, DocumentFilter filter, SqlOptions sqlOpts)
{
return converter.getSql(sqlParamsOut, filter, sqlOpts);
}
return HUTraceResultExtender.createForRepositoryAndconverter(huTraceRepository, converter);
}

}
Loading

0 comments on commit f361453

Please sign in to comment.