teichmann@5861: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde teichmann@5861: * Software engineering by Intevation GmbH teichmann@5861: * teichmann@5993: * This file is Free Software under the GNU AGPL (>=v3) teichmann@5861: * and comes with ABSOLUTELY NO WARRANTY! Check out the teichmann@5993: * documentation coming with Dive4Elements River for details. teichmann@5861: */ teichmann@5861: teichmann@5835: package org.dive4elements.river.client.client.ui.minfo; raimund@3508: gernotbelger@8852: import java.util.List; gernotbelger@8852: gernotbelger@8852: import org.dive4elements.river.client.client.ui.AbstractPairRecommendationPanel; gernotbelger@8852: import org.dive4elements.river.client.client.ui.DatacageWidget; gernotbelger@9220: import org.dive4elements.river.client.client.ui.DatacageWidgetData; gernotbelger@8852: import org.dive4elements.river.client.client.ui.DefaultDatacageTwinPanelInfo; gernotbelger@8852: import org.dive4elements.river.client.client.ui.RecommendationPairRecord; gernotbelger@8852: import org.dive4elements.river.client.client.ui.WaterlevelTwinPanelValidator; gernotbelger@8852: import org.dive4elements.river.client.shared.model.DataList; gernotbelger@8852: import org.dive4elements.river.client.shared.model.ToLoad; gernotbelger@8852: import org.dive4elements.river.client.shared.model.User; gernotbelger@8852: sascha@3535: import com.google.gwt.core.client.GWT; rrenkert@7971: import com.smartgwt.client.util.SC; rrenkert@7971: import com.smartgwt.client.widgets.Button; sascha@3535: import com.smartgwt.client.widgets.Canvas; sascha@3535: import com.smartgwt.client.widgets.events.ClickEvent; rrenkert@7971: import com.smartgwt.client.widgets.events.ClickHandler; gernotbelger@8852: import com.smartgwt.client.widgets.grid.ListGrid; sascha@3535: import com.smartgwt.client.widgets.layout.VLayout; rrenkert@7971: import com.smartgwt.client.widgets.tree.TreeNode; sascha@3535: gernotbelger@9220: public class BedHeightsDatacagePanel extends AbstractPairRecommendationPanel { raimund@3508: gernotbelger@9220: private static final DefaultDatacageTwinPanelInfo INFO = new DefaultDatacageTwinPanelInfo(null, "bedheight", null); gernotbelger@9220: gernotbelger@9220: private static final long serialVersionUID = 1L; gernotbelger@9220: gernotbelger@9220: public BedHeightsDatacagePanel(final User user) { gernotbelger@9220: // FIXME: This will lead to a bad error message in English (i.e. contains something about waterlevels), for gernotbelger@9220: // M-Info/Bed-Differences calculation gernotbelger@9220: // BUT: this is the behavior of 3.2.1 (because of sloppy derivation), so we do not change it now gernotbelger@9220: super(user, new WaterlevelTwinPanelValidator(), INFO, INFO); raimund@3508: } raimund@3508: raimund@3508: @Override gernotbelger@8852: protected Canvas createChooserWidgets(final Canvas widget, final DataList dataList, final User user, final ListGrid differencesList) { raimund@3508: GWT.log("createData()"); raimund@3508: gernotbelger@9220: final Canvas submit = getNextButton(); gernotbelger@8852: gernotbelger@9220: final DatacageWidgetData data = new DatacageWidgetData(this.artifact, user, "minfo_diff_panel", "load-system:true", false); rrenkert@7971: gernotbelger@9220: final DatacageWidget datacage = new DatacageWidget(data); gernotbelger@9220: gernotbelger@9220: final Button plusBtn = new Button(msg().datacage_add_pair()); rrenkert@7971: plusBtn.setAutoFit(true); rrenkert@7971: plusBtn.addClickHandler(new ClickHandler() { rrenkert@7971: @Override gernotbelger@9220: public void onClick(final ClickEvent event) { gernotbelger@8852: plusClicked(datacage, differencesList); rrenkert@7971: } rrenkert@7971: }); raimund@3508: gernotbelger@9220: final VLayout layout = new VLayout(); gernotbelger@9220: final VLayout helperLayout = new VLayout(); rrenkert@7971: helperLayout.addMember(datacage); rrenkert@7971: helperLayout.addMember(plusBtn); raimund@3508: raimund@3508: layout.addMember(widget); raimund@3508: layout.addMember(submit); raimund@3508: layout.setMembersMargin(10); raimund@3508: this.helperContainer.addMember(helperLayout); raimund@3508: raimund@3508: return layout; raimund@3508: } raimund@3508: rrenkert@7971: /** rrenkert@7971: * Callback for add-button. rrenkert@7971: * Fires to load for every selected element and handler. gernotbelger@9220: * gernotbelger@9220: * @param differencesList rrenkert@7971: */ gernotbelger@9220: protected final static void plusClicked(final DatacageWidget datacage, final ListGrid differencesList) { gernotbelger@9220: final List selection = datacage.getPlainSelection(); rrenkert@7971: rrenkert@7971: if (selection == null || selection.isEmpty()) { gernotbelger@8852: SC.say(msg().warning()); rrenkert@7971: return; rrenkert@7971: } rrenkert@7971: gernotbelger@9220: for (final TreeNode node : selection) { gernotbelger@9220: final ToLoad toLoad1 = new ToLoad(); gernotbelger@9220: final ToLoad toLoad2 = new ToLoad(); rrenkert@7971: gernotbelger@9220: final String factory = node.getAttribute("factory"); gernotbelger@9220: if (factory != null) { // we need at least a factory gernotbelger@9220: final String artifact = node.getAttribute("artifact-id"); gernotbelger@9220: final String out = node.getAttribute("out"); gernotbelger@9220: final String name = node.getAttribute("facet"); gernotbelger@9220: final String ids = node.getAttribute("ids"); gernotbelger@9220: final String info = node.getAttribute("info"); gernotbelger@9220: final String targetOut = node.getAttribute("target_out"); gernotbelger@9220: gernotbelger@9220: final String[] splitIds = ids.split("#"); gernotbelger@9220: final String[] splitInfo = info.split("#"); gernotbelger@9220: toLoad1.add(artifact, factory, out, name, splitIds[0], splitInfo[0], targetOut); gernotbelger@9220: toLoad2.add(artifact, factory, out, name, splitIds[1], splitInfo[1], targetOut); rrenkert@7971: } gernotbelger@9220: differencesList.addData(new RecommendationPairRecord(toLoad1.toRecommendations().get(0), toLoad2.toRecommendations().get(0))); rrenkert@7971: } rrenkert@7971: } gernotbelger@9220: }