source: branches/2.4-stable/www/common/annotations/list_annotations.jsp @ 3776

Last change on this file since 3776 was 3776, checked in by Nicklas Nordborg, 15 years ago

Fixes #781: AnnotationSet?.getAllInheritedAnnotations() may generate invalid query on Postgres

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