Ignore:
Timestamp:
Dec 2, 2014, 12:16:59 PM (9 years ago)
Author:
olle
Message:

Refs #608. LabEnv updated to new scripting pattern:

  1. XML configuration file extensions.xml in META-INF updated in "<about>" tags to set attributes "safe-scripts="1"" and "safe-resources="0"", where appropriate.
  2. Updates in resources/:
    a. Javascript library file reggie.js exchanged for reggie-2.js.
    b. New Javascript library file print.js added.
    c. JSP print template file print_template.jsp updated to work with new Javascript and CSS files.
  3. Updates in resources/css/:
    a. CCS file reggie.css exchanged for reggie-2.css.
    b. CSS file printable.css updated with style for print button and print instructions.
    c. New CSS file report.css and SVG file filters.svg added.
  4. JSP files in resources/reports/ with combined layout and functionality have had the functionality placed in separate Javascript ".js" files, with the same base name (filename without file extension) as the JSP files:
    a. labenvironmentalarms.jsp
    b. labenvironmentdatabasedisplay.jsp
    c. labenvironmentdatabaseeventpopup.jsp
    d. labenvironmentdatabaseexport.jsp
    e. labenvironmentdatabasestatistics.jsp
    f. labsensorinfo.jsp
  5. Javascript library file boxplot.js in resources/reports/ updated by removal of unused functions.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • extensions/net.sf.basedb.labenv/trunk/resources/reports/labenvironmentalarms.jsp

    r2486 r2989  
    2323  %>
    2424<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  
     25<base:head
     26  scripts="~../reggie-2.js,~labenvironmentalarms.js"
     27  styles="path.css,~../css/reggie-2.css"
     28  >
    36229  <style>
    36330  .alarmtableheader
     
    36936    cellpadding: 0;
    37037  }
     38
     39  /* Hide reggie version written by reggie-2.js, since this is just a help library */
     40  #reggie-version
     41  {
     42    display:none;
     43  }
     44
    37145  </style>
    37246  </base:head>
    373   <base:body onload="init()">
     47  <base:body>
    37448    <p:path><p:pathelement
    375       title="LabEnv" href="<%="./labenvironmentalarms.jsp?ID="+ID%>"
     49      title="LabEnv" href="<%="./labenvironmentalarms.js?ID="+ID%>"
    37650      /><p:pathelement title="Lab environment alarms"
    37751      /></p:path>
     
    38054    <div class="content">
    38155 
    382     <form name="labenv" onsubmit="return false;">
     56    <form name="labenv" id="wizard" class="wizard">
    38357      <!-- 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%">
     58      <div class="step" id="step-1">
     59        <div class="step-no">1</div>
     60        <div class="step-title">Alarms</div>
     61        <div class="step-content">
     62
     63          <table class="step-form" id="alarmTableId" border="0" cellspacing="0" cellpadding="0" width="100%">
    39264          </table>
    393         </td>
    394       </tr>
    395       </table>
     65        </div>
     66      </div>
     67     
     68      <div id="wizard-status"></div>
    39669     
    39770      <div class="messagecontainer error" id="errorMessage" style="display: none; width: 950px; margin-left: 20px; margin-bottom: 0px;"></div>   
    39871       
    399       <table style="margin-left: 20px; margin-top: 10px;" class="navigation">
     72      <table class="navigation" id="navigation">
    40073        <tr>
    401           <td><base:button id="gosetalarmblocker" title="Set alarm blocker" image="<%="gonext.png"%>" onclick="goSetAlarmBlocker()" /></td>
     74          <td><base:button id="gosetalarmblocker" title="Set alarm blocker" image="<%="gonext.png"%>" /></td>
    40275        </tr>
    40376      </table>     
Note: See TracChangeset for help on using the changeset viewer.