source: trunk/www/views/experiments/bioassaysets/analysis_tree.jsp @ 3094

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

Fixes #483: Add a direct start icon for export of bioassaysets in analysis tree

  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Id
File size: 28.6 KB
Line 
1<%-- $Id: analysis_tree.jsp 3094 2007-02-05 07:09:07Z nicklas $
2  ------------------------------------------------------------------
3  Copyright (C) Authors contributing to this file.
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.ItemContext"
32  import="net.sf.basedb.core.BasicItem"
33  import="net.sf.basedb.core.Experiment"
34  import="net.sf.basedb.core.BioAssaySet"
35  import="net.sf.basedb.core.Transformation"
36  import="net.sf.basedb.core.ExtraValue"
37  import="net.sf.basedb.core.ExtraValueType"
38  import="net.sf.basedb.core.AnnotationSet"
39  import="net.sf.basedb.core.AnnotationType"
40  import="net.sf.basedb.core.Job"
41  import="net.sf.basedb.core.ItemQuery"
42  import="net.sf.basedb.core.Nameable"
43  import="net.sf.basedb.core.ItemResultIterator"
44  import="net.sf.basedb.core.ItemResultList"
45  import="net.sf.basedb.core.Permission"
46  import="net.sf.basedb.core.PluginDefinition"
47  import="net.sf.basedb.core.PermissionDeniedException"
48  import="net.sf.basedb.core.query.Restrictions"
49  import="net.sf.basedb.core.query.Expressions"
50  import="net.sf.basedb.core.query.Orders"
51  import="net.sf.basedb.core.query.Hql"
52  import="net.sf.basedb.core.query.Restrictions"
53  import="net.sf.basedb.core.plugin.GuiContext"
54  import="net.sf.basedb.core.plugin.Plugin"
55  import="net.sf.basedb.util.Tree"
56  import="net.sf.basedb.util.Enumeration"
57  import="net.sf.basedb.clients.web.Base"
58  import="net.sf.basedb.clients.web.ModeInfo"
59  import="net.sf.basedb.clients.web.util.HTML"
60  import="net.sf.basedb.util.Values"
61  import="net.sf.basedb.util.formatter.Formatter"
62  import="net.sf.basedb.clients.web.formatter.FormatterFactory"
63  import="java.util.Date"
64  import="java.util.List"
65  import="java.util.ArrayList"
66  import="java.util.LinkedList"
67  import="java.util.Map"
68  import="java.util.HashMap"
69  import="java.util.Iterator"
70  import="java.util.Collection"
71%>
72<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
73<%@ taglib prefix="tbl" uri="/WEB-INF/table.tld" %>
74<%@ taglib prefix="t" uri="/WEB-INF/tab.tld" %>
75<%@ taglib prefix="p" uri="/WEB-INF/path.tld" %>
76<%!
77  private static final Item itemType = Item.BIOASSAYSET;
78  private static final GuiContext guiContext = new GuiContext(itemType, GuiContext.Type.LIST);
79%>
80<%!
81
82private static void addToTree(Tree<BasicItem> tree, BioAssaySet bas)
83{
84  if (!tree.contains(bas))
85  {
86    Transformation transformation = bas.getTransformation();
87    Tree.Entry<BasicItem> parent = tree.getEntry(transformation);
88    if (parent == null) 
89    {
90      addToTree(tree, transformation);
91      parent = tree.getEntry(transformation);
92    }
93    Tree.Entry<BasicItem> basEntry = parent.addChild(bas);
94    for (ExtraValue xv : bas.getExtraValues().list(bas.getDbControl())) 
95    {
96      basEntry.addChild(xv);
97    }
98  }
99}
100
101private static void addToTree(Tree<BasicItem> tree, Transformation transformation)
102{
103  if (!tree.contains(transformation))
104  {
105    BioAssaySet source = transformation.getSource();
106    Tree.Entry<BasicItem> parent = tree.getEntry(source);
107    if (parent == null) 
108    {
109      addToTree(tree, source);
110      parent = tree.getEntry(source);
111    }
112    parent.addChild(transformation);
113  }
114}
115
116private static Tree<BasicItem> getAnalysisTree(DbControl dc, ItemQuery<BioAssaySet> bioAssaySetQuery, ItemQuery<Transformation> transformationQuery)
117{
118  Tree<BasicItem> tree = new Tree<BasicItem>(null);
119  ItemResultList<BioAssaySet> allBioAssaySets = bioAssaySetQuery.list(dc);
120  List<Integer> ids = new ArrayList<Integer>(allBioAssaySets.size());
121 
122  for (BioAssaySet bas : allBioAssaySets)
123  {
124    addToTree(tree, bas);
125    ids.add(bas.getId());
126  }
127 
128  transformationQuery.restrict(
129    Restrictions.in(
130      Hql.property("source.id"), 
131      Expressions.parameter("bioAssaySets", ids)
132    )
133  );
134  ItemResultList<Transformation> allTransformations = transformationQuery.list(dc);
135  for (Transformation t: allTransformations)
136  {
137    addToTree(tree, t);
138  }
139  return tree;
140}
141String generateTree(Tree<BasicItem> tree, BasicItem root, BasicItem parentItem, Collection<String> closed)
142{
143  StringBuilder sb = new StringBuilder();
144  Tree.Entry<BasicItem> parentEntry = tree.getEntry(parentItem);
145  if (parentEntry == null) return "";
146 
147  if (root != null && root == parentItem)
148  {
149    appendNode(sb, root, null, true);
150  }
151 
152  List<Tree.Entry<BasicItem>> children = parentEntry.getChildren();
153  if (children != null)
154  {
155    for (Tree.Entry<BasicItem> child : children)
156    {
157      BasicItem node = child.getNode();
158      String var = node.getType().name() + "_" + node.getId();
159      appendNode(sb, node, parentItem, (closed == null || !closed.contains(var)) && child.getNumChildren() > 0);
160      sb.append(generateTree(tree, root, node, closed));
161    }
162  }
163  return sb.toString();
164}
165
166void appendNode(StringBuilder sb, BasicItem node, BasicItem parentItem, boolean open)
167{
168  int id = node.getId();
169  String var = node.getType().name() + "_" + id;
170  String name = "";
171 
172  Item nodeType = node.getType();
173  String folderIcon = "";
174  if (nodeType == Item.BIOASSAYSET)
175  {
176    folderIcon = "BioAssaySet";
177    name = ((BioAssaySet)node).getName();
178  } 
179  else if (nodeType == Item.TRANSFORMATION)
180  {
181    folderIcon = "Transformation";
182    name = ((Transformation)node).getName();
183  } 
184  else if (nodeType == Item.EXTRAVALUE) 
185  {
186    folderIcon = "ExtraValue";
187    name = ((ExtraValue)node).getExtraValueType().getName();
188  }
189  sb.append("var ").append(var);
190  if (parentItem == null)
191  {
192    sb.append(" = JoustMenu.addMenuItem(-1");
193  }
194  else
195  {
196    String rootVar = parentItem.getType().name() + "_" + parentItem.getId();
197    sb.append(" = JoustMenu.addChildItem(").append(rootVar); 
198  }
199  sb.append(",'").append(folderIcon).append("'");
200  sb.append(",'").append(HTML.javaScriptEncode(name)).append("'");
201  sb.append(", null, '', '").append(var).append("');\n");
202  if (open)
203  {
204    sb.append("JoustMenu.menuItems[").append(var).append("].isOpen = true;\n");
205  }
206}
207%>
208<%
209final int experimentId = Values.getInt(request.getParameter("experiment_id"));
210final int bioAssaySetId = Values.getInt(request.getParameter("item_id"));
211final int transformationId = Values.getInt(request.getParameter("transformation_id"));
212final SessionControl sc = Base.getExistingSessionControl(pageContext, Permission.DENIED, itemType);
213final String ID = sc.getId();
214final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, null);
215final ItemContext tc = sc.getCurrentContext(Item.TRANSFORMATION);
216final ItemContext xvc = sc.getCurrentContext(Item.EXTRAVALUE);
217
218final ModeInfo mode = ModeInfo.get(request.getParameter("mode"));
219final String callback = request.getParameter("callback");
220final String title = mode.generateTitle("bioassay set", "bioassay sets");
221final DbControl dc = sc.newDbControl();
222Tree<BasicItem> analysisTree = null;
223ItemResultList<AnnotationType> annotationTypes = null;
224try
225{
226  Formatter<Date> dateTimeFormatter = FormatterFactory.getDateTimeFormatter(sc);
227  final ItemQuery<AnnotationType> annotationTypeQuery = Base.getAnnotationTypesQuery(itemType);
228  final Experiment experiment = Experiment.getById(dc, experimentId);
229  final BasicItem root = transformationId == 0 ? 
230      (bioAssaySetId == 0 ? null : BioAssaySet.getById(dc, bioAssaySetId))
231      : Transformation.getById(dc, transformationId);
232  final boolean createPermission = experiment.hasPermission(Permission.USE);
233  final boolean deletePermission = createPermission;
234  final boolean writePermission = createPermission;
235
236  final ItemQuery<BioAssaySet> query = Base.getConfiguredQuery(cc, true, experiment.getBioAssaySets(), mode);
237  final ItemQuery<Transformation> transformationQuery = experiment.getTransformations();
238  transformationQuery.include(cc.getInclude());
239  Map<Plugin.MainType, Integer> pluginCount = PluginDefinition.countPlugins(dc, guiContext);
240  annotationTypes = annotationTypeQuery.list(dc);
241  try
242  {
243    analysisTree = getAnalysisTree(dc, query, transformationQuery);
244  }
245  catch (Throwable t)
246  {
247    cc.setMessage(t.getMessage());
248  }
249  // Contains the ID:s of the bioassaysets that are closed in the tree
250  Collection<String> closed = (Collection<String>)cc.getObject("closed");
251  int numListed = 0;
252  %>
253  <base:page type="include">
254  <base:body>
255    <script language="JavaScript">
256    var submitPage = '<%=transformationId != 0 ? "../bioassaysets/index.jsp" : "index.jsp"%>';
257    var formId = 'bioAssaySets';
258    function newItem()
259    {
260      Main.openPopup('index.jsp?ID=<%=ID%>&cmd=NewItem&experiment_id=<%=experimentId%>', 'NewBioAssaySet', 740, 540);
261    }
262    function editBioAssaySet(itemId)
263    {
264      Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', itemId, true);
265    }
266    function viewBioAssaySet(itemId)
267    {
268      Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', itemId, false);
269    }
270    function bioAssaySetOnClick(evt, itemId)
271    {
272      Table.itemOnClick(formId, evt, itemId, '<%=mode.getName()%>', viewBioAssaySet, editBioAssaySet, returnSelected);
273    }
274    function viewTransformation(itemId)
275    {
276      Main.viewOrEditItem('<%=ID%>', 'TRANSFORMATION', itemId, false);
277    }
278    function editTransformation(itemId)
279    {
280      Main.viewOrEditItem('<%=ID%>', 'TRANSFORMATION', itemId, true);
281    }
282    function transformationOnClick(evt, itemId)
283    {
284      Table.itemOnClick(formId, evt, itemId, '<%=mode.getName()%>', viewTransformation, editTransformation, returnSelected);
285    }
286    function viewExtraValue(itemId)
287    {
288      Main.viewOrEditItem('<%=ID%>', 'EXTRAVALUE', itemId, false);
289    }
290    function editExtraValue(itemId)
291    {
292      Main.viewOrEditItem('<%=ID%>', 'EXTRAVALUE', itemId, true);
293    }
294    function extraValueOnClick(evt, itemId)
295    {
296      Table.itemOnClick(formId, evt, itemId, '<%=mode.getName()%>', viewExtraValue, editExtraValue, returnSelected);
297    }
298    function deleteItems()
299    {
300      var frm = document.forms[formId];
301      if (Forms.numChecked(frm) == 0)
302      {
303        alert('Please select at least one item in the list');
304        return;
305      }
306      if (Forms.numChecked(frm, /^X:/) > 0)
307      {
308        if (!confirm('Extra values are deleted immediately and cannot be restored. Do you want to continue?'))
309        {
310          return;
311        }
312      }
313      frm.action = submitPage;
314      frm.cmd.value = 'DeleteItems';
315      frm.submit();
316    }
317    function restoreItems()
318    {
319      var frm = document.forms[formId];
320      if (Forms.numChecked(frm) == 0)
321      {
322        alert('Please select at least one item in the list');
323        return;
324      }
325      frm.action = submitPage;
326      frm.cmd.value = 'RestoreItems';
327      frm.submit();
328    }
329    function configureColumns()
330    {
331      Table.configureColumns('<%=ID%>', formId, '<%=itemType.name()%>', '<%=(String)cc.getObject("defaultColumns")%>');
332    }
333    function runPlugin(cmd)
334    {
335      Table.submitToPopup(formId, cmd, 740, 540);
336    }
337    function filter(itemId)
338    {
339      Main.openPopup('../bioassaysets/index.jsp?ID=<%=ID%>&cmd=NewFilteredBioAssaySet&experiment_id=<%=experimentId%>&item_id='+itemId, 'FilterBioAssaySet', 740, 540);
340    }
341    function openPlotTool(itemId)
342    {
343      Main.openPopup('../plotter/index.jsp?ID=<%=ID%>&bioassayset_id='+itemId, 'Plotter', 1000, 700);
344    }
345    function openExperimentExplorer(itemId)
346    {
347      location.href = '../explorer/view/index.jsp?ID=<%=ID%>&bioassayset_id='+itemId;
348    }
349    function runAnalysisPlugin(itemId)
350    {
351      Main.openPopup('../bioassaysets/index.jsp?ID=<%=ID%>&cmd=RunAnalysisPlugin&experiment_id=<%=experimentId%>&item_id='+itemId, 'RunPlugin', 740, 540);
352    }
353    function runExportPlugin(itemId)
354    {
355      Main.openPopup('../bioassaysets/index.jsp?ID=<%=ID%>&cmd=ExportItem&experiment_id=<%=experimentId%>&item_id='+itemId, 'Export', 740, 540);
356    }
357    function copyJob(jobId)
358    {
359      var url = '../../../common/plugin/index.jsp?ID=<%=ID%>';
360      url += '&cmd=CopyJob&job_id='+jobId;
361      url += '&item_type=BIOASSAYSET&context_type=LIST'
362      Main.openPopup(url, 'CopyJob', 740, 540);
363    }
364    function returnSelected()
365    {
366      Table.returnSelected(formId, <%=callback != null ? "window.opener."+callback : "null" %>);
367      window.close();
368    }
369    function presetOnChange()
370    {
371      Table.presetOnChange('<%=ID%>', formId, '<%=itemType.name()%>', '<%=(String)cc.getObject("defaultColumns")%>');
372    }
373    function initTree()
374    {
375      var bigDir = getRoot()+'/images/joust/big/';
376      IconStore.init(bigDir, 18, 22);
377      IconStore.addIcon('BioAssaySet', bigDir + 'bioassayset.gif', 18, 22);
378      IconStore.addIcon('Transformation', bigDir + 'transformation.gif', 18, 22);
379      IconStore.addIcon('Filter', bigDir + 'filter.gif', 18, 22);
380      IconStore.addIcon('ExtraValue', bigDir + 'extravalue.gif', 18, 22);
381
382      JoustMenu.toggle = function(menuItemIndex)
383      {
384        var menuItem = this.menuItems[menuItemIndex];
385        if (!menuItem) return;
386        // Switch the open/closed status and hide or show the children
387        menuItem.isOpen = !menuItem.isOpen;
388        if (menuItem.isOpen)
389        {
390          this.showChildren(menuItemIndex);
391          var frm = document.forms[formId];
392          frm.closed.value = frm.closed.value.replace(','+menuItem.externalId+',', ',');
393        }
394        else
395        {
396          this.hideChildren(menuItemIndex);
397          var frm = document.forms[formId];
398          frm.closed.value += menuItem.externalId+',';
399        }
400        // alert(document.forms[formId].closed.value);
401        this.updateIconsAndText(menuItemIndex);
402      }
403     
404      JoustMenu.drawMenuItems = function(firstIndex, indentString)
405      {
406        var menuItem = this.menuItems[firstIndex];
407        while (menuItem)
408        {
409          var html = menuItem.draw(indentString);
410          var padIcon = IconStore.getIcon(menuItem.noOutlineIcon == true ? null : menuItem.nextItemIndex == -1 ? 'iconBlank' : 'iconLine');
411          var padHtml = padIcon == null ? '' : padIcon.getImgTag();
412         
413          var menuDiv = document.getElementById('tree.'+menuItem.externalId);
414          menuDiv.innerHTML = html;
415         
416          if (menuItem.firstChildIndex != -1)
417          {
418            this.drawMenuItems(menuItem.firstChildIndex, indentString+padHtml);
419          }
420          if (!menuItem.isOpen)
421          {
422            this.hideChildren(menuItem.index);
423          }
424          menuItem = this.menuItems[menuItem.nextItemIndex];
425        }
426        return '';
427      }
428
429      JoustMenu.hideChildren = function(menuItemIndex)
430      {
431        var menuItem = this.menuItems[menuItemIndex];
432        if (menuItem)
433        {
434          var firstChildIndex = menuItem.firstChildIndex;
435          var child = this.menuItems[firstChildIndex];
436          while (child)
437          {
438            var e = document.getElementById('row.'+child.externalId);
439            e.style.display = 'none';
440            this.hideChildren(child.index);
441            child = this.menuItems[child.nextItemIndex];
442          }
443        }
444      }
445     
446      JoustMenu.showChildren = function(menuItemIndex)
447      {
448        var menuItem = this.menuItems[menuItemIndex];
449        if (menuItem)
450        {
451          var firstChildIndex = menuItem.firstChildIndex;
452          var child = this.menuItems[firstChildIndex];
453          while (child)
454          {
455            var e = document.getElementById('row.'+child.externalId);
456            e.style.display = Browser.isIE ? 'block' : 'table-row';
457            if (child.isOpen)
458            {
459              this.showChildren(child.index);
460            }
461            child = this.menuItems[child.nextItemIndex];
462          }
463        }
464      }
465
466      <%=analysisTree == null ? "" : generateTree(analysisTree, root, root, closed)%>
467      JoustMenu.draw('joust');
468     
469    }
470    </script>
471 
472
473    <%
474    if (cc.getMessage() != null)
475    {
476      %>
477      <div class="error"><%=cc.getMessage()%></div>
478      <%
479      cc.setMessage(null);
480    }
481    %>
482    <tbl:table 
483      id="bioAssaySets" 
484      clazz="itemlist" 
485      columns="<%=cc.getSetting("columns")%>"
486      sortby="<%=cc.getSortProperty()%>" 
487      direction="<%=cc.getSortDirection()%>"
488      title="<%=title%>"
489      action="<%=transformationId != 0 ? "../bioassaysets/index.jsp" : "index.jsp"%>"
490      sc="<%=sc%>"
491      item="<%=itemType%>"
492      >
493      <tbl:hidden 
494        name="mode" 
495        value="<%=mode.getName()%>" 
496      />
497      <tbl:hidden 
498        name="experiment_id" 
499        value="<%=String.valueOf(experimentId)%>" 
500      />
501      <tbl:hidden 
502        name="item_id" 
503        value="<%=String.valueOf(bioAssaySetId)%>"
504        skip="<%=bioAssaySetId == 0%>"
505      />
506      <tbl:hidden 
507        name="transformation_id" 
508        value="<%=String.valueOf(transformationId)%>"
509        skip="<%=transformationId == 0%>"
510      />
511      <tbl:hidden 
512        name="callback" 
513        value="<%=callback%>" 
514        skip="<%=callback == null%>" 
515      />
516      <tbl:hidden
517        name="closed"
518        value="<%=closed == null ? "," : ","+Values.getString(closed, ",", true)+","%>"
519      />
520      <tbl:columndef 
521        id="name"
522        property="name"
523        datatype="string"
524        title="Name"
525        sortable="true" 
526        filterable="true"
527        exportable="true"
528        show="always" 
529      />
530      <tbl:columndef 
531        id="spots"
532        property="numSpots"
533        datatype="int"
534        title="Spots/Values"
535        sortable="true" 
536        filterable="true"
537        exportable="true"
538      />
539      <tbl:columndef 
540        id="reporters"
541        property="numReporters"
542        datatype="int"
543        title="Reporters"
544        sortable="true" 
545        filterable="true"
546        exportable="true"
547      />
548      <tbl:columndef 
549        id="date"
550        property="transformation.job.ended"
551        datatype="string"
552        title="Date"
553        sortable="true" 
554        filterable="true"
555        exportable="true"
556      />
557      <tbl:columndef 
558        id="plugin"
559        property="transformation.job.pluginDefinition.name"
560        datatype="string"
561        title="Plugin"
562        sortable="true" 
563        filterable="true"
564        exportable="true"
565      />
566      <tbl:columndef 
567        id="description"
568        property="description"
569        datatype="string"
570        title="Description" 
571        sortable="true" 
572        filterable="true" 
573        exportable="true"
574      />
575      <%
576      for (AnnotationType at : annotationTypes)
577      {
578        Enumeration<String, String> annotationEnum = null;
579        Formatter formatter = FormatterFactory.getTypeFormatter(sc, at.getValueType());
580        if (at.isEnumeration())
581        {
582          annotationEnum = new Enumeration<String, String>();
583          List<?> values = at.getValues();
584          for (Object value : values)
585          {
586            String encoded = formatter.format(value);
587            annotationEnum.add(encoded, encoded);
588          }
589        }
590        %>
591        <tbl:columndef 
592          id="<%="at"+at.getId()%>"
593          title="<%=HTML.encodeTags(at.getName())+" [A]"%>" 
594          property="<%="#"+at.getId()%>"
595          annotation="true"
596          datatype="<%=at.getValueType().getStringValue()%>"
597          enumeration="<%=annotationEnum%>"
598          sortable="false" 
599          filterable="true" 
600          exportable="true"
601          formatter="<%=formatter%>"
602        />
603        <%
604      }
605      %>
606      <tbl:columndef 
607        id="tools"
608        title="Tools" 
609      />
610
611      <tbl:toolbar
612        visible="<%=mode.hasToolbar()%>"
613        >
614        <tbl:button 
615          disabled="<%=createPermission ? false : true%>" 
616          image="<%=createPermission ? "new.gif" : "new_disabled.gif"%>" 
617          onclick="newItem()" 
618          title="New root bioassay set&hellip;" 
619          tooltip="<%=createPermission ? "Create a new root bioassay set" : "You do not have permission to create bioassay sets"%>" 
620          visible="<%=root == null && pluginCount.containsKey(Plugin.MainType.INTENSITY)%>"
621        />
622        <tbl:button 
623          disabled="<%=deletePermission ? false : true%>" 
624          image="<%=deletePermission ? "delete.gif" : "delete_disabled.gif"%>" 
625          title="Delete"
626          onclick="deleteItems()" 
627          tooltip="<%=deletePermission ? "Delete the selected items" : "You do not have permission to delete items"%>" 
628        />
629        <tbl:button 
630          disabled="<%=writePermission ? false : true%>" 
631          image="<%=writePermission ? "restore.gif" : "restore_disabled.gif"%>" 
632          onclick="restoreItems()" 
633          title="Restore"
634          tooltip="<%=writePermission ? "Restore the selected (deleted) items" : "You do not have permission to restore items"%>" 
635        />
636        <tbl:button 
637          image="columns.gif" 
638          onclick="configureColumns()" 
639          title="Columns&hellip;" 
640          tooltip="Show, hide and re-order columns" 
641        />
642        <tbl:button 
643          image="import.gif" 
644          onclick="runPlugin('ImportItems')" 
645          title="Import&hellip;" 
646          tooltip="Import data" 
647          visible="<%=pluginCount.containsKey(Plugin.MainType.IMPORT)%>"
648        />
649        <tbl:button 
650          image="export.gif" 
651          onclick="runPlugin('ExportItems')" 
652          title="Export&hellip;" 
653          tooltip="Export data" 
654          visible="<%=pluginCount.containsKey(Plugin.MainType.EXPORT)%>"
655        />
656        <tbl:button 
657          image="runplugin.gif" 
658          onclick="runPlugin('RunListPlugin')" 
659          title="Run plugin&hellip;" 
660          tooltip="Run a plugin" 
661          visible="<%=pluginCount.containsKey(Plugin.MainType.OTHER)%>"
662        />
663      </tbl:toolbar>
664      <tbl:data>
665        <tbl:columns>
666        <tbl:presetselector 
667          clazz="columnheader"
668          colspan="3"
669          onchange="presetOnChange()"
670        />
671        </tbl:columns>
672        <tr>
673          <tbl:header 
674            clazz="index"
675            >&nbsp;</tbl:header>
676          <tbl:header 
677            clazz="check" 
678            visible="<%=mode.hasCheck()%>"
679            ><base:icon 
680              image="check_uncheck.gif" 
681              tooltip="Check/uncheck all" 
682              onclick="Forms.checkUncheck(document.forms[formId])" style="align: left;"
683            /></tbl:header>
684          <tbl:header 
685            clazz="check" 
686            visible="<%=mode.hasRadio()%>"
687            />
688          <tbl:header 
689            clazz="icons" 
690            visible="<%=mode.hasIcons()%>"
691            >&nbsp;</tbl:header>
692          <tbl:propertyfilter />
693        </tr>
694   
695          <tbl:rows>
696          <%
697          int index = cc.getPage()*cc.getRowsPerPage();
698          int selectedItemId = cc.getId();
699          if (analysisTree != null)
700          {           
701            Iterator<Tree.Entry<BasicItem>> baas = analysisTree.entryIterator(root);
702            while (baas.hasNext())
703            {
704              Tree.Entry<BasicItem> entry = baas.next();
705              BasicItem item = entry.getNode();
706              if (item != null)
707              {
708                int level = entry.getDepth() - 1;
709                int itemId = item.getId();
710                String joustId = item.getType().name() + "_" + itemId;
711                String name = "";
712                String description = "";
713                String tooltip = mode.isSelectionMode() ?
714                    "Select this item" : "View this item" + (writePermission ? " (use CTRL, ALT or SHIFT to edit)" : "");
715                boolean removed = false;
716                Transformation t = null;
717                BioAssaySet bas = null;
718                ExtraValue xv = null;
719                PluginDefinition plugin = null;
720                Job job = null;
721                String prefix = "";
722                ItemContext ccc = null;
723                String view = "";
724                String onClick = "";
725                Item itemType = item.getType();
726                if (itemType == Item.TRANSFORMATION)
727                {
728                  t = (Transformation)item;
729                  removed = t.isRemoved();
730                  prefix = "T:";
731                  ccc = tc;
732                  onClick = "transformationOnClick";
733                  name = HTML.encodeTags(t.getName());
734                  description = HTML.encodeTags(t.getDescription());
735                  try
736                  {
737                    job = t.getJob();
738                    plugin = job.getPluginDefinition();
739                  }
740                  catch (Throwable ex)
741                  {}
742                }
743                else if (itemType == Item.BIOASSAYSET)
744                {
745                  bas = (BioAssaySet)item;
746                  removed = bas.isRemoved();
747                  ccc = cc;
748                  onClick = "bioAssaySetOnClick";
749                  name = HTML.encodeTags(bas.getName());
750                  description = HTML.encodeTags(bas.getDescription());
751                }
752                else if (itemType == Item.EXTRAVALUE)
753                {
754                  xv = (ExtraValue)item;
755                  prefix = "X:";
756                  removed = false;
757                  ccc = xvc;
758                  onClick = "extraValueOnClick";
759                  ExtraValueType xvType = xv.getExtraValueType();
760                  name = HTML.encodeTags(xvType.getName());
761                  description = HTML.encodeTags(xvType.getDescription());
762                  try
763                  {
764                    job = xv.getJob();
765                    plugin = job.getPluginDefinition();
766                  }
767                  catch (Throwable ex)
768                  {}
769                }
770               
771                index++;
772                numListed++;
773
774                %>
775                <tbl:row
776                  id="<%="row."+joustId%>"
777                  >
778                  <tbl:header 
779                    clazz="index"
780                    ><%=index%></tbl:header>
781                  <tbl:header 
782                    clazz="check" 
783                    visible="<%=mode.hasCheck()%>"
784                    ><input 
785                        type="checkbox" 
786                        name="<%=prefix+itemId%>" 
787                        value="<%=itemId%>" 
788                        title="<%=name%>" 
789                        <%=ccc.getSelected().contains(itemId) ? "checked" : ""%>
790                      ></tbl:header>
791                  <tbl:header 
792                    clazz="check" 
793                    visible="<%=mode.hasRadio()%>"
794                    ><input 
795                        type="radio" 
796                        name="item_id" 
797                        value="<%=itemId%>" 
798                        title="<%=name%>" 
799                        <%=selectedItemId == itemId ? "checked" : ""%>
800                      ></tbl:header>
801                  <tbl:header 
802                    clazz="icons" 
803                    visible="<%=mode.hasIcons()%>"
804                    ><base:icon 
805                      image="deleted.gif" 
806                      tooltip="This item has been scheduled for deletion" 
807                      visible="<%=removed%>"
808                    />&nbsp;</tbl:header>
809                 
810                  <tbl:cell clazz="joustcell" column="name">
811                    <div id="tree.<%=joustId%>" class="link" 
812                      onclick="<%=onClick%>(<%=writePermission ? "event" : null%>, <%=itemId%>)" 
813                      title="<%=tooltip%>"><%=name%>
814                    </div>
815                  </tbl:cell>
816                  <%
817                  if (t != null)
818                  {
819                    %>
820                    <tbl:cell column="spots">&nbsp;</tbl:cell>
821                    <tbl:cell column="reporters">&nbsp;</tbl:cell>
822                    <tbl:cell column="tools">
823                      <nobr>
824                      <%
825                      if (createPermission && job != null && plugin != null && plugin.isInteractive())
826                      {
827                        %>
828                        <a href="javascript:copyJob(<%=job.getId()%>)" 
829                          title="Copy this transformation"><img 
830                          src="../../../images/copy.gif" border="0"></a>
831                        <%
832                      }
833                      %>
834                      </nobr>
835                    </tbl:cell>
836                    <%
837                  }
838                  if (bas != null)
839                  {
840                    %>
841                    <tbl:cell column="spots"><%=bas.getNumSpots()%></tbl:cell>
842                    <tbl:cell column="reporters"><%=bas.getNumReporters()%></tbl:cell>
843                    <tbl:cell column="date">&nbsp;</tbl:cell>
844                    <tbl:cell column="plugin">&nbsp;</tbl:cell>
845                    <%
846                    AnnotationSet as = bas.isAnnotated() ? bas.getAnnotationSet() : null;
847                    if (as != null)
848                    {
849                      for (AnnotationType at : annotationTypes)
850                      {
851                        if (as.hasAnnotation(at))
852                        {
853                          %>
854                          <tbl:cell column="<%="at"+at.getId()%>"
855                            ><tbl:cellvalue 
856                            list="<%=as.getAnnotation(at).getValues()%>" 
857                          /></tbl:cell>
858                          <%
859                        }
860                      }
861                    }
862                    %>
863                    <tbl:cell column="tools">
864                      <nobr>
865                      <a href="javascript:openPlotTool(<%=itemId%>)" 
866                        title="A simple plot tool"><img 
867                        src="../../../images/plotter.gif" border="0"></a>
868                      <a href="javascript:openExperimentExplorer(<%=itemId%>)"
869                        title="Experiment explorer"><img
870                        src="../../../images/explorer.png" border="0"></a>
871                      <a href="javascript:runExportPlugin(<%=itemId%>)"
872                        title="Export data"><img 
873                        src="../../../images/export.gif" border="0"></a>
874                      <%
875                      if (createPermission)
876                      {
877                        %>
878                        <a href="javascript:filter(<%=itemId%>)" 
879                          title="Create a filtered bioassay set"><img 
880                          src="../../../images/filter.gif" border="0"></a>
881                        <a href="javascript:runAnalysisPlugin(<%=itemId%>)" title="Run an analysis plugin"><img 
882                          src="../../../images/runplugin.gif" border="0"></a>
883                        <%
884                      }
885                      %>
886                      </nobr>
887                    </tbl:cell>
888                    <%
889                  }
890                  if (xv != null)
891                  {
892                    %>
893                    <tbl:cell column="spots"><%=xv.getNumValues()%></tbl:cell>
894                    <tbl:cell column="reporters">&nbsp;</tbl:cell>
895                    <tbl:cell column="tools">
896                      <nobr>
897                      <%
898                      if (createPermission && job != null && plugin != null && plugin.isInteractive())
899                      {
900                        %>
901                        <a href="javascript:copyJob(<%=job.getId()%>)" 
902                          title="Copy this extra value"><img 
903                          src="../../../images/copy.gif" border="0"></a>
904                        <%
905                      }
906                      %>
907                      </nobr>
908                    </tbl:cell>
909                    <%
910                  }
911                  %>
912                  <tbl:cell column="date"><%=job == null ? "" : dateTimeFormatter.format(job.getEnded())%></tbl:cell>
913                  <tbl:cell column="plugin"><%=plugin == null ? "" : Base.getLinkedName(ID, plugin, false, true)%></tbl:cell>
914                  <tbl:cell column="description"><%=description%></tbl:cell>
915                </tbl:row>
916                <%
917              }
918            }
919          }
920          %>
921          </tbl:rows>
922        </tbl:data>
923      <%
924      if (numListed == 0)
925      {
926        %>
927        <tbl:panel>No bioassay sets or transformations where found.</tbl:panel>
928        <%
929      }
930      %>
931    </tbl:table>
932
933
934    <script language="JavaScript">
935    initTree();
936    </script>
937  </base:body>
938  </base:page>
939  <%
940}
941finally
942{
943  if (dc != null) dc.close();
944}
945%>
Note: See TracBrowser for help on using the repository browser.