Mercurial > dive4elements > river
view flys-client/src/main/java/de/intevation/flys/client/client/ui/DatacageTwinPanel.java @ 1293:e88cd17b3420
Bugfix: #233 Redraw computation table if no data was retrieved to display an error message immediatly.
flys-client/trunk@2906 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Fri, 07 Oct 2011 13:39:35 +0000 |
parents | f76c90b3086f |
children | d9cb362b8b34 |
line wrap: on
line source
package de.intevation.flys.client.client.ui; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import com.google.gwt.core.client.GWT; import com.google.gwt.user.client.rpc.AsyncCallback; import com.smartgwt.client.widgets.Canvas; import com.smartgwt.client.widgets.Label; import com.smartgwt.client.widgets.layout.HLayout; import com.smartgwt.client.widgets.layout.VLayout; import com.smartgwt.client.widgets.grid.ListGrid; import com.smartgwt.client.widgets.grid.ListGridField; import com.smartgwt.client.widgets.grid.ListGridRecord; import com.smartgwt.client.widgets.events.ClickEvent; import de.intevation.flys.client.shared.model.Artifact; import de.intevation.flys.client.shared.model.Collection; import de.intevation.flys.client.shared.model.Data; import de.intevation.flys.client.shared.model.DataItem; import de.intevation.flys.client.shared.model.DefaultData; import de.intevation.flys.client.shared.model.DefaultDataItem; import de.intevation.flys.client.shared.model.DataList; import de.intevation.flys.client.shared.model.User; import de.intevation.flys.client.client.FLYSConstants; import de.intevation.flys.client.client.event.StepForwardEvent; import de.intevation.flys.client.shared.model.Recommendation; import de.intevation.flys.client.shared.model.ToLoad; import de.intevation.flys.client.shared.model.Recommendation.Facet; import de.intevation.flys.client.shared.model.Recommendation.Filter; import de.intevation.flys.client.client.services.LoadArtifactService; import de.intevation.flys.client.client.services.LoadArtifactServiceAsync; import de.intevation.flys.client.client.Config; // TODO Probably better to branch off AbstractUIProvider. // TODO Merge with other datacage-widget impls. /** * Panel containing a Grid and a "next" button. The Grid is fed by a * DatacagePairWidget which is put in the input-helper area. */ public class DatacageTwinPanel extends TextProvider { protected static FLYSConstants MSG = GWT.create(FLYSConstants.class); protected String dataName; protected User user; protected ToLoad toLoad1; protected ToLoad toLoad2; protected ListGrid differencesList; LoadArtifactServiceAsync loadArtifactService = GWT.create( de.intevation.flys.client.client.services.LoadArtifactService.class); public DatacageTwinPanel(User user) { super(); this.user = user; } @Override public Canvas create(DataList dataList) { GWT.log("createData()"); Data data = dataList.get(0); this.dataName = data.getLabel(); // TODO use i18n of data. Canvas label = new Label("Subtrahend/Minuend");//data.getDescription()); Canvas widget = createWidget(); Canvas submit = getNextButton(); VLayout layout = new VLayout(); HLayout helperLayout = new HLayout(); label.setHeight(50); helperLayout.addMember(new DatacagePairWidget(this.artifact, user, "longitudinal_section", differencesList)); /*layout.addMember(label);*/ layout.addMember(widget); layout.addMember(submit); layout.setMembersMargin(10); this.helperContainer.addMember(helperLayout); return layout; } @Override public List<String> validate() { List<String> errors = new ArrayList<String>(); if (differencesList.getRecords().length == 0) { // TODO i18n of error message. (MSG.no_waterlevel_pair_selected()) errors.add("No pair of waterlevel items selected"); } return errors; } /** * Creates layout with grid that displays selection inside. */ public Canvas createWidget() { VLayout layout = new VLayout(); differencesList = new ListGrid(); differencesList.setHeight(150); differencesList.setShowAllRecords(true); differencesList.setCanEdit(false); differencesList.setCanRemoveRecords(true); ListGridField nameField = new ListGridField("first", "Minuend"); ListGridField capitalField = new ListGridField("second", "Subtrahend"); differencesList.setFields(new ListGridField[] {nameField, capitalField}); layout.addMember(differencesList); return layout; } @Override public void onClick(ClickEvent e) { /* TODO: Validation/Error List<String> errors = validate(); if (errors == null || errors.isEmpty()) { ... else {showErrors(errors);} * */ GWT.log("DatacageTwinPanel.onClick"); Config config = Config.getInstance(); ListGridRecord[] records = differencesList.getRecords(); Set<Recommendation> ar = new HashSet<Recommendation>(); for (ListGridRecord record : records) { DatacagePairWidget.RecommendationPairRecord r = (DatacagePairWidget.RecommendationPairRecord) record; ar.add(r.getFirst()); ar.add(r.getSecond()); } final Recommendation[] rs = ar.toArray(new Recommendation[ar.size()]); loadArtifactService.loadMany( this.collection, rs, "waterlevel", config.getServerUrl(), config.getLocale(), new AsyncCallback<Artifact[]>() { public void onFailure(Throwable caught) { GWT.log("Failure of cloning with waterlevelfactory!"); } public void onSuccess(Artifact[] artifacts) { GWT.log("Success in cloning with watelevelfactory!"); fireStepForwardEvent(new StepForwardEvent( getData(rs, artifacts))); } } ); } protected Data[] getData(Recommendation[] rs, Artifact[] newArtifacts) { // Construct string with info about selections. String dataItemString = ""; for (int i = 0; i < rs.length; i++) { Recommendation r = rs[i]; Artifact newArtifact = newArtifacts[i]; String uuid = newArtifact.getUuid(); r.setMasterArtifact(uuid); if (i>0) dataItemString += "#"; dataItemString += createDataString(uuid, r.getFilter()); } DataItem item = new DefaultDataItem(dataName, dataName, dataItemString); return new Data[] { new DefaultData( dataName, null, null, new DataItem[] {item}) }; } protected String createDataString(String artifact, Filter filter) { Facet f = null; Map<String, List<Facet>> outs = filter.getOuts(); Set<Map.Entry<String, List<Facet>>> entries = outs.entrySet(); for (Map.Entry<String, List<Facet>> entry: entries) { List<Facet> fs = entry.getValue(); f = fs.get(0); if (f != null) { break; } } return "[" + artifact + ";" + f.getName() + ";" + f.getIndex() + "]"; } /*@Override protected Data[] getData() { // TODO ToLoadRecord ! String value = "TODO:FIND VALUE"; if (toLoad1 != null) { List<Recommendation> recommendations = toLoad1.toRecommendations(); value = recommendations.get(0).getIDs(); } DataItem item1 = new DefaultDataItem(dataName, dataName, value); DataItem item2 = new DefaultDataItem(dataName, dataName, value); return new Data[] { new DefaultData( dataName, null, null, new DataItem[] { item1, item2}) }; }*/ } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :