Mercurial > dive4elements > river
view gwt-client/src/main/java/org/dive4elements/river/client/client/ui/sinfo/WaterlevelSoundingSelectionController.java @ 9390:f575ff573cbb
"Name der Peilung" columname minfo.
author | gernotbelger |
---|---|
date | Thu, 09 Aug 2018 15:22:31 +0200 |
parents | 2ff46d921917 |
children | d194c5b24bf8 |
line wrap: on
line source
/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde * Software engineering by * Björnsen Beratende Ingenieure GmbH * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt * * This file is Free Software under the GNU AGPL (>=v3) * and comes with ABSOLUTELY NO WARRANTY! Check out the * documentation coming with Dive4Elements River for details. */ package org.dive4elements.river.client.client.ui.sinfo; import java.util.List; import org.dive4elements.river.client.client.FLYSConstants; import org.dive4elements.river.client.client.ui.DatacagePairWidget.IDatacagePairControler; import org.dive4elements.river.client.client.ui.DatacageWidget; import org.dive4elements.river.client.client.ui.DatacageWidget.DatacageFilter; import org.dive4elements.river.client.shared.model.AttrList; import org.dive4elements.river.client.shared.model.DataCageNode; import com.smartgwt.client.data.DataSource; import com.smartgwt.client.data.DataSourceField; import com.smartgwt.client.types.Alignment; import com.smartgwt.client.types.FieldType; import com.smartgwt.client.types.TitleOrientation; import com.smartgwt.client.widgets.form.DynamicForm; import com.smartgwt.client.widgets.form.events.ItemChangedEvent; import com.smartgwt.client.widgets.form.events.ItemChangedHandler; import com.smartgwt.client.widgets.grid.events.SelectionUpdatedEvent; import com.smartgwt.client.widgets.grid.events.SelectionUpdatedHandler; import com.smartgwt.client.widgets.layout.HLayout; import com.smartgwt.client.widgets.tree.TreeNode; /** * Implements special behavior when selecting soundings and waterlevels: datacage of waterlevels depends on selection of * sounding. * * @author Gernot Belger */ final class WaterlevelSoundingSelectionController implements IDatacagePairControler { private static final String FIELD_INTELLIGENCE = "field_intelligence"; static final String ATTRIBUTE_YEAR = "year"; private final FLYSConstants msg; private boolean turnFilterOff; public WaterlevelSoundingSelectionController(final FLYSConstants msg) { this.msg = msg; } @Override public void setup(final DatacageWidget soundingWidget, final DatacageWidget waterlevelWidget, final HLayout toolbarLayout) { /* do not show ever any soundings that do not have a year */ soundingWidget.setFilter(new DatacageFilter() { @Override public boolean accept(final DataCageNode node) { final AttrList attributes = node.getAttributes(); if (WaterlevelSoundingYearFilter.isFolder(attributes)) return true; final String year = attributes.getValue(WaterlevelSoundingSelectionController.ATTRIBUTE_YEAR); final Integer waterlevelYear = WaterlevelSoundingYearFilter.parseYear(year); if (waterlevelYear == null) { // should never happen, we should only show soundings that have a year return false; } return true; } }); /* react to selections of a sounding */ soundingWidget.getTreeGrid().addSelectionUpdatedHandler(new SelectionUpdatedHandler() { @Override public void onSelectionUpdated(final SelectionUpdatedEvent event) { final List<TreeNode> selection = soundingWidget.getPlainSelection(); handleSoundingChanged(waterlevelWidget, selection); } }); /* check box to deactivate intelligence */ final DynamicForm form = createIntelligenCheckbox(); toolbarLayout.addMember(form); form.addItemChangedHandler(new ItemChangedHandler() { @Override public void onItemChanged(final ItemChangedEvent event) { final Boolean value = (Boolean) form.getValue(FIELD_INTELLIGENCE); checkboxToggled(value); handleSoundingChanged(waterlevelWidget, soundingWidget.getPlainSelection()); } }); /* initialize by applying the current selection */ handleSoundingChanged(waterlevelWidget, soundingWidget.getPlainSelection()); } private DynamicForm createIntelligenCheckbox() { final DynamicForm form = new DynamicForm(); form.setTitlePrefix(""); form.setTitleSuffix(": "); form.setTitleAlign(Alignment.LEFT); form.setTitleOrientation(TitleOrientation.LEFT); final DataSourceField item = new DataSourceField(FIELD_INTELLIGENCE, FieldType.BOOLEAN); item.setTitle(this.msg.sinfo_deactivate_intelligent_datacord()); final DataSource source = new DataSource(); source.setFields(item); form.setDataSource(source); form.setValue(FIELD_INTELLIGENCE, false); return form; } protected final void checkboxToggled(final Boolean selected) { this.turnFilterOff = selected == null ? false : selected; } protected final void handleSoundingChanged(final DatacageWidget waterlevelWidget, final List<TreeNode> selection) { if (this.turnFilterOff) { // still filter waterlevels without year waterlevelWidget.setFilter(new WaterlevelSoundingYearFilter(null)); waterlevelWidget.getTreeGrid().setEmptyMessage(this.msg.databasket_empty()); return; } // more than one should never happen, as the bedhhave single selection final TreeNode soundingNode = selection.isEmpty() ? null : selection.get(0); if (soundingNode == null || soundingNode.getAttribute("factory") == null) { waterlevelWidget.setFilter(DatacageWidget.ACCEPT_NONE_FILTER); waterlevelWidget.getTreeGrid().setEmptyMessage(this.msg.sinfo_sounding_waterlevel_select_waterlevel()); return; } final Integer soundingYear = WaterlevelSoundingYearFilter.parseYear(soundingNode.getAttribute(ATTRIBUTE_YEAR)); if (soundingYear == null) { // should never happen, as we should only show soundings that actually have a year waterlevelWidget.setFilter(DatacageWidget.ACCEPT_NONE_FILTER); waterlevelWidget.getTreeGrid().setEmptyMessage("Die gewählte Peilung hat keine Informations zum Jahr"); } else { waterlevelWidget.setFilter(new WaterlevelSoundingYearFilter(soundingYear)); waterlevelWidget.getTreeGrid().setEmptyMessage(this.msg.databasket_empty()); } } }