raimund@2505: package de.intevation.flys.client.client.ui.fixation; raimund@2505: raimund@2505: import java.util.HashMap; raimund@2505: raimund@2505: import com.google.gwt.core.client.GWT; raimund@2505: import com.google.gwt.user.client.rpc.AsyncCallback; raimund@2505: raimund@2505: import com.smartgwt.client.util.SC; raimund@2505: raimund@2505: import com.smartgwt.client.widgets.Canvas; raimund@2505: import com.smartgwt.client.widgets.form.DynamicForm; raimund@2505: import com.smartgwt.client.widgets.HTMLPane; raimund@2505: import com.smartgwt.client.widgets.layout.VLayout; raimund@2505: raimund@2505: import de.intevation.flys.client.client.FLYSConstants; raimund@2505: import de.intevation.flys.client.client.ui.AbstractUIProvider; raimund@2505: raimund@2505: import de.intevation.flys.client.client.Config; raimund@2505: raimund@2505: import de.intevation.flys.client.shared.model.Data; raimund@2505: import de.intevation.flys.client.shared.model.DataList; raimund@2505: import de.intevation.flys.client.shared.model.FixingsOverviewInfo; raimund@2505: raimund@2505: import de.intevation.flys.client.client.services.FixingsOverviewService; raimund@2505: import de.intevation.flys.client.client.services.FixingsOverviewServiceAsync; raimund@2505: raimund@2505: raimund@2505: /** raimund@2505: * This UIProvider creates helper panel for fixation analysis without input raimund@2505: * elements. raimund@2505: * raimund@2505: * @author Raimund Renkert raimund@2505: */ raimund@2505: public abstract class FixationPanel raimund@2505: extends AbstractUIProvider raimund@2505: { raimund@2505: protected static HashMap instances = new HashMap(); raimund@2505: raimund@2505: /** The message class that provides i18n strings. */ raimund@2505: protected FLYSConstants MESSAGES = GWT.create(FLYSConstants.class); raimund@2505: raimund@2505: protected FixingsOverviewServiceAsync overviewService = raimund@2505: GWT.create(FixingsOverviewService.class); raimund@2505: raimund@2505: protected String htmlOverview; raimund@2505: protected FixingsOverviewInfo fixInfo; raimund@2505: raimund@2505: public FixationPanel() { raimund@2505: htmlOverview = ""; raimund@2505: } raimund@2505: raimund@2505: protected String getArtifactUuid() { raimund@2505: return this.artifact.getUuid(); raimund@2505: } raimund@2505: raimund@2505: protected void init() { raimund@2505: raimund@2505: } raimund@2505: raimund@2505: public Data[] getData() { raimund@2505: return null; raimund@2505: } raimund@2505: raimund@2505: public Canvas create(DataList list) { raimund@2505: VLayout layout = new VLayout(); raimund@2505: raimund@2505: Canvas helper = createHelper(); raimund@2505: this.helperContainer.addMember(helper); raimund@2505: raimund@2505: Canvas submit = getNextButton(); raimund@2505: Canvas widget = createWidget(list); raimund@2505: raimund@2505: layout.addMember(widget); raimund@2505: layout.addMember(submit); raimund@2505: return layout; raimund@2505: } raimund@2505: raimund@2505: public Canvas createOld(DataList list) { raimund@2505: return new DynamicForm(); raimund@2505: } raimund@2505: raimund@2505: protected Canvas createHelper() { raimund@2505: Config config = Config.getInstance(); raimund@2505: String locale = config.getLocale (); raimund@2505: raimund@2505: final HTMLPane helper = new HTMLPane(); raimund@2505: raimund@2505: String river = artifact.getArtifactDescription().getRiver(); raimund@2505: raimund@2505: createCallback(); raimund@2505: /* raimund@2505: Filter example. raimund@2505: {"fixings": { "river": { "name": "Elbe"}, "range": {"from": 1, "to": 200}, "filter": {"and": { "column": {"cid": 1}, "column": {"cid": 2} } }} raimund@2505: */ raimund@2505: String callBack = "fixationCallback(this.checked, this.name)"; raimund@2505: raimund@2505: overviewService.generateOverview( raimund@2505: locale, raimund@2505: artifact.getUuid(), raimund@2505: "{\"fixings\": {\"river\": {\"name\": \"" + river + "\"}}}", raimund@2505: renderCheckboxes(), raimund@2505: callBack, raimund@2505: new AsyncCallback() { raimund@2505: public void onFailure(Throwable caught) { raimund@2505: GWT.log("Could not receive overview."); raimund@2505: SC.warn(caught.getMessage()); raimund@2505: } raimund@2505: public void onSuccess(FixingsOverviewInfo info) { raimund@2505: GWT.log("Successfully loaded overview."); raimund@2505: fixInfo = info; raimund@2505: htmlOverview = info.getHTML(); raimund@2505: GWT.log("html: " + info.getHTML()); raimund@2505: helper.setContents(htmlOverview); raimund@2505: raimund@2505: } raimund@2505: }); raimund@2505: raimund@2505: this.helperContainer.addMember(helper); raimund@2505: raimund@2505: return helper; raimund@2505: } raimund@2505: raimund@2505: private native void createCallback() /*-{ raimund@2505: $wnd.fixationCallback = @de.intevation.flys.client.client.ui.fixation.FixationPanel::helperCallback(ZLjava/lang/String;); raimund@2505: }-*/; raimund@2505: raimund@2505: private static void helperCallback(boolean checked, String name) { raimund@2505: String[] parts = name.split(":"); raimund@2505: String uuid = parts[0]; raimund@2505: String cid = parts[1]; raimund@2505: FixationPanel p = FixationPanel.getInstance(uuid); raimund@2505: if (p != null) { raimund@2505: p.setValues(cid, checked); raimund@2505: } raimund@2505: } raimund@2505: raimund@2505: private static FixationPanel getInstance(String uuid) { raimund@2505: for (int i = 0; i < instances.size(); i++) { raimund@2505: if (instances.get(uuid) != null) { raimund@2505: return instances.get(uuid); raimund@2505: } raimund@2505: } raimund@2505: return null; raimund@2505: } raimund@2505: raimund@2505: public abstract Canvas createWidget(DataList data); raimund@2505: public abstract void setValues(String cid, boolean checked); raimund@2505: public abstract boolean renderCheckboxes(); raimund@2505: }