source: trunk/www/common/annotations/list_annotations.jsp @ 4510

Last change on this file since 4510 was 4510, checked in by Jari Häkkinen, 14 years ago

Addresses #1106. Missed to change reference wherefrom retrive GPLv3 license text. And some other changes.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Id
File size: 11.6 KB
Line 
1<%-- $Id: list_annotations.jsp 4510 2008-09-11 20:03:48Z jari $
2  ------------------------------------------------------------------
3  Copyright (C) 2006 Jari Hakkinen, Nicklas Nordborg, Martin Svensson
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  @author Nicklas
23  @version 2.0
24--%>
25<%@ page session="false"
26  import="net.sf.basedb.core.SessionControl"
27  import="net.sf.basedb.core.DbControl"
28  import="net.sf.basedb.core.Item"
29  import="net.sf.basedb.core.Permission"
30  import="net.sf.basedb.core.AnnotationType"
31  import="net.sf.basedb.core.Protocol"
32  import="net.sf.basedb.core.AnnotationSet"
33  import="net.sf.basedb.core.Annotation"
34  import="net.sf.basedb.core.Annotatable"
35  import="net.sf.basedb.core.AnnotatableProxy"
36  import="net.sf.basedb.core.Nameable"
37  import="net.sf.basedb.core.ItemQuery"
38  import="net.sf.basedb.core.ItemResultList"
39  import="net.sf.basedb.core.PermissionDeniedException"
40  import="net.sf.basedb.core.query.Orders"
41  import="net.sf.basedb.core.query.Hql"
42  import="net.sf.basedb.clients.web.Base"
43  import="net.sf.basedb.clients.web.util.HTML"
44  import="net.sf.basedb.util.formatter.Formatter"
45  import="net.sf.basedb.clients.web.formatter.FormatterFactory"
46  import="net.sf.basedb.util.Values"
47  import="java.util.List"
48%>
49<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
50<%@ taglib prefix="tbl" uri="/WEB-INF/table.tld" %>
51
52<%
53final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
54final String ID = sc.getId();
55final Item itemType = Item.valueOf(request.getParameter("item_type"));
56final int itemId = Values.getInt(request.getParameter("item_id"));
57final float scale = Base.getScale(sc);
58final DbControl dc = sc.newDbControl();
59
60try
61{
62  final Annotatable item = (Annotatable)itemType.getById(dc, itemId);
63  ItemQuery<AnnotationType> annotationTypeQuery = null;
64  String message = null;
65  boolean isProxy = item instanceof AnnotatableProxy;
66
67  if (isProxy)
68  {
69    AnnotatableProxy proxy = (AnnotatableProxy)item;
70    annotationTypeQuery = Base.getAnnotationTypesQuery(proxy);
71    message = proxy.getAnnotationMessage();
72  }
73  else
74  {
75    annotationTypeQuery = Base.getAnnotationTypesQuery(itemType, false);
76  }
77  final List<AnnotationType> annotationTypes = annotationTypeQuery.list(dc);
78  Protocol protocol = null;
79  boolean readProtocol = true;
80  try
81  {
82    protocol = item.getProtocol();
83  }
84  catch (PermissionDeniedException ex)
85  {
86    readProtocol = false;
87  }
88  final List<AnnotationType> protocolParameters = protocol == null ? 
89    null : Base.getProtocolParametersQuery(protocol).list(dc);
90  final boolean writePermission = item.hasPermission(Permission.WRITE);
91
92  final AnnotationSet as = item.isAnnotated() ? item.getAnnotationSet() : null;
93  ItemResultList<Annotation> inheritedAnnotations = null;
94  if (as != null)
95  {
96    ItemQuery<Annotation> inheritedQuery = as.getAllInheritedAnnotations();
97    // Need FETCH JOIN because Postgres don't like the DISTINCT keyword
98    // if we sort on a non-selected column See ticket #731
99    inheritedQuery.join(Hql.innerJoin(null, "annotationType", "at", true));
100    inheritedQuery.order(Orders.asc(Hql.property("annotationSet")));
101    inheritedQuery.order(Orders.asc(Hql.property("at", "name")));
102    inheritedAnnotations = inheritedQuery.list(dc);
103  }
104  %>
105  <base:page type="include">
106  <base:body>
107    <script language="JavaScript">
108    function editAnnotation(annotationTypeId)
109    {
110      var url = getRoot() + 'common/annotations/annotate.jsp?ID=<%=ID%>';
111      url += '&item_type=<%=itemType.name()%>';
112      url += '&item_id=<%=itemId%>';
113      url += '&annotationtype_id='+annotationTypeId;
114      url += '&standalone=1';
115      Main.openPopup(url, 'EditAnnotation', 700, 460);
116    }
117    function editInheritedAnnotation(itemType, itemId, annotationTypeId)
118    {
119      var url = getRoot() + 'common/annotations/annotate.jsp?ID=<%=ID%>';
120      url += '&item_type='+itemType;
121      url += '&item_id='+itemId;
122      url += '&annotationtype_id='+annotationTypeId;
123      url += '&standalone=1';
124      Main.openPopup(url, 'EditAnnotation', 700, 460);
125    }
126    </script>
127      <%
128      if (annotationTypes.size() == 0)
129      {
130        %>
131        <h4>Primary annotations</h4>
132        No annotation types has been defined for this type of item
133        (or you don't have permission to view them).
134        <%
135      }
136      else
137      {
138        %>
139        <%=message == null ? "" : message%>
140        <h4 class="docked">Primary annotations</h4>
141        <tbl:table
142          id="annotations"
143          clazz="itemlist"
144          columns="all"
145          >
146          <tbl:columndef 
147            id="annotation"
148            title="Annotation"
149          />
150          <tbl:columndef 
151            id="values"
152            title="Values"
153          />
154          <tbl:columndef 
155            id="description"
156            title="Description"
157          />
158          <tbl:data>
159            <tbl:columns>
160            </tbl:columns>
161            <tbl:rows>
162            <%
163            for (AnnotationType at : annotationTypes)
164            {
165              Formatter formatter = FormatterFactory.getTypeFormatter(sc, at.getValueType());
166              List<?> values = as == null || !as.hasAnnotation(at) ? 
167                null : as.getAnnotation(at).getValues();
168              if (values != null || !at.isRemoved())
169              {
170                %>
171                <tbl:row>
172                  <tbl:cell column="annotation"><base:icon 
173                    image="deleted.gif" 
174                    tooltip="This item has been scheduled for deletion" 
175                    visible="<%=at.isRemoved()%>"
176                  /><%=Base.getLinkedName(ID, at, false, true)%></tbl:cell>
177                  <tbl:cell column="values"><%=values == null || values.size() == 0 ? "<i>- no values -</i>" : Values.getString(values, ", ", true, formatter)%>
178                  <%
179                    if (writePermission)
180                    {
181                      %>: <base:icon image="edit.gif" 
182                        onclick="<%="editAnnotation("+at.getId()+")"%>" 
183                        tooltip="Modify the values of this annotation" />
184                      <%
185                    }
186                    %>
187                  </tbl:cell>
188                  <tbl:cell column="description"><%=HTML.encodeTags(at.getDescription())%></tbl:cell>
189                </tbl:row>
190                <%
191              }
192            }
193            %>
194            </tbl:rows>
195          </tbl:data>
196        </tbl:table>
197        <br>
198        <%
199      }
200      %>
201
202      <%
203      if (protocolParameters != null )
204      {
205        if (protocolParameters.size() == 0)
206        {
207          %>
208          <h4>Protocol parameters</h4>
209          No protocol parameters has been defined for the protocol
210          <%=Base.getLinkedName(ID, protocol, !readProtocol, true)%> 
211          (or you don't have permission to view them).
212          <%
213        }
214        else
215        {
216          %>
217          <h4 class="docked">Protocol parameters for:
218            <%=Base.getLinkedName(ID, protocol, !readProtocol, true)%></h4>
219          <tbl:table
220            id="parameters"
221            clazz="itemlist"
222            columns="all"
223            >
224            <tbl:columndef 
225              id="parameter"
226              title="Parameter"
227            />
228            <tbl:columndef 
229              id="values"
230              title="Values"
231            />
232            <tbl:columndef 
233              id="description"
234              title="Description"
235            />
236            <tbl:data>
237              <tbl:columns>
238              </tbl:columns>
239              <tbl:rows>
240              <%
241              for (AnnotationType at : protocolParameters)
242              {
243                Formatter formatter = FormatterFactory.getTypeFormatter(sc, at.getValueType());
244                List<?> values = as == null || !as.hasAnnotation(at) ? 
245                  null : as.getAnnotation(at).getValues();
246                if (values != null || !at.isRemoved())
247                {
248                  %>
249                  <tbl:row>
250                    <tbl:cell column="parameter"><base:icon 
251                      image="deleted.gif" 
252                      tooltip="This item has been scheduled for deletion" 
253                      visible="<%=at.isRemoved()%>"
254                    /><%=Base.getLinkedName(ID, at, false, true)%></tbl:cell>
255                    <tbl:cell column="values">
256                      <%=values == null || values.size() == 0 ? "<i>- no values -</i>" : Values.getString(values, ", ", true, formatter)%>
257                      <%
258                      if (writePermission)
259                      {
260                        %>: <base:icon image="edit.gif" 
261                          onclick="<%="editAnnotation("+at.getId()+")"%>" 
262                          tooltip="Modify the values of this protocol parameter" />
263                        <%
264                      }
265                      %>
266                    </tbl:cell>
267                    <tbl:cell column="description"><%=HTML.encodeTags(at.getDescription())%></tbl:cell>
268                  </tbl:row>
269                  <%
270                }
271              }
272              %>
273              </tbl:rows>
274            </tbl:data>
275          </tbl:table>
276          <br>
277          <%
278        }
279      }
280      %>
281
282      <%
283      if (!isProxy)
284      {
285      if (inheritedAnnotations == null || inheritedAnnotations.size() == 0)
286      {
287        %>
288        <h4>Inherited annotations and protocol parameters</h4>
289        No annotations are inherited by this item.
290        <%
291      }
292      else
293      {
294        %>
295        <h4 class="docked">Inherited annotations and protocol parameters</h4>
296        <tbl:table
297          id="inheritedAnnotations"
298          clazz="itemlist"
299          columns="all"
300          >
301          <tbl:columndef 
302            id="annotation"
303            title="Annotation"
304          />
305          <tbl:columndef 
306            id="item"
307            title="From item"
308          />
309          <tbl:columndef 
310            id="values"
311            title="Values"
312          />
313          <tbl:columndef 
314            id="description"
315            title="Description"
316          />
317          <tbl:data>
318            <tbl:columns>
319            </tbl:columns>
320            <tbl:rows>
321            <%
322            String denied = "<i>- denied -</i>";
323            for (Annotation a : inheritedAnnotations)
324            {
325              AnnotationType at = null;
326              int annotationTypeId = 0;
327              String name = denied;
328              String description = "";
329              boolean writeInherited = false;
330              String icon = "joust/annotation.gif";
331              Formatter formatter = FormatterFactory.getTypeFormatter(sc, a.getValueType());
332              try
333              {
334                at = a.getAnnotationType();
335                annotationTypeId = at.getId();
336                name = HTML.encodeTags(at.getName());
337                if (at.isRemoved())
338                {
339                  icon = "deleted.gif";
340                }
341                else if (at.isProtocolParameter())
342                {
343                  icon = "parameter.gif";
344                }
345                description = HTML.encodeTags(at.getDescription());
346              }
347              catch (PermissionDeniedException ex)
348              {}
349              Nameable aItem = null;
350              try
351              {
352                aItem = (Nameable)a.getAnnotationSet().getItem();
353                writeInherited = aItem.hasPermission(Permission.WRITE);
354              }
355              catch (PermissionDeniedException ex)
356              {}
357              List<?> values = a.getValues();
358              %>
359              <tbl:row>
360                <tbl:cell column="annotation"><base:icon image="<%=icon%>" />&nbsp;<%=Base.getLinkedName(ID, at, at == null, true)%></tbl:cell>
361                <tbl:cell column="item"><%=Base.getLinkedName(ID, aItem, aItem == null, true)%><%=aItem != null ? " ["+aItem.getType()+"]" : ""%></tbl:cell>
362                <tbl:cell column="values">
363                  <%=values == null || values.size() == 0 ? 
364                    "<i>- no values -</i>" : Values.getString(values, ", ", true, formatter)%>
365                  <%
366                  if (writeInherited && aItem != null)
367                  {
368                    %>: <base:icon image="edit.gif" 
369                      onclick="<%="editInheritedAnnotation('"+aItem.getType().name()+"', "+aItem.getId()+", "+at.getId()+")"%>" 
370                      tooltip="Modify the values of this annotation" />
371                    <%
372                  }
373                  %>
374                </tbl:cell>
375                <tbl:cell column="description"><%=description%></tbl:cell>
376              </tbl:row>
377              <%
378            }
379            %>
380            </tbl:rows>
381          </tbl:data>
382        </tbl:table>
383        <base:icon image="joust/annotation.gif" /> = Annotation,
384        <base:icon image="parameter.gif" /> = Protocol parameter
385        <%
386      }
387      }
388      %>
389
390  </base:body>
391  </base:page>
392  <%
393}
394finally
395{
396  if (dc != null) dc.close();
397}
398
399%>
Note: See TracBrowser for help on using the repository browser.