teichmann@5835: package org.dive4elements.river.client.client.ui; ingo@901: ingo@909: import com.google.gwt.core.client.GWT; ingo@909: import com.google.gwt.user.client.rpc.AsyncCallback; ingo@909: ingo@909: import com.smartgwt.client.util.SC; ingo@909: import com.smartgwt.client.widgets.events.ClickEvent; ingo@909: teichmann@5835: import org.dive4elements.river.client.client.Config; teichmann@5835: import org.dive4elements.river.client.client.FLYS; teichmann@5835: import org.dive4elements.river.client.client.FLYSConstants; teichmann@5835: import org.dive4elements.river.client.client.event.StepForwardEvent; teichmann@5835: import org.dive4elements.river.client.client.services.LoadArtifactService; teichmann@5835: import org.dive4elements.river.client.client.services.LoadArtifactServiceAsync; teichmann@5835: import org.dive4elements.river.client.shared.model.Artifact; teichmann@5835: import org.dive4elements.river.client.shared.model.Collection; teichmann@5835: import org.dive4elements.river.client.shared.model.Data; teichmann@5835: import org.dive4elements.river.client.shared.model.DataItem; teichmann@5835: import org.dive4elements.river.client.shared.model.DefaultData; teichmann@5835: import org.dive4elements.river.client.shared.model.DefaultDataItem; teichmann@5835: import org.dive4elements.river.client.shared.model.Recommendation; teichmann@5835: import org.dive4elements.river.client.shared.model.Recommendation.Facet; teichmann@5835: import org.dive4elements.river.client.shared.model.Recommendation.Filter; teichmann@5835: import org.dive4elements.river.client.shared.model.ToLoad; teichmann@5835: import org.dive4elements.river.client.shared.model.User; ingo@901: christian@4130: import java.util.List; christian@4130: import java.util.Map; christian@4130: import java.util.Set; ingo@909: ingo@901: ingo@901: public class WspDatacagePanel extends DatacagePanel { ingo@901: christian@4130: private static final long serialVersionUID = 2494432743877141135L; christian@4130: ingo@1278: public static final String WATERLEVEL_OUTS = "waterlevels"; ingo@901: ingo@909: public static final FLYSConstants MSG = GWT.create(FLYSConstants.class); ingo@909: ingo@909: ingo@909: protected LoadArtifactServiceAsync loadService = ingo@909: GWT.create(LoadArtifactService.class); ingo@909: ingo@909: protected Recommendation recommendation; ingo@909: protected Artifact artifact; ingo@909: ingo@901: ingo@901: public WspDatacagePanel() { ingo@901: super(); ingo@901: } ingo@901: ingo@901: ingo@901: public WspDatacagePanel(User user) { ingo@901: super(user); ingo@901: } ingo@901: ingo@901: ingo@901: @Override ingo@901: public String getOuts() { ingo@901: return WATERLEVEL_OUTS; ingo@901: } ingo@901: ingo@901: ingo@1268: @Override ingo@1268: protected void createWidget() { ingo@1268: super.createWidget(); ingo@1268: widget.setIsMutliSelectable(false); ingo@1268: } ingo@1268: ingo@1268: ingo@909: /** ingo@909: * We need to override this method (defined in AbstractUIProvider) because ingo@909: * we have to create a new Artifact specified by the Datacage selection via ingo@909: * Async request. ingo@909: * felix@3363: * @param e The ClickEvent. ingo@909: */ ingo@909: @Override ingo@909: public void onClick(ClickEvent e) { ingo@909: List errors = validate(); ingo@909: if (errors == null || errors.isEmpty()) { ingo@909: // 1) Fetch selected recommendation ingo@909: Config config = Config.getInstance(); ingo@909: final String locale = config.getLocale(); ingo@909: final Collection c = this.collection; ingo@909: final Recommendation r = getSelectedRecommendation(); ingo@909: christian@4130: christian@4130: if (r == null) { christian@4130: SC.warn(MSG.warning_no_wsp_selected()); christian@4130: return; christian@4130: } christian@4130: ingo@909: // 2) Create, load Artifact and fire event ingo@909: loadService.load( raimund@1425: c, r, "winfo", locale, ingo@909: new AsyncCallback() { christian@4130: @Override ingo@909: public void onFailure(Throwable caught) { christian@4130: GWT.log("WspDatacagePanel", caught); christian@4130: SC.warn(FLYS.getExceptionString(MSG, caught)); ingo@909: } ingo@909: christian@4130: @Override ingo@909: public void onSuccess(Artifact artifact) { ingo@909: fireStepForwardEvent(new StepForwardEvent( ingo@909: getData(r, artifact))); ingo@909: } ingo@909: } ingo@909: ); ingo@909: } ingo@909: else { ingo@909: showErrors(errors); ingo@909: } ingo@909: } ingo@909: ingo@909: ingo@909: protected Recommendation getSelectedRecommendation() { ingo@909: ToLoad toLoad = widget.getSelection(); ingo@909: List recoms = toLoad.toRecommendations(); ingo@909: christian@3521: return recoms.size() > 0 ? recoms.get(0) : null; ingo@909: } ingo@909: ingo@909: ingo@909: /** ingo@909: * Nothing is done in this method. It returns null, because we serve the ingo@909: * Data another way! ingo@909: * ingo@909: * @return always null! ingo@909: */ ingo@901: @Override ingo@901: protected Data[] getData() { ingo@909: // do nothing here, the Data is fetched on another way in this panel. ingo@909: return null; ingo@909: } ingo@909: ingo@909: ingo@909: protected Data[] getData(Recommendation r, Artifact newArtifact) { ingo@909: String uuid = newArtifact.getUuid(); ingo@909: r.setMasterArtifact(uuid); ingo@909: ingo@909: String value = createDataString(uuid, r.getFilter()); ingo@909: ingo@901: DataItem item = new DefaultDataItem(dataName, dataName, value); ingo@901: return new Data[] { new DefaultData( ingo@901: dataName, null, null, new DataItem[] { item }) }; ingo@901: } ingo@909: ingo@909: ingo@909: protected String createDataString(String artifact, Filter filter) { ingo@909: Facet f = null; ingo@909: ingo@909: Map> outs = filter.getOuts(); ingo@909: Set>> entries = outs.entrySet(); ingo@909: ingo@909: for (Map.Entry> entry: entries) { ingo@909: List fs = entry.getValue(); ingo@909: ingo@909: f = fs.get(0); ingo@909: if (f != null) { ingo@909: break; ingo@909: } ingo@909: } ingo@909: ingo@909: return "[" + artifact + ";" + f.getName() + ";" + f.getIndex() + "]"; ingo@909: } ingo@901: } ingo@901: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :