extensions/net.sf.basedb.labenv/trunk/src/net/sf/basedb/labenv/LabEnvironmentConfiguration.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;
2303 02 Apr 14 olle 26
2303 02 Apr 14 olle 27 import java.net.URL;
2303 02 Apr 14 olle 28 import java.text.SimpleDateFormat;
2303 02 Apr 14 olle 29 import java.util.ArrayList;
2303 02 Apr 14 olle 30 import java.util.Date;
2303 02 Apr 14 olle 31 import java.util.List;
2303 02 Apr 14 olle 32
3013 05 Dec 14 nicklas 33 import org.jdom2.Document;
3013 05 Dec 14 nicklas 34 import org.jdom2.Element;
3013 05 Dec 14 nicklas 35 import org.jdom2.Namespace;
2328 08 Apr 14 olle 36 import org.slf4j.Logger;
2328 08 Apr 14 olle 37 import org.slf4j.LoggerFactory;
2303 02 Apr 14 olle 38
2303 02 Apr 14 olle 39 import net.sf.basedb.labenv.converter.StringToDateConverter;
2303 02 Apr 14 olle 40 import net.sf.basedb.util.Values;
3013 05 Dec 14 nicklas 41 import net.sf.basedb.util.XmlUtil2;
2303 02 Apr 14 olle 42 import net.sf.basedb.util.formatter.DateFormatter;
2432 16 May 14 olle 43 import net.sf.basedb.labenv.dao.EmailConfig;
2303 02 Apr 14 olle 44 import net.sf.basedb.labenv.dao.LabSensorAlarmConfig;
2424 14 May 14 olle 45 import net.sf.basedb.labenv.dao.LabSensorAlarmUserConfig;
2303 02 Apr 14 olle 46 import net.sf.basedb.labenv.dao.LabSensorConfig;
2303 02 Apr 14 olle 47
2303 02 Apr 14 olle 48 public class LabEnvironmentConfiguration
2303 02 Apr 14 olle 49 {
2328 08 Apr 14 olle 50   private static final Logger log = LoggerFactory.getLogger(LabEnvironmentConfiguration.class);
2303 02 Apr 14 olle 51   /**
2303 02 Apr 14 olle 52     Default converter for string values to date+time values: yyyyMMdd HHmm
2303 02 Apr 14 olle 53     @since 1.0
2303 02 Apr 14 olle 54    */
2303 02 Apr 14 olle 55   public static final StringToDateConverter CONVERTER_STRING_TO_DATETIME = new StringToDateConverter(new SimpleDateFormat("yyyyMMdd HHmm"));
2337 08 Apr 14 olle 56
2337 08 Apr 14 olle 57   private static final String DEFAULT_DB_FILENAME = "labenv.db";
2337 08 Apr 14 olle 58   private static final int DEFAULT_TIMEOUT_IN_SECONDS = 5;
2337 08 Apr 14 olle 59   private static final long DEFAULT_STORAGE_INTERVAL_IN_SECONDS = 300;
2337 08 Apr 14 olle 60   private static final int DEFAULT_NUMBER_OF_MEASUREMENTS_PER_STORED_VALUE = 5;
2337 08 Apr 14 olle 61
2424 14 May 14 olle 62   private int alarmNo = 0;
2337 08 Apr 14 olle 63   private String dbFileName;
2303 02 Apr 14 olle 64   private int timeoutInSeconds;
2303 02 Apr 14 olle 65   private long storageIntervalInSeconds;
2303 02 Apr 14 olle 66   private int numberOfMeasurementsPerStoredValue;
2303 02 Apr 14 olle 67   private long measurementIntervalInSeconds;
2432 16 May 14 olle 68   private EmailConfig emailConfig = null;
2303 02 Apr 14 olle 69   private List<LabSensorConfig> labSensorConfigList = new ArrayList<LabSensorConfig>();
2303 02 Apr 14 olle 70   private String configFileName = "labenv-config.xml";
2303 02 Apr 14 olle 71
2424 14 May 14 olle 72   public int getAlarmNo()
2424 14 May 14 olle 73   {
2424 14 May 14 olle 74     return this.alarmNo;
2424 14 May 14 olle 75   }
2424 14 May 14 olle 76
2337 08 Apr 14 olle 77   public String getDbFileName()
2303 02 Apr 14 olle 78   {
2337 08 Apr 14 olle 79     return this.dbFileName;
2303 02 Apr 14 olle 80   }
2303 02 Apr 14 olle 81
2337 08 Apr 14 olle 82   public int getTimeoutInSeconds()
2303 02 Apr 14 olle 83   {
2337 08 Apr 14 olle 84     return this.timeoutInSeconds;
2303 02 Apr 14 olle 85   }
2303 02 Apr 14 olle 86
2303 02 Apr 14 olle 87   public long getStorageIntervalInSeconds()
2303 02 Apr 14 olle 88   {
2303 02 Apr 14 olle 89     return this.storageIntervalInSeconds;
2303 02 Apr 14 olle 90   }
2303 02 Apr 14 olle 91
2303 02 Apr 14 olle 92   public int getNumberOfMeasurementsPerStoredValue()
2303 02 Apr 14 olle 93   {
2303 02 Apr 14 olle 94     return this.numberOfMeasurementsPerStoredValue;
2303 02 Apr 14 olle 95   }
2303 02 Apr 14 olle 96
2303 02 Apr 14 olle 97   public long getMeasurementIntervalInSeconds()
2303 02 Apr 14 olle 98   {
2303 02 Apr 14 olle 99     return this.measurementIntervalInSeconds;
2303 02 Apr 14 olle 100   }
2303 02 Apr 14 olle 101
2432 16 May 14 olle 102   public EmailConfig getEmailConfig()
2432 16 May 14 olle 103   {
2432 16 May 14 olle 104     return this.emailConfig;
2432 16 May 14 olle 105   }
2432 16 May 14 olle 106
2303 02 Apr 14 olle 107   public List<LabSensorConfig> getLabSensorConfigList()
2303 02 Apr 14 olle 108   {
2303 02 Apr 14 olle 109     return this.labSensorConfigList;
2303 02 Apr 14 olle 110   }
2303 02 Apr 14 olle 111
2303 02 Apr 14 olle 112   public void setTimeoutInSeconds(int timeoutInSeconds)
2303 02 Apr 14 olle 113   {
2303 02 Apr 14 olle 114     this.timeoutInSeconds = timeoutInSeconds;
2303 02 Apr 14 olle 115   }
2303 02 Apr 14 olle 116
2303 02 Apr 14 olle 117   public void setDbFileName(String dbFileName)
2303 02 Apr 14 olle 118   {
2303 02 Apr 14 olle 119     this.dbFileName = dbFileName;
2303 02 Apr 14 olle 120   }
2303 02 Apr 14 olle 121
2303 02 Apr 14 olle 122   public void setStorageIntervalInSeconds(long storageIntervalInSeconds)
2303 02 Apr 14 olle 123   {
2303 02 Apr 14 olle 124     this.storageIntervalInSeconds = storageIntervalInSeconds;
2303 02 Apr 14 olle 125   }
2303 02 Apr 14 olle 126
2303 02 Apr 14 olle 127   public void setNumberOfMeasurementsPerStoredValue(int numberOfMeasurementsPerStoredValue)
2303 02 Apr 14 olle 128   {
2303 02 Apr 14 olle 129     this.numberOfMeasurementsPerStoredValue = numberOfMeasurementsPerStoredValue;
2303 02 Apr 14 olle 130   }
2303 02 Apr 14 olle 131
2303 02 Apr 14 olle 132   public void setMeasurementIntervalInSeconds(long measurementIntervalInSeconds)
2303 02 Apr 14 olle 133   {
2303 02 Apr 14 olle 134     this.measurementIntervalInSeconds = measurementIntervalInSeconds;
2303 02 Apr 14 olle 135   }
2303 02 Apr 14 olle 136
2432 16 May 14 olle 137   public void setEmailConfig(EmailConfig emailConfig)
2432 16 May 14 olle 138   {
2432 16 May 14 olle 139     this.emailConfig = emailConfig;
2432 16 May 14 olle 140   }
2432 16 May 14 olle 141
2303 02 Apr 14 olle 142   public void setLabSensorConfigList(List<LabSensorConfig> labSensorConfigList)
2303 02 Apr 14 olle 143   {
2303 02 Apr 14 olle 144     this.labSensorConfigList = labSensorConfigList;
2303 02 Apr 14 olle 145   }
2303 02 Apr 14 olle 146
2303 02 Apr 14 olle 147   public LabEnvironmentConfiguration()
2303 02 Apr 14 olle 148   {
2303 02 Apr 14 olle 149     // Get configuration from configuration file
2303 02 Apr 14 olle 150     fetchConfiguration();
2303 02 Apr 14 olle 151   }
2303 02 Apr 14 olle 152
2303 02 Apr 14 olle 153   /**
2303 02 Apr 14 olle 154    * Reads configuration from configuration XML file
2303 02 Apr 14 olle 155    * labenv-config.xml and stores values in instance variables.
2303 02 Apr 14 olle 156    */
2303 02 Apr 14 olle 157   private void fetchConfiguration()
2303 02 Apr 14 olle 158   {
2303 02 Apr 14 olle 159     /*
2303 02 Apr 14 olle 160     Format of lab environment configuration file labenv-config.xml is:
2303 02 Apr 14 olle 161     <parameters>
2303 02 Apr 14 olle 162       <title>...</title>
2337 08 Apr 14 olle 163       <dbfilename>...</dbfilename>
2303 02 Apr 14 olle 164       <timeoutinseconds>...</timeoutinseconds>
2303 02 Apr 14 olle 165       <storageintervalinseconds>...</storageintervalinseconds>
2303 02 Apr 14 olle 166       <numberofmeasurementsperstoredvalue>...</numberofmeasurementsperstoredvalue>
2432 16 May 14 olle 167       <emailconfig>
2432 16 May 14 olle 168         <smtphost>...</smtphost>
2432 16 May 14 olle 169         <fromaddress>...</fromaddress>
2432 16 May 14 olle 170         <fromname>...</fromname>
2432 16 May 14 olle 171       </emailconfig>
2303 02 Apr 14 olle 172       <labsensors>
2303 02 Apr 14 olle 173         <labsensor>
2303 02 Apr 14 olle 174           <number>...</number>
2303 02 Apr 14 olle 175           <url>...</url>
2303 02 Apr 14 olle 176           <name>...</name>
2303 02 Apr 14 olle 177           <startdate>...</startdate>
2303 02 Apr 14 olle 178           <alarms>
2303 02 Apr 14 olle 179             <alarm>
2303 02 Apr 14 olle 180               <starttime>...</starttime>
2303 02 Apr 14 olle 181               <endtime>...</endtime>
2415 09 May 14 olle 182               <!-- "all", "mondaytofriday", "saturdaytosunday", "workdays", or "nonworkdays" -->
2415 09 May 14 olle 183               <weekdayfilter>...</weekdayfilter>
2303 02 Apr 14 olle 184               <temperaturemin>...</temperaturemin>
2303 02 Apr 14 olle 185               <temperaturemax>...</temperaturemax>        
2303 02 Apr 14 olle 186               <humiditymin>...</humiditymin>
2303 02 Apr 14 olle 187               <humiditymax>...</humiditymax>
2303 02 Apr 14 olle 188               <userlist>
2424 14 May 14 olle 189                 <user>
2424 14 May 14 olle 190                   <id>...</id>
2424 14 May 14 olle 191                   <emailaddress>...</emailaddress>
2424 14 May 14 olle 192                 </user>
2303 02 Apr 14 olle 193               </userlist>
2303 02 Apr 14 olle 194             </alarm>
2303 02 Apr 14 olle 195           </alarms>
2303 02 Apr 14 olle 196         </labsensor>
2303 02 Apr 14 olle 197         ...
2303 02 Apr 14 olle 198       </labsensors>
2303 02 Apr 14 olle 199     </parameters>
2303 02 Apr 14 olle 200     */
2303 02 Apr 14 olle 201       try
2303 02 Apr 14 olle 202       {
2321 04 Apr 14 olle 203         URL confFileUrl = LabEnvironmentConfiguration.class.getResource("/labenv-config.xml");
2330 08 Apr 14 olle 204         if (confFileUrl == null)
2330 08 Apr 14 olle 205         {
2330 08 Apr 14 olle 206             log.debug("Configuration file labenv-config.xml not found.");
2330 08 Apr 14 olle 207             throw new RuntimeException("Configuration file labenv-config.xml not found.");
2330 08 Apr 14 olle 208         }
2303 02 Apr 14 olle 209         URL dtdFile = null;
3013 05 Dec 14 nicklas 210         Document dom = XmlUtil2.getValidatedXml(confFileUrl, dtdFile);
2303 02 Apr 14 olle 211         Element root = dom.getRootElement();
2303 02 Apr 14 olle 212         Namespace ns = root.getNamespace();
2303 02 Apr 14 olle 213         Element parametersTag = root;
2303 02 Apr 14 olle 214       // Parse XML configuration file and store configuration values in instance variables
2303 02 Apr 14 olle 215         if (parametersTag != null)
2303 02 Apr 14 olle 216         {
2337 08 Apr 14 olle 217           String dbFileNameConf = Values.getStringOrNull(parametersTag.getChildText("dbfilename", ns));
2303 02 Apr 14 olle 218           Integer timeoutInSecondsConf = Values.getInteger(parametersTag.getChildText("timeoutinseconds", ns), null);
2337 08 Apr 14 olle 219           Long storageIntervalInSecondsConf = Values.getLong(parametersTag.getChildText("storageintervalinseconds", ns), null);
2303 02 Apr 14 olle 220           Integer numberOfMeasurementsPerStoredValueConf = Values.getInteger(parametersTag.getChildText("numberofmeasurementsperstoredvalue", ns), null);
2337 08 Apr 14 olle 221           // Check if some default value(s) should be used
2337 08 Apr 14 olle 222           if (dbFileNameConf == null || dbFileNameConf.equals(""))
2303 02 Apr 14 olle 223           {
2337 08 Apr 14 olle 224             dbFileNameConf = DEFAULT_DB_FILENAME;
2303 02 Apr 14 olle 225           }
2337 08 Apr 14 olle 226           if (timeoutInSecondsConf == null || timeoutInSecondsConf <= 0)
2337 08 Apr 14 olle 227           {
2337 08 Apr 14 olle 228             timeoutInSecondsConf = DEFAULT_TIMEOUT_IN_SECONDS;
2337 08 Apr 14 olle 229           }
2337 08 Apr 14 olle 230           if (storageIntervalInSecondsConf == null || storageIntervalInSecondsConf <= 0)
2337 08 Apr 14 olle 231           {
2337 08 Apr 14 olle 232             storageIntervalInSecondsConf = DEFAULT_STORAGE_INTERVAL_IN_SECONDS;
2337 08 Apr 14 olle 233           }
2337 08 Apr 14 olle 234           if (numberOfMeasurementsPerStoredValueConf == null || numberOfMeasurementsPerStoredValueConf <= 0)
2337 08 Apr 14 olle 235           {
2337 08 Apr 14 olle 236             numberOfMeasurementsPerStoredValueConf = DEFAULT_NUMBER_OF_MEASUREMENTS_PER_STORED_VALUE;
2337 08 Apr 14 olle 237           }
2337 08 Apr 14 olle 238           long measurementIntervalInSecondsConf = storageIntervalInSecondsConf/numberOfMeasurementsPerStoredValueConf;
2337 08 Apr 14 olle 239           log.debug("dbFileNameConf = " + dbFileNameConf);
2303 02 Apr 14 olle 240           log.debug("timeoutInSecondsConf = " + timeoutInSecondsConf);
2303 02 Apr 14 olle 241           log.debug("storageIntervalInSecondsConf = " + storageIntervalInSecondsConf);
2303 02 Apr 14 olle 242           log.debug("numberOfMeasurementsPerStoredValueConf = " + numberOfMeasurementsPerStoredValueConf);
2303 02 Apr 14 olle 243           log.debug("measurementIntervalInSecondsConf = " + measurementIntervalInSecondsConf);
2337 08 Apr 14 olle 244           setDbFileName(dbFileNameConf);
2303 02 Apr 14 olle 245           setTimeoutInSeconds(timeoutInSecondsConf);
2303 02 Apr 14 olle 246           setStorageIntervalInSeconds(storageIntervalInSecondsConf);
2303 02 Apr 14 olle 247           setNumberOfMeasurementsPerStoredValue(numberOfMeasurementsPerStoredValueConf);
2303 02 Apr 14 olle 248           setMeasurementIntervalInSeconds(measurementIntervalInSecondsConf);
2432 16 May 14 olle 249           Element emailConfigTag = parametersTag.getChild("emailconfig", ns);
2432 16 May 14 olle 250         if (emailConfigTag != null)
2432 16 May 14 olle 251         {
2432 16 May 14 olle 252             String smtpHostConf = Values.getStringOrNull(emailConfigTag.getChildText("smtphost", ns));
2432 16 May 14 olle 253             String fromAddressConf = Values.getStringOrNull(emailConfigTag.getChildText("fromaddress", ns));
2432 16 May 14 olle 254             String fromNameConf = Values.getStringOrNull(emailConfigTag.getChildText("fromname", ns));
2432 16 May 14 olle 255             emailConfig = new EmailConfig();
2432 16 May 14 olle 256             emailConfig.setSmtpHost(smtpHostConf);
2432 16 May 14 olle 257             emailConfig.setFromAddress(fromAddressConf);
2432 16 May 14 olle 258             emailConfig.setFromName(fromNameConf);
2432 16 May 14 olle 259         }
2303 02 Apr 14 olle 260           List<LabSensorConfig> labSensorConfigList = getLabSensorConfigList();
2303 02 Apr 14 olle 261             Element labSensorsTag = parametersTag.getChild("labsensors", ns);
2303 02 Apr 14 olle 262             if (labSensorsTag != null)
2303 02 Apr 14 olle 263             {
2303 02 Apr 14 olle 264               List<Element> labSensorTags = labSensorsTag.getChildren("labsensor", ns);
2303 02 Apr 14 olle 265               log.debug("Found " + labSensorTags.size() + " lab sensor(s) in file: " + configFileName);
2303 02 Apr 14 olle 266               for (Element labSensorTag : labSensorTags)
2303 02 Apr 14 olle 267               {
2303 02 Apr 14 olle 268                 LabSensorConfig labSensorConfig = new LabSensorConfig();
2303 02 Apr 14 olle 269                 if (labSensorTag != null)
2303 02 Apr 14 olle 270                 {
2303 02 Apr 14 olle 271                     Integer numberConf = Values.getInteger(labSensorTag.getChildText("number", ns), null);                  
2303 02 Apr 14 olle 272                     String urlConf = Values.getStringOrNull(labSensorTag.getChildText("url", ns));
2303 02 Apr 14 olle 273                     String nameConf = Values.getStringOrNull(labSensorTag.getChildText("name", ns));
2303 02 Apr 14 olle 274                     String startDateConf = Values.getStringOrNull(labSensorTag.getChildText("startdate", ns));
2532 26 Jun 14 olle 275                     startDateConf = convertToDateStringWithHyphens(startDateConf);
2303 02 Apr 14 olle 276                     List<LabSensorAlarmConfig> alarmList = fetchLabSensorAlarmList(labSensorTag, ns);
2303 02 Apr 14 olle 277                     log.debug("numberConf = " + numberConf + " urlConf = " + urlConf + " nameConf = \"" + nameConf + "\" startDateConf = " + startDateConf);
2303 02 Apr 14 olle 278                     if (alarmList != null && alarmList.size() > 0)
2303 02 Apr 14 olle 279                     {
2303 02 Apr 14 olle 280                       for (LabSensorAlarmConfig alarm: alarmList)
2303 02 Apr 14 olle 281                       {
2303 02 Apr 14 olle 282                         if (alarm != null)
2303 02 Apr 14 olle 283                         {
2424 14 May 14 olle 284                           log.debug("alarm no. " + alarm.getNo() + ": startTime = " + alarm.getStartTime());                          
2424 14 May 14 olle 285                           log.debug("alarm no. " + alarm.getNo() + ": startTimeSecondsFromMidnight = " + alarm.getStartTimeSecondsFromMidnight());                          
2424 14 May 14 olle 286                           log.debug("alarm no. " + alarm.getNo() + ": endTime = " + alarm.getEndTime());                          
2424 14 May 14 olle 287                           log.debug("alarm no. " + alarm.getNo() + ": endTimeSecondsFromMidnight = " + alarm.getEndTimeSecondsFromMidnight());                          
2424 14 May 14 olle 288                           log.debug("alarm no. " + alarm.getNo() + ": weekdayFilter = " + alarm.getWeekdayFilter());                          
2424 14 May 14 olle 289                           log.debug("alarm no. " + alarm.getNo() + ": temperatureMin = " + alarm.getTemperatureMin());                
2424 14 May 14 olle 290                           log.debug("alarm no. " + alarm.getNo() + ": temperatureMax = " + alarm.getTemperatureMax());                
2424 14 May 14 olle 291                           log.debug("alarm no. " + alarm.getNo() + ": humidityMin = " + alarm.getHumidityMin());                     
2424 14 May 14 olle 292                           log.debug("alarm no. " + alarm.getNo() + ": humidityMax = " + alarm.getHumidityMax());
2424 14 May 14 olle 293                               List<LabSensorAlarmUserConfig> userList = alarm.getUserList();
2303 02 Apr 14 olle 294                               if (userList != null && userList.size() > 0)
2303 02 Apr 14 olle 295                               {
2303 02 Apr 14 olle 296                                 int userIndex = 0;
2424 14 May 14 olle 297                                 for (LabSensorAlarmUserConfig user: userList)
2303 02 Apr 14 olle 298                                 {
2303 02 Apr 14 olle 299                                   if (user != null)
2303 02 Apr 14 olle 300                                   {
2424 14 May 14 olle 301                                         log.debug("alarm no. " + alarm.getNo() + ": user no. " + userIndex + " user = " + user.getId() + " emailAddress = " + user.getEmailAddress());                          
2424 14 May 14 olle 302                                     userIndex++; 
2303 02 Apr 14 olle 303                                   }
2303 02 Apr 14 olle 304                                 }
2303 02 Apr 14 olle 305                               }
2303 02 Apr 14 olle 306                         }
2303 02 Apr 14 olle 307                       }
2303 02 Apr 14 olle 308                     }
2303 02 Apr 14 olle 309                     // Add configuration values to instance variables
2303 02 Apr 14 olle 310                     labSensorConfig.setNumber(numberConf);
2303 02 Apr 14 olle 311                     labSensorConfig.setUrl(urlConf);
2303 02 Apr 14 olle 312                     labSensorConfig.setName(nameConf);
2303 02 Apr 14 olle 313                     labSensorConfig.setStartDate(startDateConf);
2303 02 Apr 14 olle 314                     labSensorConfig.setAlarmList(alarmList);
2303 02 Apr 14 olle 315                     labSensorConfigList.add(labSensorConfig);
2303 02 Apr 14 olle 316                 }
2303 02 Apr 14 olle 317               }
2303 02 Apr 14 olle 318             }
2303 02 Apr 14 olle 319           setLabSensorConfigList(labSensorConfigList);
2303 02 Apr 14 olle 320         }
2303 02 Apr 14 olle 321       }
2303 02 Apr 14 olle 322       catch (Exception e)
2303 02 Apr 14 olle 323       {
2321 04 Apr 14 olle 324         log.debug("Exception thrown when accessing configuration file labenv-config.xml: " + e);
2331 08 Apr 14 olle 325         throw new RuntimeException("Exception thrown when accessing configuration file labenv-config.xml: ", e);
2303 02 Apr 14 olle 326       }
2303 02 Apr 14 olle 327   }
2303 02 Apr 14 olle 328
2532 26 Jun 14 olle 329
2303 02 Apr 14 olle 330   private List<LabSensorAlarmConfig> fetchLabSensorAlarmList(Element labSensorTag, Namespace ns)
2303 02 Apr 14 olle 331   {
2303 02 Apr 14 olle 332     List<LabSensorAlarmConfig> alarmList = null;
2303 02 Apr 14 olle 333     if (labSensorTag != null)
2303 02 Apr 14 olle 334     {
2303 02 Apr 14 olle 335         Element alarmsTag = labSensorTag.getChild("alarms", ns);
2303 02 Apr 14 olle 336         if (alarmsTag != null)
2303 02 Apr 14 olle 337         {
2303 02 Apr 14 olle 338           List<Element> alarmTags = alarmsTag.getChildren("alarm", ns);
2303 02 Apr 14 olle 339           log.debug("Found " + alarmTags.size() + " alarm(s) in file: " + configFileName);
2303 02 Apr 14 olle 340           for (Element alarmTag : alarmTags)
2303 02 Apr 14 olle 341           {
2303 02 Apr 14 olle 342             if (alarmTag != null)
2303 02 Apr 14 olle 343             {
2303 02 Apr 14 olle 344                 String startTimeConf = Values.getStringOrNull(alarmTag.getChildText("starttime", ns));
2532 26 Jun 14 olle 345                 startTimeConf = convertToTimeStringInFormatHHMM(startTimeConf);
2303 02 Apr 14 olle 346                 String endTimeConf = Values.getStringOrNull(alarmTag.getChildText("endtime", ns));
2532 26 Jun 14 olle 347                 endTimeConf = convertToTimeStringInFormatHHMM(endTimeConf);
2415 09 May 14 olle 348                 String weekdayFilterConf = Values.getStringOrNull(alarmTag.getChildText("weekdayfilter", ns));
2303 02 Apr 14 olle 349                 Double temperatureMinConf = Values.getDouble(alarmTag.getChildText("temperaturemin", ns), null);
2303 02 Apr 14 olle 350                 Double temperatureMaxConf = Values.getDouble(alarmTag.getChildText("temperaturemax", ns), null);
2303 02 Apr 14 olle 351                 Double humidityMinConf = Values.getDouble(alarmTag.getChildText("humiditymin", ns), null);      
2303 02 Apr 14 olle 352                 Double humidityMaxConf = Values.getDouble(alarmTag.getChildText("humiditymax", ns), null);
2424 14 May 14 olle 353                 List<LabSensorAlarmUserConfig> userList = fetchLabSensorAlarmUserList(alarmTag, ns);
2424 14 May 14 olle 354 /*
2303 02 Apr 14 olle 355                   Element userListTag = alarmTag.getChild("userlist", ns);
2303 02 Apr 14 olle 356                   if (userListTag != null)
2303 02 Apr 14 olle 357                   {
2303 02 Apr 14 olle 358                     List<Element> userTags = userListTag.getChildren("user", ns);
2303 02 Apr 14 olle 359                     log.debug("Found " + userTags.size() + " alarm user(s) in file: " + configFileName);
2303 02 Apr 14 olle 360                     for (Element userTag : userTags)
2303 02 Apr 14 olle 361                     {
2303 02 Apr 14 olle 362                       if (userTag != null)
2303 02 Apr 14 olle 363                       {
2303 02 Apr 14 olle 364                           String userConf = Values.getStringOrNull(userTag.getText());
2303 02 Apr 14 olle 365                           log.debug("userConf = " + userConf + " in file: " + configFileName);
2303 02 Apr 14 olle 366                           if (userConf != null && !userConf.equals(""))
2303 02 Apr 14 olle 367                           {
2303 02 Apr 14 olle 368                             if (userList == null)
2303 02 Apr 14 olle 369                             {
2303 02 Apr 14 olle 370                               userList = new ArrayList<String>();
2303 02 Apr 14 olle 371                             }
2303 02 Apr 14 olle 372                             userList.add(userConf);
2303 02 Apr 14 olle 373                           }
2303 02 Apr 14 olle 374                       }
2303 02 Apr 14 olle 375                     }
2303 02 Apr 14 olle 376                   }
2424 14 May 14 olle 377 */
2303 02 Apr 14 olle 378                   // Create and fill LabSensorAlarmConfig object if non-null data
2424 14 May 14 olle 379                 LabSensorAlarmConfig alarm = null;
2303 02 Apr 14 olle 380                 if (startTimeConf != null && !startTimeConf.equals(""))
2303 02 Apr 14 olle 381                 {
2424 14 May 14 olle 382                   alarm = createIfNeeded(alarm);
2424 14 May 14 olle 383                   alarm.setStartTime(startTimeConf);
2303 02 Apr 14 olle 384                   long startTimeSecondsFromMidnight = secondsFromMidnight(startTimeConf);
2424 14 May 14 olle 385                   alarm.setStartTimeSecondsFromMidnight(startTimeSecondsFromMidnight);
2303 02 Apr 14 olle 386                 }
2303 02 Apr 14 olle 387                 if (endTimeConf != null && !endTimeConf.equals(""))
2303 02 Apr 14 olle 388                 {
2424 14 May 14 olle 389                   alarm = createIfNeeded(alarm);
2424 14 May 14 olle 390                   alarm.setEndTime(endTimeConf);
2303 02 Apr 14 olle 391                   long endTimeSecondsFromMidnight = secondsFromMidnight(endTimeConf);
2424 14 May 14 olle 392                   alarm.setEndTimeSecondsFromMidnight(endTimeSecondsFromMidnight);
2303 02 Apr 14 olle 393                 }
2415 09 May 14 olle 394                 if (weekdayFilterConf != null && !weekdayFilterConf.equals(""))
2415 09 May 14 olle 395                 {
2424 14 May 14 olle 396                   alarm = createIfNeeded(alarm);
2424 14 May 14 olle 397                   alarm.setWeekdayFilter(weekdayFilterConf);
2415 09 May 14 olle 398                 }
2303 02 Apr 14 olle 399                 if (temperatureMinConf != null)
2303 02 Apr 14 olle 400                 {
2424 14 May 14 olle 401                   alarm = createIfNeeded(alarm);
2424 14 May 14 olle 402                   alarm.setTemperatureMin(temperatureMinConf);
2303 02 Apr 14 olle 403                 }
2303 02 Apr 14 olle 404                 if (temperatureMaxConf != null)
2303 02 Apr 14 olle 405                 {
2424 14 May 14 olle 406                   alarm = createIfNeeded(alarm);
2424 14 May 14 olle 407                   alarm.setTemperatureMax(temperatureMaxConf);
2303 02 Apr 14 olle 408                 }
2303 02 Apr 14 olle 409                 if (humidityMinConf != null)
2303 02 Apr 14 olle 410                 {
2424 14 May 14 olle 411                   alarm = createIfNeeded(alarm);
2424 14 May 14 olle 412                   alarm.setHumidityMin(humidityMinConf);
2303 02 Apr 14 olle 413                 }
2303 02 Apr 14 olle 414                 if (humidityMaxConf != null)
2303 02 Apr 14 olle 415                 {
2424 14 May 14 olle 416                   alarm = createIfNeeded(alarm);
2424 14 May 14 olle 417                   alarm.setHumidityMax(humidityMaxConf);
2303 02 Apr 14 olle 418                 }
2303 02 Apr 14 olle 419                 if (userList != null)
2303 02 Apr 14 olle 420                 {
2424 14 May 14 olle 421                   alarm = createIfNeeded(alarm);
2424 14 May 14 olle 422                   alarm.setUserList(userList);
2303 02 Apr 14 olle 423                 }
2424 14 May 14 olle 424                 if (alarm != null)
2303 02 Apr 14 olle 425                 {
2303 02 Apr 14 olle 426                   if (alarmList == null)
2303 02 Apr 14 olle 427                   {
2303 02 Apr 14 olle 428                     alarmList = new ArrayList<LabSensorAlarmConfig>();
2303 02 Apr 14 olle 429                   }
2424 14 May 14 olle 430                   alarmList.add(alarm);
2303 02 Apr 14 olle 431                 }
2303 02 Apr 14 olle 432             }
2303 02 Apr 14 olle 433           }
2303 02 Apr 14 olle 434         }
2303 02 Apr 14 olle 435     }
2303 02 Apr 14 olle 436     return alarmList;
2303 02 Apr 14 olle 437   }
2303 02 Apr 14 olle 438
2424 14 May 14 olle 439
2424 14 May 14 olle 440   private List<LabSensorAlarmUserConfig> fetchLabSensorAlarmUserList(Element alarmTag, Namespace ns)
2424 14 May 14 olle 441   {
2424 14 May 14 olle 442     List<LabSensorAlarmUserConfig> userList = null;
2424 14 May 14 olle 443     if (alarmTag != null)
2424 14 May 14 olle 444     {
2424 14 May 14 olle 445         Element userlistTag = alarmTag.getChild("userlist", ns);
2424 14 May 14 olle 446         if (userlistTag != null)
2424 14 May 14 olle 447         {
2424 14 May 14 olle 448           List<Element> userTags = userlistTag.getChildren("user", ns);
2424 14 May 14 olle 449           log.debug("Found " + userTags.size() + " user(s) in file: " + configFileName);
2424 14 May 14 olle 450           for (Element userTag : userTags)
2424 14 May 14 olle 451           {
2424 14 May 14 olle 452             if (userTag != null)
2424 14 May 14 olle 453             {
2424 14 May 14 olle 454                 String idConf = Values.getStringOrNull(userTag.getChildText("id", ns));
2424 14 May 14 olle 455                 String emailAddressConf = Values.getStringOrNull(userTag.getChildText("emailaddress", ns));
2424 14 May 14 olle 456                   // Create and fill LabSensorAlarmUserConfig object if non-null data
2424 14 May 14 olle 457                 LabSensorAlarmUserConfig labSensorAlarmUserConfig = null;
2424 14 May 14 olle 458                 if (idConf != null && !idConf.equals(""))
2424 14 May 14 olle 459                 {
2424 14 May 14 olle 460                   labSensorAlarmUserConfig = createIfNeeded(labSensorAlarmUserConfig);
2424 14 May 14 olle 461                   labSensorAlarmUserConfig.setId(idConf);
2424 14 May 14 olle 462                 }
2424 14 May 14 olle 463                 if (emailAddressConf != null && !emailAddressConf.equals(""))
2424 14 May 14 olle 464                 {
2424 14 May 14 olle 465                   labSensorAlarmUserConfig = createIfNeeded(labSensorAlarmUserConfig);
2424 14 May 14 olle 466                   labSensorAlarmUserConfig.setEmailAddress(emailAddressConf);
2424 14 May 14 olle 467                 }
2424 14 May 14 olle 468                 if (labSensorAlarmUserConfig != null)
2424 14 May 14 olle 469                 {
2424 14 May 14 olle 470                   if (userList == null)
2424 14 May 14 olle 471                   {
2424 14 May 14 olle 472                     userList = new ArrayList<LabSensorAlarmUserConfig>();
2424 14 May 14 olle 473                   }
2424 14 May 14 olle 474                   userList.add(labSensorAlarmUserConfig);
2424 14 May 14 olle 475                 }
2424 14 May 14 olle 476             }
2424 14 May 14 olle 477           }
2424 14 May 14 olle 478         }
2424 14 May 14 olle 479     }
2424 14 May 14 olle 480     return userList;
2424 14 May 14 olle 481   }
2424 14 May 14 olle 482
2532 26 Jun 14 olle 483
2532 26 Jun 14 olle 484   /**
2532 26 Jun 14 olle 485    * Converts input date string from format YYYYMMDD to YYYY-MM-DD,
2532 26 Jun 14 olle 486    * if necessary.
2532 26 Jun 14 olle 487    * 
2532 26 Jun 14 olle 488    * @param dateStr String Input date string
2532 26 Jun 14 olle 489    * @return String Date string in YYYY-MM-DD format if input in YYYYMMDD, otherwise no change
2532 26 Jun 14 olle 490    */
2532 26 Jun 14 olle 491   String convertToDateStringWithHyphens(String dateStr)
2532 26 Jun 14 olle 492   {
2532 26 Jun 14 olle 493     String outDateStr = dateStr;
2532 26 Jun 14 olle 494     if (dateStr != null)
2532 26 Jun 14 olle 495     {
2532 26 Jun 14 olle 496       if (dateStr.length() == 8)
2532 26 Jun 14 olle 497       {
2532 26 Jun 14 olle 498         // Expected format: YYYYMMDD
2532 26 Jun 14 olle 499         String yearStr = dateStr.substring(0, 4);
2532 26 Jun 14 olle 500         String monthStr = dateStr.substring(4, 6);
2532 26 Jun 14 olle 501         String dayStr = dateStr.substring(6, 8);
2532 26 Jun 14 olle 502         outDateStr = yearStr + "-" + monthStr + "-" + dayStr;
2532 26 Jun 14 olle 503       }
2532 26 Jun 14 olle 504     }
2532 26 Jun 14 olle 505     return outDateStr;
2532 26 Jun 14 olle 506   }
2532 26 Jun 14 olle 507
2532 26 Jun 14 olle 508   /**
2532 26 Jun 14 olle 509    * Converts input time string from formats HHMMSS, HH:MM:SS, and HH:MM to HHMM,
2532 26 Jun 14 olle 510    * if necessary. If input time contains seconds, the latter will be dropped,
2532 26 Jun 14 olle 511    * i.e. the minute entry will not be incremented if the number of seconds >= 30.
2532 26 Jun 14 olle 512    * If input time string is null or an empty string, no change.
2532 26 Jun 14 olle 513    * 
2532 26 Jun 14 olle 514    * @param timeStr String Input time string
2532 26 Jun 14 olle 515    * @return String Time string in HHMM format
2532 26 Jun 14 olle 516    */
2532 26 Jun 14 olle 517   String convertToTimeStringInFormatHHMM(String timeStr)
2532 26 Jun 14 olle 518   {
2532 26 Jun 14 olle 519     String outTimeStr = timeStr;
2532 26 Jun 14 olle 520     if (timeStr != null)
2532 26 Jun 14 olle 521     {
2532 26 Jun 14 olle 522       if (timeStr.length() == 8)
2532 26 Jun 14 olle 523       {
2532 26 Jun 14 olle 524         // Expected format: HH:MM:SS
2532 26 Jun 14 olle 525         String hourStr = timeStr.substring(0, 2);
2532 26 Jun 14 olle 526         String minuteStr = timeStr.substring(3, 5);
2532 26 Jun 14 olle 527         outTimeStr = hourStr + minuteStr;
2532 26 Jun 14 olle 528       }
2532 26 Jun 14 olle 529       else if (timeStr.length() == 6)
2532 26 Jun 14 olle 530       {
2532 26 Jun 14 olle 531         // Expected format: HHMMSS
2532 26 Jun 14 olle 532         String hourStr = timeStr.substring(0, 2);
2532 26 Jun 14 olle 533         String minuteStr = timeStr.substring(2, 4);
2532 26 Jun 14 olle 534         outTimeStr = hourStr + minuteStr;
2532 26 Jun 14 olle 535       }
2532 26 Jun 14 olle 536       else if (timeStr.length() == 5)
2532 26 Jun 14 olle 537       {
2532 26 Jun 14 olle 538         // Expected format: HH:MM
2532 26 Jun 14 olle 539         String hourStr = timeStr.substring(0, 2);
2532 26 Jun 14 olle 540         String minuteStr = timeStr.substring(3, 5);
2532 26 Jun 14 olle 541         outTimeStr = hourStr + minuteStr;
2532 26 Jun 14 olle 542       }
2532 26 Jun 14 olle 543     }
2532 26 Jun 14 olle 544     return outTimeStr;
2532 26 Jun 14 olle 545   }
2532 26 Jun 14 olle 546
2303 02 Apr 14 olle 547   private LabSensorAlarmConfig createIfNeeded(LabSensorAlarmConfig labSensorAlarmConfig)
2303 02 Apr 14 olle 548   {
2303 02 Apr 14 olle 549     if (labSensorAlarmConfig == null)
2303 02 Apr 14 olle 550     {
2303 02 Apr 14 olle 551       labSensorAlarmConfig = new LabSensorAlarmConfig();
2424 14 May 14 olle 552       // Update alarmNo before use, making first alarm have alarmNo equal to 1
2424 14 May 14 olle 553       alarmNo++;
2424 14 May 14 olle 554       labSensorAlarmConfig.setNo(alarmNo);
2303 02 Apr 14 olle 555     }
2303 02 Apr 14 olle 556     return labSensorAlarmConfig;
2303 02 Apr 14 olle 557   }
2303 02 Apr 14 olle 558
2424 14 May 14 olle 559   private LabSensorAlarmUserConfig createIfNeeded(LabSensorAlarmUserConfig labSensorAlarmUserConfig)
2424 14 May 14 olle 560   {
2424 14 May 14 olle 561     if (labSensorAlarmUserConfig == null)
2424 14 May 14 olle 562     {
2424 14 May 14 olle 563       labSensorAlarmUserConfig = new LabSensorAlarmUserConfig();
2424 14 May 14 olle 564     }
2424 14 May 14 olle 565     return labSensorAlarmUserConfig;
2424 14 May 14 olle 566   }
2424 14 May 14 olle 567
2303 02 Apr 14 olle 568   /**
2303 02 Apr 14 olle 569    * Returns the number of seconds from midnight from input Date object.
2303 02 Apr 14 olle 570    * Returns 0 if input Date object is`null`.
2303 02 Apr 14 olle 571    * 
2303 02 Apr 14 olle 572    * @param date Date Input date/time Date object.
2303 02 Apr 14 olle 573    * @return long The number of seconds from midnight from input Date object.
2303 02 Apr 14 olle 574    */
2303 02 Apr 14 olle 575   public long secondsFromMidnight(Date date)
2303 02 Apr 14 olle 576   {
2303 02 Apr 14 olle 577     long secondsFromMidnight = 0L;
2303 02 Apr 14 olle 578     if (date != null)
2303 02 Apr 14 olle 579     {
2303 02 Apr 14 olle 580       DateFormatter pureDateFormat = new DateFormatter("yyyyMMdd");
2303 02 Apr 14 olle 581       String pureDateStr = pureDateFormat.format(date);
2303 02 Apr 14 olle 582       String dateMidnightStr = pureDateStr + " 0000";
2303 02 Apr 14 olle 583       Date dateMidnight = CONVERTER_STRING_TO_DATETIME.convert(dateMidnightStr);
2303 02 Apr 14 olle 584       secondsFromMidnight = (date.getTime() - dateMidnight.getTime())/1000L;
2303 02 Apr 14 olle 585     }
2303 02 Apr 14 olle 586     return secondsFromMidnight;
2303 02 Apr 14 olle 587   }
2303 02 Apr 14 olle 588
2303 02 Apr 14 olle 589   /**
2303 02 Apr 14 olle 590    * Returns the number of seconds from midnight from input
2303 02 Apr 14 olle 591    * time string in format (HHmm).
2303 02 Apr 14 olle 592    * Returns 0 if input time string is`null` or blank.
2303 02 Apr 14 olle 593    * 
2303 02 Apr 14 olle 594    * @param timeStr String Input time string in (HHmm) format.
2303 02 Apr 14 olle 595    * @return long The number of seconds from midnight from input time string.
2303 02 Apr 14 olle 596    */
2303 02 Apr 14 olle 597   private long secondsFromMidnight(String timeStr)
2303 02 Apr 14 olle 598   {
2303 02 Apr 14 olle 599     long secondsFromMidnight = 0L;
2303 02 Apr 14 olle 600     if (timeStr != null && !timeStr.equals(""))
2303 02 Apr 14 olle 601     {
2303 02 Apr 14 olle 602       String dummyPureDate = "10700102";
2303 02 Apr 14 olle 603       String dateStr = dummyPureDate + " " + timeStr;
2303 02 Apr 14 olle 604       String dateMidnightStr = dummyPureDate + " 0000";
2303 02 Apr 14 olle 605       Date dateMidnight = CONVERTER_STRING_TO_DATETIME.convert(dateMidnightStr);
2303 02 Apr 14 olle 606       Date date = CONVERTER_STRING_TO_DATETIME.convert(dateStr);
2303 02 Apr 14 olle 607       secondsFromMidnight = (date.getTime() - dateMidnight.getTime())/1000L;
2303 02 Apr 14 olle 608     }
2303 02 Apr 14 olle 609     return secondsFromMidnight;
2303 02 Apr 14 olle 610   }
2303 02 Apr 14 olle 611
2303 02 Apr 14 olle 612   /**
2303 02 Apr 14 olle 613    * Returns a Date object from input dateTime string in format (yyyyMMdd HHmm).
2303 02 Apr 14 olle 614    * Returns `null` if input dateTime string is`null` or blank.
2303 02 Apr 14 olle 615    * 
2303 02 Apr 14 olle 616    * @param dateTimeStr String Input dateTime string in (yyyyMMdd HHmm) format.
2303 02 Apr 14 olle 617    * @return Date Date object from input dateTime string.
2303 02 Apr 14 olle 618    */
2303 02 Apr 14 olle 619   private Date dateTimeStringToDate(String dateTimeStr)
2303 02 Apr 14 olle 620   {
2303 02 Apr 14 olle 621     Date date = null;
2303 02 Apr 14 olle 622     if (dateTimeStr != null && !dateTimeStr.equals(""))
2303 02 Apr 14 olle 623     {
2303 02 Apr 14 olle 624       date = CONVERTER_STRING_TO_DATETIME.convert(dateTimeStr);
2303 02 Apr 14 olle 625     }
2303 02 Apr 14 olle 626     return date;
2303 02 Apr 14 olle 627   }
2303 02 Apr 14 olle 628
2303 02 Apr 14 olle 629   /**
2303 02 Apr 14 olle 630     Find the lab sensor configuration for the given sensor number. 
2303 02 Apr 14 olle 631     If no lab sensor configuration with the given number is found,
2303 02 Apr 14 olle 632     `null` is returned.
2303 02 Apr 14 olle 633     
2303 02 Apr 14 olle 634     @return A LabSensorConfig object or `null`.
2303 02 Apr 14 olle 635    */
2303 02 Apr 14 olle 636   public LabSensorConfig findByNumber(Integer number)
2303 02 Apr 14 olle 637   {
2303 02 Apr 14 olle 638     LabSensorConfig s = null;
2303 02 Apr 14 olle 639     if (number != null)
2303 02 Apr 14 olle 640     {
2303 02 Apr 14 olle 641       for (LabSensorConfig labSensorConfig:  getLabSensorConfigList())
2303 02 Apr 14 olle 642       {
2303 02 Apr 14 olle 643         int labSensorNumber = labSensorConfig.getNumber();
2303 02 Apr 14 olle 644         if (number == labSensorNumber)
2303 02 Apr 14 olle 645         {
2303 02 Apr 14 olle 646           s = labSensorConfig;
2303 02 Apr 14 olle 647           break;
2303 02 Apr 14 olle 648         }
2303 02 Apr 14 olle 649       }
2303 02 Apr 14 olle 650     }
2303 02 Apr 14 olle 651     return s;
2303 02 Apr 14 olle 652   }
2303 02 Apr 14 olle 653
2303 02 Apr 14 olle 654   /**
2303 02 Apr 14 olle 655     Find the lab sensor configuration for the given sensor URL. 
2303 02 Apr 14 olle 656     If no lab sensor configuration with the given URL is found,
2303 02 Apr 14 olle 657     `null` is returned.
2303 02 Apr 14 olle 658     
2303 02 Apr 14 olle 659     @return A LabSensorConfig object or `null`.
2303 02 Apr 14 olle 660    */
2303 02 Apr 14 olle 661   public LabSensorConfig findByUrl(String url)
2303 02 Apr 14 olle 662   {
2303 02 Apr 14 olle 663     LabSensorConfig s = null;
2303 02 Apr 14 olle 664     if (url != null)
2303 02 Apr 14 olle 665     {
2303 02 Apr 14 olle 666       for (LabSensorConfig labSensorConfig:  getLabSensorConfigList())
2303 02 Apr 14 olle 667       {
2303 02 Apr 14 olle 668         String labSensorUrl = labSensorConfig.getUrl();
2303 02 Apr 14 olle 669         if (labSensorUrl != null)
2303 02 Apr 14 olle 670         {
2303 02 Apr 14 olle 671           if (url.equals(labSensorUrl))
2303 02 Apr 14 olle 672           {
2303 02 Apr 14 olle 673             s = labSensorConfig;
2303 02 Apr 14 olle 674             break;
2303 02 Apr 14 olle 675           }
2303 02 Apr 14 olle 676         }
2303 02 Apr 14 olle 677       }
2303 02 Apr 14 olle 678     }
2303 02 Apr 14 olle 679     return s;
2303 02 Apr 14 olle 680   }
2303 02 Apr 14 olle 681 }