felix@867: package de.intevation.flys.client.client.ui; felix@867: felix@914: import java.util.ArrayList; felix@914: import java.util.Map; felix@914: import java.util.List; felix@914: import java.util.Set; felix@914: felix@867: import com.google.gwt.core.client.GWT; felix@914: import com.google.gwt.user.client.rpc.AsyncCallback; felix@867: felix@867: import com.smartgwt.client.widgets.Canvas; felix@867: import com.smartgwt.client.widgets.Label; felix@867: import com.smartgwt.client.widgets.layout.HLayout; felix@867: import com.smartgwt.client.widgets.layout.VLayout; felix@914: import com.smartgwt.client.widgets.grid.ListGrid; felix@914: import com.smartgwt.client.widgets.grid.ListGridField; felix@914: import com.smartgwt.client.widgets.grid.ListGridRecord; felix@914: import com.smartgwt.client.widgets.events.ClickEvent; felix@867: felix@914: import de.intevation.flys.client.shared.model.Artifact; felix@867: import de.intevation.flys.client.shared.model.Data; felix@867: import de.intevation.flys.client.shared.model.DataItem; felix@867: import de.intevation.flys.client.shared.model.DefaultData; felix@867: import de.intevation.flys.client.shared.model.DefaultDataItem; felix@867: import de.intevation.flys.client.shared.model.DataList; felix@867: import de.intevation.flys.client.shared.model.User; felix@867: felix@867: import de.intevation.flys.client.client.FLYSConstants; felix@914: import de.intevation.flys.client.client.event.StepForwardEvent; felix@914: import de.intevation.flys.client.shared.model.Recommendation; felix@914: import de.intevation.flys.client.shared.model.ToLoad; felix@914: import de.intevation.flys.client.shared.model.Recommendation.Facet; felix@914: import de.intevation.flys.client.shared.model.Recommendation.Filter; felix@914: felix@914: import de.intevation.flys.client.client.services.LoadArtifactService; felix@914: import de.intevation.flys.client.client.services.LoadArtifactServiceAsync; felix@914: import de.intevation.flys.client.client.Config; felix@867: felix@867: // TODO Probably better to branch off AbstractUIProvider. felix@914: // TODO Merge with other datacage-widget impls. felix@914: /** felix@914: * Panel containing a Grid and a "next" button. The Grid is fed by a felix@914: * DatacagePairWidget which is put in the input-helper area. felix@914: */ felix@914: public class DatacageTwinPanel felix@914: extends TextProvider { felix@867: felix@867: protected static FLYSConstants MSG = GWT.create(FLYSConstants.class); felix@867: felix@867: protected String dataName; felix@867: felix@867: protected User user; felix@867: felix@914: protected ToLoad toLoad1; felix@914: felix@914: protected ToLoad toLoad2; felix@914: felix@914: protected ListGrid differencesList; felix@914: felix@914: LoadArtifactServiceAsync loadArtifactService = GWT.create( felix@914: de.intevation.flys.client.client.services.LoadArtifactService.class); felix@914: felix@867: felix@867: public DatacageTwinPanel(User user) { felix@867: super(); felix@867: this.user = user; felix@867: } felix@867: felix@867: felix@867: @Override felix@867: public Canvas create(DataList dataList) { felix@867: GWT.log("createData()"); felix@867: Data data = dataList.get(0); felix@867: this.dataName = data.getLabel(); felix@867: felix@867: Canvas label = new Label(data.getDescription()); felix@867: Canvas widget = createWidget(); felix@867: Canvas submit = getNextButton(); felix@867: felix@867: VLayout layout = new VLayout(); felix@914: HLayout helperLayout = new HLayout(); felix@867: label.setHeight(50); felix@914: helperLayout.addMember(new DatacagePairWidget(this.artifact, felix@914: user, "longitudinal_section", differencesList)); felix@867: felix@867: /*layout.addMember(label);*/ felix@867: layout.addMember(widget); felix@867: layout.addMember(submit); felix@867: layout.setMembersMargin(10); felix@914: this.helperContainer.addMember(helperLayout); felix@867: felix@867: return layout; felix@867: } felix@867: felix@867: felix@867: @Override felix@914: public List validate() { felix@914: List errors = new ArrayList(); felix@914: if (differencesList.getRecords().length == 0) { felix@914: // TODO i18n of error message. (MSG.no_waterlevel_pair_selected()) felix@914: errors.add("No pair of waterlevel items selected"); felix@914: } felix@914: felix@914: return errors; felix@914: } felix@914: felix@914: felix@914: public Canvas createWidget() { felix@914: VLayout layout = new VLayout(); felix@914: felix@914: differencesList = new ListGrid(); felix@914: differencesList.setHeight(150); felix@914: differencesList.setShowAllRecords(true); felix@914: differencesList.setCanEdit(false); felix@914: felix@914: ListGridField nameField = new ListGridField("first", "Minuend"); felix@914: ListGridField capitalField = new ListGridField("second", "Subtrahend"); felix@914: differencesList.setFields(new ListGridField[] {nameField, capitalField}); felix@914: felix@914: layout.addMember(differencesList); felix@914: felix@914: return layout; felix@914: } felix@914: felix@914: felix@914: @Override felix@914: public void onClick(ClickEvent e) { felix@914: /* felix@914: TODO: Validation/Error felix@914: List errors = validate(); felix@914: if (errors == null || errors.isEmpty()) { felix@914: ... felix@914: else {showErrors(errors);} felix@914: felix@914: * */ felix@914: GWT.log("DatacageTwinPanel.onClick"); felix@914: Config config = Config.getInstance(); felix@914: ListGridRecord[] records = differencesList.getRecords(); felix@914: ArrayList ar = new ArrayList(); felix@914: for (ListGridRecord record : records) { felix@914: DatacagePairWidget.RecommendationPairRecord r = felix@914: (DatacagePairWidget.RecommendationPairRecord) record; felix@914: ar.add(r.getFirst()); felix@914: ar.add(r.getSecond()); felix@914: } felix@914: final Recommendation[] rs = ar.toArray(new Recommendation[ar.size()]); felix@914: loadArtifactService.loadMany( felix@914: this.collection, felix@914: rs, felix@914: "winfo", felix@914: config.getServerUrl(), felix@914: config.getLocale(), felix@914: new AsyncCallback() { felix@914: public void onFailure(Throwable caught) { felix@914: GWT.log("No success in cloning Thing!"); felix@914: } felix@914: public void onSuccess(Artifact[] artifacts) { felix@914: GWT.log("Success of cloning thing!"); felix@914: fireStepForwardEvent(new StepForwardEvent( felix@914: getData(rs, artifacts))); felix@914: } } felix@914: ); felix@914: } felix@914: felix@914: felix@914: protected Data[] getData(Recommendation[] rs, Artifact[] newArtifacts) { felix@914: // Construct string with info about selections. felix@914: String dataItemString = ""; felix@914: for (int i = 0; i < rs.length; i++) { felix@914: Recommendation r = rs[i]; felix@914: Artifact newArtifact = newArtifacts[i]; felix@914: String uuid = newArtifact.getUuid(); felix@914: r.setMasterArtifact(uuid); felix@914: if (i>0) dataItemString += "#"; felix@914: felix@914: dataItemString += createDataString(uuid, r.getFilter()); felix@914: } felix@914: DataItem item = new DefaultDataItem(dataName, dataName, dataItemString); felix@914: return new Data[] { new DefaultData( felix@914: dataName, null, null, new DataItem[] {item}) }; felix@914: } felix@914: felix@914: felix@914: protected String createDataString(String artifact, Filter filter) { felix@914: Facet f = null; felix@914: felix@914: Map> outs = filter.getOuts(); felix@914: Set>> entries = outs.entrySet(); felix@914: felix@914: for (Map.Entry> entry: entries) { felix@914: List fs = entry.getValue(); felix@914: felix@914: f = fs.get(0); felix@914: if (f != null) { felix@914: break; felix@914: } felix@914: } felix@914: felix@914: return "[" + artifact + ";" + f.getName() + ";" + f.getIndex() + "]"; felix@914: } felix@914: felix@914: /*@Override felix@867: protected Data[] getData() { felix@914: // TODO ToLoadRecord ! felix@914: String value = "TODO:FIND VALUE"; felix@914: if (toLoad1 != null) { felix@914: List recommendations = toLoad1.toRecommendations(); felix@914: value = recommendations.get(0).getIDs(); felix@914: } felix@914: DataItem item1 = new DefaultDataItem(dataName, dataName, value); felix@914: DataItem item2 = new DefaultDataItem(dataName, dataName, value); felix@867: return new Data[] { new DefaultData( felix@914: dataName, null, null, new DataItem[] { item1, item2}) }; felix@914: }*/ felix@867: } felix@867: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :