diff --git a/src/main/java/de/metas/location/geocoding/process/C_BPartner_Window_AreaSearchProcess.java b/src/main/java/de/metas/location/geocoding/process/C_BPartner_Window_AreaSearchProcess.java index 404d4755e..9c6d6b748 100644 --- a/src/main/java/de/metas/location/geocoding/process/C_BPartner_Window_AreaSearchProcess.java +++ b/src/main/java/de/metas/location/geocoding/process/C_BPartner_Window_AreaSearchProcess.java @@ -47,7 +47,7 @@ import de.metas.process.ProcessExecutionResult; import de.metas.ui.web.document.filter.DocumentFilter; import de.metas.ui.web.document.geo_location.GeoLocationDocumentService; -import de.metas.ui.web.document.geo_location.GeoLocationQuery; +import de.metas.ui.web.document.geo_location.GeoLocationDocumentQuery; import de.metas.ui.web.view.CreateViewRequest; import de.metas.ui.web.view.IView; import de.metas.ui.web.view.IViewsRepository; @@ -111,16 +111,16 @@ private DocumentFilter createAreaSearchFilter(final I_C_Location location) { final DocumentEntityDescriptor entityDescriptor = documentCollection.getDocumentEntityDescriptor(getWindowId()); - final GeoLocationQuery query = createGeoLocationQuery(location); + final GeoLocationDocumentQuery query = createGeoLocationQuery(location); return geoLocationDocumentService.createDocumentFilter(entityDescriptor, query); } - private GeoLocationQuery createGeoLocationQuery(final I_C_Location location) + private GeoLocationDocumentQuery createGeoLocationQuery(final I_C_Location location) { final CountryId countryId = CountryId.ofRepoId(location.getC_Country_ID()); final ITranslatableString countryName = countriesRepo.getCountryNameById(countryId); - return GeoLocationQuery.builder() + return GeoLocationDocumentQuery.builder() .country(IntegerLookupValue.of(countryId, countryName)) .address1(location.getAddress1()) .city(location.getCity()) diff --git a/src/main/java/de/metas/ui/web/document/geo_location/GeoLocationDocumentDescriptors.java b/src/main/java/de/metas/ui/web/document/geo_location/GeoLocationDocumentDescriptors.java deleted file mode 100644 index a21d6b718..000000000 --- a/src/main/java/de/metas/ui/web/document/geo_location/GeoLocationDocumentDescriptors.java +++ /dev/null @@ -1,120 +0,0 @@ -package de.metas.ui.web.document.geo_location; - -import java.util.Collection; -import java.util.Set; - -import javax.annotation.Nullable; - -import org.adempiere.exceptions.AdempiereException; -import org.compiere.model.I_C_BPartner_Location; -import org.compiere.model.I_C_Location; - -import com.google.common.collect.ImmutableSet; - -import de.metas.document.archive.model.I_C_BPartner; -import de.metas.ui.web.document.geo_location.GeoLocationDocumentDescriptor.LocationColumnNameType; -import de.metas.ui.web.window.descriptor.DocumentFieldDescriptor; -import lombok.NonNull; -import lombok.experimental.UtilityClass; - -/* - * #%L - * metasfresh-webui-api - * %% - * Copyright (C) 2019 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 - * . - * #L% - */ - -@UtilityClass -final class GeoLocationDocumentDescriptors -{ - private static final String FIELDNAME_C_Location_ID = I_C_Location.COLUMNNAME_C_Location_ID; - private static final String FIELDNAME_C_BPartner_ID = I_C_BPartner.COLUMNNAME_C_BPartner_ID; - private static final String FIELDNAME_C_BPartner_Location_ID = I_C_BPartner_Location.COLUMNNAME_C_BPartner_Location_ID; - - private static final GeoLocationDocumentDescriptor DESCRIPTOR_FOR_LocationId = GeoLocationDocumentDescriptor.builder() - .type(LocationColumnNameType.LocationId) - .locationColumnName(FIELDNAME_C_Location_ID) - .build(); - private static final GeoLocationDocumentDescriptor DESCRIPTOR_FOR_BPartnerLocationId = GeoLocationDocumentDescriptor.builder() - .type(LocationColumnNameType.BPartnerLocationId) - .locationColumnName(FIELDNAME_C_BPartner_Location_ID) - .build(); - private static final GeoLocationDocumentDescriptor DESCRIPTOR_FOR_BPartnerId = GeoLocationDocumentDescriptor.builder() - .type(LocationColumnNameType.BPartnerId) - .locationColumnName(FIELDNAME_C_BPartner_ID) - .build(); - - public static GeoLocationDocumentDescriptor getGeoLocationDocumentDescriptor( - @NonNull final String tableName, - @NonNull final Collection fields) - { - final ImmutableSet fieldNames = extractFieldNames(fields); - final GeoLocationDocumentDescriptor descriptor = getGeoLocationDocumentDescriptorOrNull(tableName, fieldNames); - if (descriptor == null) - { - throw new AdempiereException("Table " + tableName + " does not have geo-location support") - .appendParametersToMessage() - .setParameter("fields", fieldNames); - } - - return descriptor; - } - - @Nullable - public static GeoLocationDocumentDescriptor getGeoLocationDocumentDescriptorOrNull( - @NonNull final String tableName, - @NonNull final Collection fields) - { - final ImmutableSet fieldNames = extractFieldNames(fields); - return getGeoLocationDocumentDescriptorOrNull(tableName, fieldNames); - } - - @Nullable - private static GeoLocationDocumentDescriptor getGeoLocationDocumentDescriptorOrNull( - @NonNull final String tableName, - @NonNull final Set fieldNames) - { - if (fieldNames.contains(FIELDNAME_C_Location_ID)) - { - return DESCRIPTOR_FOR_LocationId; - } - else if (fieldNames.contains(FIELDNAME_C_BPartner_Location_ID)) - { - return DESCRIPTOR_FOR_BPartnerLocationId; - } - else if (fieldNames.contains(FIELDNAME_C_BPartner_ID)) - { - return DESCRIPTOR_FOR_BPartnerId; - } - else - { - return null; - } - } - - private static ImmutableSet extractFieldNames(final Collection fields) - { - if (fields.isEmpty()) - { - return ImmutableSet.of(); - } - - return fields.stream().map(DocumentFieldDescriptor::getFieldName).collect(ImmutableSet.toImmutableSet()); - } - -} diff --git a/src/main/java/de/metas/ui/web/document/geo_location/GeoLocationQuery.java b/src/main/java/de/metas/ui/web/document/geo_location/GeoLocationDocumentQuery.java similarity index 96% rename from src/main/java/de/metas/ui/web/document/geo_location/GeoLocationQuery.java rename to src/main/java/de/metas/ui/web/document/geo_location/GeoLocationDocumentQuery.java index d98651fbe..94a380537 100644 --- a/src/main/java/de/metas/ui/web/document/geo_location/GeoLocationQuery.java +++ b/src/main/java/de/metas/ui/web/document/geo_location/GeoLocationDocumentQuery.java @@ -31,7 +31,7 @@ @Value @Builder -public class GeoLocationQuery +public class GeoLocationDocumentQuery { @NonNull IntegerLookupValue country; diff --git a/src/main/java/de/metas/ui/web/document/geo_location/GeoLocationDocumentService.java b/src/main/java/de/metas/ui/web/document/geo_location/GeoLocationDocumentService.java index c144a3e6a..8c0b60e83 100644 --- a/src/main/java/de/metas/ui/web/document/geo_location/GeoLocationDocumentService.java +++ b/src/main/java/de/metas/ui/web/document/geo_location/GeoLocationDocumentService.java @@ -1,13 +1,20 @@ package de.metas.ui.web.document.geo_location; import java.util.Collection; +import java.util.Set; import javax.annotation.Nullable; import org.adempiere.ad.element.api.AdTabId; +import org.adempiere.exceptions.AdempiereException; +import org.compiere.model.I_C_BPartner_Location; import org.compiere.model.I_C_Country; +import org.compiere.model.I_C_Location; import org.springframework.stereotype.Component; +import com.google.common.collect.ImmutableSet; + +import de.metas.document.archive.model.I_C_BPartner; import de.metas.i18n.IMsgBL; import de.metas.i18n.ITranslatableString; import de.metas.ui.web.document.filter.DocumentFilter; @@ -18,6 +25,7 @@ import de.metas.ui.web.document.filter.provider.DocumentFilterDescriptorsProviderFactory; import de.metas.ui.web.document.filter.provider.ImmutableDocumentFilterDescriptorsProvider; import de.metas.ui.web.document.filter.provider.NullDocumentFilterDescriptorsProvider; +import de.metas.ui.web.document.geo_location.GeoLocationDocumentDescriptor.LocationColumnNameType; import de.metas.ui.web.window.descriptor.DocumentEntityDescriptor; import de.metas.ui.web.window.descriptor.DocumentFieldDescriptor; import de.metas.ui.web.window.descriptor.DocumentFieldWidgetType; @@ -54,6 +62,19 @@ public class GeoLocationDocumentService implements DocumentFilterDescriptorsProv private static final String MSG_FILTER_CAPTION = "LocationAreaSearch"; + private static final GeoLocationDocumentDescriptor DESCRIPTOR_FOR_LocationId = GeoLocationDocumentDescriptor.builder() + .type(LocationColumnNameType.LocationId) + .locationColumnName(I_C_Location.COLUMNNAME_C_Location_ID) + .build(); + private static final GeoLocationDocumentDescriptor DESCRIPTOR_FOR_BPartnerLocationId = GeoLocationDocumentDescriptor.builder() + .type(LocationColumnNameType.BPartnerLocationId) + .locationColumnName(I_C_BPartner_Location.COLUMNNAME_C_BPartner_Location_ID) + .build(); + private static final GeoLocationDocumentDescriptor DESCRIPTOR_FOR_BPartnerId = GeoLocationDocumentDescriptor.builder() + .type(LocationColumnNameType.BPartnerId) + .locationColumnName(I_C_BPartner.COLUMNNAME_C_BPartner_ID) + .build(); + public GeoLocationDocumentService() { } @@ -74,7 +95,8 @@ public DocumentFilterDescriptorsProvider createFiltersProvider( return null; } - final GeoLocationDocumentDescriptor descriptor = GeoLocationDocumentDescriptors.getGeoLocationDocumentDescriptorOrNull(tableName, fields); + final ImmutableSet fieldNames = extractFieldNames(fields); + final GeoLocationDocumentDescriptor descriptor = getGeoLocationDocumentDescriptorOrNull(tableName, fieldNames); if (descriptor == null) { return NullDocumentFilterDescriptorsProvider.instance; @@ -83,6 +105,39 @@ public DocumentFilterDescriptorsProvider createFiltersProvider( return ImmutableDocumentFilterDescriptorsProvider.of(createDocumentFilterDescriptor(descriptor)); } + @Nullable + private static GeoLocationDocumentDescriptor getGeoLocationDocumentDescriptorOrNull( + @NonNull final String tableName, + @NonNull final Set fieldNames) + { + if (fieldNames.contains(DESCRIPTOR_FOR_LocationId.getLocationColumnName())) + { + return DESCRIPTOR_FOR_LocationId; + } + else if (fieldNames.contains(DESCRIPTOR_FOR_BPartnerLocationId.getLocationColumnName())) + { + return DESCRIPTOR_FOR_BPartnerLocationId; + } + else if (fieldNames.contains(DESCRIPTOR_FOR_BPartnerId.getLocationColumnName())) + { + return DESCRIPTOR_FOR_BPartnerId; + } + else + { + return null; + } + } + + private static ImmutableSet extractFieldNames(final Collection fields) + { + if (fields.isEmpty()) + { + return ImmutableSet.of(); + } + + return fields.stream().map(DocumentFieldDescriptor::getFieldName).collect(ImmutableSet.toImmutableSet()); + } + private DocumentFilterDescriptor createDocumentFilterDescriptor(final GeoLocationDocumentDescriptor descriptor) { final ITranslatableString caption = msgBL.getTranslatableMsgText(MSG_FILTER_CAPTION); @@ -123,11 +178,17 @@ private DocumentFilterDescriptor createDocumentFilterDescriptor(final GeoLocatio } @NonNull - public DocumentFilter createDocumentFilter(@NonNull final DocumentEntityDescriptor entityDescriptor, @NonNull final GeoLocationQuery query) + public DocumentFilter createDocumentFilter(@NonNull final DocumentEntityDescriptor entityDescriptor, @NonNull final GeoLocationDocumentQuery query) { - final GeoLocationDocumentDescriptor descriptor = GeoLocationDocumentDescriptors.getGeoLocationDocumentDescriptor( - entityDescriptor.getTableName(), - entityDescriptor.getFields()); + final String tableName = entityDescriptor.getTableName(); + final ImmutableSet fieldNames = extractFieldNames(entityDescriptor.getFields()); + final GeoLocationDocumentDescriptor descriptor = getGeoLocationDocumentDescriptorOrNull(tableName, fieldNames); + if (descriptor == null) + { + throw new AdempiereException("Table " + tableName + " does not have geo-location support") + .appendParametersToMessage() + .setParameter("fields", fieldNames); + } return DocumentFilter.builder() .setFilterId(GeoLocationFilterConverter.FILTER_ID)