You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Reported by pepijn@dvelop.nl, Aug 27, 2013
The current implementation of Point does not allow value types other then Number. This makes it impossible to properly use the Axis type 'DATETIME'.
This patch makes the X and Y fields of Point generic, so other types can be used. It also adds a JSON serializer for java.util.Date instances.
Index: wicked-charts/wicked-charts-highcharts/src/main/java/com/googlecode/wickedcharts/highcharts/jackson/JsonRenderer.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- wicked-charts/wicked-charts-highcharts/src/main/java/com/googlecode/wickedcharts/highcharts/jackson/JsonRenderer.java (revision 292)
+++ wicked-charts/wicked-charts-highcharts/src/main/java/com/googlecode/wickedcharts/highcharts/jackson/JsonRenderer.java (revision )
@@ -14,12 +14,14 @@
*/
package com.googlecode.wickedcharts.highcharts.jackson;
+import java.util.Date;
import java.util.Locale;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.googlecode.wickedcharts.highcharts.json.LowercaseEnum;
import com.googlecode.wickedcharts.highcharts.options.Center;
import com.googlecode.wickedcharts.highcharts.options.Crosshair;
@@ -97,6 +99,7 @@
this.jacksonModule.addSerializer(Crosshair.class, new CrosshairSerializer());
this.jacksonModule.addSerializer(RangeCoordinate.class, new RangeCoordinateSerializer());
this.jacksonModule.addSerializer(Bubble.class, new BubbleSerializer());
+ this.jacksonModule.addSerializer(Date.class, new DateSerializer());
ObjectMapper mapper = createDefaultObjectMapper();
mapper.setLocale(Locale.ENGLISH);
Index: wicked-charts/wicked-charts-highcharts/src/main/java/com/googlecode/wickedcharts/highcharts/jackson/DateSerializer.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- wicked-charts/wicked-charts-highcharts/src/main/java/com/googlecode/wickedcharts/highcharts/jackson/DateSerializer.java (revision )
+++ wicked-charts/wicked-charts-highcharts/src/main/java/com/googlecode/wickedcharts/highcharts/jackson/DateSerializer.java (revision )
@@ -0,0 +1,45 @@
+/**
+ * Copyright 2012-2013 Wicked Charts (http://wicked-charts.googlecode.com)
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.googlecode.wickedcharts.highcharts.jackson;
+
+import java.io.IOException;
+import java.util.Calendar;
+import java.util.Date;
+
+import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.JsonSerializer;
+import com.fasterxml.jackson.databind.SerializerProvider;
+
+/**
+ * JsonSerializer for {@link Date} objects.
+ * @author pdegeus
+ */
+public class DateSerializer extends JsonSerializer<Date> {
+
+ @Override
+ public void serialize(final Date value, final JsonGenerator jgen, final SerializerProvider provider)
+ throws IOException, JsonProcessingException {
+
+ Calendar cal = Calendar.getInstance();
+ cal.setTime(value);
+
+ jgen.writeRawValue(String.format(
+ "new Date(%d,%d,%d,%d,%d,%d,0)",
+ cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH),
+ cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND)
+ ));
+ }
+}
Index: wicked-charts/wicked-charts-highcharts/src/main/java/com/googlecode/wickedcharts/highcharts/options/series/Point.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- wicked-charts/wicked-charts-highcharts/src/main/java/com/googlecode/wickedcharts/highcharts/options/series/Point.java (revision 292)
+++ wicked-charts/wicked-charts-highcharts/src/main/java/com/googlecode/wickedcharts/highcharts/options/series/Point.java (revision )
@@ -14,8 +14,9 @@
*/
package com.googlecode.wickedcharts.highcharts.options.series;
-import java.awt.Color;
+import java.awt.*;
import java.io.Serializable;
+import java.util.Date;
import com.googlecode.wickedcharts.highcharts.options.DataLabels;
import com.googlecode.wickedcharts.highcharts.options.Events;
@@ -24,14 +25,16 @@
import com.googlecode.wickedcharts.highcharts.options.color.SimpleColor;
/**
- * A point in a chart that has a label (or a name) and a color.
- *
- * @see <a
- * href="http://api.highcharts.com/highcharts#series.data">http://api.highcharts.com/highcharts#series.data</a>
+ * A point in a chart that has a label (or a name) and a color. Uses generics for the type of the X and Y values.
+ * Supported types are: all {@link Number Numbers}, {@link String} and {@link Date}. Use {@link Void} if a field is
+ * not used.
+ * @param <X> Type of the value on the X-axis.
+ * @param <Y> Type of the value on the Y-axis.
+ * @see <a href="http://api.highcharts.com/highcharts#series.data">http://api.highcharts.com/highcharts#series.data</a>
* @author Tom Hombergs (tom.hombergs@gmail.com)
- *
+ * @author pdegeus
*/
-public class Point implements Serializable {
+public class Point<X, Y> implements Serializable {
private static final long serialVersionUID = 1L;
@@ -39,7 +42,7 @@
private ColorReference color;
- private Number y;
+ private Y y;
private Events events;
@@ -55,7 +58,7 @@
private Boolean selected;
- private Number x;
+ private X x;
private Integer wickedChartsId;
@@ -69,30 +72,34 @@
* @param y
* the y value of this point.
*/
- public Point(final Number y) {
- this.y = y;
+ public Point(final Y y) {
+ this(null, null, y);
}
- public Point(final String name, final Number y) {
- this.name = name;
- this.y = y;
+ public Point(final String name, final Y y) {
+ this(name, null, y);
}
- public Point(final Number x, final Number y) {
+ public Point(final X x, final Y y) {
+ this(null, x, y);
+ }
+
+ public Point(final String name, final X x, final Y y) {
+ this.name = name;
- this.x = x;
- this.y = y;
- }
+ this.x = x;
+ this.y = y;
+ }
/**
* Convencience constructor.
*/
- public Point(final String name, final Number y, final Color color) {
+ public Point(final String name, final Y y, final Color color) {
this.name = name;
this.y = y;
this.color = new SimpleColor(color);
}
- public Point(final String name, final Number y, final ColorReference color) {
+ public Point(final String name, final Y y, final ColorReference color) {
this.name = name;
this.y = y;
this.color = color;
@@ -130,11 +137,11 @@
return this.sliced;
}
- public Number getX() {
+ public X getX() {
return this.x;
}
- public Number getY() {
+ public Y getY() {
return this.y;
}
@@ -183,12 +190,12 @@
return this;
}
- public Point setX(final Number x) {
+ public Point setX(final X x) {
this.x = x;
return this;
}
- public Point setY(final Number y) {
+ public Point setY(final Y y) {
this.y = y;
return this;
}
The text was updated successfully, but these errors were encountered:
#4pepijn@dvelop.nl
You're right, that seems to work too :) Thanks for the tip.
It still think however this change would make life easier in some cases, allowing all types of values for X and Y and adding a constructor to provide the X value.
Thanks for the patch! I will have a look at it for the next release. Since it would break the API, I would probably create a new class "GenericPoint<X,Y>" instead of adding the generic types to the existing Point class.
Reported by pepijn@dvelop.nl, Aug 27, 2013
The current implementation of Point does not allow value types other then Number. This makes it impossible to properly use the Axis type 'DATETIME'.
This patch makes the X and Y fields of Point generic, so other types can be used. It also adds a JSON serializer for java.util.Date instances.
The text was updated successfully, but these errors were encountered: