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

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

Fixes #863: Displayed rows in bioassay set table limited to 60

Was caused by default limit for a query is 30 items. The bioassayset tree displays 30 bioassaysets and 30 transformations.

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