From 44285f554b4938d38c4f450795288f4922d3d44f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tobias=20Sch=C3=B6neberg?= Date: Thu, 31 Aug 2017 12:02:06 +0200 Subject: [PATCH] HUEditorViewRepository distinguish between "no restriction" and "no HUs" ..in retrieveHUIdsEffective() Also * HUIdsFilterHelper: minor javadoc 557: Picking Window: Open HU Selection window filtering Task-Url: https://github.com/metasfresh/metasfresh-webui-api/issues/557 --- .../handlingunits/HUEditorViewRepository.java | 47 ++++++++++++++----- .../web/handlingunits/HUIdsFilterHelper.java | 2 + 2 files changed, 38 insertions(+), 11 deletions(-) diff --git a/src/main/java/de/metas/ui/web/handlingunits/HUEditorViewRepository.java b/src/main/java/de/metas/ui/web/handlingunits/HUEditorViewRepository.java index c6fd25f1d..8f7bc0770 100644 --- a/src/main/java/de/metas/ui/web/handlingunits/HUEditorViewRepository.java +++ b/src/main/java/de/metas/ui/web/handlingunits/HUEditorViewRepository.java @@ -98,7 +98,7 @@ SqlViewBinding getSqlViewBinding() { return sqlViewBinding; } - + SqlViewRowIdsConverter getRowIdsConverter() { return getSqlViewBinding().getRowIdsConverter(); @@ -186,7 +186,7 @@ private HUEditorRow createHUEditorRow( .setProcessed(processed) .setAttributesProvider(attributesProvider) // - //.setHUId(huId) + // .setHUId(huId) .setCode(hu.getValue()) .setHUUnitType(huUnitTypeLookupValue) .setHUStatus(huStatus) @@ -307,9 +307,9 @@ private IHUProductStorage getSingleProductStorage(final I_M_HU hu) } private HUEditorRow createHUEditorRow( - final int parent_HU_ID, - final int topLevelHUId, - @NonNull final IHUProductStorage huStorage, + final int parent_HU_ID, + final int topLevelHUId, + @NonNull final IHUProductStorage huStorage, final boolean processed) { final I_M_HU hu = huStorage.getM_HU(); @@ -324,7 +324,7 @@ private HUEditorRow createHUEditorRow( .setProcessed(processed) .setAttributesProvider(attributesProviderEffective) // - //.setHUId(huId) + // .setHUId(huId) // .setCode(hu.getValue()) // NOTE: don't show value on storage level .setHUUnitType(JSONLookupValue.of(X_M_HU_PI_Version.HU_UNITTYPE_VirtualPI, "CU")) .setHUStatus(createHUStatusLookupValue(hu)) @@ -364,16 +364,19 @@ private static JSONLookupValue createUOMLookupValue(final I_C_UOM uom) return JSONLookupValue.of(uom.getC_UOM_ID(), uom.getUOMSymbol()); } - public List retrieveHUIdsEffective(final HUIdsFilterData huIdsFilter, final List filters) + public List retrieveHUIdsEffective( + @NonNull final HUIdsFilterData huIdsFilter, + @NonNull final List filters) { - final ImmutableList onlyHUIds = ImmutableList.copyOf(Iterables.concat(huIdsFilter.getInitialHUIds(), huIdsFilter.getMustHUIds())); + + final ImmutableList onlyHUIds = createListOfCombinedIDs(huIdsFilter); - if (filters.isEmpty() && !huIdsFilter.hasInitialHUQuery()) + if (filters.isEmpty() && !huIdsFilter.hasInitialHUQuery() && onlyHUIds != null) { + // shortcut: don't bother the DB but return the list of IDs that we already have return onlyHUIds; } - // // Create HU query IHUQueryBuilder huQuery = huIdsFilter.getInitialHUQueryOrNull(); if (huQuery == null) @@ -383,7 +386,7 @@ public List retrieveHUIdsEffective(final HUIdsFilterData huIdsFilter, f huQuery.setContext(PlainContextAware.newOutOfTrx()); // Only HUs - if (!onlyHUIds.isEmpty()) + if (onlyHUIds != null) { huQuery.addOnlyHUIds(onlyHUIds); } @@ -403,4 +406,26 @@ public List retrieveHUIdsEffective(final HUIdsFilterData huIdsFilter, f return huQuery.createQuery().listIds(); } + + private ImmutableList createListOfCombinedIDs(@NonNull final HUIdsFilterData huIdsFilter) + { + final ImmutableList onlyHUIds; + if (huIdsFilter.getInitialHUIds() != null && huIdsFilter.getMustHUIds() != null) + { + onlyHUIds = ImmutableList.copyOf(Iterables.concat(huIdsFilter.getInitialHUIds(), huIdsFilter.getMustHUIds())); + } + else if (huIdsFilter.getInitialHUIds() != null) + { + onlyHUIds = ImmutableList.copyOf(huIdsFilter.getInitialHUIds()); + } + else if (huIdsFilter.getMustHUIds() != null) + { + onlyHUIds = ImmutableList.copyOf(huIdsFilter.getMustHUIds()); + } + else + { + onlyHUIds = null; // both are null => no restriction + } + return onlyHUIds; + } } diff --git a/src/main/java/de/metas/ui/web/handlingunits/HUIdsFilterHelper.java b/src/main/java/de/metas/ui/web/handlingunits/HUIdsFilterHelper.java index 6fd0e9fcb..163c1c3b5 100644 --- a/src/main/java/de/metas/ui/web/handlingunits/HUIdsFilterHelper.java +++ b/src/main/java/de/metas/ui/web/handlingunits/HUIdsFilterHelper.java @@ -59,6 +59,7 @@ public final class HUIdsFilterHelper public static final class HUIdsFilterData { /** + * Creates a new instance with the given {@code huIds} as {@link #getInitialHUIds()}. * * @param huIds may be empty, but not null. Empty means that no HU will be matched. * @return @@ -191,6 +192,7 @@ public static final DocumentFilter findExistingOrNull(final Collectionno HU will be matched. * * @return