source: extensions/net.sf.basedb.labenv/trunk/resources/reports/labenvironmentalarms.jsp @ 2486

Last change on this file since 2486 was 2486, checked in by olle, 9 years ago

Refs #592. Lab environment extension updated in JSP files by removing warning if no BASE project has been selected, since this is not necessary for the lab environment extension functionality:

  1. JSP files in resources/reports/ updated in HTML section by removal of warning if no BASE project has been selected:
    a. labenvironmentalarms.jsp
    b. labenvironmentdatabasedisplay.jsp
    c. labenvironmentdatabaseeventpopup.jsp
    d. labenvironmentdatabaseexport.jsp
    e. labenvironmentdatabasestatistics.jsp
    f. labsensorinfo.jsp
File size: 16.0 KB
Line 
1<%@ page
2  pageEncoding="UTF-8"
3  session="false"
4  import="net.sf.basedb.core.User"
5  import="net.sf.basedb.core.DbControl"
6  import="net.sf.basedb.core.SessionControl"
7  import="net.sf.basedb.core.Application"
8  import="net.sf.basedb.clients.web.Base" 
9  import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
10%>
11<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
12<%@ taglib prefix="p" uri="/WEB-INF/path.tld" %>
13<%
14final SessionControl sc = Base.getExistingSessionControl(request, true);
15final String ID = sc.getId();
16final float scale = Base.getScale(sc);
17final String home = ExtensionsControl.getHomeUrl("net.sf.basedb.labenv");
18DbControl dc = null;
19try
20{
21  dc = sc.newDbControl();
22  final User user = User.getById(dc, sc.getLoggedInUserId());
23  %>
24<base:page type="default" >
25<base:head scripts="ajax.js" styles="path.css">
26  <link rel="stylesheet" type="text/css" href="../css/reggie.css">
27  <script language="JavaScript" src="../reggie.js" type="text/javascript" charset="UTF-8"></script>
28  <script language="JavaScript" src="boxplot.js" type="text/javascript" charset="UTF-8"></script>
29   
30   
31  <script language="JavaScript">
32  var currentStep = 1;
33  var debug = false;
34 
35  window.onload = function()
36  {
37    // Create lab environment alarms web page from configuration data
38    createLabEnvAlarmWebPage();
39  };
40
41  function createLabEnvAlarmWebPage()
42  {
43    document.getElementById("gosetalarmblocker").style.display = 'block';
44    // Get lab sensor configurations dynamically from server data
45    var frm = document.forms['labenv'];
46    var anyAlarmPermission = false;
47    var labSensorConfigList = getLabSensorConfigList();
48    if (labSensorConfigList != null)
49    {
50      var alarmTable = document.getElementById('alarmTableId');
51      alarmTable.setAttribute('id', 'alarmTable');
52      // Print alarm table header row
53      var colspan = 11;
54      var alarmTableHeaderClass = 'alarmtableheader';
55      var alarmHeaderCell01 = getTableCellElement('Alarm', alarmTableHeaderClass);
56      var alarmHeaderCell02 = getTableCellElement('Sensor', alarmTableHeaderClass);
57      var alarmHeaderCell03 = getTableCellElement('Start', alarmTableHeaderClass);
58      var alarmHeaderCell04 = getTableCellElement('End', alarmTableHeaderClass);
59      var alarmHeaderCell05 = getTableCellElement('Weekday', alarmTableHeaderClass);
60      var alarmHeaderCell06 = getTableCellElement('Temp.', alarmTableHeaderClass);
61      var alarmHeaderCell07 = getTableCellElement('Temp.', alarmTableHeaderClass);
62      var alarmHeaderCell08 = getTableCellElement('Humidity', alarmTableHeaderClass);
63      var alarmHeaderCell09 = getTableCellElement('Humidity', alarmTableHeaderClass);
64      var alarmHeaderCell10 = getTableCellElement('Alarm', alarmTableHeaderClass);
65      var alarmHeaderCell11 = getTableCellElement('Alarm', alarmTableHeaderClass);
66      var alarmHeaderRow = document.createElement('tr');
67      alarmHeaderRow.appendChild(alarmHeaderCell01);     
68      alarmHeaderRow.appendChild(alarmHeaderCell02);     
69      alarmHeaderRow.appendChild(alarmHeaderCell03);     
70      alarmHeaderRow.appendChild(alarmHeaderCell04);     
71      alarmHeaderRow.appendChild(alarmHeaderCell05);
72      alarmHeaderRow.appendChild(alarmHeaderCell06);     
73      alarmHeaderRow.appendChild(alarmHeaderCell07);     
74      alarmHeaderRow.appendChild(alarmHeaderCell08);     
75      alarmHeaderRow.appendChild(alarmHeaderCell09);     
76      alarmHeaderRow.appendChild(alarmHeaderCell10);     
77      alarmHeaderRow.appendChild(alarmHeaderCell11);     
78      alarmTable.appendChild(alarmHeaderRow);
79      var alarmTableSubHeaderClass = 'reportsubheader';
80      var alarmTableSubHeaderClass = 'alarmtableheader';
81      var alarmSubHeaderCell01 = getTableCellElement('no', alarmTableSubHeaderClass);
82      var alarmSubHeaderCell02 = getTableCellElement('name', alarmTableSubHeaderClass);
83      var alarmSubHeaderCell03 = getTableCellElement('time', alarmTableSubHeaderClass);
84      var alarmSubHeaderCell04 = getTableCellElement('time', alarmTableSubHeaderClass);
85      var alarmSubHeaderCell05 = getTableCellElement('filter', alarmTableSubHeaderClass);
86      var alarmSubHeaderCell06 = getTableCellElement('min', alarmTableSubHeaderClass);
87      var alarmSubHeaderCell07 = getTableCellElement('max', alarmTableSubHeaderClass);
88      var alarmSubHeaderCell08 = getTableCellElement('min', alarmTableSubHeaderClass);
89      var alarmSubHeaderCell09 = getTableCellElement('max', alarmTableSubHeaderClass);
90      var alarmSubHeaderCell10 = getTableCellElement('blocked', alarmTableSubHeaderClass);
91      var alarmSubHeaderCell11 = getTableCellElement('text', alarmTableSubHeaderClass);
92      var alarmSubHeaderRow = document.createElement('tr');
93      alarmSubHeaderRow.appendChild(alarmSubHeaderCell01);
94      alarmSubHeaderRow.appendChild(alarmSubHeaderCell02);
95      alarmSubHeaderRow.appendChild(alarmSubHeaderCell03);
96      alarmSubHeaderRow.appendChild(alarmSubHeaderCell04);
97      alarmSubHeaderRow.appendChild(alarmSubHeaderCell05);
98      alarmSubHeaderRow.appendChild(alarmSubHeaderCell06);
99      alarmSubHeaderRow.appendChild(alarmSubHeaderCell07);
100      alarmSubHeaderRow.appendChild(alarmSubHeaderCell08);
101      alarmSubHeaderRow.appendChild(alarmSubHeaderCell09);
102      alarmSubHeaderRow.appendChild(alarmSubHeaderCell10);
103      alarmSubHeaderRow.appendChild(alarmSubHeaderCell11);
104      alarmTable.appendChild(alarmSubHeaderRow);
105      for (var i=0; i < labSensorConfigList.length; i++)
106      {
107        // Get URL and name for lab sensor number 'i'
108        var labSensorConfig = labSensorConfigList[i];
109        var sensorUrl = labSensorConfig['url'];
110        var sensorName = labSensorConfig['name'];
111        //alert("i = " + i + " sensorUrl = " + sensorUrl + " sensorName = " + sensorName);
112        var alarmList = labSensorConfig['alarmList'];
113        //alert("i = " + i + " alarmList = " + alarmList);
114        if (alarmList != null)
115        {
116          //alert("i = " + i + " alarmList.length = " + alarmList.length);
117          for (var j=0; j < alarmList.length; j++)
118          {
119            // Get alarm number 'j'
120            var alarm = alarmList[j];
121            var alarmNo = alarm['no'];
122            var startTime = alarm['startTime'];
123            var endTime = alarm['endTime'];
124            var weekdayFilter = alarm['weekdayFilter'];
125            var temperatureMin = alarm['temperatureMin'];
126            var temperatureMax = alarm['temperatureMax'];
127            var humidityMin = alarm['humidityMin'];
128            var humidityMax = alarm['humidityMax'];
129            var alarmBlocked = alarm['alarmBlocked'];
130            var alarmText = alarm['alarmText'];
131            var alarmPermission = alarm['alarmPermission'];
132            if (alarmPermission != null && alarmPermission)
133            {
134              anyAlarmPermission = true;
135            }
136            if (alarmBlocked == null)
137            {
138              alarmBlocked = false;
139            }
140            if (alarmText == null)
141            {
142              alarmText = '-';
143            }
144            //alert("createLabEnvAlarmWebPage(): i = " + i + " j = " + j + " sensorName = " + sensorName + " startTime = " + startTime  + " endTime = " + endTime + " weekdayFilter = " + weekdayFilter + " temperatureMin = " + temperatureMin + " temperatureMax = " + temperatureMax + " humidityMin = " + humidityMin + " humidityMax = " + humidityMax + " alarmBlocked = " + alarmBlocked + " alarmText = " + alarmText);
145            var alarmRowText = alarmNo + '\n' + sensorName + '\n' + startTime + '\n'  + endTime + '\n' + weekdayFilter + '\n' + temperatureMin + '\n' + temperatureMax + '\n' + humidityMin + '\n' + humidityMax + '\n' + alarmBlocked + '\n' + alarmText;
146            //alert("alarmRowText = " + alarmRowText);
147            var alarmRow = document.createElement('tr');
148            //var alarmTableClass = 'reportheader';
149            var alarmTableClass = 'reportdata';
150            var alarmCell01 = getTableCellElement(alarmNo, alarmTableClass);
151            var alarmCell02 = getTableCellElement(sensorName, alarmTableClass);
152            var alarmCell03 = getTableCellElement(startTime, alarmTableClass);
153            var alarmCell04 = getTableCellElement(endTime, alarmTableClass);
154            var alarmCell05 = getTableCellElement(weekdayFilter, alarmTableClass);
155            var alarmCell06 = getTableCellElement(temperatureMin, alarmTableClass);
156            var alarmCell07 = getTableCellElement(temperatureMax, alarmTableClass);
157            var alarmCell08 = getTableCellElement(humidityMin, alarmTableClass);
158            var alarmCell09 = getTableCellElement(humidityMax, alarmTableClass);
159            var alarmCell10 = getTableCellYesNoSelectElement(alarmBlocked, 'alarmBlockedId' + alarmNo, alarmPermission, alarmTableClass);
160            var alarmCell11 = getTableCellElement(alarmText, alarmTableClass);
161            alarmRow.appendChild(alarmCell01);
162            alarmRow.appendChild(alarmCell02);
163            alarmRow.appendChild(alarmCell03);
164            alarmRow.appendChild(alarmCell04);
165            alarmRow.appendChild(alarmCell05);
166            alarmRow.appendChild(alarmCell06);
167            alarmRow.appendChild(alarmCell07);
168            alarmRow.appendChild(alarmCell08);
169            alarmRow.appendChild(alarmCell09);
170            alarmRow.appendChild(alarmCell10);
171            alarmRow.appendChild(alarmCell11);
172            alarmTable.appendChild(alarmRow);
173          }
174        }
175      }
176    }
177    if (!anyAlarmPermission)
178    {
179      // Hide "Set alarm blocker" button if logged-in user does not have permission to set any alarm blocker status
180      document.getElementById("gosetalarmblocker").style.display = 'none';
181    }
182  }
183
184  function getLabSensorConfigList()
185  {
186    // Get lab sensor configurations JSON object with AJAX
187    var frm = document.forms['labenv'];
188    var request = Ajax.getXmlHttpRequest();
189    var url = '../../labenv.jar/LabEnvironment.servlet?ID=<%=ID%>&cmd=GetLabSensorConfigList';
190    request.open("GET", url, false); 
191    request.send(null);
192 
193    //if (debug) Main.debug(request.responseText);
194    //Main.debug(request.responseText);
195
196    var response = JSON.parse(request.responseText);
197    if (response.status != 'ok')
198    {
199      setFatalError(response.message);
200      return false;
201    }
202 
203    // Get sensor configurations information from the AJAX response
204    var labSensorConfigList = response.labSensorConfigList;
205
206    return labSensorConfigList;
207  }
208
209  function goSetAlarmBlocker()
210  {
211    // Set alarm blocked flags with AJAX
212    var request = Ajax.getXmlHttpRequest();
213    var url = '../LabEnvironment.servlet?ID=<%=ID%>&cmd=SetLabEnvAlarmConfig';   
214    // Get alarm blocker status from form option menus
215    var frm = document.forms['labenv'];
216    var labSensorConfigList = getLabSensorConfigList();
217    if (labSensorConfigList != null)
218    {
219      for (var i=0; i < labSensorConfigList.length; i++)
220      {
221        // Get URL and name for lab sensor number 'i'
222        var labSensorConfig = labSensorConfigList[i];
223        var alarmList = labSensorConfig['alarmList'];
224        //alert("i = " + i + " alarmList = " + alarmList);
225        if (alarmList != null)
226        {
227          //alert("i = " + i + " alarmList.length = " + alarmList.length);
228          for (var j=0; j < alarmList.length; j++)
229          {
230            // Get alarm number 'j'
231            var alarm = alarmList[j];
232            var alarmNo = alarm['no'];
233            // Get value for alarm blocker option menu
234            var alarmBlockedMenuId = 'alarmBlockedId' + alarmNo;
235            var selectEl = document.getElementById(alarmBlockedMenuId);
236            //alert("alarmNo = " + alarmNo + " alarmBlockedMenuId = " + alarmBlockedMenuId + " selectEl = " + selectEl);
237            if (selectEl != null)
238            {
239              var selectValue = selectEl.value;
240              //alert("alarmNo = " + alarmNo + " alarmBlockedMenuId = " + alarmBlockedMenuId + " value = " + selectValue);
241              if (selectValue == null)
242              {
243                selectValue = false;
244              }
245              // Add alarm block value to Ajax URL
246              url += '&' + alarmBlockedMenuId + '=' + selectValue;
247            }
248          }
249        }
250      }
251    }
252    request.open("GET", url, false); 
253    request.send(null);
254 
255    if (debug) Main.debug(request.responseText);
256
257    var response = JSON.parse(request.responseText);
258    if (response.status != 'ok')
259    {
260      setFatalError(response.message);
261      return false;
262    }
263  }
264
265  function getJSONData(jsonObject, key)
266  {
267    var data = getJSONData(jsonObject, key, '');
268    return data;
269  }
270
271  function getJSONData(jsonObject, key, defaultChoice)
272  {
273    var data = defaultChoice;
274    if (jsonObject != null)
275    {
276      if (jsonObject[key] != null)
277      {
278        data = jsonObject[key];
279      }
280    }
281    return data;
282  }
283
284  function getTableCellElement(text, clazz, colspan, rowspan)
285  {
286    var cellElement = document.createElement('td');
287    text = new String(text);   
288    var textArray = text.split("\n");   
289    if (textArray.length > 1)
290    {
291      for (var i=0;i<textArray.length;i++)
292      {       
293        if (i>0)cellElement.appendChild(document.createElement('br'));
294        cellElement.appendChild(document.createTextNode(textArray[i]));
295      }     
296    }
297    else
298    {
299      cellElement.appendChild(document.createTextNode(text));
300    }
301    cellElement.setAttribute('class', clazz);
302    if (colspan != null) cellElement.setAttribute('colspan', colspan);
303    if (rowspan != null) cellElement.setAttribute('rowspan', rowspan);
304   
305    return cellElement;
306  }
307
308  function getTableCellYesNoSelectElement(value, id, permission, clazz, colspan, rowspan)
309  {
310    /*
311    <td class="input">
312      <select id="yesNoSelectId">
313        <option value="true">Yes</option>
314        <option value="false" selected="yes">No</option>
315      </select>
316    </td>
317    */
318    var cellElement = document.createElement('td');
319    var selectElement = document.createElement('select');
320    selectElement.setAttribute('id', id);
321    selectElement.setAttribute('name', id);
322    if (permission == null || !permission)
323    {
324      selectElement.setAttribute('disabled', true);
325    }
326    // Create and add new option elements to select menu
327    var optionYesEl = document.createElement('option');
328    optionYesEl.setAttribute('value', true);
329    optionYesEl.innerHTML = 'Yes';
330    if (value != null && value)
331    {
332      optionYesEl.setAttribute('selected','yes');
333    }
334    var optionNoEl = document.createElement('option');
335    optionNoEl.setAttribute('value', false);
336    optionNoEl.innerHTML = 'No';
337    if (value == null || !value)
338    {
339      optionNoEl.setAttribute('selected','yes');
340    }
341    selectElement.appendChild(optionYesEl);
342    selectElement.appendChild(optionNoEl);
343    cellElement.appendChild(selectElement);
344    cellElement.setAttribute('class', 'input');
345    cellElement.setAttribute('align', 'center');
346    cellElement.setAttribute('text-align', 'center');
347    cellElement.setAttribute('class', clazz);
348    if (colspan != null) cellElement.setAttribute('colspan', colspan);
349    if (rowspan != null) cellElement.setAttribute('rowspan', rowspan);
350   
351    return cellElement;
352  }
353
354  function goPrint()
355  {
356    var printNote = '<b>Note!</b> For better printing set page orientation to <i>portrait</i>.';
357    printNote += ' Scale down to <i>90%</i> to fit 2 plots per page.';
358    openPrintWindow('<%=ID%>', 'reportcell', 'Lab environment statistics', 'portrait', printNote, '../');
359  }
360  </script>
361 
362  <style>
363  .alarmtableheader
364  {
365    text-align: center;
366    vertical-align: bottom;
367    background: #E0E0E0;
368    cellspacing: 0;
369    cellpadding: 0;
370  }
371  </style>
372  </base:head>
373  <base:body onload="init()">
374    <p:path><p:pathelement 
375      title="LabEnv" href="<%="./labenvironmentalarms.jsp?ID="+ID%>" 
376      /><p:pathelement title="Lab environment alarms" 
377      /></p:path>
378    <div id="x-guide" style="position: absolute; z-index: 99; display: none; background-color: #224488; width: 1px;"></div>
379    <div id="y-guide" style="position: absolute; z-index: 99; display: none; background-color: #224488; height: 1px;"></div>
380    <div class="content">
381 
382    <form name="labenv" onsubmit="return false;">
383      <!-- 1. Report type-->
384      <table border="0" cellspacing="0" cellpadding="0" class="stepform">
385      <tr>
386        <td rowspan="3" class="stepno">1</td>
387        <td class="steptitle">Alarms</td>
388      </tr>
389      <tr>
390        <td class="stepfields">
391          <table id="alarmTableId" border="0" cellspacing="0" cellpadding="0" width="100%">
392          </table>
393        </td>
394      </tr>
395      </table>
396     
397      <div class="messagecontainer error" id="errorMessage" style="display: none; width: 950px; margin-left: 20px; margin-bottom: 0px;"></div>   
398       
399      <table style="margin-left: 20px; margin-top: 10px;" class="navigation">
400        <tr>
401          <td><base:button id="gosetalarmblocker" title="Set alarm blocker" image="<%="gonext.png"%>" onclick="goSetAlarmBlocker()" /></td>
402        </tr>
403      </table>     
404    </form>
405    </div>
406   
407  </base:body>
408  </base:page>
409  <%
410}
411finally
412{
413  if (dc != null) dc.close();
414}
415%>
Note: See TracBrowser for help on using the repository browser.