Mercurial > dive4elements > river
view flys-client/src/main/java/de/intevation/flys/client/client/ui/DatacageTwinPanel.java @ 1261:87b6a93db523
Cleaned imports.
flys-client/trunk@2789 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Mon, 19 Sep 2011 15:11:24 +0000 |
parents | 39a39e9be5af |
children | ff012a9d9d1d |
line wrap: on
line source
package de.intevation.flys.client.client.ui; import java.util.ArrayList; import java.util.Map; import java.util.List; 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.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(); Canvas label = new Label(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; } public Canvas createWidget() { VLayout layout = new VLayout(); differencesList = new ListGrid(); differencesList.setHeight(150); differencesList.setShowAllRecords(true); differencesList.setCanEdit(false); 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(); ArrayList<Recommendation> ar = new ArrayList<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, "winfo", config.getServerUrl(), config.getLocale(), new AsyncCallback<Artifact[]>() { public void onFailure(Throwable caught) { GWT.log("No success in cloning Thing!"); } public void onSuccess(Artifact[] artifacts) { GWT.log("Success of cloning thing!"); 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 :