diff --git a/Hal.iml b/Hal.iml index 75f455bc..66f63369 100755 --- a/Hal.iml +++ b/Hal.iml @@ -4,20 +4,8 @@ - - - - - - - - - - - - diff --git a/resource/web/map.tmpl b/resource/web/map.tmpl index 855d1590..11297c44 100755 --- a/resource/web/map.tmpl +++ b/resource/web/map.tmpl @@ -21,7 +21,7 @@
-
@@ -74,10 +74,11 @@ }); // BG Upload - $("#button-bg").click(function() { + $("#button-bg-edit").click(function() { // Reset modal - //$('#bg-file-input').parent().show(); - //$('#bg-file-progress').parent().hide(); + $('#bg-file-input').parent().show(); + $('#bg-file-progress').parent().hide(); + $('#bgUploadModal').modal('show'); }); $('#bg-file-input').filer({ limit: 1, @@ -92,13 +93,14 @@ $('#bg-file-progress').parent().show(); }, success: function(data, el){ - + $('#bgUploadModal').modal('hide'); + drawMap(); }, error: function(el){ - $("bg-upload-progress").addClass("progress-bar-danger"); + $("#bg-upload-progress").addClass("progress-bar-danger"); }, onProgress: function(t){ - $("bg-upload-progress").css("width", t+"%"); + $("#bg-upload-progress").css("width", t+"%"); }, } }); @@ -188,10 +190,10 @@ diff --git a/src/se/hal/HalContext.java b/src/se/hal/HalContext.java index ad615320..5e5b94e2 100755 --- a/src/se/hal/HalContext.java +++ b/src/se/hal/HalContext.java @@ -156,8 +156,7 @@ public class HalContext { } logger.info("DB upgrade done"); - dbConf.setProperty(PROPERTY_DB_VERSION, defaultDBConf.getProperty(PROPERTY_DB_VERSION)); - storeProperties(); + setProperty(PROPERTY_DB_VERSION, defaultDBConf.getProperty(PROPERTY_DB_VERSION)); } referenceDB.close(); } catch (Exception e){ @@ -177,15 +176,12 @@ public class HalContext { public static int getIntegerProperty(String key){ return Integer.parseInt(getStringProperty(key)); } - public synchronized static void storeProperties() throws SQLException { - logger.fine("Saving conf to DB..."); + public static void setProperty(String key, String value) throws SQLException { PreparedStatement stmt = db.getPreparedStatement("REPLACE INTO conf (key, value) VALUES (?, ?)"); - for(Object key : dbConf.keySet()){ - stmt.setObject(1, key); - stmt.setObject(2, dbConf.get(key)); - stmt.addBatch(); - } - DBConnection.execBatch(stmt); + stmt.setObject(1, key); + stmt.setObject(2, value); + DBConnection.exec(stmt); + dbConf.setProperty(key, value); } public static DBConnection getDB(){ diff --git a/src/se/hal/intf/HalHttpPage.java b/src/se/hal/intf/HalHttpPage.java index cf1e6336..011d69fd 100755 --- a/src/se/hal/intf/HalHttpPage.java +++ b/src/se/hal/intf/HalHttpPage.java @@ -49,7 +49,7 @@ public abstract class HalHttpPage implements HttpPage{ request.containsKey("json"))){ out.setHeader("Content-Type", "application/json"); JSONWriter writer = new JSONWriter(out); - writer.write(((HalJsonPage)this).jsonResponse(session,cookie, request)); + writer.write(((HalJsonPage)this).jsonResponse(header, session,cookie, request)); writer.close(); } else{ @@ -66,7 +66,7 @@ public abstract class HalHttpPage implements HttpPage{ tmpl.set("rootNav", rootNav.createPagedNavInstance(header).getSubNavs()); tmpl.set("userNav", userNav.createPagedNavInstance(header).getSubNavs()); tmpl.set("alerts", HalAlertManager.getInstance().generateAlerts()); - tmpl.set("content", httpRespond(session, cookie, request)); + tmpl.set("content", httpRespond(header, session, cookie, request)); out.print(tmpl.compile()); } } catch (Exception e) { @@ -90,6 +90,7 @@ public abstract class HalHttpPage implements HttpPage{ public abstract Templator httpRespond( + HttpHeader header, Map session, Map cookie, Map request) @@ -99,6 +100,7 @@ public abstract class HalHttpPage implements HttpPage{ public interface HalJsonPage{ DataNode jsonResponse( + HttpHeader header, Map session, Map cookie, Map request) diff --git a/src/se/hal/page/EventConfigHttpPage.java b/src/se/hal/page/EventConfigHttpPage.java index 1d9210b2..8af7c882 100755 --- a/src/se/hal/page/EventConfigHttpPage.java +++ b/src/se/hal/page/EventConfigHttpPage.java @@ -7,6 +7,7 @@ import se.hal.struct.Event; import se.hal.struct.User; import zutil.db.DBConnection; import zutil.io.file.FileUtil; +import zutil.net.http.HttpHeader; import zutil.parser.Templator; import zutil.ui.Configurator; import zutil.ui.Configurator.ConfigurationParam; @@ -40,6 +41,7 @@ public class EventConfigHttpPage extends HalHttpPage { @Override public Templator httpRespond( + HttpHeader header, Map session, Map cookie, Map request) diff --git a/src/se/hal/page/EventOverviewHttpPage.java b/src/se/hal/page/EventOverviewHttpPage.java index 8002f9cc..62da5a15 100755 --- a/src/se/hal/page/EventOverviewHttpPage.java +++ b/src/se/hal/page/EventOverviewHttpPage.java @@ -10,6 +10,7 @@ import se.hal.util.HistoryDataListSqlResult; import se.hal.util.HistoryDataListSqlResult.HistoryData; import zutil.db.DBConnection; import zutil.io.file.FileUtil; +import zutil.net.http.HttpHeader; import zutil.parser.Templator; import java.sql.PreparedStatement; @@ -29,6 +30,7 @@ public class EventOverviewHttpPage extends HalHttpPage { @Override public Templator httpRespond( + HttpHeader header, Map session, Map cookie, Map request) diff --git a/src/se/hal/page/MapHttpPage.java b/src/se/hal/page/MapHttpPage.java index 52d63a88..626bd5eb 100755 --- a/src/se/hal/page/MapHttpPage.java +++ b/src/se/hal/page/MapHttpPage.java @@ -7,10 +7,17 @@ import se.hal.struct.Event; import se.hal.struct.Sensor; import zutil.db.DBConnection; import zutil.io.file.FileUtil; +import zutil.net.http.HttpHeader; +import zutil.net.http.multipart.MultipartField; +import zutil.net.http.multipart.MultipartFileField; +import zutil.net.http.multipart.MultipartParser; +import zutil.parser.Base64Decoder; +import zutil.parser.Base64Encoder; import zutil.parser.DataNode; import zutil.parser.Templator; import java.sql.SQLException; +import java.util.Iterator; import java.util.Map; /** @@ -19,6 +26,9 @@ import java.util.Map; public class MapHttpPage extends HalHttpPage implements HalHttpPage.HalJsonPage{ private static final String TEMPLATE = "resource/web/map.tmpl"; + private String bgType; + private byte[] bgImage; + public MapHttpPage() { super("map"); @@ -28,16 +38,43 @@ public class MapHttpPage extends HalHttpPage implements HalHttpPage.HalJsonPage{ @Override - public Templator httpRespond(Map session, + public Templator httpRespond(HttpHeader header, + Map session, Map cookie, Map request) throws Exception { + if ("POST".equals(header.getRequestType())){ + MultipartParser multipart = new MultipartParser(header); + Iterator it = multipart.iterator(); + MultipartField field; + while ((field = it.next()) != null){ + if (field instanceof MultipartFileField){ + MultipartFileField file = (MultipartFileField)field; + String ext = FileUtil.getFileExtension(file.getFilename()); + if (ext.equals("jpg") || ext.equals("png") || ext.equals("svg") || ext.equals("gif")) { + saveBgImage(ext, file.getContent()); + loadBgImage(); + } + } + } + return null; + } + + + if (request.containsKey("bgimage")){ + if (bgImage == null) + loadBgImage(); + // send bg image; + } + + Templator tmpl = new Templator(FileUtil.find(TEMPLATE)); return tmpl; } @Override - public DataNode jsonResponse(Map session, + public DataNode jsonResponse(HttpHeader header, + Map session, Map cookie, Map request) throws Exception { DBConnection db = HalContext.getDB(); @@ -86,4 +123,17 @@ public class MapHttpPage extends HalHttpPage implements HalHttpPage.HalJsonPage{ deviceNode.set("y", device.getY()); return deviceNode; } + + + private void loadBgImage(){ + String property = HalContext.getStringProperty("map_bgimage"); + if (property != null) { + String[] split = property.split(",", 2); + bgType = split[0]; + bgImage = Base64Decoder.decodeToByte(split[1]); + } + } + private void saveBgImage(String type, byte[] data) throws SQLException { + HalContext.setProperty("map_bgimage", type+","+ Base64Encoder.encode(data)); + } } diff --git a/src/se/hal/page/PCHeatMapHttpPage.java b/src/se/hal/page/PCHeatMapHttpPage.java index 9b93f1bc..b842ccb9 100755 --- a/src/se/hal/page/PCHeatMapHttpPage.java +++ b/src/se/hal/page/PCHeatMapHttpPage.java @@ -2,6 +2,7 @@ package se.hal.page; import se.hal.intf.HalHttpPage; import zutil.io.file.FileUtil; +import zutil.net.http.HttpHeader; import zutil.parser.Templator; import java.util.Map; @@ -17,6 +18,7 @@ public class PCHeatMapHttpPage extends HalHttpPage { @Override public Templator httpRespond( + HttpHeader header, Map session, Map cookie, Map request) diff --git a/src/se/hal/page/PCOverviewHttpPage.java b/src/se/hal/page/PCOverviewHttpPage.java index 89696512..da6a9e62 100755 --- a/src/se/hal/page/PCOverviewHttpPage.java +++ b/src/se/hal/page/PCOverviewHttpPage.java @@ -11,6 +11,7 @@ import se.hal.util.AggregateDataListSqlResult.AggregateData; import se.hal.util.UTCTimeUtility; import zutil.db.DBConnection; import zutil.io.file.FileUtil; +import zutil.net.http.HttpHeader; import zutil.parser.DataNode; import zutil.parser.Templator; @@ -29,6 +30,7 @@ public class PCOverviewHttpPage extends HalHttpPage implements HalHttpPage.HalJs @Override public Templator httpRespond( + HttpHeader header, Map session, Map cookie, Map request) @@ -48,6 +50,7 @@ public class PCOverviewHttpPage extends HalHttpPage implements HalHttpPage.HalJs @Override public DataNode jsonResponse( + HttpHeader header, Map session, Map cookie, Map request) throws Exception { diff --git a/src/se/hal/page/SensorConfigHttpPage.java b/src/se/hal/page/SensorConfigHttpPage.java index 91feadc8..0b221e49 100755 --- a/src/se/hal/page/SensorConfigHttpPage.java +++ b/src/se/hal/page/SensorConfigHttpPage.java @@ -7,6 +7,7 @@ import se.hal.struct.Sensor; import se.hal.struct.User; import zutil.db.DBConnection; import zutil.io.file.FileUtil; +import zutil.net.http.HttpHeader; import zutil.parser.Templator; import zutil.ui.Configurator; import zutil.ui.Configurator.ConfigurationParam; @@ -40,6 +41,7 @@ public class SensorConfigHttpPage extends HalHttpPage { @Override public Templator httpRespond( + HttpHeader header, Map session, Map cookie, Map request) diff --git a/src/se/hal/page/SensorOverviewHttpPage.java b/src/se/hal/page/SensorOverviewHttpPage.java index c3e86cf1..11ff6763 100755 --- a/src/se/hal/page/SensorOverviewHttpPage.java +++ b/src/se/hal/page/SensorOverviewHttpPage.java @@ -10,6 +10,7 @@ import se.hal.util.HistoryDataListSqlResult.HistoryData; import se.hal.util.UTCTimeUtility; import zutil.db.DBConnection; import zutil.io.file.FileUtil; +import zutil.net.http.HttpHeader; import zutil.parser.Templator; import java.sql.PreparedStatement; @@ -29,6 +30,7 @@ public class SensorOverviewHttpPage extends HalHttpPage { @Override public Templator httpRespond( + HttpHeader header, Map session, Map cookie, Map request) diff --git a/src/se/hal/page/UserConfigHttpPage.java b/src/se/hal/page/UserConfigHttpPage.java index a69216ee..2d500e05 100755 --- a/src/se/hal/page/UserConfigHttpPage.java +++ b/src/se/hal/page/UserConfigHttpPage.java @@ -5,6 +5,7 @@ import se.hal.intf.HalHttpPage; import se.hal.struct.User; import zutil.db.DBConnection; import zutil.io.file.FileUtil; +import zutil.net.http.HttpHeader; import zutil.parser.Templator; import java.util.Map; @@ -20,6 +21,7 @@ public class UserConfigHttpPage extends HalHttpPage { @Override public Templator httpRespond( + HttpHeader header, Map session, Map cookie, Map request)