extensions/net.sf.basedb.labenv/trunk/src/net/sf/basedb/labenv/util/LabEnvironmentStorageUtil.java

Code
Comments
Other
Rev Date Author Line
2303 02 Apr 14 olle 1 /**
2303 02 Apr 14 olle 2   $Id $
2303 02 Apr 14 olle 3
2303 02 Apr 14 olle 4   Copyright (C) 2014 Olle MÃ¥nsson
2303 02 Apr 14 olle 5
2303 02 Apr 14 olle 6   This file is part of the LabEnv extension for BASE.
2303 02 Apr 14 olle 7   Available at http://baseplugins.thep.lu.se/
2303 02 Apr 14 olle 8   BASE main site: http://base.thep.lu.se/
2303 02 Apr 14 olle 9   -----------------------------------------------------------
2303 02 Apr 14 olle 10   
2303 02 Apr 14 olle 11   This is free software; you can redistribute it and/or
2303 02 Apr 14 olle 12   modify it under the terms of the GNU General Public License
2303 02 Apr 14 olle 13   as published by the Free Software Foundation; either version 3
2303 02 Apr 14 olle 14   of the License, or (at your option) any later version.
2303 02 Apr 14 olle 15   
2303 02 Apr 14 olle 16   The software is distributed in the hope that it will be useful,
2303 02 Apr 14 olle 17   but WITHOUT ANY WARRANTY; without even the implied warranty of
2303 02 Apr 14 olle 18   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
2303 02 Apr 14 olle 19   GNU General Public License for more details.
2303 02 Apr 14 olle 20   
2303 02 Apr 14 olle 21   You should have received a copy of the GNU General Public License
2303 02 Apr 14 olle 22   along with BASE. If not, see <http://www.gnu.org/licenses/>.
2303 02 Apr 14 olle 23
2303 02 Apr 14 olle 24 */
2303 02 Apr 14 olle 25 package net.sf.basedb.labenv.util;
2303 02 Apr 14 olle 26
2303 02 Apr 14 olle 27 import java.util.ArrayList;
2303 02 Apr 14 olle 28 import java.util.Date;
2303 02 Apr 14 olle 29 import java.util.List;
2303 02 Apr 14 olle 30
4519 13 Jun 17 nicklas 31 import org.hibernate.query.Query;
4519 13 Jun 17 nicklas 32 import org.hibernate.ScrollableResults;
3017 08 Dec 14 nicklas 33 import org.hibernate.Session;
2328 08 Apr 14 olle 34 import org.slf4j.Logger;
2328 08 Apr 14 olle 35 import org.slf4j.LoggerFactory;
2303 02 Apr 14 olle 36
2303 02 Apr 14 olle 37 import net.sf.basedb.labenv.LabEnvironment;
2303 02 Apr 14 olle 38 import net.sf.basedb.labenv.LabEnvironmentConfiguration;
2303 02 Apr 14 olle 39 import net.sf.basedb.labenv.dao.LabEnvironmentData;
2303 02 Apr 14 olle 40 import net.sf.basedb.labenv.dao.LabSensorConfig;
3017 08 Dec 14 nicklas 41 import net.sf.basedb.labenv.entity.SensorData;
3018 09 Dec 14 nicklas 42 import net.sf.basedb.util.Values;
3018 09 Dec 14 nicklas 43 import net.sf.basedb.core.DbControl;
4519 13 Jun 17 nicklas 44 import net.sf.basedb.core.hibernate.TypeWrapper;
2303 02 Apr 14 olle 45
2303 02 Apr 14 olle 46 public class LabEnvironmentStorageUtil 
2303 02 Apr 14 olle 47 {
2328 08 Apr 14 olle 48   private static final Logger log = LoggerFactory.getLogger(LabEnvironmentStorageUtil.class);
2303 02 Apr 14 olle 49
3018 09 Dec 14 nicklas 50   public LabEnvironmentStorageUtil()
3021 09 Dec 14 nicklas 51   {}
3021 09 Dec 14 nicklas 52   
3018 09 Dec 14 nicklas 53   public void updateLabEnvDb(Session session, int sensorNumber, Date time, double temperature, double humidity)
3018 09 Dec 14 nicklas 54   {
3017 08 Dec 14 nicklas 55     try
3017 08 Dec 14 nicklas 56     {
3017 08 Dec 14 nicklas 57       SensorData data = new SensorData();
3017 08 Dec 14 nicklas 58       data.setSensorNumber(sensorNumber);
3017 08 Dec 14 nicklas 59       data.setTime(time);
3017 08 Dec 14 nicklas 60       data.setTemperature((float)temperature);
3017 08 Dec 14 nicklas 61       data.setHumidity((float)humidity);
3017 08 Dec 14 nicklas 62       Object id = session.save(data);
3017 08 Dec 14 nicklas 63       log.debug("Database upd: id = " + id + " sensorNumber = " + sensorNumber + " time = " + time + " temperature = " + temperature + " humidity = " + humidity);
2303 02 Apr 14 olle 64     }
3018 09 Dec 14 nicklas 65     catch (RuntimeException ex)
2303 02 Apr 14 olle 66     {
3018 09 Dec 14 nicklas 67       ex.printStackTrace(System.out);
2303 02 Apr 14 olle 68     }
3018 09 Dec 14 nicklas 69   }
3018 09 Dec 14 nicklas 70  
3018 09 Dec 14 nicklas 71   public List<LabEnvironmentData> queryLabEnvDb(Integer sensorNumber, Date startTime, Date endTime)
3018 09 Dec 14 nicklas 72   {
2303 02 Apr 14 olle 73     // Get lab environment configuration from singleton LabEnvironment
2326 07 Apr 14 olle 74     LabEnvironment labEnvironment = LabEnvironment.getInstance();
2303 02 Apr 14 olle 75     LabEnvironmentConfiguration labEnvironmentConfiguration = labEnvironment.getLabEnvironmentConfiguration();
3018 09 Dec 14 nicklas 76     // Prepare list for storing result
2303 02 Apr 14 olle 77     List<LabEnvironmentData> labEnvironmentDataList = new ArrayList<LabEnvironmentData>();
3018 09 Dec 14 nicklas 78
3018 09 Dec 14 nicklas 79     DbControl dc = null;
3018 09 Dec 14 nicklas 80     Session session = null;
4519 13 Jun 17 nicklas 81     ScrollableResults rs = null;
3018 09 Dec 14 nicklas 82     try
3018 09 Dec 14 nicklas 83     {
3018 09 Dec 14 nicklas 84       dc = labEnvironment.newDbControl();
3018 09 Dec 14 nicklas 85       session = labEnvironment.newSession(dc);
3018 09 Dec 14 nicklas 86     
3018 09 Dec 14 nicklas 87       // Construct query string
3018 09 Dec 14 nicklas 88       String queryString = "SELECT sd FROM SensorData sd";
3018 09 Dec 14 nicklas 89  
3018 09 Dec 14 nicklas 90       // Add filters as needed
3018 09 Dec 14 nicklas 91       List<String> filters = new ArrayList<String>();
3018 09 Dec 14 nicklas 92        if (sensorNumber != null) filters.add("sd.sensorNumber = :sensorNumber");
3018 09 Dec 14 nicklas 93       if (startTime != null) filters.add("sd.time >= :startTime");
3018 09 Dec 14 nicklas 94       if (endTime != null) filters.add("sd.time <= :endTime");
3018 09 Dec 14 nicklas 95       if (filters.size() > 0)
3018 09 Dec 14 nicklas 96       {
3018 09 Dec 14 nicklas 97         queryString += " WHERE " + Values.getString(filters, " AND ", true);
3018 09 Dec 14 nicklas 98       }
3018 09 Dec 14 nicklas 99       
3018 09 Dec 14 nicklas 100       // Sort by time
3018 09 Dec 14 nicklas 101       queryString += " ORDER BY sd.time";
3018 09 Dec 14 nicklas 102       
3018 09 Dec 14 nicklas 103       if (log.isDebugEnabled())
3018 09 Dec 14 nicklas 104       {
3018 09 Dec 14 nicklas 105         log.debug("queryString: " + queryString);
3018 09 Dec 14 nicklas 106         log.debug("sensorNumber: "+ sensorNumber);
3018 09 Dec 14 nicklas 107         log.debug("startTime: "+ startTime);
3018 09 Dec 14 nicklas 108         log.debug("endTime: "+ endTime);
3018 09 Dec 14 nicklas 109       }
3018 09 Dec 14 nicklas 110       
4519 13 Jun 17 nicklas 111       Query<SensorData> query = session.createQuery(queryString, SensorData.class);
4519 13 Jun 17 nicklas 112       if (sensorNumber != null) query.setParameter("sensorNumber", sensorNumber, TypeWrapper.H_INTEGER);
4519 13 Jun 17 nicklas 113       if (startTime != null) query.setParameter("startTime", startTime, TypeWrapper.H_TIMESTAMP);
4519 13 Jun 17 nicklas 114       if (endTime != null) query.setParameter("endTime", endTime, TypeWrapper.H_TIMESTAMP);
4519 13 Jun 17 nicklas 115
4519 13 Jun 17 nicklas 116       rs = query.scroll();
4519 13 Jun 17 nicklas 117       while (rs.next())
3018 09 Dec 14 nicklas 118       {
4519 13 Jun 17 nicklas 119         SensorData sd = (SensorData)rs.get()[0];
3018 09 Dec 14 nicklas 120         LabSensorConfig labSensorConfig = labEnvironmentConfiguration.findByNumber(sd.getSensorNumber());
3018 09 Dec 14 nicklas 121         LabEnvironmentData labEnvironmentData = new LabEnvironmentData(sd, labSensorConfig);
3018 09 Dec 14 nicklas 122         labEnvironmentDataList.add(labEnvironmentData);
3018 09 Dec 14 nicklas 123       }
3018 09 Dec 14 nicklas 124     }
3018 09 Dec 14 nicklas 125     finally
3018 09 Dec 14 nicklas 126     {
4519 13 Jun 17 nicklas 127       
4519 13 Jun 17 nicklas 128       if (rs != null) rs.close();
4519 13 Jun 17 nicklas 129       if (session != null) session.close();
3018 09 Dec 14 nicklas 130       if (dc != null) dc.close();
3018 09 Dec 14 nicklas 131     }
3018 09 Dec 14 nicklas 132     return labEnvironmentDataList;
3018 09 Dec 14 nicklas 133   }
2303 02 Apr 14 olle 134 }