source: trunk/www/admin/platforms/list_platforms.jsp @ 4906

Last change on this file since 4906 was 4906, checked in by Martin Svensson, 13 years ago

References #1128 More item-pages updated

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