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@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: raimund@3508: public class BedHeightsDatacagePanel gernotbelger@8852: extends AbstractPairRecommendationPanel { raimund@3508: raimund@3508: public BedHeightsDatacagePanel(User user) { gernotbelger@8852: // FIXME: This will lead to a bad error message in English (i.e. contains something about waterlevels), for M-Info/Bed-Differences calculation gernotbelger@8852: // BUT: this is the behavior of 3.2.1 (because of sloppy derivation), so we do not change it now gernotbelger@8852: super(user, new WaterlevelTwinPanelValidator(), new DefaultDatacageTwinPanelInfo("bedheight", null), new DefaultDatacageTwinPanelInfo("bedheight", null) ); 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: raimund@3508: Canvas submit = getNextButton(); gernotbelger@8852: gernotbelger@8852: final DatacageWidget datacage = new DatacageWidget( tom@8298: this.artifact, user, "minfo_diff_panel", "load-system:true", false); rrenkert@7971: gernotbelger@8852: Button plusBtn = new Button(msg().datacage_add_pair()); rrenkert@7971: plusBtn.setAutoFit(true); rrenkert@7971: plusBtn.addClickHandler(new ClickHandler() { rrenkert@7971: @Override rrenkert@7971: public void onClick(ClickEvent event) { gernotbelger@8852: plusClicked(datacage, differencesList); rrenkert@7971: } rrenkert@7971: }); raimund@3508: raimund@3508: VLayout layout = new VLayout(); rrenkert@7971: 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@8852: * @param differencesList rrenkert@7971: */ gernotbelger@8852: protected final static void plusClicked( final DatacageWidget datacage, ListGrid differencesList ) { rrenkert@7971: 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: rrenkert@7971: for (TreeNode node : selection) { rrenkert@7971: ToLoad toLoad1 = new ToLoad(); rrenkert@7971: ToLoad toLoad2 = new ToLoad(); rrenkert@7971: rrenkert@7971: String factory = node.getAttribute("factory"); rrenkert@7971: if (factory != null) { // we need at least a factory rrenkert@7971: String artifact = node.getAttribute("artifact-id"); rrenkert@7971: String out = node.getAttribute("out"); rrenkert@7971: String name = node.getAttribute("facet"); rrenkert@7971: String ids = node.getAttribute("ids"); rrenkert@7971: String info = node.getAttribute("info"); rrenkert@7971: String targetOut = node.getAttribute("target_out"); rrenkert@7971: rrenkert@7971: String[] splitIds = ids.split("#"); rrenkert@7971: String[] splitInfo = info.split("#"); rrenkert@7971: toLoad1.add(artifact, rrenkert@7971: factory, rrenkert@7971: out, rrenkert@7971: name, rrenkert@7971: splitIds[0], rrenkert@7971: splitInfo[0], rrenkert@7971: targetOut); rrenkert@7971: toLoad2.add(artifact, rrenkert@7971: factory, rrenkert@7971: out, rrenkert@7971: name, rrenkert@7971: splitIds[1], rrenkert@7971: splitInfo[1], rrenkert@7971: targetOut); rrenkert@7971: } rrenkert@7971: differencesList.addData(new RecommendationPairRecord( rrenkert@7971: toLoad1.toRecommendations().get(0), rrenkert@7971: toLoad2.toRecommendations().get(0))); rrenkert@7971: } rrenkert@7971: } raimund@3508: } raimund@3508: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :