source: extensions/net.sf.basedb.reggie/trunk/resources/install.jsp @ 1309

Last change on this file since 1309 was 1309, checked in by Nicklas Nordborg, 13 years ago

References #292: Check/create annotation types, etc. required by reggie

  • Added warning-level messages.
  • Added check for active project.
  • Always do all checks for annotation types.
File size: 5.1 KB
Line 
1<%@ page
2  pageEncoding="UTF-8"
3  session="false"
4  import="net.sf.basedb.core.Application"
5  import="net.sf.basedb.core.User"
6  import="net.sf.basedb.core.DbControl"
7  import="net.sf.basedb.core.SessionControl"
8  import="net.sf.basedb.clients.web.Base"
9  import="net.sf.basedb.clients.web.util.HTML"
10  import="net.sf.basedb.util.Values"
11%>
12<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
13<%@ taglib prefix="p" uri="/WEB-INF/path.tld" %>
14<%
15final SessionControl sc = Base.getExistingSessionControl(request, true);
16final String ID = sc.getId();
17final float scale = Base.getScale(sc);
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,table.css">
26<script language="JavaScript">
27
28function createMissingItems()
29{
30  init('Install');
31}
32
33function init(cmd)
34{
35  var request = Ajax.getXmlHttpRequest();
36  var url = 'Install.servlet?ID=<%=ID%>&cmd='+cmd;
37  request.open("GET", url, false);
38  request.send(null);
39 
40  //setInnerHTML('debug', request.responseText);
41 
42  var response = JSON.parse(request.responseText);
43  if (response.status != 'ok')
44  {
45    setFatalError(response.message);
46    return false;
47  }
48 
49  var numMissing = 0;
50  var numWarnings = 0;
51  var numErrors = 0;
52  var checks = response.checks;
53  var html = '<table border="0" cellpadding="0" cellspacing="0" class="report">';
54  html += '<tr><th id="itemTypeCol">Item type</th><th id="nameCol">Name</th><th id="iconCol"></th><th id="statusCol">Status</th></tr>';
55  var lastItemType = null;
56  for (var i = 0; i < checks.length; i++)
57  {
58    var check = checks[i];
59    var icon = 'ok.gif';
60    if (check.status == 'missing') 
61    {
62      numMissing++;
63      icon = 'error.gif';
64    }
65    if (check.status == 'error') 
66    {
67      numErrors++;
68      icon = 'error.gif';
69    }
70    if (check.status == 'warning') 
71    {
72      numWarnings++;
73      icon = 'warning.gif';
74    }
75    if (lastItemType != check.itemType)
76    {
77      html += '<tr class="newitemtype" valign="top"><td>'+check.itemType+'</td>';
78    }
79    else
80    {
81      html += '<tr class="sameitemtype" valign="top"><td>&nbsp;</td>';
82    }
83    lastItemType = check.itemType;
84    if (check.id)
85    {
86      html += '<td><div class="link" onclick="itemOnClick(event, \''+check.itemType+'\','+check.id+')"';
87      html += ' title="View this item (use CTRL, ALT or SHIFT to edit)">'+check.name+'</div></td>';
88    }
89    else
90    {
91      html += '<td><i>' + check.name + '</i></td>';
92    }
93    html += '<td><img src="../../images/'+icon+'"></td><td>';
94    if (check.messages.length > 1)
95    {
96      for (var m = 0; m < check.messages.length; m++)
97      {
98        html += '• '+check.messages[m] + '<br>';
99      }
100    }
101    else
102    {
103      html += check.messages;
104    }
105    html += '</td></tr>';
106  }
107  html += '</table>';
108
109  setInnerHTML('validationResult', html);
110 
111  if (numErrors > 0)
112  {
113    setFatalError(numErrors+' errors was detected. You need to fix those manually.');
114  }
115  else if (numWarnings > 0)
116  {
117    setWarningMessage(numWarnings+' warnings was detected. Reggie may still work. If not, you need to fix it manually.');
118  }
119  Main.showHide('createMissingItems', numMissing > 0); 
120 
121}
122
123function setInnerHTML(id, html)
124{
125  var tag = document.getElementById(id);
126  if (!tag) alert('No tag with id='+id);
127  tag.innerHTML = html;
128}
129function setFatalError(message)
130{
131  setInnerHTML('errorMessage', message);
132  Main.show('errorMessage');
133}
134
135function setWarningMessage(message)
136{
137  setInnerHTML('warningMessage.message', message);
138  Main.show('warningMessage');
139}
140
141function itemOnClick(event, itemType, itemId)
142{
143  Main.itemOnClick(event, '<%=ID%>', itemType, itemId, true);
144}
145</script>
146<style>
147.report
148{
149  border: 1px solid #999999;
150  width: 800px;
151  table-layout: fixed;
152}
153
154.report #itemTypeCol
155{
156  width: 150px;
157}
158
159.report #nameCol
160{
161  width: 200px;
162}
163.report #iconCol
164{
165  width: 20px;
166}
167.report #statusCol
168{}
169
170
171.report th
172{
173  font-weight: bold;
174  text-align: left;
175  background: #E0E0E0;
176  padding: 2px 4px 2px 4px;
177}
178
179.report td
180{
181  padding: 2px;
182}
183
184.report .newitemtype td
185{
186  border-top: 1px solid #999999;
187}
188.report .sameitemtype td
189{
190  border-top: 1px dotted #cccccc;
191}
192
193</style>
194</base:head>
195<base:body onload="init('Validate')">
196
197  <p:path style="margin-top: 20px; margin-bottom: 10px;">
198    <p:pathelement title="Reggie" href="<%="index.jsp?ID="+ID%>" />
199    <p:pathelement title="Verify/install required items" />
200  </p:path>
201
202  <div id="validationResult" style="margin-left: 20px;">Checking; please wait...</div>
203
204  <div id="createMissingItems" style="display:none; margin-left: 20px; margin-top: 10px;">
205    <table><tr><td>
206    <base:button title="Create missing items" image="add.png" onclick="createMissingItems()"/>
207    </td></tr></table>
208  </div>
209
210  <div class="error" id="errorMessage" style="display: none; width: 800px; margin-left: 20px; margin-bottom: 0px;"></div>
211
212  <base:note id="warningMessage" type="warning" style="display: none; width: 800px; margin-left: 20px; margin-top: 20px;"><div id="warningMessage.message"></div></base:note>
213
214  <pre>
215  <div id="debug"></div>
216  </pre>
217 
218</base:body>
219</base:page>
220<%
221}
222finally
223{
224  if (dc != null) dc.close();
225}
226%>
Note: See TracBrowser for help on using the repository browser.