source: trunk/www/common/overview/info.jsp @ 4840

Last change on this file since 4840 was 4840, checked in by Martin Svensson, 14 years ago

References #1240. The functionallity in the webclient is done. The documentation is not completely updated yet.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Id
File size: 15.7 KB
Line 
1<%-- $Id: info.jsp 4840 2009-03-24 14:55:03Z martin $
2  ------------------------------------------------------------------
3  Copyright (C) 2009 Nicklas Nordborg
4
5  This file is part of BASE - BioArray Software Environment.
6  Available at http://base.thep.lu.se/
7
8  BASE is free software; you can redistribute it and/or
9  modify it under the terms of the GNU General Public License
10  as published by the Free Software Foundation; either version 3
11  of the License, or (at your option) any later version.
12
13  BASE is distributed in the hope that it will be useful,
14  but WITHOUT ANY WARRANTY; without even the implied warranty of
15  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  GNU General Public License for more details.
17
18  You should have received a copy of the GNU General Public License
19  along with BASE. If not, see <http://www.gnu.org/licenses/>.
20  ------------------------------------------------------------------
21--%>
22<%@ page session="false"
23  import="net.sf.basedb.core.SessionControl"
24  import="net.sf.basedb.core.DbControl"
25  import="net.sf.basedb.core.Project"
26  import="net.sf.basedb.core.Item"
27  import="net.sf.basedb.core.BasicItem"
28  import="net.sf.basedb.core.Nameable"
29  import="net.sf.basedb.core.Annotatable"
30  import="net.sf.basedb.core.AnnotationSet"
31  import="net.sf.basedb.core.AnnotationType"
32  import="net.sf.basedb.core.Annotation"
33  import="net.sf.basedb.core.FileStoreEnabled"
34  import="net.sf.basedb.core.FileSetMember"
35  import="net.sf.basedb.core.File"
36  import="net.sf.basedb.core.DataFileType"
37  import="net.sf.basedb.core.ItemContext"
38  import="net.sf.basedb.core.Permission"
39  import="net.sf.basedb.core.PermissionDeniedException"
40  import="net.sf.basedb.core.ItemNotFoundException"
41  import="net.sf.basedb.clients.web.Base"
42  import="net.sf.basedb.clients.web.util.HTML"
43  import="net.sf.basedb.util.Values"
44  import="net.sf.basedb.util.NestedIterator"
45  import="net.sf.basedb.util.overview.GenericOverview"
46  import="net.sf.basedb.util.overview.OverviewUtil"
47  import="net.sf.basedb.util.overview.Node"
48  import="net.sf.basedb.util.overview.ValidationOptions"
49  import="net.sf.basedb.util.overview.Validator"
50  import="net.sf.basedb.util.overview.Severity"
51  import="net.sf.basedb.util.overview.Failure"
52  import="net.sf.basedb.util.overview.Fix"
53  import="java.util.ArrayList"
54  import="java.util.List"
55  import="java.util.LinkedList"
56  import="java.util.Iterator"
57  import="java.util.Collection"
58  import="java.util.Collections"
59%>
60<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
61<%@ taglib prefix="t" uri="/WEB-INF/tab.tld" %>
62<%@ taglib prefix="tbl" uri="/WEB-INF/table.tld" %>
63<%!
64private String getPath(Node node)
65{
66  Node parent = node.getParent();
67  if (parent == null) return "";
68  String path = getPath(parent);
69  if (parent.getNodeType() == Node.Type.FOLDER)
70  {
71    //path += "/" + HTML.encodeTags(parent.getTitle());
72  }
73  else
74  {
75    BasicItem item = parent.getItem();
76    if (path.length() > 0)
77    {
78      path += "<img src=\"../../images/submenu.gif\" style=\"padding: 0px 4px 5px 6px;\" >";
79    }
80    if (item.hasPermission(Permission.WRITE))
81    {
82      path += "<a href=\"javascript:editItem('" + item.getType().name() + "', " + item.getId() + 
83        ")\" title=\"Edit this item\" style=\"padding-right: 4px; white-space: nowrap;\">" + HTML.encodeTags(parent.getTitle()) + "</a>";
84    }
85    else
86    {
87      path += HTML.encodeTags(parent.getTitle());
88    }
89  }
90  return path;
91}
92%>
93<%
94final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
95final String ID = sc.getId();
96final float scale = Base.getScale(sc);
97final DbControl dc = sc.newDbControl();
98try
99{
100  GenericOverview overview = OverviewUtil.getCurrentOverview(sc);
101  ValidationOptions options = overview.getValidationOptions();
102  String nodeId = request.getParameter("nodeId");
103  Boolean showFailures = Values.getBoolean(request.getParameter("show_failures"), false);
104  Node node = overview.getNode(nodeId);
105  if (node == null) node = overview.getRootNode();
106
107  BasicItem item = node.getItem();
108  List<Failure> failures = overview.getFailures();
109  if (failures == null) failures = new LinkedList<Failure>();
110  %>
111  <base:page title="" type="popup">
112  <base:head scripts="" styles="newjoust.css">
113  <script language="JavaScript">
114  function editItem(itemType, itemId, extraUrl)
115  {
116    Main.viewOrEditItem('<%=ID%>', itemType, itemId, true, extraUrl);
117  }
118  function editAnnotation(itemType, itemId, annotationTypeId)
119  {
120    var url = getRoot() + 'common/annotations/annotate.jsp?ID=<%=ID%>';
121    url += '&item_type=' + itemType;
122    url += '&item_id=' + itemId;
123    url += '&annotationtype_id='+annotationTypeId;
124    url += '&standalone=1';
125    Main.openPopup(url, 'EditAnnotation', 700, 460);
126  }
127  function editInheritedAnnotation(itemType, itemId, annotationTypeId)
128  {
129    var url = getRoot() + 'common/annotations/inherit.jsp?ID=<%=ID%>';
130    url += '&item_type='+itemType;
131    url += '&item_id='+itemId;
132    url += '&annotationtype_id='+annotationTypeId;
133    url += '&standalone=1';
134    Main.openPopup(url, 'EditAnnotation', 700, 460);
135  }
136  function editDataFile(itemType, itemId)
137  {
138    Main.viewOrEditItem('<%=ID%>', itemType, itemId, true, '&tab=datafiles');
139  }
140  </script>
141  </base:head>
142
143    <base:body>
144      <table class="form">
145      <tr>
146        <td class="prompt">Path</td>
147        <td><%=getPath(node)%></td>
148      </tr>
149      <%
150      if (item instanceof FileSetMember)
151      {
152        FileSetMember member = null;
153        boolean notFound = false;
154        try
155        { 
156          member = FileSetMember.getById(dc, item.getId());
157        }
158        catch (ItemNotFoundException ex)
159        {
160          notFound = true;
161        }
162        File file = null;
163        DataFileType dft = null;
164        boolean deniedFile = false;
165        boolean deniedFileType = false;
166        if (member != null)
167        {
168          try
169          {
170            file = member.getFile();
171          }
172          catch (PermissionDeniedException ex)
173          {
174            deniedFile = true;
175          }
176          try
177          {
178            dft = member.getDataFileType();
179          }
180          catch (PermissionDeniedException ex)
181          {
182            deniedFileType = true;
183          }
184        }
185        if (dft != null || file != null)
186        {
187          %>
188          <tr>
189            <td class="prompt">
190              <%=dft == null ? "Data file" : HTML.encodeTags(dft.getName())%>
191            </td>
192            <td>
193              <%
194              if (deniedFile)
195              {
196                %>
197                <i>- denied -</i>
198                <%
199              }
200              else
201              {
202                if (file.hasPermission(Permission.WRITE))
203                {
204                  %>
205                  <a href="javascript:editItem('FILE', <%=file.getId()%>)" 
206                    title="Edit this item"><%=HTML.encodeTags(file.getName())%></a>
207                  <%
208                }
209                else
210                {
211                  %>
212                  <%=HTML.encodeTags(file.getName()) %>
213                  <%
214                }
215                %>
216                <%=Base.getFileLinks(ID, file, "../../") %>
217                <%
218              }
219              %>
220            </td>
221          </tr>
222          <%
223        }
224        else
225        {
226          %>
227          <tr>
228          <td class="prompt"><%=HTML.encodeTags(node.getTitle())%></td>
229          <td>
230            <%=notFound ? "<i>- not found -</i>" : "<i>- denied -</i>"%>
231          </td>
232          </tr>
233          <%
234        }
235      }
236      else
237      {
238        %>
239        <tr>
240          <td class="prompt"><%=node.getNodeType() == Node.Type.FOLDER ? 
241            "Folder" : item != null ? item.getType().toString() : "Item"%></td>
242          <td>
243            <%
244            if (item != null && item.hasPermission(Permission.WRITE))
245            {
246              %>
247              <a href="javascript:editItem('<%=item.getType().name()%>', <%=item.getId()%>)" 
248                title="Edit this item"><%=HTML.encodeTags(node.getTitle())%></a>
249              <%
250            }
251            else
252            {
253              %>
254              <%=HTML.encodeTags(node.getTitle())%>
255              <%
256            }
257            %>
258          </td>
259        </tr>
260        <%
261      }
262      %>
263      <tr>
264        <td class="prompt">Errors (children)</td>
265        <%
266        if (showFailures)
267        {
268        %>
269          <td><%=node.getNumErrors()+node.getChildErrors()%> (<%=node.getChildErrors()%>)</td>
270        <%
271        }
272        else
273        {       
274        %>
275          <td><i>- n/a -</i></td>
276        <%
277        }
278        %>
279      </tr>
280      <tr>
281        <td class="prompt">Warnings (children)</td>
282        <%
283        if (showFailures)
284        {
285        %>
286          <td><%=node.getNumWarnings()+node.getChildWarnings()%> (<%=node.getChildWarnings()%>)</td>
287        <%
288        }
289        else
290        {       
291        %>
292          <td><i>- n/a -</i></td>
293        <%
294        }
295        %>
296      </tr>
297      <%
298      if (item instanceof Nameable)
299      {
300        Nameable nameable = (Nameable)item;
301        %>
302        <tr>
303          <td class="prompt">Description</td>
304          <td><%=HTML.niceFormat(nameable.getDescription())%></td>
305        </tr>
306        <%
307      }
308      %>
309      </table>
310      <p>
311     
312      <%
313      List<Annotation> annotations = null;
314      String annotationsTitle = "";
315      Annotatable annotatable = null;
316      if (item instanceof Annotation)
317      {
318        Annotation a = (Annotation)item;
319        dc.reattachItem(a);
320        annotations = Collections.singletonList(a);
321        try
322        {
323          annotatable = a.getAnnotationSet().getItem();
324        }
325        catch (Throwable t)
326        {}
327        annotationsTitle = "Annotation values";
328      }
329      else if (item instanceof AnnotationType)
330      {
331        // Find the annotatable parent
332        Node parentNode = node;
333        while (parentNode != null)
334        {
335          BasicItem parentItem = parentNode.getItem();
336          if (parentItem instanceof Annotatable)
337          {
338            annotatable = (Annotatable)parentItem;
339            dc.reattachItem((BasicItem)annotatable);
340            if (annotatable.isAnnotated())
341            {
342              annotations = annotatable.getAnnotationSet().findAnnotations(dc, (AnnotationType)item, true);
343            }
344            annotationsTitle = "Annotation values";
345            break;
346          }
347          parentNode = parentNode.getParent();
348        }
349      }
350      else if (item instanceof Annotatable)
351      {
352        annotationsTitle = "Annotations &amp; protocol parameters";
353        annotatable = (Annotatable)item;
354        if (annotatable.isAnnotated())
355        {
356          dc.reattachItem((BasicItem)annotatable);
357 
358          // Load annotations & protocol parameters
359          List<Node> nodes = new LinkedList<Node>();
360          Node folder = node.getChild("annotations");
361          if (folder != null && folder.getChildren() != null) nodes.addAll(folder.getChildren());
362          Node protocolNode = node.getChild("protocol");
363          if (protocolNode != null && protocolNode.getChildren() != null) nodes.addAll(protocolNode.getChildren());
364          if (nodes.size() > 0)
365          {
366            annotations = new LinkedList<Annotation>();
367            for (Node n : nodes)
368            {
369              BasicItem aItem = n.getItem();
370              if (aItem instanceof Annotation)
371              {
372                annotations.add((Annotation)aItem);
373              }
374              else if (aItem instanceof AnnotationType)
375              {
376                annotations.addAll(annotatable.getAnnotationSet().findAnnotations(dc, (AnnotationType)aItem, true));
377              }
378            }
379          }
380        }
381      }
382      if (annotations != null && annotations.size() > 0)
383      {
384        %>
385        <h4><%=annotationsTitle%></h4>
386        <table border=0 cellspacing=0 cellpadding=0>
387        <%
388        for (Annotation a : annotations)
389        {
390          a = Annotation.getById(dc, a.getId());
391          String unitSymbol = a.hasUnit() ? "&nbsp;" + a.getUnitSymbol(null) : "";
392          AnnotationType at = null;
393          Annotatable annotationOwner = null;
394          try
395          {
396            at = a.getAnnotationType();
397          }
398          catch (Throwable t)
399          {}
400          try
401          {
402            annotationOwner = a.getAnnotationSet().getItem();
403          }
404          catch (Throwable t)
405          {}
406          String icon = at != null && at.isProtocolParameter() ? 
407              "parameter.gif" : "joust/annotation.gif";
408          String editLink = null;
409          String editTooltip = null;
410          if (annotatable != null && annotatable.hasPermission(Permission.WRITE) && at != null)
411          {
412            if (annotatable.equals(annotationOwner))
413            {
414              editLink = "editAnnotation('" + annotatable.getType().name() + "', " + annotatable.getId() + ", " + at.getId() + ")";
415              editTooltip = "Edit the values of this annotation";
416            }
417            else
418            {
419              editLink = "editInheritedAnnotation('" + annotatable.getType().name() + "', " + annotatable.getId() + ", " + at.getId() + ")";
420              editTooltip = "Inherit this annotation from another item";
421            }
422          }
423          %>
424          <tr>
425            <td><base:icon visible="<%=icon != null%>" image="<%=icon%>" />&nbsp;</td>
426            <td>
427              <%
428              if (at != null)
429              {
430                if (at.hasPermission(Permission.WRITE))
431                {
432                  %>
433                  <a href="javascript:editItem('<%=at.getType().name()%>', <%=at.getId()%>)" 
434                    title="Edit this annotation type"><%=HTML.encodeTags(at.getName())%></a>
435                  <%
436                }
437                else
438                {
439                  %>
440                  <%=HTML.encodeTags(at.getName())%>
441                  <%
442                }
443              }
444              else
445              {
446                %>
447                <%=a.getValueType() %>
448                <%
449              }
450              %>
451            </td>
452            <td>
453              <%
454              if (annotationOwner != null && !annotationOwner.equals(annotatable))
455              {
456                %>
457                <base:icon image="bullet.gif" tooltip="Annotation is inherited from" />
458                <%
459                String ownerName = annotationOwner instanceof Nameable ?
460                    ((Nameable)annotationOwner).getName() : annotationOwner.toString();
461                if (annotationOwner.hasPermission(Permission.WRITE))
462                {
463                  %>
464                  <a href="javascript:editItem('<%=annotationOwner.getType().name()%>', <%=annotationOwner.getId()%>)" 
465                    title="Edit this item"><%=HTML.encodeTags(ownerName)%></a>
466                  <%
467                }
468                else
469                {
470                  %>
471                  <%=HTML.encodeTags(ownerName)%>
472                  <%
473                }
474              }
475              %>
476            </td>
477            <td><base:icon image="bullet.gif" /></td>
478            <td><%=Values.getString(a.getValues(null), ", ", true)%><%=unitSymbol%></td>
479            <td>&nbsp;
480              <%
481              if (editLink != null)
482              {
483                %><base:icon image="edit.gif" onclick="<%=editLink%>" 
484                  tooltip="<%=editTooltip%>" />
485                <%
486              }
487              %>
488            </td>
489          </tr>
490          <%
491        }
492        %>
493        </table>
494        <%
495      }     
496      if (showFailures)
497      {
498        %>
499        <h4>Failure details</h4>     
500        <table>
501        <%
502        int numFailures = 0;
503        for (Failure failure : failures)
504        {
505          Validator validator = failure.getValidator();
506          Severity severity = options.getSeverity(validator);
507          if (failure.getNode() == node && severity != Severity.IGNORE)
508          {
509            numFailures++;
510            List<Fix> fixes = failure.getFixes();
511            %>
512            <tr>
513              <td><base:icon image="<%=severity == Severity.ERROR ? 
514                "error.gif" : "warning.gif"%>" /></td>
515              <td><b><%=HTML.encodeTags(failure.getMessage())%></b></td>
516            </tr>
517            <tr>
518              <td style="border-bottom: 1px dotted #999999;"></td>
519              <td style="border-bottom: 1px dotted #999999;">
520                <%=HTML.encodeTags(validator.getDescription())%><br>
521                <%
522                if (fixes != null && fixes.size() > 0)
523                {
524                  for (Fix fix : fixes)
525                  {
526                    if (fix == null) continue;
527                    BasicItem fixItem = fix.getItem();
528                    if (fixItem.hasPermission(Permission.WRITE))
529                    {
530                      String fixIt = "";
531                      if (fix.isAnnotationFix())
532                      {
533                        AnnotationType at = fix.getAnnotationType();
534                        if (fix.isFromInherited())
535                        {
536                          fixIt = "editInheritedAnnotation('" + fixItem.getType().name() + "', " + 
537                            fixItem.getId() + ", " + at.getId() + ")";
538                        }
539                        else
540                        {
541                          fixIt = "editAnnotation('" + fixItem.getType().name() + "', " + 
542                            fixItem.getId() + ", " + at.getId() + ")";
543                        }
544                      }
545                      else if (fix.isDataFileFix())
546                      {
547                        FileSetMember member = fix.getFileSetMember();
548                        fixIt = "editDataFile('" + fixItem.getType().name() + "', " + 
549                          fixItem.getId() + ")";
550                      }
551                      else
552                      {
553                        fixIt = "editItem('" + fixItem.getType().name() + "', " + 
554                          fixItem.getId() + ")";
555                      }
556                      %>
557                      <base:icon image="fixit.png" 
558                        style="padding-bottom: 4px;" /><a href="javascript:<%=fixIt%>"
559                        title="Edit this item to fix the problem"><%=HTML.encodeTags(fix.getMessage())%></a><br>
560                      <%
561                    }
562                  }
563                }
564                %>
565              </td>
566            </tr>
567            <%
568          }
569        }
570        %>
571        </table>
572        <%
573        if (numFailures == 0)
574        {
575          %>
576          No validation failures on this item
577          <%
578        }       
579      }
580      %>
581    </base:body>
582  </base:page>
583  <%
584}
585finally
586{
587  if (dc != null) dc.close();
588}
589%>
Note: See TracBrowser for help on using the repository browser.