From 946978e44223beb5b4b202c80dce6319f9a5cc14 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Wed, 15 Jul 2015 22:55:09 +1200 Subject: Store extra data in JSON format --- src/org/traccar/database/DataManager.java | 6 ++--- src/org/traccar/database/QueryBuilder.java | 35 ++++++++++++++---------------- 2 files changed, 19 insertions(+), 22 deletions(-) (limited to 'src/org/traccar/database') diff --git a/src/org/traccar/database/DataManager.java b/src/org/traccar/database/DataManager.java index f134f87cb..04695c4a5 100644 --- a/src/org/traccar/database/DataManager.java +++ b/src/org/traccar/database/DataManager.java @@ -37,6 +37,7 @@ import org.traccar.helper.Log; import org.traccar.http.AsyncServlet; import org.traccar.http.JsonConverter; import org.traccar.model.Device; +import org.traccar.model.MiscFormatter; import org.traccar.model.Permission; import org.traccar.model.Position; import org.traccar.model.Server; @@ -306,18 +307,17 @@ public class DataManager implements IdentityManager { .setDate("time", position.getFixTime()) // tmp .setLong("device_id", position.getDeviceId()) // tmp .setLong("power", 0) // tmp - .setString("extended_info", position.getOther()) // tmp + .setString("extended_info", MiscFormatter.toXmlString(position.getOther())) // tmp .executeUpdate()); } - // TODO: possibly remove this method public void updateLatestPosition(Position position) throws SQLException { QueryBuilder.create(dataSource, getQuery("database.updateLatestPosition")) .setObject(position) .setDate("time", position.getFixTime()) // tmp .setLong("device_id", position.getDeviceId()) // tmp .setLong("power", 0) // tmp - .setString("extended_info", position.getOther()) // tmp + .setString("extended_info", MiscFormatter.toXmlString(position.getOther())) // tmp .executeUpdate(); } diff --git a/src/org/traccar/database/QueryBuilder.java b/src/org/traccar/database/QueryBuilder.java index 17165db82..4afa5b992 100644 --- a/src/org/traccar/database/QueryBuilder.java +++ b/src/org/traccar/database/QueryBuilder.java @@ -15,6 +15,7 @@ */ package org.traccar.database; +import java.io.StringReader; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.sql.Connection; @@ -31,8 +32,11 @@ import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; +import javax.json.Json; +import javax.json.JsonReader; import javax.sql.DataSource; import org.traccar.model.Factory; +import org.traccar.model.MiscFormatter; public class QueryBuilder { @@ -224,23 +228,6 @@ public class QueryBuilder { return this; } - public QueryBuilder setBytes(String name, byte[] value) throws SQLException { - for (int i : indexes(name)) { - try { - if (value == null) { - statement.setNull(i, Types.VARCHAR); - } else { - statement.setBytes(i, value); - } - } catch (SQLException error) { - statement.close(); - connection.close(); - throw error; - } - } - return this; - } - public QueryBuilder setObject(Object object) throws SQLException { Method[] methods = object.getClass().getMethods(); @@ -261,8 +248,8 @@ public class QueryBuilder { setString(name, (String) method.invoke(object)); } else if (method.getReturnType().equals(Date.class)) { setDate(name, (Date) method.invoke(object)); - } else if (method.getReturnType().equals(byte[].class)) { - setBytes(name, (byte[]) method.invoke(object)); + } else if (method.getReturnType().equals(Map.class)) { + setString(name, MiscFormatter.toJsonString((Map) method.invoke(object))); } } catch (IllegalAccessException | InvocationTargetException error) { } @@ -379,6 +366,16 @@ public class QueryBuilder { } } }); + } else if (parameterType.equals(Map.class)) { + processors.add(new ResultSetProcessor() { + @Override + public void process(T object, ResultSet resultSet) throws SQLException { + try (JsonReader reader = Json.createReader(new StringReader(resultSet.getString(name)))) { + method.invoke(object, MiscFormatter.fromJson(reader.readObject())); + } catch (IllegalAccessException | InvocationTargetException error) { + } + } + }); } } } -- cgit v1.2.3