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

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

Refs #592. Lab environment extension updated in layout of alarm table:

  1. JSP file labenvironmentalarms.jsp in resources/reports/ updated:
    a. Function getTableCellYesNoSelectElement(value, id, permission, colspan, rowspan) updated with new argument clazz before colspan. Attribute class of the created cell element will be set to clazz.
    b. Function createLabEnvAlarmWebPage() updated to call function getTableCellYesNoSelectElement(...) with new argument clazz set to alarmTableClass, similarly to the other cell elements.
File size: 16.4 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    if (sc.getActiveProjectId() == 0)
383    {
384      %>
385      <div class="messagecontainer note" style="width: 950px; margin-left: 20px; margin-bottom: 20px; margin-right: 0px; font-weight: bold; color: #cc0000;">
386        No project has been selected. You may proceed with the report generation but
387        only your own items will be included in the report.
388      </div>
389      <%
390    }
391    %>
392 
393    <form name="labenv" onsubmit="return false;">
394      <!-- 1. Report type-->
395      <table border="0" cellspacing="0" cellpadding="0" class="stepform">
396      <tr>
397        <td rowspan="3" class="stepno">1</td>
398        <td class="steptitle">Alarms</td>
399      </tr>
400      <tr>
401        <td class="stepfields">
402          <table id="alarmTableId" border="0" cellspacing="0" cellpadding="0" width="100%">
403          </table>
404        </td>
405      </tr>
406      </table>
407     
408      <div class="messagecontainer error" id="errorMessage" style="display: none; width: 950px; margin-left: 20px; margin-bottom: 0px;"></div>   
409       
410      <table style="margin-left: 20px; margin-top: 10px;" class="navigation">
411        <tr>
412          <td><base:button id="gosetalarmblocker" title="Set alarm blocker" image="<%="gonext.png"%>" onclick="goSetAlarmBlocker()" /></td>
413        </tr>
414      </table>     
415    </form>
416    </div>
417   
418  </base:body>
419  </base:page>
420  <%
421}
422finally
423{
424  if (dc != null) dc.close();
425}
426%>
Note: See TracBrowser for help on using the repository browser.