source: trunk/www/views/experiments/view_experiment.jsp @ 6962

Last change on this file since 6962 was 6962, checked in by Nicklas Nordborg, 6 years ago

References #1941: Store experimental factor values as part experiments

Using a different "Edit" icon for cloned annotations that are out-of-sync.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 23.0 KB
Line 
1<%-- $Id: view_experiment.jsp 6962 2015-10-01 12:29:38Z nicklas $
2  ------------------------------------------------------------------
3  Copyright (C) 2006 Jari Häkkinen, Nicklas Nordborg, Martin Svensson, Gregory Vincic
4  Copyright (C) 2007 Nicklas Nordborg, Martin Svensson
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 3
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 BASE. If not, see <http://www.gnu.org/licenses/>.
21  ------------------------------------------------------------------
22
23  @author Nicklas
24  @version 2.0
25--%>
26<%@ page pageEncoding="UTF-8" session="false"
27  import="net.sf.basedb.core.SessionControl"
28  import="net.sf.basedb.core.DbControl"
29  import="net.sf.basedb.core.Item"
30  import="net.sf.basedb.core.ItemContext"
31  import="net.sf.basedb.core.Permission"
32  import="net.sf.basedb.core.Experiment"
33  import="net.sf.basedb.core.VirtualDb"
34  import="net.sf.basedb.core.RawBioAssay"
35  import="net.sf.basedb.core.RootRawBioAssay"
36  import="net.sf.basedb.core.AnnotationType"
37  import="net.sf.basedb.core.AnnotationSet"
38  import="net.sf.basedb.core.Annotation"
39  import="net.sf.basedb.core.Annotatable"
40  import="net.sf.basedb.core.Unit"
41  import="net.sf.basedb.core.Type"
42  import="net.sf.basedb.core.User"
43  import="net.sf.basedb.core.Group"
44  import="net.sf.basedb.core.VirtualTable"
45  import="net.sf.basedb.core.ItemQuery"
46  import="net.sf.basedb.core.ItemResultList"
47  import="net.sf.basedb.core.ItemResultIterator"
48  import="net.sf.basedb.core.Include"
49  import="net.sf.basedb.core.MultiPermissions"
50  import="net.sf.basedb.core.PermissionDeniedException"
51  import="net.sf.basedb.core.PluginDefinition"
52  import="net.sf.basedb.core.plugin.GuiContext"
53  import="net.sf.basedb.core.plugin.Plugin"
54  import="net.sf.basedb.core.Project"
55  import="net.sf.basedb.core.query.Orders"
56  import="net.sf.basedb.core.query.Hql"
57  import="net.sf.basedb.clients.web.Base"
58  import="net.sf.basedb.clients.web.PermissionUtil"
59  import="net.sf.basedb.clients.web.ChangeHistoryUtil"
60  import="net.sf.basedb.clients.web.util.HTML"
61  import="net.sf.basedb.util.Values"
62  import="net.sf.basedb.core.snapshot.SnapshotManager"
63  import="net.sf.basedb.core.snapshot.AnnotationSetSnapshot"
64  import="net.sf.basedb.core.snapshot.AnnotationSnapshot"
65  import="net.sf.basedb.core.snapshot.AnnotationTypeFilter"
66  import="net.sf.basedb.util.formatter.Formatter"
67  import="net.sf.basedb.clients.web.formatter.FormatterFactory"
68  import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
69  import="net.sf.basedb.clients.web.extensions.JspContext"
70  import="net.sf.basedb.clients.web.extensions.renderer.PrefixSuffixRenderer"
71  import="net.sf.basedb.clients.web.extensions.toolbar.ToolbarUtil"
72  import="net.sf.basedb.util.extensions.ExtensionsInvoker"
73  import="java.util.Collections"
74  import="java.util.Date"
75  import="java.util.Map"
76  import="java.util.HashMap"
77  import="java.util.Set"
78  import="java.util.HashSet"
79  import="java.util.List"
80  import="java.util.LinkedList"
81  import="java.util.Date"
82  import="org.json.simple.JSONObject"
83  import="org.json.simple.JSONArray"
84%>
85<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
86<%@ taglib prefix="tbl" uri="/WEB-INF/table.tld" %>
87<%@ taglib prefix="t" uri="/WEB-INF/tab.tld" %>
88<%@ taglib prefix="p" uri="/WEB-INF/path.tld" %>
89<%@ taglib prefix="ext" uri="/WEB-INF/extensions.tld" %>
90<%!
91  private static final Item itemType = Item.EXPERIMENT;
92  private static final GuiContext guiContext = new GuiContext(itemType, GuiContext.Type.ITEM);
93%>
94<%
95final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
96final String ID = sc.getId();
97final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, null);
98final int itemId = cc.getId();
99final String tab = Values.getString(request.getParameter("tab"), "properties");
100final float scale = Base.getScale(sc);
101final String root = request.getContextPath();
102final DbControl dc = sc.newDbControl();
103try
104{
105  Formatter<Date> dateFormatter = FormatterFactory.getDateFormatter(sc);
106  Map<Plugin.MainType, Integer> pluginCount = PluginDefinition.countPlugins(dc, guiContext);
107
108  String title = null;
109  Experiment experiment = Experiment.getById(dc, itemId);
110  VirtualDb virtualDb = experiment.getVirtualDb();
111 
112  final boolean writePermission = experiment.hasPermission(Permission.WRITE);
113  final boolean deletePermission = experiment.hasPermission(Permission.DELETE);
114  final boolean sharePermission = experiment.hasPermission(Permission.SET_PERMISSION);
115  final boolean setOwnerPermission = experiment.hasPermission(Permission.SET_OWNER);
116  final boolean isOwner = experiment.isOwner();
117  final boolean isRemoved = experiment.isRemoved();
118  final boolean isUsed = isRemoved && experiment.isUsed();
119  final boolean deletePermanentlyPermission = deletePermission && !isUsed;
120 
121  Map<AnnotationType, Set<Object>> usedFactorValues = 
122    new HashMap<AnnotationType, Set<Object>>();
123  Map<AnnotationType, Integer> factorValuesCount = new HashMap<AnnotationType, Integer>();
124  JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, guiContext, experiment);
125  ExtensionsInvoker invoker = ToolbarUtil.useExtensions(jspContext);
126  %>
127  <base:page title="<%=title%>" id="view-page">
128  <base:head scripts="table.js,tabcontrol-2.js,~experiments.js" styles="table.css,toolbar.css,headertabcontrol.css,path.css">
129    <ext:scripts context="<%=jspContext%>" />
130    <ext:stylesheets context="<%=jspContext%>" />
131  </base:head>
132  <base:body>
133    <p:path><p:pathelement 
134      title="Experiments" href="<%="index.jsp?ID="+ID%>" 
135      /><p:pathelement title="<%=HTML.encodeTags(experiment.getName())%>" 
136      /></p:path>
137    <div id="page-data" data-item-id="<%=itemId%>"></div>
138   
139    <t:tabcontrol 
140      id="main" 
141      subclass="content mastertabcontrol" 
142      active="<%=tab%>" remember="false">
143    <t:tab id="properties" title="Properties">
144      <div>
145      <table class="fullform">
146      <tr>
147        <th class="itemstatus">
148          <base:icon 
149            image="shared.png" 
150            visible="<%=experiment.isShared()%>"
151            tooltip="This item is shared to other users, groups and/or projects"
152          />
153          <base:icon 
154            id="btnDeletePermanently"
155            image="deleted.png"
156            tooltip="This item has been flagged for deletion. Click to delete it now."
157            enabled="<%=deletePermanentlyPermission %>"
158            visible="<%=isRemoved%>" 
159          />
160          <base:icon
161            id="btnUsingItems"
162            image="used.png" 
163            tooltip="This item is used by other items and can't be permanently deleted. Show the items that are using this one"
164            visible="<%=isRemoved && isUsed%>" />
165        </th>
166        <td style="padding: 0px;">
167          <tbl:toolbar subclass="bottomborder bg-filled-50">
168            <tbl:button 
169              id="btnEdit"
170              disabled="<%=!writePermission%>" 
171              image="edit.png" 
172              title="Edit&hellip;" 
173              tooltip="<%=writePermission ? "Edit this experiment" : "You do not have permission to edit this experiment"%>" 
174            />
175            <tbl:button 
176              id="btnDelete"
177              disabled="<%=!deletePermission%>" 
178              image="delete.png" 
179              title="Delete"
180              visible="<%=!experiment.isRemoved()%>"
181              tooltip="<%=deletePermission ? "Delete this experiment" : "You do not have permission to delete this experiment"%>" 
182            />
183            <tbl:button 
184              id="btnRestore"
185              disabled="<%=!writePermission%>" 
186              image="restore.png" 
187              title="Restore"
188              visible="<%=experiment.isRemoved()%>"
189              tooltip="<%=writePermission ? "Restore this experiment" : "You do not have permission to restore this experiment"%>" 
190            />
191            <tbl:button 
192              id="btnShare"
193              disabled="<%=!sharePermission%>"
194              image="share.png"
195              title="Share&hellip;" 
196              tooltip="<%=sharePermission ? "Share this experiment to other user, groups and projects" : "You do not have permission to share this experiment"%>"
197            />
198            <tbl:button 
199              id="btnSetOwner"
200              disabled="<%=!setOwnerPermission%>"
201              image="take_ownership.png"
202              title="Set owner&hellip;"
203              tooltip="<%=setOwnerPermission ? "Change owner of this item" : "You do not have permission to change ownership of this item"%>"
204            />
205            <tbl:button
206              id="btnCloneReporters"
207              visible="<%=writePermission && (virtualDb.hasTable(VirtualTable.POSITION) || experiment.getRawDataType().isStoredInDb()) %>"
208              image="copy.png"
209              title="Clone reporters&hellip;"
210              tooltip="Clone reporter annotations for all reporters that are used in this experiment"
211            />
212            <tbl:button
213              id="btnRemoveClonedReporters"
214              visible="<%=writePermission && virtualDb.hasClonedReporters() %>"
215              image="delete_permanently.png"
216              title="Remove cloned reporters&hellip;"
217              tooltip="Remove all cloned reporter annotations"
218            />
219            <tbl:button 
220              id="btnImport"
221              image="import.png" 
222              data-plugin-type="IMPORT" 
223              title="Import&hellip;" 
224              tooltip="Import data" 
225              visible="<%=pluginCount.containsKey(Plugin.MainType.IMPORT)%>"
226            />
227            <tbl:button 
228              id="btnExport"
229              image="export.png"
230              data-plugin-type="EXPORT" 
231              title="Export&hellip;" 
232              tooltip="Export data" 
233              visible="<%=pluginCount.containsKey(Plugin.MainType.EXPORT)%>"
234            />
235            <tbl:button 
236              id="btnRunPlugin"
237              image="runplugin.png" 
238              data-plugin-type="OTHER" 
239              title="Run plugin&hellip;" 
240              tooltip="Run a plugin" 
241              visible="<%=pluginCount.containsKey(Plugin.MainType.OTHER)%>"
242            />
243            <ext:render extensions="<%=invoker%>" context="<%=jspContext%>" 
244              wrapper="<%=new PrefixSuffixRenderer(jspContext, "<td>", "</td>") %>"/>
245            <tbl:button
246              image="help.png"
247              subclass="auto-init"
248              data-auto-init="help"
249              data-help-id="experiment.view.properties"
250              title="Help&hellip;"
251              tooltip="Get help about this page"
252            />
253          </tbl:toolbar>
254        </td>
255      </tr>
256    </table>
257    <table style="width: 100%; height: 16em;" class="bottomborder">
258    <tr>
259      <td style="width: 50%; height: 100%;">
260        <table class="fullform" >
261        <tr>
262          <th>Name</th>
263          <td><%=HTML.encodeTags(experiment.getName())%></td>
264        </tr>
265        <tr>
266          <th>Registered</th>
267          <td><%=dateFormatter.format(experiment.getEntryDate())%></td>
268        </tr>
269        <tr>
270          <th>Raw data type</th>
271          <td><base:catch><%=HTML.encodeTags(experiment.getRawDataType().getName())%></base:catch></td>
272        </tr>
273        <tr>
274          <th>Directory</th>
275          <td><base:propertyvalue item="<%=experiment%>" property="directory" /></td>
276        </tr>
277        <tr>
278          <th>Reporter clone template</th>
279          <td><base:propertyvalue item="<%=experiment%>" property="virtualDb.reporterCloneTemplate" nulltext="<i>- no cloned reporters -</i>" /></td>
280        </tr>
281        <tr>
282          <th>Bytes</th>
283          <td><%=Values.formatBytes(experiment.getBytes())%></td>
284        </tr>
285        <tr>
286          <th>Owner</th>
287          <td><base:propertyvalue item="<%=experiment%>" property="owner" /></td>
288        </tr>
289        <tr>
290          <th>Permissions</th>
291          <td><%=PermissionUtil.getFullPermissionNames(experiment)%></td>
292        </tr>
293        <tr class="dynamic">
294          <th>Description</th>
295          <td><%=HTML.niceFormat(experiment.getDescription())%></td>
296        </tr>
297        </table>
298      </td>
299      <td style="width: 50%; height: 100%;" class="leftborder">
300        <table class="fullform">
301        <tr>
302          <th>PubMed ID</th>
303          <td>
304            <%=HTML.encodeTags(experiment.getPubMedId())%>
305            <%
306            int pubMedId = Values.getInt(experiment.getPubMedId(), -1);
307            if (pubMedId != -1)
308            {
309              %>
310              <b>Link to:</b>
311              <a href="http://www.ebi.ac.uk/citexplore/citationDetails.do?externalId=<%=pubMedId%>&dataSource=MED"
312                target="_blank" title="External link to EBI Citation database"
313                >EBI Citation database</a>,
314              <a href="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=PureSearch&db=pubmed&details_term=<%=pubMedId%>"
315                target="_blank" title="External link to NCBI Entrez PubMed">NCBI Entrez PubMed</a>
316              <%
317            }
318            %>
319          </td>
320        </tr>
321        <tr>
322          <th>Title</th>
323          <td><%=HTML.niceFormat(experiment.getTitle())%></td>
324        </tr>
325        <tr>
326          <th>Publication date</th>
327          <td><%=dateFormatter.format(experiment.getPublicationDate())%></td>
328        </tr>
329        <tr>
330          <th>Abstract</th>
331          <td><%=HTML.niceFormat(experiment.getAbstract())%></td>
332        </tr>
333        <tr>
334          <th>Experiment design</th>
335          <td><%=HTML.niceFormat(experiment.getExperimentDesign())%></td>
336        </tr>
337        <tr>
338          <th>Experiment type</th>
339          <td><%=HTML.niceFormat(experiment.getExperimentType())%></td>
340        </tr>
341        <tr>
342          <th>Affiliations</th>
343          <td><%=HTML.niceFormat(experiment.getAffiliations())%></td>
344        </tr>
345        <tr>
346          <th>Authors</th>
347          <td><%=HTML.niceFormat(experiment.getAuthors())%></td>
348        </tr>
349        <tr class="dynamic">
350          <th>Publication</th>
351          <td><%=HTML.niceFormat(experiment.getPublication())%></td>
352        </tr>
353        </table>
354      </td>
355    </tr>
356    </table>
357    </div>
358     
359      <%
360      ItemQuery<AnnotationType> efQuery = experiment.getExperimentalFactors();
361      efQuery.include(Include.ALL);
362      efQuery.order(Orders.asc(Hql.property("name")));
363      ItemResultList<AnnotationType> experimentalFactors = efQuery.list(dc);
364      %>
365      <base:section 
366        id="experimentalFactors" 
367        title="<%="Experimental factors (" + experimentalFactors.size() +")"%>"
368        context="<%=cc%>"
369        >
370        <%
371        if (experimentalFactors.size() == 0)
372        {
373          %>
374          <div class="messagecontainer note">
375          No experimental factors has been added to this experiment
376          (or, you don't have permission to view them).
377          </div>
378          <%
379        }
380        else
381        {
382          %>
383          <div style="width: 100%; max-width: 1000px;">
384          <tbl:table
385            id="tbl.experimentalFactors"
386            columns="all"
387            action="index.jsp"
388            >
389            <tbl:hidden name="item_id" value="<%=Integer.toString(itemId)%>" />
390            <tbl:columndef 
391              id="name"
392              title="Name"
393            />
394            <tbl:columndef
395              id="type"
396              title="Value type"
397            />
398            <tbl:columndef
399              id="values"
400              title="Used values"
401            />
402            <tbl:columndef 
403              id="description"
404              title="Description"
405            />
406            <tbl:columndef 
407              id="status"
408              title="Status"
409            />
410            <tbl:data>
411              <tbl:headers>
412                <tbl:headerrow>
413                  <tbl:columnheaders />
414                </tbl:headerrow>
415              </tbl:headers>
416              <tbl:rows>
417              <%
418              for (AnnotationType item : experimentalFactors)
419              {
420                Type valueType = item.getValueType();
421                usedFactorValues.put(item, new HashSet<Object>());
422                factorValuesCount.put(item, 0);
423                Formatter formatter = FormatterFactory.getTypeFormatter(sc, valueType);
424                %>
425                <tbl:row>
426                  <tbl:cell column="name"><base:icon 
427                      image="deleted.png" 
428                      tooltip="This item has been scheduled for deletion" 
429                      visible="<%=item.isRemoved()%>"
430                    /><%=Base.getLinkedName(ID, item, false, true)%></tbl:cell>
431                  <tbl:cell column="description"><%=HTML.encodeTags(item.getDescription())%></tbl:cell>
432                  <tbl:cell column="type">
433                    <%=valueType%>
434                    <%=item.isEnumeration() ? "(enumeration)" : ""%>
435                  </tbl:cell>
436                  <tbl:cell column="values">
437                    <%
438                    if (!item.isEnumeration() && (valueType == Type.TEXT || valueType == Type.STRING))
439                    {
440                      %>
441                      N/A
442                      <%
443                    }
444                    else
445                    {
446                      %>
447                      <div id="usedvalues.<%=item.getId()%>">Loading...</div>
448                      <%
449                    }
450                    %>
451                  </tbl:cell>
452                  <tbl:cell column="status" id="<%="status." + item.getId()%>">
453                  </tbl:cell>
454                </tbl:row>
455                <%
456              }
457              %>
458              </tbl:rows>
459            </tbl:data>
460          </tbl:table>
461          <div id="warning.missing" style="display: none; text-align: right;">
462            <base:icon image="warning.png" /> = Some raw bioassays are missing this factor value
463          </div>
464        </div>
465        <%
466        }
467        %>
468      </base:section>
469      <%
470      ItemQuery<RootRawBioAssay> rbaQuery = experiment.getRootRawBioAssays();
471      rbaQuery.include(Include.ALL);
472      rbaQuery.order(Orders.asc(Hql.property("rawBioAssay.name")));
473      ItemResultList<RootRawBioAssay> rawBioAssays = rbaQuery.list(dc);
474      %>
475      <base:section 
476        id="rawbioassays" 
477        title="<%="Root raw bioassays (" + rawBioAssays.size() +")"%>"
478        context="<%=cc%>">
479        <%
480        if (rawBioAssays.size() == 0)
481        {
482          %>
483          <div class="messagecontainer note">
484          No raw bioassays has been added to this experiment
485          (or, you don't have permission to view them).
486          </div>
487          <%
488        }
489        else
490        {
491          %>
492          <tbl:table
493            id="tbl.rawbioassays"
494            columns="all"
495            >
496          <tbl:columndef 
497            id="name"
498            title="Name"
499          />
500          <tbl:columndef 
501            id="description"
502            title="Description"
503          />
504          <%
505          for (AnnotationType at : experimentalFactors)
506          {
507            Formatter formatter = FormatterFactory.getTypeFormatter(sc, at.getValueType());
508            %>
509            <tbl:columndef
510              id="<%="at"+at.getId()%>"
511              title="<%=HTML.encodeTags(at.getName())%>"
512              formatter="<%=formatter%>"
513            />
514            <%
515          }
516          %>
517          <tbl:data>
518            <tbl:headers>
519              <tbl:headerrow>
520                <tbl:columnheaders />
521              </tbl:headerrow>
522            </tbl:headers>
523            <tbl:rows>
524            <%
525            SnapshotManager manager = new SnapshotManager();
526            AnnotationTypeFilter annotationTypeFilter = new AnnotationTypeFilter();
527            for (RootRawBioAssay item : rawBioAssays)
528            {
529              RawBioAssay rba = item.getRawBioAssay();
530              AnnotationSet as = item.isAnnotated() ? item.getAnnotationSet() : null;
531              AnnotationSetSnapshot snapshot = as == null ? null : manager.getSnapshot(dc, as.getId());
532              %>
533              <tbl:row>
534                <tbl:cell column="name"><base:icon 
535                    image="deleted.png" 
536                    tooltip="This item has been scheduled for deletion" 
537                    visible="<%=rba.isRemoved()%>"
538                  /><%=Base.getLinkedName(ID, item, false, true)%></tbl:cell>
539                <tbl:cell column="description"><%=HTML.encodeTags(item.getDescription())%></tbl:cell>
540                <%
541                for (AnnotationType at : experimentalFactors)
542                {
543                  Unit unit = at.getDefaultUnit();
544                  String unitSymbol = unit == null ? "" : "&nbsp;" + unit.getDisplaySymbol();
545                 
546                  annotationTypeFilter.setAnnotationType(at);
547                  List<AnnotationSnapshot> all = snapshot == null ? 
548                      null : manager.findAnnotations(dc, snapshot, annotationTypeFilter, true);
549                  %>
550                  <tbl:cell column="<%="at"+at.getId()%>">
551                    <%
552                    if (all != null && all.size() > 0)
553                    {
554                      for (AnnotationSnapshot a : all)
555                      {
556                        factorValuesCount.put(at, factorValuesCount.get(at)+1);
557                        List values = a.getActualValues();
558                        boolean isUpToDate = a.isUpToDate();
559                        usedFactorValues.get(at).addAll(values);
560                        %>
561                        <tbl:cellvalue list="<%=values%>" suffix="<%=unitSymbol%>"/>
562                        <base:icon 
563                          subclass="link auto-init"
564                          data-auto-init="edit-experimental-factor"
565                          data-item-type="<%=a.getThisItemType().name()%>"
566                          data-item-id="<%=a.getThisItemId() %>"
567                          data-annotation-type="<%=at.getId() %>"
568                          data-annotation="<%=a.getThisAnnotationId()%>"
569                          visible="<%=writePermission%>"
570                          image="<%=isUpToDate ? "edit.png" : "edit-outofsync.png"%>" 
571                          tooltip="Modify the values of this experimental factor"
572                        />
573                        <%
574                      }
575                    }
576                    %>
577                  </tbl:cell>
578                  <%
579                }
580                %>
581              </tbl:row>
582              <%
583            }
584            %>
585            </tbl:rows>
586          </tbl:data>
587        </tbl:table>
588        <%
589      }
590      %>
591      </base:section>
592      <jsp:include page="../../common/anytoany/list_anytoany.jsp">
593        <jsp:param name="ID" value="<%=ID%>" />
594        <jsp:param name="item_type" value="<%=itemType.name()%>" />
595        <jsp:param name="item_id" value="<%=itemId%>" />
596        <jsp:param name="title" value="Other items related to this experiment" />
597      </jsp:include>
598      <jsp:include page="../../common/share/list_share.jsp">
599        <jsp:param name="ID" value="<%=ID%>" />
600        <jsp:param name="item_type" value="<%=itemType.name()%>" />
601        <jsp:param name="item_id" value="<%=itemId%>" />
602        <jsp:param name="title" value="Shared to" />
603      </jsp:include>
604   
605        <%
606        JSONArray jsonFactorValues = new JSONArray();
607        for (Map.Entry<AnnotationType, Set<Object>> entry : usedFactorValues.entrySet())
608        {
609          AnnotationType at = entry.getKey();
610         
611          JSONObject jsonAt = new JSONObject();
612          jsonAt.put("id", at.getId());
613          jsonAt.put("disableInheritance", at.getDisableInheritance() ? 1 : 0);
614          jsonAt.put("numRawBioAssaysWithFactor", factorValuesCount.get(at));
615
616          Type valueType = at.getValueType();
617          if (at.isEnumeration() || (valueType != Type.TEXT && valueType != Type.STRING))
618          {
619            Set<Object> values = entry.getValue();
620            Formatter formatter = FormatterFactory.getTypeFormatter(sc, valueType);
621            Unit unit = at.getDefaultUnit();
622            if (unit != null) formatter = unit.getFormatter(formatter);
623            String formattedValues = HTML.encodeTags(Values.getString(values, ", ", true, formatter));
624            jsonAt.put("usedValues", formattedValues);
625          }
626         
627          jsonFactorValues.add(jsonAt);
628        }
629        %>
630        <div id="factor-values" class="datacontainer"
631          data-num-raw-bioassays="<%=rawBioAssays.size() %>"
632          data-factor-values="<%=HTML.encodeTags(jsonFactorValues.toJSONString()) %>"
633        ></div>
634
635      </t:tab>
636      <t:tab id="annotations" title="Annotations" 
637        tooltip="View annotation values" clazz="white">
638        <jsp:include page="../../common/annotations/list_frameset.jsp">
639          <jsp:param name="item_type" value="<%=itemType.name()%>" />
640          <jsp:param name="item_id" value="<%=itemId%>" />
641          <jsp:param name="ID" value="<%=ID%>" />
642        </jsp:include>
643      </t:tab>
644     
645      <t:tab id="bioassaysets" title="Bioassay sets" />
646      <t:tab id="clonedreporters" 
647        title="Cloned reporters" 
648        visible="<%=virtualDb.hasClonedReporters() %>"
649        tooltip="Show information about cloned reporters"
650      />
651      <t:tab id="overview" title="Overview" 
652        tooltip="Display a tree overview of related items">
653        <jsp:include page="../../common/overview/overview.jsp">
654          <jsp:param name="item_type" value="<%=itemType.name()%>" />
655          <jsp:param name="item_id" value="<%=itemId%>" />
656          <jsp:param name="ID" value="<%=ID%>" />
657        </jsp:include>
658      </t:tab>     
659      <t:tab id="history" title="Change history" 
660        tooltip="Displays a log of all modifications made to this item"
661        visible="<%=ChangeHistoryUtil.showChangeHistoryTab(sc)%>">
662        <jsp:include page="../../common/history/frameset.jsp">
663          <jsp:param name="item_type" value="<%=itemType.name()%>" />
664          <jsp:param name="item_id" value="<%=itemId%>" />
665          <jsp:param name="ID" value="<%=ID%>" />
666        </jsp:include>
667      </t:tab>
668      </t:tabcontrol>
669
670  </base:body>
671  </base:page>
672  <%
673}
674finally
675{
676  if (dc != null) dc.close();
677}
678
679%>
Note: See TracBrowser for help on using the repository browser.