source: trunk/www/views/reporters/list_reporters.jsp @ 4076

Last change on this file since 4076 was 4076, checked in by Martin Svensson, 14 years ago

Fixes #879 Add column holding the filename of last file used for updating reporter annotations. The documentation, reporter importer plugins and web client are now also updated to support this new column.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Id
File size: 14.8 KB
Line 
1<%-- $Id: list_reporters.jsp 4076 2008-01-11 15:16:30Z martin $
2  ------------------------------------------------------------------
3  Copyright (C) 2005 Nicklas Nordborg
4  Copyright (C) 2006 Johan Enell, Jari Hakkinen, Nicklas Nordborg, Martin Svensson
5  Copyright (C) 2007 Johan Enell, Nicklas Nordborg
6
7  This file is part of BASE - BioArray Software Environment.
8  Available at http://base.thep.lu.se/
9
10  BASE is free software; you can redistribute it and/or
11  modify it under the terms of the GNU General Public License
12  as published by the Free Software Foundation; either version 2
13  of the License, or (at your option) any later version.
14
15  BASE is distributed in the hope that it will be useful,
16  but WITHOUT ANY WARRANTY; without even the implied warranty of
17  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  GNU General Public License for more details.
19
20  You should have received a copy of the GNU General Public License
21  along with this program; if not, write to the Free Software
22  Foundation, Inc., 59 Temple Place - Suite 330,
23  Boston, MA  02111-1307, USA.
24  ------------------------------------------------------------------
25
26  @author Nicklas
27  @version 2.0
28--%>
29<%@ page session="false"
30  import="net.sf.basedb.core.SessionControl"
31  import="net.sf.basedb.core.DbControl"
32  import="net.sf.basedb.core.SystemItems"
33  import="net.sf.basedb.core.Item"
34  import="net.sf.basedb.core.ItemContext"
35  import="net.sf.basedb.core.Reporter"
36  import="net.sf.basedb.core.ReporterType"
37  import="net.sf.basedb.core.PluginDefinition"
38  import="net.sf.basedb.core.data.ReporterData"
39  import="net.sf.basedb.core.ItemQuery"
40  import="net.sf.basedb.core.ItemResultList"
41  import="net.sf.basedb.core.DataQuery"
42  import="net.sf.basedb.core.DataResultIterator"
43  import="net.sf.basedb.core.ExtendedProperty"
44  import="net.sf.basedb.core.ExtendedProperties"
45  import="net.sf.basedb.core.Permission"
46  import="net.sf.basedb.core.query.Orders"
47  import="net.sf.basedb.core.query.Hql"
48  import="net.sf.basedb.core.plugin.GuiContext"
49  import="net.sf.basedb.core.plugin.Plugin"
50  import="net.sf.basedb.util.Enumeration"
51  import="net.sf.basedb.clients.web.Base"
52  import="net.sf.basedb.clients.web.ModeInfo"
53  import="net.sf.basedb.clients.web.util.HTML"
54  import="net.sf.basedb.util.Values"
55  import="net.sf.basedb.util.formatter.Formatter"
56  import="net.sf.basedb.clients.web.formatter.FormatterFactory"
57  import="java.util.Date"
58  import="java.util.Map"
59  import="java.util.List"
60%>
61<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
62<%@ taglib prefix="tbl" uri="/WEB-INF/table.tld" %>
63<%!
64  private static final Item itemType = Item.REPORTER;
65  private static final GuiContext guiContext = new GuiContext(itemType, GuiContext.Type.LIST);
66%>
67<%
68final SessionControl sc = Base.getExistingSessionControl(pageContext, Permission.DENIED, itemType);
69final String ID = sc.getId();
70final boolean createPermission = sc.hasPermission(Permission.CREATE, itemType);
71final boolean writePermission = sc.hasPermission(Permission.WRITE, itemType);
72final boolean deletePermission = sc.hasPermission(Permission.DELETE, itemType);
73
74final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, null);
75
76final ModeInfo mode = ModeInfo.get(request.getParameter("mode"));
77final String callback = request.getParameter("callback");
78final String title = mode.generateTitle("reporter", "reporters");
79final DbControl dc = sc.newDbControl();
80DataResultIterator<ReporterData> reporters = null;
81ItemResultList<ReporterType> reporterTypes = null;
82try
83{
84  final DataQuery<ReporterData> query = Reporter.getQuery();
85  cc.configureQuery(query, true);
86
87  Map<Plugin.MainType, Integer> pluginCount = PluginDefinition.countPlugins(dc, guiContext);
88  final ItemQuery<ReporterType> typeQuery = ReporterType.getQuery();
89  typeQuery.order(Orders.asc(Hql.property("name")));
90  typeQuery.setCacheResult(true);
91  List<ExtendedProperty> reporterProperties = ExtendedProperties.getProperties("ReporterData");
92  try
93  {
94    reporters = query.iterate(dc);
95  }
96  catch (Throwable t)
97  {
98    cc.setMessage(t.getMessage());
99  }
100  int numListed = 0;
101  Formatter<Date> timeFormatter = FormatterFactory.getDateTimeFormatter(sc);
102  %>
103  <base:page title="<%=title==null ? "Reporters" : title%>" type="<%=mode.getPageType()%>">
104  <base:head scripts="table.js" styles="table.css">
105    <script language="JavaScript">
106    var submitPage = 'index.jsp';
107    var formId = 'reporters';
108    function newItem()
109    {
110      Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', 0, true);
111    }
112    function editItem(itemId)
113    {
114      Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', itemId, true);
115    }
116    function viewItem(itemId)
117    {
118      Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', itemId, false);
119    }
120    function itemOnClick(evt, itemId)
121    {
122      Table.itemOnClick(formId, evt, itemId, '<%=mode.getName()%>', viewItem, editItem, returnSelected);
123    }
124    function deleteItems()
125    {
126      var frm = document.forms[formId];
127      var numChecked = Forms.numChecked(frm);
128      if (numChecked == 0)
129      {
130        alert('Please select at least one item in the list');
131        return;
132      }
133      else
134      {
135        var rep = numChecked == 1 ? 'reporter' : 'reporters';
136        if (!confirm('You are about to delete '+numChecked+' '+rep+'. This can\'t be undone. Continue?'))
137        {
138          return;
139        }
140      }
141      frm.action = submitPage;
142      frm.cmd.value = 'DeleteItems';
143      frm.submit();
144    }
145    function configureColumns()
146    {
147      Table.configureColumns('<%=ID%>', formId, '<%=itemType.name()%>', '<%=(String)cc.getObject("defaultColumns")%>');
148    }
149    function runPlugin(cmd)
150    {
151      Table.submitToPopup(formId, cmd, 740, 540);
152    }
153    function returnSelected()
154    {
155      Table.returnSelected(formId, <%=callback != null ? "window.opener."+callback : "null" %>);
156      window.close();
157    }
158    function presetOnChange()
159    {
160      Table.presetOnChange('<%=ID%>', formId, '<%=itemType.name()%>', '<%=(String)cc.getObject("defaultColumns")%>');
161    }
162    function newReporterList()
163    {
164      Table.submitToPopup(formId, 'CreateReporterList', 540, 400);
165    }
166    </script>
167  </base:head>
168 
169  <base:body>
170    <%
171    if (cc.getMessage() != null)
172    {
173      %>
174      <div class="error"><%=cc.getMessage()%></div>
175      <%
176      cc.setMessage(null);
177    }
178    %>
179    <tbl:table 
180      id="reporters" 
181      clazz="itemlist" 
182      columns="<%=cc.getSetting("columns")%>"
183      sortby="<%=cc.getSortProperty()%>" 
184      direction="<%=cc.getSortDirection()%>"
185      title="<%=title%>"
186      action="index.jsp"
187      sc="<%=sc%>"
188      item="<%=itemType%>"
189      >
190      <tbl:hidden 
191        name="mode" 
192        value="<%=mode.getName()%>" 
193      />
194      <tbl:hidden 
195        name="callback" 
196        value="<%=callback%>" 
197        skip="<%=callback == null%>" 
198      />
199      <tbl:columndef 
200        id="externalId"
201        property="externalId"
202        datatype="string"
203        title="External ID"
204        sortable="true" 
205        filterable="true"
206        exportable="true"
207      />
208      <tbl:columndef 
209        id="name"
210        property="name"
211        datatype="string"
212        title="Name"
213        sortable="true" 
214        filterable="true"
215        exportable="true"
216        show="always" 
217      />
218      <tbl:columndef 
219        id="symbol"
220        property="symbol"
221        datatype="string"
222        title="Gene symbol"
223        sortable="true" 
224        filterable="true"
225        exportable="true"
226      />
227      <tbl:columndef 
228        id="description"
229        property="description"
230        datatype="string"
231        title="Description" 
232        sortable="true" 
233        filterable="true" 
234        exportable="true"
235      />
236      <tbl:columndef 
237        id="lastUpdate"
238        property="lastUpdate"
239        datatype="date"
240        title="Last update" 
241        sortable="true" 
242        filterable="true" 
243        exportable="true"
244        formatter="<%=timeFormatter%>"
245      />
246      <tbl:columndef 
247        id="lastSource"
248        property="lastSource"
249        datatype="string"
250        title="Last source"
251        sortable="true"
252        filterable="true"
253        exportable="true"
254      />
255      <%
256      Enumeration<String, String> types = new Enumeration<String, String>();
257      reporterTypes = typeQuery.list(dc);
258      for (ReporterType rt : reporterTypes)
259      {
260        types.add(Integer.toString(rt.getId()), HTML.encodeTags(rt.getName()));
261      }
262      %>
263      <tbl:columndef 
264        id="reporterType"
265        property="reporterType"
266        sortproperty="reporterType.name"
267        exportproperty="reporterType.name"
268        datatype="int"
269        enumeration="<%=types%>"
270        title="Type"
271        sortable="true" 
272        filterable="true"
273        exportable="true"
274      />
275      <%
276      if (reporterProperties != null)
277      {
278        for (ExtendedProperty ep : reporterProperties)
279        {
280          String name = ep.getName();
281          %>
282          <tbl:columndef
283            id="<%=name%>"
284            property="<%=name%>"
285            datatype="<%=ep.getType().getStringValue()%>"
286            title="<%=HTML.encodeTags(ep.getTitle())%>"
287            sortable="true"
288            filterable="true"
289            exportable="true"
290            formatter="<%=FormatterFactory.getExtendedPropertyFormatter(sc, ep)%>"
291          />
292          <%
293        }
294      }
295      %>
296      <tbl:toolbar
297        visible="<%=mode.hasToolbar()%>"
298        >
299        <tbl:button 
300          disabled="<%=createPermission ? false : true%>" 
301          image="<%=createPermission ? "new.gif" : "new_disabled.gif"%>" 
302          onclick="newItem()" 
303          title="New&hellip;" 
304          tooltip="<%=createPermission ? "Create a new reporter" : "You do not have permission to create reporter"%>" 
305        />
306        <tbl:button 
307          disabled="<%=deletePermission ? false : true%>" 
308          image="<%=deletePermission ? "delete.gif" : "delete_disabled.gif"%>" 
309          onclick="deleteItems()" 
310          title="Delete&hellip;" 
311          tooltip="<%=deletePermission ? "Delete the selected items" : "You do not have permission to delete reporters" %>" 
312        />
313        <tbl:button 
314          image="columns.gif" 
315          onclick="configureColumns()" 
316          title="Columns&hellip;" 
317          tooltip="Show, hide and re-order columns" 
318        />
319        <tbl:button
320          image="add.png"
321          onclick="newReporterList()"
322          title="New reporter list&hellip;"
323          tooltip="Create a new reporter list from matching reporters"
324          visible="<%=sc.hasPermission(Permission.CREATE, Item.REPORTERLIST)%>"
325        />
326        <tbl:button 
327          image="import.gif" 
328          onclick="runPlugin('ImportItems')" 
329          title="Import&hellip;" 
330          tooltip="Import data" 
331          visible="<%=pluginCount.containsKey(Plugin.MainType.IMPORT)%>"
332        />
333        <tbl:button 
334          image="export.gif" 
335          onclick="runPlugin('ExportItems')" 
336          title="Export&hellip;" 
337          tooltip="Export data" 
338          visible="<%=pluginCount.containsKey(Plugin.MainType.EXPORT)%>"
339        />
340        <tbl:button 
341          image="runplugin.gif" 
342          onclick="runPlugin('RunListPlugin')" 
343          title="Run plugin&hellip;" 
344          tooltip="Run a plugin" 
345          visible="<%=pluginCount.containsKey(Plugin.MainType.OTHER)%>"
346        />
347      </tbl:toolbar>
348      <tbl:navigator
349        page="<%=cc.getPage()%>" 
350        rowsperpage="<%=cc.getRowsPerPage()%>" 
351        totalrows="<%=reporters == null ? 0 : reporters.getTotalCount()%>" 
352        visible="<%=mode.hasNavigator()%>"
353      />
354      <tbl:data>
355        <tbl:columns>
356        <tbl:presetselector 
357          clazz="columnheader"
358          colspan="3"
359          onchange="presetOnChange()"
360        />
361        </tbl:columns>
362        <tr>
363          <tbl:header 
364            clazz="index"
365            >&nbsp;</tbl:header>
366          <tbl:header 
367            clazz="check" 
368            visible="<%=mode.hasCheck()%>"
369            ><base:icon 
370              image="check_uncheck.gif" 
371              tooltip="Check/uncheck all" 
372              onclick="Forms.checkUncheck(document.forms[formId])" style="align: left;"
373            /></tbl:header>
374          <tbl:header 
375            clazz="check" 
376            visible="<%=mode.hasRadio()%>"
377            >&nbsp;</tbl:header>
378          <tbl:header 
379            clazz="icons" 
380            visible="<%=mode.hasIcons()%>"
381            >&nbsp;</tbl:header>
382          <tbl:propertyfilter />
383        </tr>
384          <tbl:rows>
385          <%
386          int index = cc.getPage()*cc.getRowsPerPage();
387          int selectedItemId = cc.getId();
388          if (reporters != null)
389          {
390            while (reporters.hasNext())
391            {
392              ReporterData item = reporters.next();
393              int itemId = item.getId();
394              String name = HTML.encodeTags(item.getName());
395              String tooltip = mode.isSelectionMode() ?
396                  "Select this item" : "View this item" + (writePermission ? " (use CTRL, ALT or SHIFT to edit)" : "");
397              index++;
398              numListed++;
399              %>
400              <tbl:row>
401                <tbl:header 
402                  clazz="index"
403                  ><%=index%></tbl:header>
404                <tbl:header 
405                  clazz="check" 
406                  visible="<%=mode.hasCheck()%>"
407                  ><input 
408                    type="checkbox" 
409                    name="<%=itemId%>" 
410                    value="<%=itemId%>" 
411                    title="<%=name%>" 
412                    <%=cc.getSelected().contains(itemId) ? "checked" : ""%> 
413                  ></tbl:header>
414                <tbl:header 
415                  clazz="check" 
416                  visible="<%=mode.hasRadio()%>"
417                  ><input 
418                    type="radio" 
419                    name="item_id" 
420                    value="<%=itemId%>" 
421                    title="<%=name%>" 
422                    <%=selectedItemId == itemId ? "checked" : ""%>
423                  ></tbl:header>
424                <tbl:header 
425                  clazz="icons" 
426                  visible="<%=mode.hasIcons()%>"
427                  >&nbsp;</tbl:header>
428                <tbl:cell column="name"><div class="link" 
429                  onclick="itemOnClick(<%=writePermission ? "event" : null%>, <%=itemId%>)" 
430                  title="<%=tooltip%>"><%=name%></div></tbl:cell>
431                <tbl:cell column="externalId"><%=HTML.encodeTags(item.getExternalId())%></tbl:cell>
432                <tbl:cell column="symbol"><%=HTML.encodeTags(item.getSymbol())%></tbl:cell>
433                <tbl:cell column="description"><%=HTML.encodeTags(item.getDescription())%></tbl:cell>
434                <tbl:cell column="lastUpdate" value="<%=item.getLastUpdate()%>" />
435                <tbl:cell column="lastSource"><%=HTML.encodeTags(item.getLastSource())%></tbl:cell>
436                <tbl:cell column="reporterType"
437                  ><base:propertyvalue 
438                    dbcontrol="<%=dc%>" 
439                    item="<%=item%>" 
440                    property="reporterType"
441                    enableEditLink="<%=mode.hasEditLink()%>" 
442                    enablePropertyLink="<%=mode.hasPropertyLink()%>"
443                  /></tbl:cell>
444                <%
445                if (reporterProperties != null)
446                {
447                  for (ExtendedProperty ep : reporterProperties)
448                  {
449                    name = ep.getName();
450                    %>
451                    <tbl:cell column="<%=name%>"><tbl:cellvalue value="<%=item.getExtended(name)%>" /></tbl:cell>
452                    <%
453                  }
454                }
455                %>
456              </tbl:row>
457              <%
458            }
459          }
460          %>
461          </tbl:rows>
462      </tbl:data>
463      <%
464      if (numListed == 0)
465      {
466        %>
467        <tbl:panel><%=reporters == null || reporters.getTotalCount() == 0 ? "No reporters were found" : "No reporters on this page. Please select another page!" %></tbl:panel>
468        <%
469      }
470      else
471      {
472        %>
473        <tbl:navigator
474          page="<%=cc.getPage()%>" 
475          rowsperpage="<%=cc.getRowsPerPage()%>" 
476          totalrows="<%=reporters == null ? 0 : reporters.getTotalCount()%>" 
477          visible="<%=mode.hasNavigator()%>"
478          locked="true"
479        />
480        <%
481      }
482      %>
483    </tbl:table>
484    <base:buttongroup align="center" clazz="fixedatbottom">
485      <base:button onclick="returnSelected();" title="Ok" visible="<%=mode.hasOkButton()%>" />
486      <base:button onclick="window.close();" title="Cancel" visible="<%=mode.hasCancelButton()%>" />
487      <base:button onclick="window.close();" title="Close" visible="<%=mode.hasCloseButton()%>" />
488    </base:buttongroup>
489    <br><br><br>
490  </base:body>
491  </base:page>
492  <%
493}
494finally
495{
496  if (reporters != null) reporters.close();
497  if (dc != null) dc.close();
498}
499%>
Note: See TracBrowser for help on using the repository browser.