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: }