source: trunk/www/admin/mimetypes/list_mimetypes.jsp @ 3719

Last change on this file since 3719 was 3719, checked in by Nicklas Nordborg, 14 years ago

References #411: Most of the basic functionality is now in place and has been documented
On major issue is that the Affymetrix Fusion SDK will not work with compressed files since
it expects direct access to the java.io.File object. I will try to solve this by modifying the
Affymetric Fusion SDK to work with InputStream:s instead. This would be better than to decompress
CEL and CDF files everytime they are needed. In most cases we only scan the headers anyway, so
it would be good if we can avoid copying the entire 40+ MB file(s) each time.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Id
File size: 13.0 KB
Line 
1<%-- $Id: list_mimetypes.jsp 3719 2007-09-12 13:02:59Z nicklas $
2  ------------------------------------------------------------------
3  Copyright (C) 2006 Jari Hakkinen, Nicklas Nordborg, Martin Svensson
4  Copyright (C) 2007 Johan Enell
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.MimeType"
33  import="net.sf.basedb.core.FileType"
34  import="net.sf.basedb.core.ItemQuery"
35  import="net.sf.basedb.core.Include"
36  import="net.sf.basedb.core.ItemResultIterator"
37  import="net.sf.basedb.core.ItemResultList"
38  import="net.sf.basedb.core.ItemContext"
39  import="net.sf.basedb.core.Permission"
40  import="net.sf.basedb.core.PluginDefinition"
41  import="net.sf.basedb.core.query.Orders"
42  import="net.sf.basedb.core.query.Hql"
43  import="net.sf.basedb.core.plugin.GuiContext"
44  import="net.sf.basedb.core.plugin.Plugin"
45  import="net.sf.basedb.util.Enumeration"
46  import="net.sf.basedb.clients.web.Base"
47  import="net.sf.basedb.clients.web.PermissionUtil"
48  import="net.sf.basedb.clients.web.ModeInfo"
49  import="net.sf.basedb.clients.web.util.HTML"
50  import="net.sf.basedb.util.Values"
51  import="java.util.List"
52  import="java.util.Map"
53%>
54<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
55<%@ taglib prefix="tbl" uri="/WEB-INF/table.tld" %>
56<%!
57  private static final Item itemType = Item.MIMETYPE;
58  private static final GuiContext guiContext = new GuiContext(itemType, GuiContext.Type.LIST);
59%>
60<%
61final SessionControl sc = Base.getExistingSessionControl(pageContext, Permission.DENIED, itemType);
62final String ID = sc.getId();
63final boolean createPermission = sc.hasPermission(Permission.CREATE, itemType);
64final boolean writePermission = sc.hasPermission(Permission.WRITE, itemType);
65final boolean deletePermission = sc.hasPermission(Permission.DELETE, itemType);
66final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, null);
67
68final ModeInfo mode = ModeInfo.get(request.getParameter("mode"));
69final String callback = request.getParameter("callback");
70final String title = mode.generateTitle("MIME type", "MIME types");
71final DbControl dc = sc.newDbControl();
72ItemResultIterator<MimeType> mimeTypes = null;
73try
74{
75  final ItemQuery<MimeType> query = Base.getConfiguredQuery(cc, true, MimeType.getQuery(), mode);
76
77  // Get all file types
78  final ItemQuery<FileType> typeQuery = FileType.getQuery();
79  typeQuery.order(Orders.asc(Hql.property("name")));
80  typeQuery.setCacheResult(true);
81
82  Map<Plugin.MainType, Integer> pluginCount = PluginDefinition.countPlugins(dc, guiContext);
83  try
84  {
85    mimeTypes = query.iterate(dc);
86  }
87  catch (Throwable t)
88  {
89    cc.setMessage(t.getMessage());
90  }
91  int numListed = 0;
92  %>
93  <base:page title="<%=title==null ? "MIME types" : title%>" type="<%=mode.getPageType()%>">
94  <base:head scripts="menu.js,table.js" styles="menu.css,table.css">
95    <script language="JavaScript">
96    var submitPage = 'index.jsp';
97    var formId = 'mimeTypes';
98    function newItem()
99    {
100      Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', 0, true);
101    }
102    function editItem(itemId)
103    {
104      Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', itemId, true);
105    }
106    function viewItem(itemId)
107    {
108      Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', itemId, false);
109    }
110    function itemOnClick(evt, itemId)
111    {
112      Table.itemOnClick(formId, evt, itemId, '<%=mode.getName()%>', viewItem, editItem, returnSelected);
113    }
114    function deleteItems()
115    {
116      var frm = document.forms[formId];
117      if (Forms.numChecked(frm) == 0)
118      {
119        alert('Please select at least one item in the list');
120        return;
121      }
122      frm.action = submitPage;
123      frm.cmd.value = 'DeleteItems';
124      frm.submit();
125    }
126    function restoreItems()
127    {
128      var frm = document.forms[formId];
129      if (Forms.numChecked(frm) == 0)
130      {
131        alert('Please select at least one item in the list');
132        return;
133      }
134      frm.action = submitPage;
135      frm.cmd.value = 'RestoreItems';
136      frm.submit();
137    }
138    function configureColumns()
139    {
140      Table.configureColumns('<%=ID%>', formId, '<%=itemType.name()%>', '<%=(String)cc.getObject("defaultColumns")%>');
141    }
142    function runPlugin(cmd)
143    {
144      Table.submitToPopup(formId, cmd, 740, 540);
145    }
146    function returnSelected()
147    {
148      Table.returnSelected(formId, <%=callback != null ? "window.opener."+callback : "null" %>);
149      window.close();
150    }
151    function presetOnChange()
152    {
153      Table.presetOnChange('<%=ID%>', formId, '<%=itemType.name()%>', '<%=(String)cc.getObject("defaultColumns")%>');
154    }
155    </script>
156  </base:head>
157 
158  <base:body>
159    <%
160    if (cc.getMessage() != null)
161    {
162      %>
163      <div class="error"><%=cc.getMessage()%></div>
164      <%
165      cc.setMessage(null);
166    }
167    %>
168    <tbl:table 
169      id="mimeTypes" 
170      clazz="itemlist" 
171      columns="<%=cc.getSetting("columns")%>"
172      sortby="<%=cc.getSortProperty()%>" 
173      direction="<%=cc.getSortDirection()%>"
174      title="<%=title%>"
175      action="index.jsp"
176      sc="<%=sc%>"
177      item="<%=itemType%>"
178      >
179      <tbl:hidden 
180        name="mode" 
181        value="<%=mode.getName()%>" 
182      />
183      <tbl:hidden 
184        name="callback" 
185        value="<%=callback%>" 
186        skip="<%=callback == null%>" 
187      />
188      <tbl:columndef 
189        id="extension"
190        property="extension"
191        datatype="string"
192        title="File extension"
193        sortable="true"
194        filterable="true"
195        exportable="true"
196        show="always"
197      />
198      <tbl:columndef 
199        id="name"
200        property="name"
201        datatype="string"
202        title="MIME type"
203        sortable="true" 
204        filterable="true"
205        exportable="true"
206        show="always" 
207      />
208      <%
209      Enumeration<String, String> fileTypes = new Enumeration<String, String>();
210      for (FileType ft : typeQuery.list(dc))
211      {
212        fileTypes.add(Integer.toString(ft.getId()), ft.getName());
213      }
214      %>
215      <tbl:columndef 
216        id="fileType"
217        property="fileType"
218        sortproperty="fileType.name"
219        exportproperty="fileType.name"
220        datatype="int"
221        enumeration="<%=fileTypes%>"
222        title="File type"
223        sortable="true" 
224        filterable="true"
225        exportable="true"
226      />
227      <tbl:columndef 
228        id="autoCompress"
229        property="autoCompress"
230        datatype="boolean"
231        title="Auto compress"
232        sortable="true" 
233        filterable="true"
234        exportable="true"
235      />
236      <tbl:columndef 
237        id="description"
238        property="description"
239        datatype="string"
240        title="Description" 
241        sortable="true" 
242        filterable="true" 
243        exportable="true"
244      />
245      <tbl:toolbar
246        visible="<%=mode.hasToolbar()%>"
247        >
248        <tbl:button 
249          disabled="<%=createPermission ? false : true%>" 
250          image="<%=createPermission ? "new.gif" : "new_disabled.gif"%>" 
251          onclick="newItem()" 
252          title="New&hellip;" 
253          tooltip="<%=createPermission ? "Create new MIME type" : "You do not have permission to create MIME types"%>" 
254        />
255        <tbl:button 
256          disabled="<%=deletePermission ? false : true%>" 
257          image="<%=deletePermission ? "delete.gif" : "delete_disabled.gif"%>" 
258          onclick="deleteItems()" 
259          title="Delete" 
260          tooltip="<%=deletePermission ? "Delete the selected items" : "You do not have permission to delete MIME types" %>" 
261        />
262        <tbl:button 
263          disabled="<%=writePermission ? false : true%>" 
264          image="<%=writePermission ? "restore.gif" : "restore_disabled.gif"%>" 
265          onclick="restoreItems()" 
266          title="Restore" 
267          tooltip="<%=writePermission ? "Restore the selected (deleted) items" : "You do not have permission to edit MIME types" %>" 
268        />
269        <tbl:button 
270          image="columns.gif" 
271          onclick="configureColumns()" 
272          title="Columns&hellip;" 
273          tooltip="Show, hide and re-order columns" 
274        />
275        <tbl:button 
276          image="import.gif" 
277          onclick="runPlugin('ImportItems')" 
278          title="Import&hellip;" 
279          tooltip="Import data" 
280          visible="<%=pluginCount.containsKey(Plugin.MainType.IMPORT)%>"
281        />
282        <tbl:button 
283          image="export.gif" 
284          onclick="runPlugin('ExportItems')" 
285          title="Export&hellip;" 
286          tooltip="Export data" 
287          visible="<%=pluginCount.containsKey(Plugin.MainType.EXPORT)%>"
288        />
289        <tbl:button 
290          image="runplugin.gif" 
291          onclick="runPlugin('RunListPlugin')" 
292          title="Run plugin&hellip;" 
293          tooltip="Run a plugin" 
294          visible="<%=pluginCount.containsKey(Plugin.MainType.OTHER)%>"
295        />
296      </tbl:toolbar>
297      <tbl:navigator
298        page="<%=cc.getPage()%>" 
299        rowsperpage="<%=cc.getRowsPerPage()%>" 
300        totalrows="<%=mimeTypes == null ? 0 : mimeTypes.getTotalCount()%>" 
301        visible="<%=mode.hasNavigator()%>"
302      />
303      <tbl:data>
304        <tbl:columns>
305        <tbl:presetselector 
306          clazz="columnheader"
307          colspan="3"
308          onchange="presetOnChange()"
309        />
310        </tbl:columns>
311
312        <tr>
313          <tbl:header 
314            clazz="index"
315            >&nbsp;</tbl:header>
316          <tbl:header 
317            clazz="check" 
318            visible="<%=mode.hasCheck()%>"
319            ><base:icon 
320              image="check_uncheck.gif" 
321              tooltip="Check/uncheck all" 
322              onclick="Forms.checkUncheck(document.forms[formId])" style="align: left;"
323            /></tbl:header>
324          <tbl:header 
325            clazz="check" 
326            visible="<%=mode.hasRadio()%>"
327            >&nbsp;</tbl:header>
328          <tbl:header 
329            clazz="icons" 
330            visible="<%=mode.hasIcons()%>"
331            >&nbsp;</tbl:header>
332          <tbl:propertyfilter />
333        </tr>
334         
335          <tbl:rows>
336          <%
337          int index = cc.getPage()*cc.getRowsPerPage();
338          int selectedItemId = cc.getId();
339          if (mimeTypes != null)
340          {           
341            while (mimeTypes.hasNext())
342            {
343              MimeType item = mimeTypes.next();
344              int itemId = item.getId();
345              String name = HTML.encodeTags(item.getName());
346              String tooltip = mode.isSelectionMode() ? 
347                  "Select this item" : "View this item" + (writePermission ? " (use CTRL, ALT or SHIFT to edit)" : "");
348              index++;
349              numListed++;
350              %>
351              <tbl:row>
352                <tbl:header 
353                  clazz="index"
354                  ><%=index%></tbl:header>
355                <tbl:header 
356                  clazz="check" 
357                  visible="<%=mode.hasCheck()%>"
358                  ><input 
359                    type="checkbox" 
360                    name="<%=itemId%>" 
361                    value="<%=itemId%>" 
362                    title="<%=name%>" 
363                    <%=cc.getSelected().contains(itemId) ? "checked" : ""%> 
364                  ></tbl:header>
365                <tbl:header 
366                  clazz="check" 
367                  visible="<%=mode.hasRadio()%>"
368                  ><input 
369                    type="radio" 
370                    name="item_id" 
371                    value="<%=itemId%>" 
372                    title="<%=name%>" 
373                    <%=selectedItemId == itemId ? "checked" : ""%>
374                  ></tbl:header>
375                <tbl:header 
376                  clazz="icons" 
377                  visible="<%=mode.hasIcons()%>"
378                  ><base:icon 
379                    image="deleted.gif" 
380                    tooltip="This item has been scheduled for deletion" 
381                    visible="<%=item.isRemoved()%>"
382                  />&nbsp;</tbl:header>
383                <tbl:cell column="extension"><div class="link" 
384                  onclick="itemOnClick(<%=writePermission ? "event" : null%>, <%=itemId%>)" 
385                  title="<%=tooltip%>"><%=HTML.encodeTags(item.getExtension())%></div></tbl:cell>
386                <tbl:cell column="name"><%=name%></tbl:cell>
387                <tbl:cell column="fileType"
388                  ><base:propertyvalue 
389                    item="<%=item%>" 
390                    property="fileType"
391                    enableEditLink="<%=mode.hasEditLink()%>" 
392                    enablePropertyLink="<%=mode.hasPropertyLink()%>"
393                  /></tbl:cell>
394                <tbl:cell column="autoCompress"><%=item.getAutoCompress() ? "yes" : "no"%></a></tbl:cell>
395                <tbl:cell column="description"><%=HTML.encodeTags(item.getDescription())%></tbl:cell>
396              </tbl:row>
397              <%
398              }
399            }
400          %>
401          </tbl:rows>
402      </tbl:data>
403      <%
404      if (numListed == 0)
405      {
406        %>
407        <tbl:panel><%=mimeTypes == null || mimeTypes.getTotalCount() == 0 ? "No MIME types were found" : "No MIME types on this page. Please select another page!" %></tbl:panel>
408        <%
409      }
410      else
411      {
412        %>
413        <tbl:navigator
414          page="<%=cc.getPage()%>" 
415          rowsperpage="<%=cc.getRowsPerPage()%>" 
416          totalrows="<%=mimeTypes == null ? 0 : mimeTypes.getTotalCount()%>" 
417          visible="<%=mode.hasNavigator()%>"
418          locked="true"
419        />
420        <%
421      }
422      %>
423    </tbl:table>
424    <base:buttongroup align="center" clazz="fixedatbottom">
425      <base:button onclick="returnSelected();" title="Ok" visible="<%=mode.hasOkButton()%>" />
426      <base:button onclick="window.close();" title="Cancel" visible="<%=mode.hasCancelButton()%>" />
427      <base:button onclick="window.close();" title="Close" visible="<%=mode.hasCloseButton()%>" />
428    </base:buttongroup>
429    <br><br><br>
430  </base:body>
431  </base:page>
432  <%
433}
434finally
435{
436  if (mimeTypes != null) mimeTypes.close();
437  if (dc != null) dc.close();
438}
439%>
Note: See TracBrowser for help on using the repository browser.