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