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

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

Fixes #608: Delete 'removed' items directly from list views

  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Id
File size: 29.8 KB
Line 
1<%-- $Id: analysis_tree.jsp 4003 2007-11-26 13:22:16Z 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  final ItemQuery<Transformation> transformationQuery = experiment.getTransformations();
256  transformationQuery.include(cc.getInclude());
257  Map<Plugin.MainType, Integer> pluginCount = PluginDefinition.countPlugins(dc, guiContext);
258  annotationTypes = annotationTypeQuery.list(dc);
259  try
260  {
261    analysisTree = getAnalysisTree(dc, query, transformationQuery);
262  }
263  catch (Throwable t)
264  {
265    cc.setMessage(t.getMessage());
266  }
267  // Contains the ID:s of the bioassaysets that are closed in the tree
268  Collection<String> closed = (Collection<String>)cc.getObject("closed");
269  int numListed = 0;
270  %>
271  <base:page type="include">
272  <base:body>
273    <script language="JavaScript">
274    var submitPage = '<%=transformationId != 0 ? "../bioassaysets/index.jsp" : "index.jsp"%>';
275    var formId = 'bioAssaySets';
276    function newItem()
277    {
278      Main.openPopup('index.jsp?ID=<%=ID%>&cmd=NewItem&experiment_id=<%=experimentId%>', 'NewBioAssaySet', 740, 540);
279    }
280    function editBioAssaySet(itemId)
281    {
282      Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', itemId, true);
283    }
284    function viewBioAssaySet(itemId)
285    {
286      Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', itemId, false);
287    }
288    function bioAssaySetOnClick(evt, itemId)
289    {
290      Table.itemOnClick(formId, evt, itemId, '<%=mode.getName()%>', viewBioAssaySet, editBioAssaySet, returnSelected);
291    }
292    function viewTransformation(itemId)
293    {
294      Main.viewOrEditItem('<%=ID%>', 'TRANSFORMATION', itemId, false);
295    }
296    function editTransformation(itemId)
297    {
298      Main.viewOrEditItem('<%=ID%>', 'TRANSFORMATION', itemId, true);
299    }
300    function transformationOnClick(evt, itemId)
301    {
302      Table.itemOnClick(formId, evt, itemId, '<%=mode.getName()%>', viewTransformation, editTransformation, returnSelected);
303    }
304    function viewExtraValue(itemId)
305    {
306      Main.viewOrEditItem('<%=ID%>', 'EXTRAVALUE', itemId, false);
307    }
308    function editExtraValue(itemId)
309    {
310      Main.viewOrEditItem('<%=ID%>', 'EXTRAVALUE', itemId, true);
311    }
312    function extraValueOnClick(evt, itemId)
313    {
314      Table.itemOnClick(formId, evt, itemId, '<%=mode.getName()%>', viewExtraValue, editExtraValue, returnSelected);
315    }
316    function deleteItems()
317    {
318      var frm = document.forms[formId];
319      if (Forms.numChecked(frm) == 0)
320      {
321        alert('Please select at least one item in the list');
322        return;
323      }
324      if (Forms.numChecked(frm, /^X:/) > 0)
325      {
326        if (!confirm('Extra values are deleted immediately and cannot be restored. Do you want to continue?'))
327        {
328          return;
329        }
330      }
331      frm.action = submitPage;
332      frm.cmd.value = 'DeleteItems';
333      frm.submit();
334    }
335    function restoreItems()
336    {
337      var frm = document.forms[formId];
338      if (Forms.numChecked(frm) == 0)
339      {
340        alert('Please select at least one item in the list');
341        return;
342      }
343      frm.action = submitPage;
344      frm.cmd.value = 'RestoreItems';
345      frm.submit();
346    }
347    function deleteItemPermanently(itemType, itemId)
348    {
349      Main.deleteItemPermanently('<%=ID%>', true, itemType, itemId);
350    }
351    function configureColumns()
352    {
353      Table.configureColumns('<%=ID%>', formId, '<%=itemType.name()%>', '<%=(String)cc.getObject("defaultColumns")%>');
354    }
355    function runPlugin(cmd)
356    {
357      Table.submitToPopup(formId, cmd, 740, 540);
358    }
359    function filter(itemId)
360    {
361      Main.openPopup('../bioassaysets/index.jsp?ID=<%=ID%>&cmd=NewFilteredBioAssaySet&experiment_id=<%=experimentId%>&item_id='+itemId, 'FilterBioAssaySet', 740, 540);
362    }
363    function openPlotTool(itemId)
364    {
365      Main.openPopup('../plotter/index.jsp?ID=<%=ID%>&bioassayset_id='+itemId, 'Plotter', 1000, 700);
366    }
367    function openExperimentExplorer(itemId)
368    {
369      location.href = '../explorer/view/index.jsp?ID=<%=ID%>&bioassayset_id='+itemId;
370    }
371    function launchMeV(itemId)
372    {
373      location.href = '../../../plugins/org/tigr/microarray/mev/launch_mev.jsp?ID=<%=ID%>&bioassayset_id='+itemId;
374    }
375    function runAnalysisPlugin(itemId)
376    {
377      Main.openPopup('../bioassaysets/index.jsp?ID=<%=ID%>&cmd=RunAnalysisPlugin&experiment_id=<%=experimentId%>&item_id='+itemId, 'RunPlugin', 740, 540);
378    }
379    function runExportPlugin(itemId)
380    {
381      Main.openPopup('../bioassaysets/index.jsp?ID=<%=ID%>&cmd=ExportItem&experiment_id=<%=experimentId%>&item_id='+itemId, 'Export', 740, 540);
382    }
383    function copyJob(jobId)
384    {
385      var url = '../../../common/plugin/index.jsp?ID=<%=ID%>';
386      url += '&cmd=CopyJob&job_id='+jobId;
387      url += '&item_type=BIOASSAYSET&context_type=LIST'
388      Main.openPopup(url, 'CopyJob', 740, 540);
389    }
390    function returnSelected()
391    {
392      Table.returnSelected(formId, <%=callback != null ? "window.opener."+callback : "null" %>);
393      window.close();
394    }
395    function presetOnChange()
396    {
397      Table.presetOnChange('<%=ID%>', formId, '<%=itemType.name()%>', '<%=(String)cc.getObject("defaultColumns")%>');
398    }
399    function initTree()
400    {
401      var bigDir = getRoot()+'images/joust/big/';
402      IconStore.init(bigDir, 18, 22);
403      IconStore.addIcon('BioAssaySet', bigDir + 'bioassayset.gif', 18, 22);
404      IconStore.addIcon('Transformation', bigDir + 'transformation.gif', 18, 22);
405      IconStore.addIcon('Filter', bigDir + 'filter.gif', 18, 22);
406      IconStore.addIcon('ExtraValue', bigDir + 'extravalue.gif', 18, 22);
407
408      JoustMenu.toggle = function(menuItemIndex)
409      {
410        var menuItem = this.menuItems[menuItemIndex];
411        if (!menuItem) return;
412        // Switch the open/closed status and hide or show the children
413        menuItem.isOpen = !menuItem.isOpen;
414        if (menuItem.isOpen)
415        {
416          this.showChildren(menuItemIndex);
417          var frm = document.forms[formId];
418          frm.closed.value = frm.closed.value.replace(','+menuItem.externalId+',', ',');
419        }
420        else
421        {
422          this.hideChildren(menuItemIndex);
423          var frm = document.forms[formId];
424          frm.closed.value += menuItem.externalId+',';
425        }
426        // alert(document.forms[formId].closed.value);
427        this.updateIconsAndText(menuItemIndex);
428      }
429     
430      JoustMenu.drawMenuItems = function(firstIndex, indentString)
431      {
432        var menuItem = this.menuItems[firstIndex];
433        while (menuItem)
434        {
435          var html = menuItem.draw(indentString);
436          var padIcon = IconStore.getIcon(menuItem.noOutlineIcon == true ? null : menuItem.nextItemIndex == -1 ? 'iconBlank' : 'iconLine');
437          var padHtml = padIcon == null ? '' : padIcon.getImgTag();
438         
439          var menuDiv = document.getElementById('tree.'+menuItem.externalId);
440          menuDiv.innerHTML = html;
441         
442          if (menuItem.firstChildIndex != -1)
443          {
444            this.drawMenuItems(menuItem.firstChildIndex, indentString+padHtml);
445          }
446          if (!menuItem.isOpen)
447          {
448            this.hideChildren(menuItem.index);
449          }
450          menuItem = this.menuItems[menuItem.nextItemIndex];
451        }
452        return '';
453      }
454
455      JoustMenu.hideChildren = function(menuItemIndex)
456      {
457        var menuItem = this.menuItems[menuItemIndex];
458        if (menuItem)
459        {
460          var firstChildIndex = menuItem.firstChildIndex;
461          var child = this.menuItems[firstChildIndex];
462          while (child)
463          {
464            var e = document.getElementById('row.'+child.externalId);
465            e.style.display = 'none';
466            this.hideChildren(child.index);
467            child = this.menuItems[child.nextItemIndex];
468          }
469        }
470      }
471     
472      JoustMenu.showChildren = function(menuItemIndex)
473      {
474        var menuItem = this.menuItems[menuItemIndex];
475        if (menuItem)
476        {
477          var firstChildIndex = menuItem.firstChildIndex;
478          var child = this.menuItems[firstChildIndex];
479          while (child)
480          {
481            var e = document.getElementById('row.'+child.externalId);
482            e.style.display = Browser.isIE ? 'block' : 'table-row';
483            if (child.isOpen)
484            {
485              this.showChildren(child.index);
486            }
487            child = this.menuItems[child.nextItemIndex];
488          }
489        }
490      }
491
492      <%=analysisTree == null ? "" : generateTree(analysisTree, root, root, closed)%>
493      JoustMenu.draw('joust');
494     
495    }
496    </script>
497 
498
499    <%
500    if (cc.getMessage() != null)
501    {
502      %>
503      <div class="error"><%=cc.getMessage()%></div>
504      <%
505      cc.setMessage(null);
506    }
507    %>
508    <tbl:table 
509      id="bioAssaySets" 
510      clazz="itemlist" 
511      columns="<%=cc.getSetting("columns")%>"
512      sortby="<%=cc.getSortProperty()%>" 
513      direction="<%=cc.getSortDirection()%>"
514      title="<%=title%>"
515      action="<%=transformationId != 0 ? "../bioassaysets/index.jsp" : "index.jsp"%>"
516      sc="<%=sc%>"
517      item="<%=itemType%>"
518      >
519      <tbl:hidden 
520        name="mode" 
521        value="<%=mode.getName()%>" 
522      />
523      <tbl:hidden 
524        name="experiment_id" 
525        value="<%=String.valueOf(experimentId)%>" 
526      />
527      <tbl:hidden 
528        name="item_id" 
529        value="<%=String.valueOf(bioAssaySetId)%>"
530        skip="<%=bioAssaySetId == 0%>"
531      />
532      <tbl:hidden 
533        name="transformation_id" 
534        value="<%=String.valueOf(transformationId)%>"
535        skip="<%=transformationId == 0%>"
536      />
537      <tbl:hidden 
538        name="callback" 
539        value="<%=callback%>" 
540        skip="<%=callback == null%>" 
541      />
542      <tbl:hidden
543        name="closed"
544        value="<%=closed == null ? "," : ","+Values.getString(closed, ",", true)+","%>"
545      />
546      <tbl:columndef 
547        id="name"
548        property="name"
549        datatype="string"
550        title="Name"
551        sortable="true" 
552        filterable="true"
553        exportable="true"
554        show="always" 
555      />
556      <tbl:columndef 
557        id="spots"
558        property="numSpots"
559        datatype="int"
560        title="Spots/Values"
561        sortable="true" 
562        filterable="true"
563        exportable="true"
564      />
565      <tbl:columndef 
566        id="reporters"
567        property="numReporters"
568        datatype="int"
569        title="Reporters"
570        sortable="true" 
571        filterable="true"
572        exportable="true"
573      />
574      <tbl:columndef 
575        id="date"
576        property="transformation.job.ended"
577        datatype="string"
578        title="Date"
579        sortable="true" 
580        filterable="true"
581        exportable="true"
582      />
583      <tbl:columndef 
584        id="plugin"
585        property="transformation.job.pluginDefinition.name"
586        datatype="string"
587        title="Plugin"
588        sortable="true" 
589        filterable="true"
590        exportable="true"
591      />
592      <tbl:columndef 
593        id="description"
594        property="description"
595        datatype="string"
596        title="Description" 
597        sortable="true" 
598        filterable="true" 
599        exportable="true"
600      />
601      <%
602      for (AnnotationType at : annotationTypes)
603      {
604        Enumeration<String, String> annotationEnum = null;
605        Formatter formatter = FormatterFactory.getTypeFormatter(sc, at.getValueType());
606        if (at.isEnumeration())
607        {
608          annotationEnum = new Enumeration<String, String>();
609          List<?> values = at.getValues();
610          for (Object value : values)
611          {
612            String encoded = formatter.format(value);
613            annotationEnum.add(encoded, encoded);
614          }
615        }
616        %>
617        <tbl:columndef 
618          id="<%="at"+at.getId()%>"
619          title="<%=HTML.encodeTags(at.getName())+" [A]"%>" 
620          property="<%="#"+at.getId()%>"
621          annotation="true"
622          datatype="<%=at.getValueType().getStringValue()%>"
623          enumeration="<%=annotationEnum%>"
624          sortable="false" 
625          filterable="true" 
626          exportable="true"
627          formatter="<%=formatter%>"
628        />
629        <%
630      }
631      %>
632      <tbl:columndef 
633        id="tools"
634        title="Tools" 
635      />
636
637      <tbl:toolbar
638        visible="<%=mode.hasToolbar()%>"
639        >
640        <tbl:button 
641          disabled="<%=createPermission ? false : true%>" 
642          image="<%=createPermission ? "new.gif" : "new_disabled.gif"%>" 
643          onclick="newItem()" 
644          title="New root bioassay set&hellip;" 
645          tooltip="<%=createPermission ? "Create a new root bioassay set" : "You do not have permission to create bioassay sets"%>" 
646          visible="<%=root == null && pluginCount.containsKey(Plugin.MainType.INTENSITY)%>"
647        />
648        <tbl:button 
649          disabled="<%=deletePermission ? false : true%>" 
650          image="<%=deletePermission ? "delete.gif" : "delete_disabled.gif"%>" 
651          title="Delete"
652          onclick="deleteItems()" 
653          tooltip="<%=deletePermission ? "Delete the selected items" : "You do not have permission to delete items"%>" 
654        />
655        <tbl:button 
656          disabled="<%=writePermission ? false : true%>" 
657          image="<%=writePermission ? "restore.gif" : "restore_disabled.gif"%>" 
658          onclick="restoreItems()" 
659          title="Restore"
660          tooltip="<%=writePermission ? "Restore the selected (deleted) items" : "You do not have permission to restore items"%>" 
661        />
662        <tbl:button 
663          image="columns.gif" 
664          onclick="configureColumns()" 
665          title="Columns&hellip;" 
666          tooltip="Show, hide and re-order columns" 
667        />
668        <tbl:button 
669          image="import.gif" 
670          onclick="runPlugin('ImportItems')" 
671          title="Import&hellip;" 
672          tooltip="Import data" 
673          visible="<%=pluginCount.containsKey(Plugin.MainType.IMPORT)%>"
674        />
675        <tbl:button 
676          image="export.gif" 
677          onclick="runPlugin('ExportItems')" 
678          title="Export&hellip;" 
679          tooltip="Export data" 
680          visible="<%=pluginCount.containsKey(Plugin.MainType.EXPORT)%>"
681        />
682        <tbl:button 
683          image="runplugin.gif" 
684          onclick="runPlugin('RunListPlugin')" 
685          title="Run plugin&hellip;" 
686          tooltip="Run a plugin" 
687          visible="<%=pluginCount.containsKey(Plugin.MainType.OTHER)%>"
688        />
689      </tbl:toolbar>
690      <tbl:data>
691        <tbl:columns>
692        <tbl:presetselector 
693          clazz="columnheader"
694          colspan="3"
695          onchange="presetOnChange()"
696        />
697        </tbl:columns>
698        <tr>
699          <tbl:header 
700            clazz="index"
701            >&nbsp;</tbl:header>
702          <tbl:header 
703            clazz="check" 
704            visible="<%=mode.hasCheck()%>"
705            ><base:icon 
706              image="check_uncheck.gif" 
707              tooltip="Check/uncheck all" 
708              onclick="Forms.checkUncheck(document.forms[formId])" style="align: left;"
709            /></tbl:header>
710          <tbl:header 
711            clazz="check" 
712            visible="<%=mode.hasRadio()%>"
713            />
714          <tbl:header 
715            clazz="icons" 
716            visible="<%=mode.hasIcons()%>"
717            >&nbsp;</tbl:header>
718          <tbl:propertyfilter />
719        </tr>
720   
721          <tbl:rows>
722          <%
723          int index = cc.getPage()*cc.getRowsPerPage();
724          int selectedItemId = cc.getId();
725          if (analysisTree != null)
726          {           
727            Iterator<Tree.Entry<BasicItem>> baas = analysisTree.entryIterator(root);
728            while (baas.hasNext())
729            {
730              Tree.Entry<BasicItem> entry = baas.next();
731              BasicItem item = entry.getNode();
732              if (item != null)
733              {
734                int level = entry.getDepth() - 1;
735                int itemId = item.getId();
736                String joustId = item.getType().name() + "_" + itemId;
737                String name = "";
738                String description = "";
739                String tooltip = mode.isSelectionMode() ?
740                    "Select this item" : "View this item" + (writePermission ? " (use CTRL, ALT or SHIFT to edit)" : "");
741                String deletePermanently = "deleteItemPermanently('" + item.getType().name() + "', "+itemId+")";
742                boolean removed = false;
743                Transformation t = null;
744                BioAssaySet bas = null;
745                ExtraValue xv = null;
746                PluginDefinition plugin = null;
747                Job job = null;
748                String prefix = "";
749                ItemContext ccc = null;
750                String view = "";
751                String onClick = "";
752                Item itemType = item.getType();
753                if (itemType == Item.TRANSFORMATION)
754                {
755                  t = (Transformation)item;
756                  removed = t.isRemoved();
757                  prefix = "T:";
758                  ccc = tc;
759                  onClick = "transformationOnClick";
760                  name = HTML.encodeTags(t.getName());
761                  description = HTML.encodeTags(t.getDescription());
762                  try
763                  {
764                    job = t.getJob();
765                    plugin = job.getPluginDefinition();
766                  }
767                  catch (Throwable ex)
768                  {}
769                }
770                else if (itemType == Item.BIOASSAYSET)
771                {
772                  bas = (BioAssaySet)item;
773                  removed = bas.isRemoved();
774                  ccc = cc;
775                  onClick = "bioAssaySetOnClick";
776                  name = HTML.encodeTags(bas.getName());
777                  description = HTML.encodeTags(bas.getDescription());
778                }
779                else if (itemType == Item.EXTRAVALUE)
780                {
781                  xv = (ExtraValue)item;
782                  prefix = "X:";
783                  removed = false;
784                  ccc = xvc;
785                  onClick = "extraValueOnClick";
786                  try
787                  {
788                    ExtraValueType xvType = xv.getExtraValueType();
789                    name = HTML.encodeTags(xvType.getName());
790                    description = HTML.encodeTags(xvType.getDescription());
791                  }
792                  catch (PermissionDeniedException ex)
793                  {
794                    name = xv.getValueType().toString();
795                    description = "";
796                  }
797                  try
798                  {
799                    job = xv.getJob();
800                    plugin = job.getPluginDefinition();
801                  }
802                  catch (Throwable ex)
803                  {}
804                }
805               
806                index++;
807                numListed++;
808
809                %>
810                <tbl:row
811                  id="<%="row."+joustId%>"
812                  >
813                  <tbl:header 
814                    clazz="index"
815                    ><%=index%></tbl:header>
816                  <tbl:header 
817                    clazz="check" 
818                    visible="<%=mode.hasCheck()%>"
819                    ><input 
820                        type="checkbox" 
821                        name="<%=prefix+itemId%>" 
822                        value="<%=itemId%>" 
823                        title="<%=name%>" 
824                        <%=ccc.getSelected().contains(itemId) ? "checked" : ""%>
825                      ></tbl:header>
826                  <tbl:header 
827                    clazz="check" 
828                    visible="<%=mode.hasRadio()%>"
829                    ><input 
830                        type="radio" 
831                        name="item_id" 
832                        value="<%=itemId%>" 
833                        title="<%=name%>" 
834                        <%=selectedItemId == itemId ? "checked" : ""%>
835                      ></tbl:header>
836                  <tbl:header 
837                    clazz="icons" 
838                    visible="<%=mode.hasIcons()%>"
839                    ><base:icon 
840                      image="<%=deletePermission ? "deleted.gif" : "deleted_disabled.gif"%>"
841                      onclick="<%=deletePermission ? deletePermanently : null%>"
842                      tooltip="This item has been scheduled for deletion" 
843                      visible="<%=removed%>"
844                    />&nbsp;</tbl:header>
845                 
846                  <tbl:cell clazz="joustcell" column="name">
847                    <div id="tree.<%=joustId%>" class="link" 
848                      onclick="<%=onClick%>(<%=writePermission ? "event" : null%>, <%=itemId%>)" 
849                      title="<%=tooltip%>"><%=name%>
850                    </div>
851                  </tbl:cell>
852                  <%
853                  if (t != null)
854                  {
855                    %>
856                    <tbl:cell column="spots">&nbsp;</tbl:cell>
857                    <tbl:cell column="reporters">&nbsp;</tbl:cell>
858                    <tbl:cell column="tools">
859                      <nobr>
860                      <%
861                      if (createPermission && job != null && plugin != null && plugin.isInteractive())
862                      {
863                        %>
864                        <a href="javascript:copyJob(<%=job.getId()%>)" 
865                          title="Copy this transformation"><img 
866                          src="../../../images/copy.gif" border="0"></a>
867                        <%
868                      }
869                      %>
870                      </nobr>
871                    </tbl:cell>
872                    <%
873                  }
874                  if (bas != null)
875                  {
876                    %>
877                    <tbl:cell column="spots"><%=bas.getNumSpots()%></tbl:cell>
878                    <tbl:cell column="reporters"><%=bas.getNumReporters()%></tbl:cell>
879                    <tbl:cell column="date">&nbsp;</tbl:cell>
880                    <tbl:cell column="plugin">&nbsp;</tbl:cell>
881                    <%
882                    AnnotationSet as = bas.isAnnotated() ? bas.getAnnotationSet() : null;
883                    if (as != null)
884                    {
885                      for (AnnotationType at : annotationTypes)
886                      {
887                        if (as.hasAnnotation(at))
888                        {
889                          %>
890                          <tbl:cell column="<%="at"+at.getId()%>"
891                            ><tbl:cellvalue 
892                            list="<%=as.getAnnotation(at).getValues()%>" 
893                          /></tbl:cell>
894                          <%
895                        }
896                      }
897                    }
898                    %>
899                    <tbl:cell column="tools">
900                      <nobr>
901                      <a href="javascript:openPlotTool(<%=itemId%>)" 
902                        title="A simple plot tool"><img 
903                        src="../../../images/plotter.gif" border="0"></a>
904                      <a href="javascript:openExperimentExplorer(<%=itemId%>)"
905                        title="Experiment explorer"><img
906                        src="../../../images/explorer.png" border="0"></a>
907                      <a href="javascript:launchMeV(<%=itemId%>)"
908                        title="MeV: MultiExperiment Viewer"><img
909                        src="../../../images/tm4.png" border="0"></a>
910                      <a href="javascript:runExportPlugin(<%=itemId%>)"
911                        title="Export data"><img 
912                        src="../../../images/export.gif" border="0"></a>
913                      <%
914                      if (createPermission)
915                      {
916                        %>
917                        <a href="javascript:filter(<%=itemId%>)" 
918                          title="Create a filtered bioassay set"><img 
919                          src="../../../images/filter.gif" border="0"></a>
920                        <a href="javascript:runAnalysisPlugin(<%=itemId%>)" title="Run an analysis plugin"><img 
921                          src="../../../images/runplugin.gif" border="0"></a>
922                        <%
923                      }
924                      %>
925                      </nobr>
926                    </tbl:cell>
927                    <%
928                  }
929                  if (xv != null)
930                  {
931                    %>
932                    <tbl:cell column="spots"><%=xv.getNumValues()%></tbl:cell>
933                    <tbl:cell column="reporters">&nbsp;</tbl:cell>
934                    <tbl:cell column="tools">
935                      <nobr>
936                      <%
937                      if (createPermission && job != null && plugin != null && plugin.isInteractive())
938                      {
939                        %>
940                        <a href="javascript:copyJob(<%=job.getId()%>)" 
941                          title="Copy this extra value"><img 
942                          src="../../../images/copy.gif" border="0"></a>
943                        <%
944                      }
945                      %>
946                      </nobr>
947                    </tbl:cell>
948                    <%
949                  }
950                  %>
951                  <tbl:cell column="date"><%=job == null ? "" : dateTimeFormatter.format(job.getEnded())%></tbl:cell>
952                  <tbl:cell column="plugin"><%=plugin == null ? "" : Base.getLinkedName(ID, plugin, false, true)%></tbl:cell>
953                  <tbl:cell column="description"><%=description%></tbl:cell>
954                </tbl:row>
955                <%
956              }
957            }
958          }
959          %>
960          </tbl:rows>
961        </tbl:data>
962      <%
963      if (numListed == 0)
964      {
965        %>
966        <tbl:panel>No bioassay sets or transformations were found.</tbl:panel>
967        <%
968      }
969      %>
970    </tbl:table>
971
972
973    <script language="JavaScript">
974    initTree();
975    </script>
976  </base:body>
977  </base:page>
978  <%
979}
980finally
981{
982  if (dc != null) dc.close();
983}
984%>
Note: See TracBrowser for help on using the repository browser.