source: trunk/www/my_base/messages/view_message.jsp @ 5905

Last change on this file since 5905 was 5905, checked in by Nicklas Nordborg, 10 years ago

References #1655: GUI improvements

  • Use relative font sizes (em and %) instead of pixel values. This should make it possible to use relative values for everything and we don't have to split up into size_*.css


  • Removed "valign" attribute from lots of tables.


  • Removed "wrap" attribute from lots of texarea fields.


  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Id
File size: 12.9 KB
Line 
1<%-- $Id: view_message.jsp 5905 2011-12-12 08:42:09Z nicklas $
2  ------------------------------------------------------------------
3  Copyright (C) 2006 Jari Häkkinen, Nicklas Nordborg
4  Copyright (C) 2007 Nicklas Nordborg
5
6  This file is part of BASE - BioArray Software Environment.
7  Available at http://base.thep.lu.se/
8
9  BASE is free software; you can redistribute it and/or
10  modify it under the terms of the GNU General Public License
11  as published by the Free Software Foundation; either version 3
12  of the License, or (at your option) any later version.
13
14  BASE is distributed in the hope that it will be useful,
15  but WITHOUT ANY WARRANTY; without even the implied warranty of
16  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  GNU General Public License for more details.
18
19  You should have received a copy of the GNU General Public License
20  along with BASE. If not, see <http://www.gnu.org/licenses/>.
21  ------------------------------------------------------------------
22
23  @author Nicklas
24  @version 2.0
25--%>
26<%@ page pageEncoding="UTF-8" session="false"
27  import="net.sf.basedb.core.SessionControl"
28  import="net.sf.basedb.core.DbControl"
29  import="net.sf.basedb.core.SystemItems"
30  import="net.sf.basedb.core.Item"
31  import="net.sf.basedb.core.ItemContext"
32  import="net.sf.basedb.core.Permission"
33  import="net.sf.basedb.core.Message"
34  import="net.sf.basedb.core.User"
35  import="net.sf.basedb.core.Job"
36  import="net.sf.basedb.core.PluginConfiguration"
37  import="net.sf.basedb.core.BasicItem"
38  import="net.sf.basedb.core.Nameable"
39  import="net.sf.basedb.core.File"
40  import="net.sf.basedb.core.PermissionDeniedException"
41  import="net.sf.basedb.core.PluginDefinition"
42  import="net.sf.basedb.core.ParameterInfo"
43  import="net.sf.basedb.core.plugin.GuiContext"
44  import="net.sf.basedb.core.plugin.Plugin"
45  import="net.sf.basedb.clients.web.Base"
46  import="net.sf.basedb.clients.web.util.HTML"
47  import="net.sf.basedb.util.Values"
48  import="net.sf.basedb.util.formatter.Formatter"
49  import="net.sf.basedb.clients.web.formatter.FormatterFactory"
50  import="java.util.Date"
51  import="java.util.Map"
52  import="java.util.Set"
53  import="java.util.List"
54  import="java.util.Collections"
55%>
56<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
57<%@ taglib prefix="t" uri="/WEB-INF/tab.tld" %>
58<%@ taglib prefix="tbl" uri="/WEB-INF/table.tld" %>
59<%!
60  private static final Item itemType = Item.MESSAGE;
61  private static final GuiContext guiContext = new GuiContext(itemType, GuiContext.Type.ITEM);
62%>
63<%
64final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
65final String ID = sc.getId();
66final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, null);
67final int itemId = cc.getId();
68final String tab = Values.getString(request.getParameter("tab"), "properties");
69final float scale = Base.getScale(sc);
70final DbControl dc = sc.newDbControl();
71try
72{
73  Message message = Message.getById(dc, itemId);
74  message.setRead(true);
75  boolean readJob = true;
76  Job job = null;
77  boolean readCurrentConfig = true;
78  PluginConfiguration currentConfig = null;
79  try
80  {
81    job = message.getJob();
82  }
83  catch (Exception ex)
84  {
85    readJob = false;
86    readCurrentConfig = false;
87  }
88  if (job != null)
89  {
90    try
91    {
92      currentConfig = job.getPluginConfiguration();
93    }
94    catch (PermissionDeniedException ex)
95    {
96      readCurrentConfig = false;
97    }
98  }
99 
100  String title = "Message -- " + HTML.encodeTags(message.getName());;
101  Formatter<Date> dateFormatter = FormatterFactory.getDateFormatter(sc);
102  Formatter<Date> dateTimeFormatter = FormatterFactory.getDateTimeFormatter(sc);
103 
104  final boolean writePermission = message.hasPermission(Permission.WRITE);
105  final boolean deletePermission = message.hasPermission(Permission.DELETE);
106  final boolean isRemoved = message.isRemoved();
107  final boolean isUsed = isRemoved && message.isUsed();
108  final boolean deletePermanentlyPermission = deletePermission && !isUsed;
109  %>
110
111  <base:page type="popup" title="<%=title%>">
112  <base:head scripts="tabcontrol.js" styles="tabcontrol.css,progressbar.css">
113  <script language="javascript">
114    function deleteItemPermanently()
115    {
116      Main.deleteItemPermanently('<%=ID%>', true, '<%=itemType.name()%>', <%=itemId%>, '&callback=itemDeleted');
117    }
118    function itemDeleted()
119    {
120      location.href = getRoot() + 'common/close_popup.jsp?ID=<%=ID%>&refresh_opener=1&wait=0';
121    }
122    function showUsingItems()
123    {
124      Main.showUsingItems('<%=ID%>', '<%=itemType.name()%>', <%=itemId%>);
125    }
126  </script>
127  </base:head>
128  <base:body>
129   
130    <h3 class="docked"><%=title%> <base:help tabcontrol="main" /></h3>
131    <t:tabcontrol id="main" active="<%=tab%>" position="bottom" contentstyle="<%="height: "+(int)(scale*320)+"px;"%>">
132    <t:tab id="properties" title="Properties" helpid="message.view.properties">
133
134      <%
135      if (message.isRemoved())
136      {
137        %>
138        <div class="itemstatus">
139          <base:icon 
140            image="<%=deletePermanentlyPermission ? "deleted.gif" : "deleted_disabled.gif"%>"
141            onclick="<%=deletePermanentlyPermission ? "deleteItemPermanently()" : null%>"
142            tooltip="<%=deletePermanentlyPermission ? "Permanently delete this item" : null%>"
143            visible="<%=isRemoved%>"> This item has been flagged for deletion<br></base:icon>
144          <base:icon image="used.gif" 
145            onclick="showUsingItems()"
146            tooltip="Show the items that are using this one"
147            visible="<%=isUsed%>"> This item is used by other items and can't be permanently deleted<br></base:icon>
148        </div>
149        <%
150      }
151      %>
152      <table class="form" cellspacing=0>
153      <tr >
154        <td class="prompt">Subject</td>
155        <td><%=HTML.encodeTags(message.getName())%></td>
156      </tr>
157      <tr >
158        <td class="prompt">From</td>
159        <td><%=HTML.encodeTags(message.getFrom())%></td>
160      </tr>
161      <tr >
162        <td class="prompt">Time sent</td>
163        <td><%=dateTimeFormatter.format(message.getTimeSent())%></td>
164      </tr>
165      <tr >
166        <td class="prompt">Message</td>
167        <td><%=HTML.niceFormat(message.getDescription())%></td>
168      </tr>
169      </table>
170      </t:tab>
171 
172  <%
173  if (job != null)
174  {
175    %>
176    <t:tab id="job" title="Job" helpid="message.view.job">
177      <table class="form" cellspacing=0>
178      <tr>
179        <td class="prompt">Name</td>
180        <td><%=HTML.encodeTags(job.getName())%></td>
181      </tr>
182      <tr >
183        <td class="prompt">Description</td>
184        <td>
185          <%=HTML.encodeTags(job.getDescription())%>
186        </td>
187      </tr>
188      <tr >
189        <td class="prompt">Priority</td>
190        <td>
191          <%=job.getPriority()%> (1 = highest, 10 = lowest)
192        </td>
193      </tr>
194      <tr >
195        <td class="prompt">Status</td>
196        <td>
197          <%=job.getStatus()%>: <%=HTML.niceFormat(job.getStatusMessage())%>
198        </td>
199      </tr>
200      <tr >
201        <td class="prompt">Percent complete</td>
202        <td>
203          <table border=0 cellspacing=0 cellpadding=0>
204          <tr>
205          <td width="100">
206            <table width="100" class="progressbar" border=0 cellspacing=0 cellpadding=0>
207            <tr>
208              <%
209              int percent = job.getPercentComplete();
210              if (percent > 0) 
211              {
212                %>
213                <td width="<%=percent%>%" class="done">&nbsp;</td>
214                <% 
215              }
216              if (percent == -1)
217              {
218                %>
219                <td width="100%" class="unknown">unknown</td>
220                <%
221              }
222              else if (percent < 100) 
223              {
224                %>
225                <td width="<%=100-percent%>%" class="remain">&nbsp;</td>
226                <%
227              }
228              %>
229            </tr>
230            </table>
231          </td>
232          <%if (percent != -1) { %>
233          <td>&nbsp;<%=percent%>%</td>
234          <%} %>
235          </tr>
236          </table>
237        </td>
238      </tr>
239      <tr >
240        <td class="prompt">Created</td>
241        <td>
242          <%=dateTimeFormatter.format(job.getCreated())%>
243        </td>
244      </tr>
245      <tr >
246        <td class="prompt">Started</td>
247        <td>
248          <%=dateTimeFormatter.format(job.getStarted())%>
249        </td>
250      </tr>
251      <tr >
252        <td class="prompt">Ended</td>
253        <td>
254          <%=dateTimeFormatter.format(job.getEnded())%>
255        </td>
256      </tr>
257      <tr >
258        <td class="prompt">Server</td>
259        <td>
260          <%=HTML.encodeTags(job.getServer())%>
261        </td>
262      </tr>
263      <tr >
264        <td class="prompt">User</td>
265        <td>
266          <base:propertyvalue item="<%=job%>" property="owner.name" />
267        </td>
268      </tr>
269      <tr >
270        <td class="prompt">Experiment</td>
271        <td>
272          <base:propertyvalue item="<%=job%>" property="experiment.name" />
273        </td>
274      </tr>
275      <tr >
276        <td class="prompt">Plugin</td>
277        <td>
278          <base:propertyvalue item="<%=job%>" property="pluginDefinition.name" />
279        </td>
280      </tr>
281      <tr >
282        <td class="prompt">Configuration</td>
283        <td>
284          <base:propertyvalue item="<%=job%>" property="pluginConfiguration.name" />
285        </td>
286      </tr>
287      </table>
288    </t:tab>
289    <%
290    if (job.getStackTrace() != null)
291    {
292      %>
293      <t:tab id="stacktrace" title="Stack trace" helpid="message.view.jobstacktrace">
294        <div style="font-family: monospace">
295        <%=HTML.niceFormat(job.getStackTrace())%>
296        </div>
297      </t:tab>
298      <%
299    }
300    %>
301   
302    <t:tab id="Parameters" title="Parameters" helpid="message.view.jobparameters">
303      <h4>Job parameters</h4>
304      <table class="form" cellspacing=0>
305        <%
306        List<String> names = new java.util.ArrayList<String>(job.getParameterNames());
307        Collections.sort(names);
308        for (String name : names)
309        {
310          StringBuilder sb = new StringBuilder();
311          String displayValue = "";
312          String description = "";
313          try
314          {
315            ParameterInfo pi = job.getParameterInfo(name);
316            if (pi.getLabel() != null) name = HTML.encodeTags(pi.getLabel());
317            description = HTML.encodeTags(pi.getDescription());
318            List<?> values = pi.getValues();
319            int i = 0;
320            for (Object value : values)
321            {
322              if (value != null)
323              {
324                if (i > 0) sb.append(", ");
325                i++;
326                if (value instanceof BasicItem)
327                {
328                  BasicItem item = (BasicItem)value;
329                  String itemName = "";
330                  if (item instanceof File)
331                  {
332                    itemName = ((File)item).getPath().toString();
333                  }
334                  else if (item instanceof Nameable)
335                  {
336                    itemName = ((Nameable)item).getName();
337                  }
338                  else
339                  {
340                    itemName = item.toString();
341                  }
342                  sb.append(HTML.encodeTags(itemName));
343                }
344                else if (value instanceof Date)
345                {
346                  sb.append(dateFormatter.format((Date)value));
347                }
348                else
349                {
350                  sb.append(HTML.encodeTags(value.toString()));
351                }
352              }
353            }
354            displayValue = sb.toString();
355          }
356          catch (Throwable ex)
357          {
358            displayValue = "<i>ERROR: "+ex.getMessage()+"</i>";
359          }
360          %>
361          <tr>
362            <td class="prompt"><span title="<%=description%>"><%=name%></span></td>
363            <td>
364              <%=displayValue%>
365            </td>
366          </tr>
367          <%
368        }
369        %>
370      </table>
371
372        <%
373        if (!readCurrentConfig)
374        {
375          %>
376          <h4>Plugin configuration parameters</h4>
377          <i>- denied -</i>
378          <%
379        }
380        else if (currentConfig != null)
381        {
382          int parameterVersion = job.getParameterVersion();
383          int currentVersion = currentConfig.getParameterVersion();
384          %>
385          <h4>Plugin configuration parameters</h4>
386          <table class="form" cellspacing=0>
387          <tr>
388            <td class="prompt"><span 
389              title="The version of the parmeters used for this job, current version in paranthesis">Parameter version</span></td>
390            <td><%=parameterVersion%> (<%=currentVersion %>)</td>
391          </tr>
392          <%
393          names = new java.util.ArrayList<String>(currentConfig.getParameterNames(parameterVersion));
394          Collections.sort(names);
395          for (String name : names)
396          {
397            StringBuilder sb = new StringBuilder();
398            String displayValue = "";
399            String description = "";
400            try
401            {
402              ParameterInfo pi = currentConfig.getParameterInfo(name, parameterVersion);
403              if (pi.getLabel() != null) name = HTML.encodeTags(pi.getLabel());
404              description = HTML.encodeTags(pi.getDescription());
405              List<?> values = pi.getValues();
406              int i = 0;
407              for (Object value : values)
408              {
409                if (value != null)
410                {
411                  if (i > 0) sb.append(", ");
412                  i++;
413                  if (value instanceof BasicItem)
414                  {
415                    BasicItem item = (BasicItem)value;
416                    String itemName = "";
417                    if (item instanceof File)
418                    {
419                      itemName = ((File)item).getPath().toString();
420                    }
421                    else if (item instanceof Nameable)
422                    {
423                      itemName = ((Nameable)item).getName();
424                    }
425                    else
426                    {
427                      itemName = item.toString();
428                    }
429                    sb.append(HTML.encodeTags(itemName));
430                  }
431                  else if (value instanceof Date)
432                  {
433                    sb.append(dateFormatter.format((Date)value));
434                  }
435                  else
436                  {
437                    sb.append(HTML.encodeTags(value.toString()));
438                  }
439                }
440              }
441              displayValue = sb.toString();
442            }
443            catch (Throwable ex)
444            {
445              displayValue = "<i>ERROR: "+ex.getMessage()+"</i>";
446            }
447            %>
448            <tr>
449              <td class="prompt"><span title="<%=description%>"><%=name%></span></td>
450              <td>
451                <%=displayValue%>
452              </td>
453            </tr>
454            <%
455          }
456          %>
457          </table>
458          <%
459        }
460        %>
461     
462    </t:tab>
463    <%
464  }
465  %>
466    </t:tabcontrol>
467     
468    <base:buttongroup>
469      <base:button onclick="window.close()" title="Close" />
470    </base:buttongroup>
471
472  </base:body>
473  </base:page>
474  <%
475}
476finally
477{
478  if (dc != null) dc.commit();
479}
480
481%>
Note: See TracBrowser for help on using the repository browser.