source: branches/2.8-stable/www/plugins/net/sf/basedb/clients/web/plugins/simple_export.jsp @ 4506

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

References #118: Change problematic forms to use POST instead of GET

I have changed most of the forms I could find to use POST instead of GET. Many of them are probably not problematic, but I found some:

  • Form for JEP extra value calculator plug-in
  • Form for JEP intensity transformer plug-in
  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Id
File size: 13.9 KB
Line 
1<%-- $Id: simple_export.jsp 4506 2008-09-11 09:29:40Z nicklas $
2  ------------------------------------------------------------------
3  Copyright (C) 2006 Johan Enell, Jari Hakkinen, Nicklas Nordborg
4  Copyright (C) 2007 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 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 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.util.Enumeration"
34  import="net.sf.basedb.clients.web.Base"
35  import="net.sf.basedb.clients.web.util.HTML"
36  import="net.sf.basedb.util.Values"
37  import="java.util.Set"
38  import="java.util.List"
39 
40%>
41<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
42<%@ taglib prefix="t" uri="/WEB-INF/tab.tld" %>
43
44<%
45final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
46final String ID = sc.getId();
47final Item itemType = Item.valueOf(request.getParameter("item_type"));
48final String subContext = Values.getString(request.getParameter("subcontext"), "");
49final ItemContext cc = sc.getCurrentContext(itemType, subContext);
50final String defaultColumns = (String)cc.getObject("defaultColumns");
51String errorMessage = (String)sc.getSessionSetting("plugin.configure.errors.message");
52List<Throwable> errors = (List<Throwable>)sc.getSessionSetting("plugin.configure.errors.list");
53
54%>
55  <base:page type="popup" title="Export">
56  <base:head styles="parameters.css">
57    <script language="JavaScript">
58    // Works as long as we don't have more than one list per page
59    var tableId = window.opener.document.forms[0].name;
60   
61    function init()
62    {
63      updateColumns();
64      if (getSelectedItems().length == 0)
65      {
66        var frm = document.forms['export'];
67        frm['parameter:whichItems'][0].disabled = true;
68        var aSelected = document.getElementById('which.selected');
69        aSelected.href = 'javascript:void(0)';
70        aSelected.disabled = true;
71        Main.addClass(aSelected, 'disabled');
72      }
73    }
74   
75    // Initialise the visible and hidden column lists
76    function initColumns(columns)
77    {
78      var frm = document.forms['export'];
79      var exported = frm.exported;
80      var notExported = frm.not_exported;
81      exported.length = 0;
82      notExported.length = 0;
83
84      var columnDefs = window.opener.Table.getColumnDefs(tableId);
85      // Move all columns into the not exported or exported list
86      var list = columns == 'all' ? exported : notExported;
87      for (var i = 0; i < columnDefs.length; i++) // >
88      {
89        var col = columnDefs[i];
90        if (col.exportable)
91        {
92          var option = new Option(col.title, col.id);
93          list.options[list.options.length] = option;
94        }
95      }
96      if (columns != 'all')
97      {
98        // Scan columns and move back those that should be exported
99        var cols = columns.split(',');
100        for (var ic = 0; ic < cols.length; ic++) // >
101        {
102          var col = columnDefs['id'+cols[ic]];
103          if (col)
104          {
105            for (var ih = 0; ih < notExported.length; ih++) // >
106            {
107              if (col.id == notExported[ih].value)
108              {
109                var option = new Option(col.title, col.id);
110                exported[exported.length] = option;
111                notExported[ih] = null;
112                ih = notExported.length;
113              }
114            }
115          }
116        }
117      }
118    }
119
120    // Moves all selected items in list1 to list2
121    function moveBetween(list1, list2)
122    {
123      var moved = 0;
124      for(i=0; i < list1.options.length; i++) // >
125      {
126        if (list1.options[i].selected)
127        {
128          moved++;
129          list2.options[list2.options.length] = new Option(list1.options[i].text, list1.options[i].value, false, true);
130          list1.options[i] = null;
131          i--;
132        }
133      }
134      if (moved > 0) clearPreset();
135    }
136   
137    // Move all selected items in the list up or down
138    function moveSelected(list, up)
139    {
140      var moved = Forms.moveListOptions(list, up);
141      if (moved > 0) clearPreset();
142    }
143   
144    // Sets the preset selection list to the first (empty) element
145    function clearPreset()
146    {
147      var frm = document.forms['export'];
148      frm.presets.selectedIndex = 0;
149    }
150   
151    // Update the settings according to the selection in the presets list
152    function updateColumns()
153    {
154      var frm = document.forms['export'];
155      var presets = frm.presets;
156      var columns = presets.options[presets.selectedIndex].value;
157      if (columns == '') return;
158      if (columns == '_default_') columns = '<%=defaultColumns%>';
159      if (columns == '_current_') columns = window.opener.Table.getColumns(tableId);
160      initColumns(columns);
161    }
162    // Get the "exportProperty" of all exported columns as an array
163    function getExportedColumnProperties()
164    {
165      var list = document.forms['export'].exported;
166      var columnDefs = window.opener.Table.getColumnDefs(tableId);
167      var selected = new Array();
168      for (i = 0; i < list.options.length; i++) // >
169      {
170        selected[selected.length] = columnDefs['id'+list.options[i].value].exportProperty;
171      }
172      return selected;
173    }
174    // Get the "title" of all exported columns as an array
175    function getExportedColumnTitles()
176    {
177      var list = document.forms['export'].exported;
178      var columnDefs = window.opener.Table.getColumnDefs(tableId);
179      var selected = new Array();
180      for (i = 0; i < list.options.length; i++) // >
181      {
182        selected[selected.length] = columnDefs['id'+list.options[i].value].title;
183      }
184      return selected;
185    }
186    // Get the ID:s of all selected items
187    var selectedItems;
188    function getSelectedItems()
189    {
190      if (!selectedItems)
191      {
192        selectedItems = window.opener.Table.getSelected(tableId);
193      }
194      return selectedItems;
195    }
196    function checkRadio(radio, name)
197    {
198      Forms.checkRadio(radio, name);
199    }
200    function doExport()
201    {
202      var frm = document.forms['export'];
203      var exportedProperties = getExportedColumnProperties();
204      var exportedTitles = getExportedColumnTitles();
205      if (exportedProperties.length == 0)
206      {
207        alert('You must select at least one column to export');
208        return;
209      }
210      for (var i = 0; i < exportedProperties.length; i++)
211      {
212        var value = exportedProperties[i] + ':' + exportedTitles[i];
213        Forms.createHidden(frm, 'parameter:whichProperties', value);
214      }
215      if (Forms.getCheckedRadio(frm['parameter:whichItems']).value == 'selected')
216      {
217        var selectedItems = getSelectedItems();
218        for (var i = 0; i < selectedItems.length; i++)
219        {
220          Forms.createHidden(frm, 'parameter:item', selectedItems[i]);
221        }
222      }
223      if (frm.path.value != '')
224      {
225        Forms.createHidden(frm, 'parameter:saveAs', frm.path.value);
226      }
227      frm.submit();
228    }
229    function browseOnClick()
230    {
231      Main.openPopup(getRoot()+'filemanager/save_as.jsp?ID=<%=ID%>&callback=setFileCallback', 'SaveAs', 1000, 700);
232    }
233    function setFileCallback(path)
234    {
235      var frm = document.forms['export'];
236      frm['path'].value = path;
237    }
238    function hideErrorList()
239    {
240      Main.hide('errorlist');
241      Main.show('showerrorlist');
242    }
243    function showErrorList()
244    {
245      Main.show('errorlist');
246      Main.hide('showerrorlist');
247    }
248    function doCancel()
249    {
250      location = 'index.jsp?ID=<%=ID%>&cmd=CancelWizard';
251    }
252    </script>
253  </base:head>
254  <base:body onload="init()">
255    <form name="export" action="index.jsp" method="post" onsubmit="return false;">
256    <input type="hidden" name="ID" value="<%=ID%>">
257    <input type="hidden" name="requestId" value="<%=request.getParameter("requestId")%>">
258    <input type="hidden" name="cmd" value="SetParameters">
259    <input type="hidden" name="item_type" value="<%=itemType.name()%>">
260    <input type="hidden" name="subcontext" value="<%=subContext == null ? "" : subContext%>">
261   
262    <h3 class="docked">Export options <base:help helpid="simpleexport.options" /></h3>
263    <div class="boxed">
264   
265    <%
266    if (errorMessage != null || (errors != null && errors.size() > 0))
267    {
268      %>
269      <div id="errors" style="margin-bottom: 12px;" class="parameterhelp">
270        <div class="error" style="margin: 0px;">
271        <%=errorMessage %>
272        </div>
273        <%
274        if (errors != null && errors.size() > 0)
275        {
276          %>
277          <div id="showerrorlist" style="display: none;">
278            <base:icon image="bullet.gif" /><a href="javascript:showErrorList()">Show details</a>
279          </div>
280          <div id="errorlist">
281          <ol>
282          <%
283          for (Throwable t : errors)
284          {
285            %>
286            <li><%=t.getMessage()%><br>
287            <%
288          }
289          %>
290          </ol>
291          <base:icon image="bullet.gif" /><a href="javascript:hideErrorList()">Hide details</a>
292          </div>
293          <%
294        }
295        %>
296      </div>
297      <%
298    }
299    %>
300      <table class="form" width="100%">
301      <tr valign="top">
302        <td class="prompt">Format</td>
303        <td>
304          <input type="radio" name="parameter:format" value="text" checked><a 
305            href="javascript:checkRadio(document.forms['export']['parameter:format'], 'text');"
306            >Tab-separated text file</a><br>
307          <input type="radio" name="parameter:format" value="xml"><a 
308            href="javascript:checkRadio(document.forms['export']['parameter:format'], 'xml');"
309            >XML</a><br>
310        </td>
311      </tr>
312      <tr valign="top">
313        <td class="prompt">Which items?</td>
314        <td>
315          <input type="radio" name="parameter:whichItems" value="selected"><a 
316            id="which.selected"
317            href="javascript:checkRadio(document.forms['export']['parameter:whichItems'], 'selected');"
318            >Selected items</a><br>
319          <input type="radio" name="parameter:whichItems" value="page"><a 
320            href="javascript:checkRadio(document.forms['export']['parameter:whichItems'], 'page');"
321            >Current page</a><br>
322          <input type="radio" name="parameter:whichItems" value="all" checked><a 
323            href="javascript:checkRadio(document.forms['export']['parameter:whichItems'], 'all');"
324            >All pages</a><br>
325        </td>
326      </tr>
327      <tr valign="top">
328        <td class="prompt">
329          Which columns?<br>
330          <select name="presets" onChange="updateColumns()">
331            <option>
332            <option value="all" title="Export all columns">All
333            <option value="_current_" title="Export the currently visible columns" selected>Current
334            <%
335            if (defaultColumns != null)
336            {
337              %>
338              <option value="_default_" title="Export the default visible columns">Default
339              <%
340            }
341            Enumeration<Integer, String> contexts = sc.getContextNames(itemType, subContext);
342            for (int i = 0; i < contexts.size(); ++i)
343            {
344              ItemContext context = sc.getContext(contexts.getKey(i));
345              if (context != null && !ItemContext.DEFAULT_NAME.equals(context.getName()))
346              {
347                String columns = context.getSetting("columns");
348                %>
349                <option value="<%=columns%>"><%=HTML.encodeTags(context.getName())%>
350                <%
351              }
352            }
353            %>
354          </select>
355          <br>
356          <table align="right">
357          <tr>
358          <td>
359            <base:button
360              onclick="moveSelected(document.forms['export'].exported, false)" 
361              title="<img src='../../images/move_up.gif' alt='' style='vertical-align: middle;'>" 
362              tooltip="Move up" 
363            /><p>
364            <base:button 
365              onclick="moveSelected(document.forms['export'].exported, true)" 
366              title="<img src='../../images/move_down.gif' alt='' style='vertical-align: middle;'>" 
367              tooltip="Move down" 
368            />
369          </td>
370          </tr>
371          </table>
372        </td>
373        <td>
374          <table border=0 cellspacing=0 cellpadding=2 width="100%">
375          <tr>
376            <td width="50%">
377              <b>Exported columns</b><br>
378              <select name="exported" multiple size=10 style="width: 100%;"
379                ondblclick="moveBetween(document.forms['export'].exported, document.forms['export'].not_exported)">
380              </select>
381            </td>
382       
383            <td>
384              <br>
385              <base:button
386                onclick="moveBetween(document.forms['export'].not_exported, document.forms['export'].exported)" 
387                title="<img src='../../images/move_left.gif' alt='' style='vertical-align: middle;'>" 
388                tooltip="Make the selected hidden column(s) visible" 
389              /><p>
390              <base:button 
391                onclick="moveBetween(document.forms['export'].exported, document.forms['export'].not_exported)" 
392                title="<img src='../../images/move_right.gif' alt='' style='vertical-align: middle;'>" 
393                tooltip="Make the selected visible column(s) hidden" 
394              />
395              <br>
396            </td>
397            <td width="50%">
398              <b>Not exported</b><br>
399              <select name="not_exported" multiple size=10 style="width: 100%;" 
400                ondblclick="moveBetween(document.forms['export'].not_exported, document.forms['export'].exported)">
401              </select>
402            </td>
403          </tr>
404          </table>
405        </td>
406      </tr>
407      <tr valign="top">
408        <td class="prompt">Column prefix</td>
409        <td>
410          <input type="text" name="parameter:columnPrefix" 
411            class="text" size="50" maxlength="255" value=""></td>
412      </tr>
413      <tr valign="top">
414        <td class="prompt">Save as</td>
415        <td>
416          <table cellpadding="0" border="0" cellspacing="0">
417          <tr>
418          <td><input type="text" class="text" name="path" size="50" value=""><br>
419          Leave empty to download immediately</td>
420          <td><base:button 
421              title="Browse..."
422              onclick="browseOnClick()"
423              style="margin-left: 6px;"
424              />
425          </td>
426          </tr>
427          </table>
428          <input type="checkbox" name="parameter:overwrite" value="true">
429            <a href="javascript:Forms.toggleCheckbox(document.forms['export']['parameter:overwrite'])">Overwrite existing file</a><br>
430        </td>
431      </tr>
432      </table>
433    </div>
434    </form>
435 
436    <table align="center">
437    <tr>
438      <td width="50%"><base:button onclick="doExport();" title="Ok" /></td>
439      <td width="50%"><base:button onclick="doCancel();" title="Cancel" /></td>
440    </tr>
441    </table>
442  </base:body>
443  </base:page>
444
Note: See TracBrowser for help on using the repository browser.