# HG changeset patch # User Christian Lins # Date 1348911518 -7200 # Node ID 65e369ac4f9938e14c1b00c03237ef9a49671698 # Parent f9729662f1bedaff08db62a3ee09c9d81076c746 ManualPointsEditor supports Date x axis values. diff -r f9729662f1be -r 65e369ac4f99 flys-client/ChangeLog --- a/flys-client/ChangeLog Fri Sep 28 20:51:41 2012 +0200 +++ b/flys-client/ChangeLog Sat Sep 29 11:38:38 2012 +0200 @@ -1,3 +1,10 @@ +2012-09-29 Christian Lins + + * flys-client/src/main/java/de/intevation/flys/client/client/ui/chart/ManualPointsEditor.java, + flys-client/src/main/java/de/intevation/flys/client/client/ui/fixation/FixPeriodPanel.java + flys-client/src/main/java/de/intevation/flys/client/client/ui/chart/PointRecord.java: + ManualPointsEditor supports Date x axis values. + 2012-09-29 Björn Ricks * src/main/java/de/intevation/flys/client/server/ArtifactServiceImpl.java, diff -r f9729662f1be -r 65e369ac4f99 flys-client/src/main/java/de/intevation/flys/client/client/ui/chart/ManualPointsEditor.java --- a/flys-client/src/main/java/de/intevation/flys/client/client/ui/chart/ManualPointsEditor.java Fri Sep 28 20:51:41 2012 +0200 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/chart/ManualPointsEditor.java Sat Sep 29 11:38:38 2012 +0200 @@ -1,6 +1,7 @@ package de.intevation.flys.client.client.ui.chart; import com.google.gwt.core.client.GWT; +import com.google.gwt.i18n.client.DateTimeFormat; import com.google.gwt.i18n.client.NumberFormat; import com.google.gwt.json.client.JSONArray; import com.google.gwt.json.client.JSONBoolean; @@ -47,6 +48,7 @@ import de.intevation.flys.client.shared.model.Settings; import de.intevation.flys.client.shared.model.StringProperty; +import java.util.Date; import java.util.List; @@ -153,6 +155,7 @@ cancel.addClickHandler(this); accept.addClickHandler(new ClickHandler() { + @Override public void onClick(ClickEvent e) { okClicked(); } @@ -176,7 +179,7 @@ String xAxis = "X"; String yAxis = "Y"; - // Get header text from collection settings. + // Get header text from collection settings Settings settings = this.collection.getSettings(outputModeName); List axes = settings.getSettings("axes"); if(axes != null) { @@ -205,7 +208,7 @@ ListGridField xField = new ListGridField(PointRecord.ATTRIBUTE_X, xAxis); if(xAxis.equalsIgnoreCase("date") || xAxis.equalsIgnoreCase("Datum")) { - // FIXME: This is a hack for the special axis with Date type + // FIXME: This is a hack for Timeseries charts with Date types on the x axis xField.setType(ListGridFieldType.DATE); this.fieldTypeX = ListGridFieldType.DATE; } @@ -246,6 +249,7 @@ nameField, removeField}); listGrid.addRecordClickHandler(new RecordClickHandler() { + @Override public void onRecordClick(final RecordClickEvent event) { // Just handle remove-clicks if(!event.getField().getName().equals(removeField.getName())) { @@ -255,28 +259,28 @@ } }); - // Find the artifacts uuid. + // Find the artifacts uuid findManualPointsUUID(); CollectionItem item = collection.getItem(uuid); - // Add points to grid. + // Add points to grid if (item != null) { // TODO store this from findPointUUID instead (we touched these). String jsonData = item.getData().get(pointDataItemName); JSONArray jsonArray = (JSONArray) JSONParser.parse(jsonData); for (int i = 0; i < jsonArray.size(); i++) { JSONArray point = (JSONArray) jsonArray.get(i); - listGrid.addData(pointRecordFromJSON(point)); + listGrid.addData(PointRecord.fromJSON(point)); } } else { - // TODO proper log - System.out.println("No item found for " + uuid); + GWT.log("ManualPointsEditor: No item found for " + uuid); } IButton button = new IButton(MSG.newpoint()); button.setTop(250); button.addClickHandler(new ClickHandler() { + @Override public void onClick(ClickEvent event) { listGrid.startEditingNew(); } @@ -296,6 +300,7 @@ protected CellFormatter createCellFormatter() { return new CellFormatter() { + @Override public String format(Object value, ListGridRecord record, int rowNum, int colNum) { if(value != null) { NumberFormat nf = NumberFormat.getDecimalFormat(); @@ -314,6 +319,7 @@ protected CellEditValueParser createCellEditValueParser() { return new CellEditValueParser() { + @Override public Object parse(Object value, ListGridRecord record, int rowNum, int colNum) { if (value == null) return null; @@ -332,6 +338,7 @@ protected CellEditValueFormatter createCellEditValueFormatter() { return new CellEditValueFormatter() { + @Override public Object format(Object value, ListGridRecord record, int rowNum, int colNum) { if (value == null) { return ""; @@ -348,6 +355,20 @@ }; } + protected String getLocaleDateFormat() { + String loc = Config.getInstance().getLocale(); + if ("de".equals(loc)) { + return "yy.MM.yyyy"; + } + else { + return "MM/dd/yyyy"; + } + } + + protected String formatDate(Date date) { + DateTimeFormat dtf = DateTimeFormat.getFormat(getLocaleDateFormat()); + return dtf.format(date); + } /** Create JSON representation of the points present in the list grid. */ protected JSONArray jsonArrayFromListGrid() { @@ -359,7 +380,13 @@ JSONArray data = new JSONArray(); PointRecord point = (PointRecord) record; - data.set(0, new JSONNumber(point.getX())); + if(point.isTimeseriesPoint()) { + data.set(0, new JSONString(point.getXAsDate())); + GWT.log("Date: " + point.getXAsDate()); + } + else { + data.set(0, new JSONNumber(point.getX())); + } data.set(1, new JSONNumber(point.getY())); data.set(2, new JSONString(point.getName())); data.set(3, JSONBoolean.getInstance(point.isActive())); @@ -381,7 +408,9 @@ } if(fieldTypeX.equals(ListGridFieldType.DATE)) { - data.set(0, new JSONString(record.getAttribute(PointRecord.ATTRIBUTE_X))); + Date date = record.getAttributeAsDate(PointRecord.ATTRIBUTE_X); + data.set(0, new JSONString(formatDate(date))); + GWT.log("Date: " + formatDate(date)); } else { data.set(0, new JSONNumber(record. @@ -420,11 +449,13 @@ new DefaultArtifact(uuid, "TODO:hash"), feedData, new AsyncCallback() { + @Override public void onFailure(Throwable caught) { GWT.log("Could not feed artifact with points."); SC.warn(MSG.getString(caught.getMessage())); enable(); } + @Override public void onSuccess(Artifact fartifact) { GWT.log("Successfully set points"); redrawRequestHandler.onRedrawRequest( @@ -440,18 +471,6 @@ } - /** From a JSON-encoded point, create a PointRecord. */ - public PointRecord pointRecordFromJSON(JSONArray jsonArray) { - JSONNumber x = (JSONNumber) jsonArray.get(0); - JSONNumber y = (JSONNumber) jsonArray.get(1); - JSONString s = (JSONString) jsonArray.get(2); - JSONBoolean b = (JSONBoolean) jsonArray.get(3); - - return new PointRecord(b.booleanValue(), x.doubleValue(), - y.doubleValue(), s.stringValue()); - } - - /** Add a ManualPointArtifact to Collection. */ public void addArtifactCreateUI() { final Label standByLabel = new Label(MSG.standby()); @@ -470,9 +489,11 @@ "manualpoints", locale, new AsyncCallback() { + @Override public void onFailure(Throwable caught) { GWT.log("Creating manualpoint artifact failed!"); } + @Override public void onSuccess(Artifact artifact) { GWT.log("Successfully created artifact."); removeItem(standByLabel); @@ -487,59 +508,12 @@ * This method is called when the user aborts point editing. * @param event The event. */ + @Override public void onClick(ClickEvent event) { this.destroy(); } - /** Simple record to store points. */ - public class PointRecord extends ListGridRecord { - protected static final String ATTRIBUTE_X = "X"; - protected static final String ATTRIBUTE_Y = "Y"; - protected static final String ATTRIBUTE_NAME = "name"; - protected static final String ATTRIBUTE_ACTIVE = "active"; - - public PointRecord(boolean b, double x, double y, String name) { - setActive(b); - setName(name); - setX(x); - setY(y); - } - - public void setActive(boolean b) { - setAttribute(ATTRIBUTE_ACTIVE, b); - } - - public boolean isActive() { - return getAttributeAsBoolean(ATTRIBUTE_ACTIVE); - } - - public void setName(String name) { - setAttribute(ATTRIBUTE_NAME, name); - } - - public String getName() { - return getAttributeAsString(ATTRIBUTE_NAME); - } - - public void setX(double x) { - setAttribute(ATTRIBUTE_X, x); - } - - public void setY(double y) { - setAttribute(ATTRIBUTE_Y, y); - } - - public double getX() { - return getAttributeAsDouble(ATTRIBUTE_X); - } - - public double getY() { - return getAttributeAsDouble(ATTRIBUTE_Y); - } - } - - /** Return false if x or y attribute is missing. */ protected boolean isDialogValid() { boolean valid = true; diff -r f9729662f1be -r 65e369ac4f99 flys-client/src/main/java/de/intevation/flys/client/client/ui/chart/PointRecord.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/chart/PointRecord.java Sat Sep 29 11:38:38 2012 +0200 @@ -0,0 +1,105 @@ +package de.intevation.flys.client.client.ui.chart; + +import com.google.gwt.json.client.JSONArray; +import com.google.gwt.json.client.JSONBoolean; +import com.google.gwt.json.client.JSONNumber; +import com.google.gwt.json.client.JSONString; +import com.google.gwt.json.client.JSONValue; + +import com.smartgwt.client.widgets.grid.ListGridRecord; + +/** Simple record to store points. */ +public class PointRecord extends ListGridRecord { + protected static final String ATTRIBUTE_X = "X"; + protected static final String ATTRIBUTE_Y = "Y"; + protected static final String ATTRIBUTE_NAME = "name"; + protected static final String ATTRIBUTE_ACTIVE = "active"; + + /** From a JSON-encoded point, create a PointRecord. */ + public static PointRecord fromJSON(JSONArray jsonArray) { + JSONValue x = jsonArray.get(0); + JSONNumber y = (JSONNumber) jsonArray.get(1); + JSONString s = (JSONString) jsonArray.get(2); + JSONBoolean b = (JSONBoolean)jsonArray.get(3); + + if(x instanceof JSONNumber) { + return new PointRecord( + b.booleanValue(), ((JSONNumber)x).doubleValue(), + y.doubleValue(), s.stringValue()); + } + else { + return new PointRecord( + b.booleanValue(), ((JSONString)x).stringValue(), + y.doubleValue(), s.stringValue()); + } + } + + protected boolean isTimeseriesPoint = false; + + public PointRecord(boolean isActive, double x, double y, String name) { + setActive(isActive); + setName(name); + setX(x); + setY(y); + } + + /** + * Constructor taking the x axis value as String representing a Date value. + * @param isActive + * @param x + * @param y + * @param name + */ + public PointRecord(boolean isActive, String x, double y, String name) { + setActive(isActive); + setName(name); + setX(x); + setY(y); + + this.isTimeseriesPoint = true; + } + + public void setActive(boolean isActive) { + setAttribute(ATTRIBUTE_ACTIVE, isActive); + } + + public boolean isActive() { + return getAttributeAsBoolean(ATTRIBUTE_ACTIVE); + } + + public boolean isTimeseriesPoint() { + return this.isTimeseriesPoint; + } + + public void setName(String name) { + setAttribute(ATTRIBUTE_NAME, name); + } + + public String getName() { + return getAttributeAsString(ATTRIBUTE_NAME); + } + + public void setX(double x) { + setAttribute(ATTRIBUTE_X, x); + } + + public void setX(String date) { + setAttribute(ATTRIBUTE_X, date); + } + + public void setY(double y) { + setAttribute(ATTRIBUTE_Y, y); + } + + public double getX() { + return getAttributeAsDouble(ATTRIBUTE_X); + } + + public String getXAsDate() { + return getAttributeAsString(ATTRIBUTE_X); + } + + public double getY() { + return getAttributeAsDouble(ATTRIBUTE_Y); + } +} \ No newline at end of file diff -r f9729662f1be -r 65e369ac4f99 flys-client/src/main/java/de/intevation/flys/client/client/ui/fixation/FixPeriodPanel.java --- a/flys-client/src/main/java/de/intevation/flys/client/client/ui/fixation/FixPeriodPanel.java Fri Sep 28 20:51:41 2012 +0200 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/fixation/FixPeriodPanel.java Sat Sep 29 11:38:38 2012 +0200 @@ -11,7 +11,6 @@ import com.smartgwt.client.widgets.layout.HLayout; import com.smartgwt.client.widgets.layout.VLayout; -import de.intevation.flys.client.client.Config; import de.intevation.flys.client.client.FLYSConstants; import de.intevation.flys.client.shared.model.Data; import de.intevation.flys.client.shared.model.DataItem; @@ -168,16 +167,6 @@ return false; } - protected String getLocaleDateFormat() { - String loc = Config.getInstance().getLocale(); - if ("de".equals(loc)) { - return "yy.MM.yyyy"; - } - else { - return "MM/dd/yyyy"; - } - } - @Override public void success() { List list = fixInfo.getEvents();