Mercurial > dive4elements > river
view flys-client/src/main/java/de/intevation/flys/client/client/ui/fixation/FixationPanel.java @ 2526:a911e2968cb1
Changed some data types in states and filter and added new preprocessing state
to ui provider factory.
flys-client/trunk@4415 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Raimund Renkert <raimund.renkert@intevation.de> |
---|---|
date | Tue, 15 May 2012 15:33:43 +0000 |
parents | 8f528f5ae137 |
children | cc5969df0490 |
line wrap: on
line source
package de.intevation.flys.client.client.ui.fixation; import java.util.HashMap; import java.util.Date; import java.lang.Math; import java.lang.NumberFormatException; import com.google.gwt.core.client.GWT; import com.google.gwt.user.client.rpc.AsyncCallback; import com.smartgwt.client.util.SC; import com.smartgwt.client.widgets.Canvas; import com.smartgwt.client.widgets.Button; import com.smartgwt.client.widgets.form.DynamicForm; import com.smartgwt.client.widgets.HTMLPane; import com.smartgwt.client.widgets.layout.VLayout; import com.smartgwt.client.widgets.layout.HLayout; import com.smartgwt.client.widgets.form.fields.TextItem; import com.smartgwt.client.widgets.form.fields.events.ChangedHandler; import com.smartgwt.client.widgets.form.fields.events.ChangedEvent; import com.smartgwt.client.widgets.events.ClickHandler; import com.smartgwt.client.widgets.events.ClickEvent; import com.smartgwt.client.widgets.events.ResizedHandler; import com.smartgwt.client.widgets.events.ResizedEvent; import com.smartgwt.client.widgets.form.validator.IsFloatValidator; import com.smartgwt.client.types.Alignment; import com.smartgwt.client.widgets.tab.Tab; import com.smartgwt.client.widgets.tab.TabSet; import com.smartgwt.client.widgets.Img; import de.intevation.flys.client.client.FLYSConstants; import de.intevation.flys.client.client.ui.AbstractUIProvider; import de.intevation.flys.client.client.Config; import de.intevation.flys.client.shared.model.Data; import de.intevation.flys.client.shared.model.DataList; import de.intevation.flys.client.shared.model.FixingsOverviewInfo; import de.intevation.flys.client.client.services.FixingsOverviewService; import de.intevation.flys.client.client.services.FixingsOverviewServiceAsync; /** * This UIProvider creates helper panel for fixation analysis without input * elements. * * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a> */ public abstract class FixationPanel extends AbstractUIProvider implements ResizedHandler { protected static HashMap<String, FixationPanel> instances = new HashMap<String, FixationPanel>(); /** The message class that provides i18n strings. */ protected FLYSConstants MESSAGES = GWT.create(FLYSConstants.class); protected FixingsOverviewServiceAsync overviewService = GWT.create(FixingsOverviewService.class); protected String htmlOverview; protected FixingsOverviewInfo fixInfo; protected FixFilter fixFilter; protected TabSet tabs; protected Tab events; protected Tab chart; protected VLayout chartContainer; protected Img chartImg; public FixationPanel() { fixFilter = new FixFilter(); chartImg = new Img(); htmlOverview = ""; } protected String getArtifactUuid() { return this.artifact.getUuid(); } protected void init() { } public Data[] getData() { return null; } public Canvas create(DataList list) { VLayout layout = new VLayout(); Canvas helper = createHelper(); this.helperContainer.addMember(helper); Canvas submit = getNextButton(); Canvas widget = createWidget(list); layout.addMember(widget); layout.addMember(submit); return layout; } public Canvas createOld(DataList list) { return new DynamicForm(); } protected Canvas createHelper() { Config config = Config.getInstance(); String locale = config.getLocale (); tabs = new TabSet(); events = new Tab(MESSAGES.events()); chart = new Tab(MESSAGES.kmchart()); chartContainer = new VLayout(); Canvas scroll = createChartHelper(); VLayout layout = new VLayout(); layout.addResizedHandler(this); layout.addMember(chartContainer); layout.addMember(scroll); layout.setAlign(Alignment.CENTER); chart.setPane(layout); final HTMLPane eventPane = new HTMLPane(); String river = artifact.getArtifactDescription().getRiver(); fixFilter.setRiver(river); createCallback(); /* Filter example. {"fixings": { "river": { "name": "Elbe"}, "range": {"from": 1, "to": 200}, "filter": {"and": { "column": {"cid": 1}, "column": {"cid": 2} } }} */ String callBack = "fixationCallback(this.checked, this.name)"; overviewService.generateOverview( locale, artifact.getUuid(), fixFilter.getOverviewFilter(), renderCheckboxes(), callBack, new AsyncCallback<FixingsOverviewInfo>() { public void onFailure(Throwable caught) { GWT.log("Could not receive overview."); SC.warn(caught.getMessage()); } public void onSuccess(FixingsOverviewInfo info) { GWT.log("Successfully loaded overview."); fixInfo = info; htmlOverview = info.getHTML(); fixFilter.setRiver(info.getRiver()); fixFilter.setCurrentKm(1d); fixFilter.setFromKm(info.getFrom()); fixFilter.setToKm(info.getTo()); eventPane.setContents(htmlOverview); updateChartTab(fixInfo.getFrom()); events.setPane(eventPane); } }); tabs.addTab(events); tabs.addTab(chart); return tabs; } protected Canvas createChartHelper() { DynamicForm form = new DynamicForm(); Button lower = new Button("<<"); lower.setWidth(30); Button upper = new Button(">>"); upper.setWidth(30); final TextItem currentkm = new TextItem(); currentkm.setWidth(60); currentkm.setShowTitle(false); currentkm.setValidators(new IsFloatValidator()); form.setFields(currentkm); form.setWidth(60); lower.addClickHandler(new ClickHandler() { public void onClick(ClickEvent ce) { updateChartTabLow(); currentkm.setValue(fixFilter.getCurrentKm()); } }); upper.addClickHandler(new ClickHandler() { public void onClick(ClickEvent ce) { updateChartTabUp(); currentkm.setValue(fixFilter.getCurrentKm()); } }); currentkm.addChangedHandler(new ChangedHandler() { public void onChanged(ChangedEvent ce) { //TODO: get current value. if(ce.getForm().validate() && ce.getItem().getValue() != null) { try { String s = ce.getItem().getValue().toString(); Double d = new Double(s); updateChartTab(d.doubleValue()); } catch(NumberFormatException nfe) { // Do nothing. } } } }); HLayout layout = new HLayout(); layout.setAlign(Alignment.CENTER); layout.addMember(lower); layout.addMember(form); layout.addMember(upper); return layout; } protected void updateChartTab(double km) { Config config = Config.getInstance(); String locale = config.getLocale (); fixFilter.setCurrentKm(km); chartContainer.removeMember(chartImg); String imgUrl = GWT.getModuleBaseURL(); imgUrl += "fixings-km-chart"; imgUrl += "?locale=" + locale; imgUrl += "&filter=" + fixFilter.getChartFilter(helperContainer.getWidth() - 12, (int)(helperContainer.getWidth()*3/4) - 12); chartImg = new Img(imgUrl, helperContainer.getWidth() - 12, (int)(helperContainer.getWidth()*3/4) - 12); chartContainer.addMember(chartImg); } protected void updateChartTabLow() { double curr = fixFilter.getCurrentKm(); if (curr > fixFilter.getFromKm()) { double newVal = (curr - 0.1) * 10; long round = Math.round(newVal); updateChartTab(((double)round) / 10); } return; } protected void updateChartTabUp() { double curr = fixFilter.getCurrentKm(); if (curr < fixFilter.getToKm()) { double newVal = (curr + 0.1) * 10; long round = Math.round(newVal); updateChartTab(((double)round) / 10); } return; } public void onResized(ResizedEvent re) { updateChartTab(fixFilter.getCurrentKm()); } private native void createCallback() /*-{ $wnd.fixationCallback = @de.intevation.flys.client.client.ui.fixation.FixationPanel::helperCallback(ZLjava/lang/String;); }-*/; private static void helperCallback(boolean checked, String name) { String[] parts = name.split(":"); String uuid = parts[0]; String cid = parts[1]; FixationPanel p = FixationPanel.getInstance(uuid); if (p != null) { p.setValues(cid, checked); } } private static FixationPanel getInstance(String uuid) { for (int i = 0; i < instances.size(); i++) { if (instances.get(uuid) != null) { return instances.get(uuid); } } return null; } public abstract Canvas createWidget(DataList data); public abstract void setValues(String cid, boolean checked); public abstract boolean renderCheckboxes(); public abstract FixFilter getFilter(); public abstract void setFilter(FixFilter filter); public static class FixFilter { protected String river; protected double fromKm; protected double toKm; protected double currentKm; protected int fromClass; protected int toClass; protected long fromDate; protected long toDate; protected boolean hasDate; protected int[] events; public FixFilter() { this.river = ""; this.fromKm = -1d; this.toKm = -1; this.currentKm = -1; this.fromClass = -1; this.toClass = -1; this.fromDate = -1; this.toDate = -1; this.hasDate = false; this.events = new int[0]; } public void setRiver(String river) { this.river = river; } public void setFromKm(double from) { this.fromKm = from; } public void setToKm(double to) { this.toKm = to; } public void setCurrentKm(double km) { this.currentKm = km; } public void setFromClass(int from) { this.fromClass = from; } public void setToClass(int to) { this.toClass = to; } public void setFromDate(long from) { this.hasDate = true; this.fromDate = from; } public void setToDate(long to) { this.hasDate = true; this.toDate = to; } public void setEvents(int[] ev) { this.events = ev; } public String getRiver() { return this.river; } public double getFromKm() { return this.fromKm; } public double getToKm() { return this.toKm; } public double getCurrentKm() { return this.currentKm; } public int getFromClass() { return this.fromClass; } public int getToClass() { return this.toClass; } public long getFromDate() { return this.fromDate; } public long getToDate() { return this.toDate; } public int[] getEvents() { return this.events; } public String getOverviewFilter() { String filter = ""; if (river != null && river.length() > 0) { filter = "{\"fixings\": {\"river\": {\"name\": \"" + river + "\"}}"; filter += createFilter(); filter += "}"; } return filter; } public String getChartFilter(int width, int height) { String filter = ""; if (river != null && river.length() > 0 && currentKm >= fromKm && currentKm <= toKm) { filter = "{\"fixings\": "+ "{\"river\": {\"name\": \"" + river + "\"}," + "\"km\": {\"value\": \"" + currentKm + "\"}," + "\"extent\": {\"width\": \"" + width + "\", \"height\": \"" + height + "\"}}"; filter += createFilter(); filter += "}"; } return filter; } protected String createFilter() { //TODO create filter... return ""; } } }