diff --git a/www-client/src/main/java/fr/agrometinfo/www/client/i18n/AppConstants.java b/www-client/src/main/java/fr/agrometinfo/www/client/i18n/AppConstants.java index 1cc0025efdff093ca1972cf86fb334370dfa049b..238bb3fc04aad5679757a093e93a607ca611021b 100644 --- a/www-client/src/main/java/fr/agrometinfo/www/client/i18n/AppConstants.java +++ b/www-client/src/main/java/fr/agrometinfo/www/client/i18n/AppConstants.java @@ -234,12 +234,6 @@ public interface AppConstants extends com.google.gwt.i18n.client.ConstantsWithLo @DefaultStringValue("See the \"Personal data\" paragraph in the legal notice.") String seePrivacyPolicy(); - /** - * @return translation - */ - @DefaultStringValue("-- please select --") - String selectPrompt(); - /** * @return translation */ diff --git a/www-client/src/main/java/fr/agrometinfo/www/client/presenter/LayoutPresenter.java b/www-client/src/main/java/fr/agrometinfo/www/client/presenter/LayoutPresenter.java index 2b977aeaaf73fae78d3bb696539e372137820255..ed764cca0fdec896f4915da1f499f81f5dcec95b 100644 --- a/www-client/src/main/java/fr/agrometinfo/www/client/presenter/LayoutPresenter.java +++ b/www-client/src/main/java/fr/agrometinfo/www/client/presenter/LayoutPresenter.java @@ -108,6 +108,9 @@ public final class LayoutPresenter implements Presenter { } } } + if ("0".equals(choice.getFeatureId())) { + choice.setFeatureId(null); + } mapPresenter.loadValues(choice, chosenIndicator); rightPanelPresenter.loadValues(choice); } @@ -120,6 +123,30 @@ public final class LayoutPresenter implements Presenter { private void setPeriods(final List<PeriodDTO> list) { this.periods = list; view.setPeriods(list); + + IndicatorServiceFactory.INSTANCE.getRegions() // + .onSuccess(this::setRegions) // + .onFailed(view::failureNotification) // + .send(); + } + + /** + * @param list regions with indicators + */ + private void setRegions(final Map<String, String> list) { + view.setRegions(list); + + IndicatorServiceFactory.INSTANCE.getYears() // + .onSuccess(this::setYears) // + .onFailed(view::failureNotification) // + .send(); + } + + /** + * @param list years of computed values + */ + private void setYears(final List<Integer> list) { + view.setYears(list); } /** @@ -146,14 +173,5 @@ public final class LayoutPresenter implements Presenter { .onFailed(view::failureNotification) // .send(); - IndicatorServiceFactory.INSTANCE.getRegions() // - .onSuccess(view::setRegions) // - .onFailed(view::failureNotification) // - .send(); - - IndicatorServiceFactory.INSTANCE.getYears() // - .onSuccess(view::setYears) // - .onFailed(view::failureNotification) // - .send(); } } diff --git a/www-client/src/main/java/fr/agrometinfo/www/client/ui/DominoSelectBuilder.java b/www-client/src/main/java/fr/agrometinfo/www/client/ui/DominoSelectBuilder.java index 6e9173191f822fa0b26b6b8c8b8249e0e05f22ee..fdd5f050eda7427bf2ce10a78527b92ab63a6227 100644 --- a/www-client/src/main/java/fr/agrometinfo/www/client/ui/DominoSelectBuilder.java +++ b/www-client/src/main/java/fr/agrometinfo/www/client/ui/DominoSelectBuilder.java @@ -8,8 +8,6 @@ import java.util.stream.Collectors; import org.dominokit.domino.ui.forms.Select; import org.dominokit.domino.ui.forms.SelectOption; -import com.google.gwt.core.client.GWT; - /** * Builder for a Domino {@link Select}, a component that allow selecting a * single option from a DropDownMenu. @@ -59,7 +57,6 @@ public final class DominoSelectBuilder<T> extends SelectBuilder<T, Select<T>> { } private Select<T> getSelect() { - GWT.log("SelectBuilder.getSelect()"); if (select == null) { select = Select.<T>create(prompt) // .dropdown(); @@ -75,14 +72,31 @@ public final class DominoSelectBuilder<T> extends SelectBuilder<T, Select<T>> { @Override public DominoSelectBuilder<T> select(final T value) { + if (value == null) { + return this; + } select.select(createSelectOption(value)); return this; } @Override public DominoSelectBuilder<T> setPrompt(final String text) { + if (select != null) { + throw new UnsupportedOperationException("Cannot change prompt after instantiation."); + } this.prompt = text; return this; } + /** + * Use an existing element. + * + * @param value existing select element + * @return same builder instance + */ + public DominoSelectBuilder<T> setSelect(final Select<T> value) { + select = value; + return this; + } + } diff --git a/www-client/src/main/java/fr/agrometinfo/www/client/view/LayoutView.java b/www-client/src/main/java/fr/agrometinfo/www/client/view/LayoutView.java index b0233e0329556ea9a6c662131994ebade684eab8..64352adc56be584bae797356f62c7056906d6358 100644 --- a/www-client/src/main/java/fr/agrometinfo/www/client/view/LayoutView.java +++ b/www-client/src/main/java/fr/agrometinfo/www/client/view/LayoutView.java @@ -1,8 +1,8 @@ package fr.agrometinfo.www.client.view; import static org.jboss.elemento.Elements.a; +import static org.jboss.elemento.Elements.div; import static org.jboss.elemento.Elements.li; -import static org.jboss.elemento.Elements.select; import java.util.HashMap; import java.util.List; @@ -11,22 +11,18 @@ import java.util.Map.Entry; import java.util.Optional; import java.util.StringJoiner; +import org.dominokit.domino.ui.forms.Select; import org.dominokit.domino.ui.forms.SwitchButton; import org.dominokit.domino.ui.grid.flex.FlexItem; -import org.dominokit.domino.ui.header.BlockHeader; -import org.dominokit.domino.ui.icons.Icon; import org.dominokit.domino.ui.icons.Icons; import org.dominokit.domino.ui.icons.MdiIcon; import org.dominokit.domino.ui.layout.Layout; import org.dominokit.domino.ui.menu.Menu; import org.dominokit.domino.ui.menu.MenuItem; import org.dominokit.domino.ui.notifications.Notification; -import org.dominokit.domino.ui.popover.PopupPosition; -import org.dominokit.domino.ui.popover.Tooltip; import org.dominokit.domino.ui.style.Styles; import org.dominokit.domino.ui.utils.DominoElement; import org.dominokit.domino.ui.utils.ScreenMedia; -import org.dominokit.domino.ui.utils.TextNode; import org.dominokit.rest.shared.request.FailedResponseBean; import org.jboss.elemento.Elements; import org.jboss.elemento.EmptyContentBuilder; @@ -42,16 +38,14 @@ import elemental2.dom.HTMLAnchorElement; import elemental2.dom.HTMLDivElement; import elemental2.dom.HTMLElement; import elemental2.dom.HTMLImageElement; -import elemental2.dom.HTMLSelectElement; import elemental2.dom.MouseEvent; -import elemental2.dom.Text; import fr.agrometinfo.www.client.i18n.AppConstants; import fr.agrometinfo.www.client.i18n.AppMessages; import fr.agrometinfo.www.client.presenter.LayoutPresenter; import fr.agrometinfo.www.client.presenter.MapPresenter; import fr.agrometinfo.www.client.presenter.RightPanelPresenter; import fr.agrometinfo.www.client.ui.AgroclimAppsMenu; -import fr.agrometinfo.www.client.ui.HTMLSelectElementBuilder; +import fr.agrometinfo.www.client.ui.DominoSelectBuilder; import fr.agrometinfo.www.shared.dto.ChoiceDTO; import fr.agrometinfo.www.shared.dto.FeatureLevel; import fr.agrometinfo.www.shared.dto.IndicatorDTO; @@ -73,6 +67,11 @@ public final class LayoutView extends AbstractBaseView<LayoutPresenter> implemen */ private static final String DEFAULT_INDICATOR = "meant"; + /** + * Code of period to show by default. + */ + private static final String DEFAULT_PERIOD = "year"; + /** * I18N constants. */ @@ -127,12 +126,12 @@ public final class LayoutView extends AbstractBaseView<LayoutPresenter> implemen /** * Selector for indicators. */ - private final HtmlContentBuilder<HTMLSelectElement> indicatorSelect = select(); + private final Select<IndicatorDTO> indicatorSelect = Select.create(CSTS.chooseIndicator()); /** * Selector for indicator periods. */ - private final HtmlContentBuilder<HTMLSelectElement> periodSelect = select(); + private final Select<PeriodDTO> periodSelect = Select.create(CSTS.choosePeriod()); /** * Application layout. @@ -142,16 +141,18 @@ public final class LayoutView extends AbstractBaseView<LayoutPresenter> implemen /** * Selector for regions. */ - private final HtmlContentBuilder<HTMLSelectElement> regionSelect = select(); + private final Select<Entry<String, String>> regionSelect = Select.create(CSTS.chooseRegion()); /** * Summary of available indicators. */ - private final Text summary = TextNode.empty(); + private final HtmlContentBuilder<HTMLDivElement> summary = div().css("p-b-15"); + /** * Selector for year. */ - private final HtmlContentBuilder<HTMLSelectElement> yearSelect = select(); + private final Select<Entry<String, String>> yearSelect = Select.create(CSTS.chooseYear()); + /** * Drop down menu for user actions. */ @@ -206,14 +207,13 @@ public final class LayoutView extends AbstractBaseView<LayoutPresenter> implemen DomGlobal.console.info("initLayout()"); choice.setLevel(FeatureLevel.REGION); layout = Layout.create("AgroMetInfo").show(); + layout.css("app-layout"); final EmptyContentBuilder<HTMLImageElement> logoElem = Elements.img("app/img/logo_etat-agrometinfo.svg"); layout.setLogo(logoElem); - final HTMLDivElement contentElement = Elements.div().element(); + final HTMLDivElement contentElement = div().element(); contentElement.textContent = CSTS.applicationLoading(); layout.getContentPanel().id(MapView.MAP_CONTAINER_ID); layout.getContentPanel().appendChild(contentElement); - layout.getLeftPanel().css("agrometinfo-leftsidebar"); - layout.autoFixLeftPanel(); layout.getRightPanel().css("agrometinfo-rightsidebar"); layout.getNavigationBar().css("agrometinfo-navbar"); @@ -240,8 +240,16 @@ public final class LayoutView extends AbstractBaseView<LayoutPresenter> implemen private void initLeftPanel() { GWT.log("initLeftPanel()"); + layout.fixLeftPanelPosition(); + layout.getLeftPanel().css("agrometinfo-leftsidebar"); layout.setLeftPanelSize(Layout.LeftPanelSize.LARGE); layout.getLeftPanel().setPadding("15px"); + layout.getNavigationBar().getMenuToggleItem().addClickListener(e -> { + if (!layout.getLeftPanel().isCollapsed()) { + layout.fixLeftPanelPosition(); + } + }); + layout.getLeftPanel().setTransitionDuration("0"); // https://demo.dominokit.org/forms/basic-form-elements?theme=blue GWT.log("initLeftPanel() sumary"); @@ -259,56 +267,46 @@ public final class LayoutView extends AbstractBaseView<LayoutPresenter> implemen // GWT.log("initLeftPanel() periods"); - panel.appendChild(BlockHeader.create(CSTS.choosePeriod()).element()); panel.appendChild(periodSelect); - new HTMLSelectElementBuilder<PeriodDTO>() // + new DominoSelectBuilder<PeriodDTO>() // .setSelect(periodSelect) // - .setPrompt(CSTS.selectPrompt()) // .addValueChangeHandler(this::onPeriodChange) // .build(); // GWT.log("initLeftPanel() indicators"); - panel.appendChild(BlockHeader.create(CSTS.chooseIndicator()).element()); panel.appendChild(indicatorSelect); - new HTMLSelectElementBuilder<IndicatorDTO>() // + new DominoSelectBuilder<IndicatorDTO>() // .setSelect(indicatorSelect) // - .setPrompt(CSTS.selectPrompt()) // .addValueChangeHandler(this::onIndicatorChange) // .build(); // GWT.log("initLeftPanel() regions"); - panel.appendChild(BlockHeader.create(CSTS.chooseRegion()).element()); - new HTMLSelectElementBuilder<Entry<String, String>>() // + panel.appendChild(regionSelect); + new DominoSelectBuilder<Entry<String, String>>() // .setSelect(regionSelect) // - .setPrompt(CSTS.metropolitanFrance()) // .addValueChangeHandler(this::onRegionChange) // .build(); - panel.appendChild(regionSelect); // GWT.log("initLeftPanel() year"); - panel.appendChild(BlockHeader.create(CSTS.chooseYear())); - new HTMLSelectElementBuilder<Entry<String, String>>() // + panel.appendChild(yearSelect); + new DominoSelectBuilder<Entry<String, String>>() // .setSelect(yearSelect) // - .setPrompt(CSTS.selectPrompt()) // .addValueChangeHandler(this::onYearChange); - panel.appendChild(yearSelect); // GWT.log("initLeftPanel() comparison"); - final Icon infoIcon = Icons.ACTION_ICONS.info_outline(); - panel.appendChild(BlockHeader.create(CSTS.normalComparison())); - final SwitchButton comparisonBtn = SwitchButton.create() // - .setOnTitle(CSTS.yes()) // - .setOffTitle(CSTS.no()) // + final SwitchButton comparisonBtn = SwitchButton.create(CSTS.normalComparison(), CSTS.yes(), CSTS.no()) // .value(false); comparisonBtn.addChangeHandler(this::onComparisonChange); - comparisonBtn.getOnOffLabelElement().add(infoIcon); - Tooltip.create(infoIcon, "") // - .position(PopupPosition.RIGHT) // - .getInnerElement().setInnerHtml(CSTS.normalComparisonTooltip()); + final HTMLElement info = Elements.createElement("details", HTMLElement.class); + final HTMLElement sum = Elements.createElement("summary", HTMLElement.class); + sum.innerHTML = "<i class='material-icons'>info_outline</i>"; + info.innerHTML = CSTS.normalComparisonTooltip(); + info.append(sum); + comparisonBtn.getFieldContainer().getFirstChild().appendChild(info); panel.appendChild(comparisonBtn); // finally @@ -416,17 +414,20 @@ public final class LayoutView extends AbstractBaseView<LayoutPresenter> implemen return; } DomGlobal.console.info("Indicators : " + list); - new HTMLSelectElementBuilder<IndicatorDTO>() // + final IndicatorDTO defaultIndicator = list.stream() // + .filter(i -> DEFAULT_INDICATOR.equals(i.getCode())) // + .findFirst().orElse(null); + new DominoSelectBuilder<IndicatorDTO>() // .setSelect(indicatorSelect) // .setTextFunction(IndicatorDTO::getDescription) // .setValueFunction(IndicatorDTO::getCode) // .removeOptions() // .addOptions(list) // + .select(defaultIndicator) // .build(); // select "meant" - if (list.stream().map(IndicatorDTO::getCode).anyMatch(DEFAULT_INDICATOR::equals)) { - indicatorSelect.element().value = DEFAULT_INDICATOR; - onIndicatorChange(DEFAULT_INDICATOR); + if (defaultIndicator != null) { + onIndicatorChange(defaultIndicator.getCode()); } else { onChoiceChange(); } @@ -491,31 +492,41 @@ public final class LayoutView extends AbstractBaseView<LayoutPresenter> implemen final StringJoiner sj = new StringJoiner(" "); sj.add(MSGS.nbOfIndicatorPeriods(list.size())); sj.add(MSGS.nbOfIndicators(list.stream().mapToInt(c -> c.getIndicators().size()).sum())); - summary.textContent = sj.toString(); + summary.textContent(sj.toString()); if (this.periods.isEmpty()) { return; } // display periods DomGlobal.console.info("Periods : " + list); - new HTMLSelectElementBuilder<PeriodDTO>() // + final PeriodDTO defaultPeriod = list.stream() // + .filter(i -> DEFAULT_PERIOD.equals(i.getCode())) // + .findFirst().orElse(null); + + new DominoSelectBuilder<PeriodDTO>() // .setSelect(periodSelect) // .setTextFunction(PeriodDTO::getDescription) // .setValueFunction(PeriodDTO::getCode) // .addOptions(list) // + .select(defaultPeriod) // .build(); // select "year" - periodSelect.element().value = "year"; - onPeriodChange(periodSelect.element().value); + onPeriodChange(periodSelect.getValue().getCode()); } @Override public void setRegions(final Map<String, String> list) { - new HTMLSelectElementBuilder<Entry<String, String>>() // + final String metropolitanFranceCode = "0"; + list.computeIfPresent(metropolitanFranceCode, (k, v) -> CSTS.metropolitanFrance()); + final Entry<String, String> defaultRegion = list.entrySet().stream() // + .filter(e -> metropolitanFranceCode.equals(e.getKey())) // + .findFirst().orElse(null); + new DominoSelectBuilder<Entry<String, String>>() // .setSelect(regionSelect) // .setTextFunction(Entry<String, String>::getValue) // .setValueFunction(Entry<String, String>::getKey) // .addOptions(list.entrySet()) // + .select(defaultRegion) // .build(); } @@ -530,17 +541,16 @@ public final class LayoutView extends AbstractBaseView<LayoutPresenter> implemen public void setYears(final List<Integer> list) { final Map<String, String> yearOptions = new HashMap<>(); list.forEach(y -> yearOptions.put(String.valueOf(y), String.valueOf(y))); - new HTMLSelectElementBuilder<Entry<String, String>>() // + final Optional<Integer> defaultYear = list.stream().max(Integer::compare); + final Entry<String, String> yearEntry = yearOptions.entrySet().stream() // + .filter(e -> e.getKey().equals(String.valueOf(defaultYear.get()))) // + .findFirst().orElse(null); + new DominoSelectBuilder<Entry<String, String>>() // .setSelect(yearSelect) // .setTextFunction(Entry<String, String>::getValue) // .setValueFunction(Entry<String, String>::getKey) // + .select(yearEntry) // .addOptions(yearOptions.entrySet()); - final Optional<Integer> defaultYear = list.stream().max(Integer::compare); - defaultYear.ifPresent(year -> { - yearSelect.element().value = year.toString(); - choice.setYear(year); - onChoiceChange(); - }); } /** diff --git a/www-client/src/main/java/fr/agrometinfo/www/client/view/MapView.java b/www-client/src/main/java/fr/agrometinfo/www/client/view/MapView.java index 883662ffbd4364c88a8e1ef45fca5715bad00341..1be14d51c922320e7d1f3fbc71ff1a99c2d212b7 100644 --- a/www-client/src/main/java/fr/agrometinfo/www/client/view/MapView.java +++ b/www-client/src/main/java/fr/agrometinfo/www/client/view/MapView.java @@ -247,11 +247,19 @@ public final class MapView extends HtmlContentBuilder<HTMLElement> implements Ma * Mouse click interaction to select a cell. */ private void addClickInteractions() { + final int strokeWidth = 3; final SelectOptions selectOptions = new SelectOptions(); selectOptions.setCondition(Condition.getClick()); selectOptions.setMulti(false); - final Style style = createCellStyle(Color.getColorFromString("blue"), new Color(255, 0, 0, 0.5f)); - selectOptions.setStyle((f, r) -> new Style[] {style}); + selectOptions.setStyle((f, r) -> { + final Double value = getValue(f); + final String color = "#" + ColorSequenceManager.getColorForValue(colorIntervals, value); + final Color background = Color.getColorFromString(color); + final Color foreground = Color.getColorFromString("#333333"); + final Style style = createCellStyle(foreground, background); + style.getStroke().setWidth(strokeWidth); + return new Style[] {style}; + }); // create a select interaction final Select selectFeature = new Select(selectOptions); diff --git a/www-client/src/main/resources/fr/agrometinfo/www/client/i18n/AppConstants_fr.properties b/www-client/src/main/resources/fr/agrometinfo/www/client/i18n/AppConstants_fr.properties index 06f764da5451bec616e5b5d3a91ffb882bf187ac..e744828152a53b94eb415758cab3081bb1b308ad 100644 --- a/www-client/src/main/resources/fr/agrometinfo/www/client/i18n/AppConstants_fr.properties +++ b/www-client/src/main/resources/fr/agrometinfo/www/client/i18n/AppConstants_fr.properties @@ -33,10 +33,9 @@ metropolitanFrance = France métropolitaine monthlyValues = Valeurs mensuelles no= Non normalComparison= Comparaison à la normale -normalComparisonTooltip= <b>La comparaison à la normale</b> <em>se calcule en soustrayant <b>la moyenne de l’indicateur choisi</b> pour les trente dernières années (1990-2020) de <b>l’année sélectionnée</b> +normalComparisonTooltip= <b>La comparaison à la normale</b> se calcule en soustrayant <b>la moyenne de l’indicateur choisi</b> pour les trente dernières années (1990-2020) de <b>l’année sélectionnée</b>. otherAgroclimApps = Autres services et outils d’AgroClim seePrivacyPolicy = Consultez le paragraphe « Données personnelles » dans les mentions légales. -selectPrompt = -- sélectionner -- toggleRightPanel = Afficher / masquer le panneau de droite userProfile = Compte et paramètres whyConnectionIsRequired = Vous devez vous identifier pour accéder à AgroMetInfo en raison des accords avec Météo-France relatifs aux échanges de données SAFRAN avec AgroClim. diff --git a/www-client/src/main/resources/fr/agrometinfo/www/client/public/style.css b/www-client/src/main/resources/fr/agrometinfo/www/client/public/style.css index da5b32741382af858c45b1881fa5b3239caa98e9..8387db5ac883b7be2af90403c9a040f4f5739ae1 100644 --- a/www-client/src/main/resources/fr/agrometinfo/www/client/public/style.css +++ b/www-client/src/main/resources/fr/agrometinfo/www/client/public/style.css @@ -108,8 +108,12 @@ select { padding-bottom: 6px; padding-top: 6px; } +.app-layout > .overlay { + z-index: 0; + visibility: hidden; +} .float-right { - float: right; + float: right; } div.idp { padding: 0.5em; @@ -178,25 +182,25 @@ div.idp { --logo-height: 50px; } @media screen and (max-width: 450px) { - .navbar-brand { - display: none; - } + .navbar-brand { + display: none; + } } @media screen and (max-width: 700px) { - :root { - --rightsidebar-padding: 1em; - --rightsidebar-width: 90%; - } + :root { + --rightsidebar-padding: 1em; + --rightsidebar-width: 90%; + } } @media screen and (min-width: 700px) { - :root { - --rightsidebar-padding: 0.5em; - --rightsidebar-width: 400px; - } + :root { + --rightsidebar-padding: 0.5em; + --rightsidebar-width: 400px; + } } @media screen and (min-width: 1200px) { - :root { - --rightsidebar-padding: 1em; - --rightsidebar-width: 600px; - } + :root { + --rightsidebar-padding: 1em; + --rightsidebar-width: 600px; + } } diff --git a/www-server/src/main/java/fr/agrometinfo/www/server/rs/IndicatorResource.java b/www-server/src/main/java/fr/agrometinfo/www/server/rs/IndicatorResource.java index aa31c1eb903177e69062626a555eea06d163ad40..b5e993f1a448a8f3e12c06bb9cd7723f0772d997 100644 --- a/www-server/src/main/java/fr/agrometinfo/www/server/rs/IndicatorResource.java +++ b/www-server/src/main/java/fr/agrometinfo/www/server/rs/IndicatorResource.java @@ -255,19 +255,35 @@ public class IndicatorResource implements IndicatorService { final LocalDate yearAgo = date.minusYears(1); final SimpleFeature parentFeature; final String featureName; - Integer regionId; - try { - regionId = Integer.valueOf(id); - } catch (final NumberFormatException e) { - regionId = null; - } - if (regionId == null) { - featureName = null; - averageValue = praDailyValueDao.findAverageComputedValue(indicator, date); - comparedValue = praDailyValueDao.findAverageComparedValue(indicator, date); - tmpDailyValues = praDailyValueDao.findDailyValues(indicator, yearAgo, date); - monthlyValues = toMonthlyValues(monthlyValueDao.find(indicator, date), i18n); - parentFeature = null; + if (level == FeatureLevel.REGION) { + Integer regionId; + final Region region; + try { + regionId = Integer.valueOf(id); + } catch (final NumberFormatException e) { + regionId = null; + } + if (regionId != null) { + region = regionDao.find(regionId); + } else { + region = null; + } + if (region == null) { + // Metropolitan France + featureName = null; + averageValue = praDailyValueDao.findAverageComputedValue(indicator, date); + comparedValue = praDailyValueDao.findAverageComparedValue(indicator, date); + tmpDailyValues = praDailyValueDao.findDailyValues(indicator, yearAgo, date); + monthlyValues = toMonthlyValues(monthlyValueDao.find(indicator, date), i18n); + parentFeature = null; + } else { + averageValue = praDailyValueDao.findAverageComputedValue(indicator, date, regionId); + comparedValue = praDailyValueDao.findAverageComparedValue(indicator, date, regionId); + tmpDailyValues = praDailyValueDao.findDailyValues(indicator, yearAgo, date, region); + monthlyValues = toMonthlyValues(monthlyValueDao.find(indicator, date, region), i18n); + featureName = region.getName(); + parentFeature = null; + } } else if (level == FeatureLevel.PRA) { final Pra pra = praDao.findByCode(id); final PraDailyValue value = praDailyValueDao.find(indicator, date, pra); @@ -281,13 +297,7 @@ public class IndicatorResource implements IndicatorService { parentFeature.setLevel(FeatureLevel.REGION); parentFeature.setName(pra.getDepartment().getRegion().getName()); } else { - final Region region = regionDao.find(regionId); - averageValue = praDailyValueDao.findAverageComputedValue(indicator, date, regionId); - comparedValue = praDailyValueDao.findAverageComparedValue(indicator, date, regionId); - tmpDailyValues = praDailyValueDao.findDailyValues(indicator, yearAgo, date, region); - monthlyValues = toMonthlyValues(monthlyValueDao.find(indicator, date, region), i18n); - featureName = region.getName(); - parentFeature = null; + throw new UnsupportedOperationException("Level not handled: " + level); } tmpDailyValues.forEach((d, v) -> dailyValues.put(DateUtils.toDate(d), v)); @@ -295,7 +305,7 @@ public class IndicatorResource implements IndicatorService { choice.setIndicator(indicatorUid); choice.setLevel(level); choice.setPeriod(periodCode); - choice.setFeatureId(String.valueOf(regionId)); + choice.setFeatureId(id); choice.setYear(year); final var dto = new SummaryDTO(); if (averageValue != null) {