source: trunk/www/common/import/select_file.jsp @ 5327

Last change on this file since 5327 was 5327, checked in by Nicklas Nordborg, 12 years ago

References #1485: File items should be able to reference external files

Fixed code that use Location.PRIMARY to determine if a file is usable or not.

  • Code that throws error if location != PRIMARY
  • Code that adds a filter location==PRIMARY to list pages when selecting files
  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Id
File size: 9.0 KB
Line 
1<%-- $Id: select_file.jsp 5327 2010-04-29 10:14:59Z nicklas $
2  ------------------------------------------------------------------
3  Copyright (C) 2005 Nicklas Nordborg
4  Copyright (C) 2006 Jari Häkkinen, 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 session="false"
27  import="net.sf.basedb.core.SessionControl"
28  import="net.sf.basedb.core.Config"
29  import="net.sf.basedb.core.DbControl"
30  import="net.sf.basedb.core.Item"
31  import="net.sf.basedb.core.ItemContext"
32  import="net.sf.basedb.core.File"
33  import="net.sf.basedb.core.PluginConfiguration"
34  import="net.sf.basedb.core.PluginType"
35  import="net.sf.basedb.core.ItemQuery"
36  import="net.sf.basedb.core.ItemResultList"
37  import="net.sf.basedb.core.Include"
38  import="net.sf.basedb.core.Job"
39  import="net.sf.basedb.core.Location"
40  import="net.sf.basedb.core.FileStoreEnabled"
41  import="net.sf.basedb.core.FileSetMember"
42  import="net.sf.basedb.core.DataFileType"
43  import="net.sf.basedb.core.query.Hql"
44  import="net.sf.basedb.core.query.Expressions"
45  import="net.sf.basedb.core.query.Restrictions"
46  import="net.sf.basedb.core.query.Orders"
47  import="net.sf.basedb.core.plugin.GuiContext"
48  import="net.sf.basedb.core.plugin.Plugin"
49  import="net.sf.basedb.core.plugin.AutoDetectingImporter"
50  import="net.sf.basedb.clients.web.Base"
51  import="net.sf.basedb.clients.web.util.HTML"
52  import="net.sf.basedb.util.Values"
53  import="java.util.List"
54  import="java.nio.charset.Charset"
55%>
56<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
57<%@ taglib prefix="t" uri="/WEB-INF/tab.tld" %>
58<%
59final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
60final String ID = sc.getId();
61final Item itemType = Item.valueOf(request.getParameter("item_type"));
62final String subContext = Values.getString(request.getParameter("subcontext"), "");
63final ItemContext currentContext = sc.getCurrentContext(itemType, subContext);
64final GuiContext.Type contextType = GuiContext.Type.valueOf(request.getParameter("context_type"));
65final GuiContext context = new GuiContext(itemType, contextType);
66final String title = request.getParameter("title");
67final DbControl dc = sc.newDbControl();
68
69try
70{
71  // Try to get data files attached to FileStoreEnabled items
72  File currentFile = null;
73  List<FileSetMember> dataFiles = null;
74  if (itemType.getItemClass() != null && 
75    FileStoreEnabled.class.isAssignableFrom(itemType.getItemClass()))
76  {
77    FileStoreEnabled fileStoreItem = null;
78    try
79    {
80      fileStoreItem = (FileStoreEnabled)itemType.getById(dc, currentContext.getId());
81    }
82    catch (Throwable t)
83    {}
84    if (fileStoreItem != null && fileStoreItem.hasFileSet())
85    {
86      dataFiles = fileStoreItem.getFileSet().getMembers().list(dc);
87      if (dataFiles.size() > 0)
88      {
89        // The first file will be selected by default
90        try
91        {
92          currentFile = dataFiles.get(0).getFile();
93        }
94        catch (Throwable t)
95        {}
96      }
97    }
98  }
99  List<File> recentFiles = (List<File>)currentContext.getRecent(dc, Item.FILE);
100  %>
101  <base:page type="popup" title="<%=title%>">
102  <base:head scripts="ajax.js">
103    <script language="JavaScript">
104    function doImport()
105    {
106      var frm = document.forms['import'];
107      if (Main.trimString(frm.path.value) == '')
108      {
109        alert("You must select a file to import from");
110        frm.path.focus();
111      }
112      else
113      {
114        frm.submit();
115      }
116    }
117    function browseOnClick()
118    {
119      var frm = document.forms['import'];
120      var url = '../../filemanager/index.jsp?ID=<%=ID%>&cmd=SelectOne&title=Select+file+to+import&callback=setFileCallback';
121      Main.openPopup(url, 'SelectFile', 1000, 700);
122    }
123    function setFileCallback(fileId, path)
124    {
125      var frm = document.forms['import'];
126      frm.file_id.value = fileId;
127      frm.path.value = path;
128      updateCharset(fileId);
129    }
130    function updateCharset(fileId)
131    {
132      var request = Ajax.getXmlHttpRequest();
133      if (request != null)
134      {
135        var url = '../../filemanager/files/ajax.jsp?ID=<%=ID%>&cmd=GetCharset&item_id=' + fileId;
136        request.open("GET", url, true);
137        Ajax.setReadyStateHandler(request, updateCharsetCallback);
138        request.send(null);
139      }
140      return request != null;
141    }
142    function updateCharsetCallback(request)
143    {
144      var charset = Main.trimString(request.responseText);
145      if (!charset) charset = '<%=Config.getCharset()%>';
146      var frm = document.forms['import'];
147      Forms.selectListOption(frm.charset, charset);
148    }
149    function recentFileOnChange()
150    {
151      var frm = document.forms['import'];
152      var selected = frm.recentFile[frm.recentFile.selectedIndex];
153      setFileCallback(selected.value, selected.text);
154      frm.recentFile.selectedIndex = 0;
155    }
156    function dataFileOnChange()
157    {
158      var frm = document.forms['import'];
159      var selected = frm.dataFile[frm.dataFile.selectedIndex];
160      setFileCallback(selected.value, selected.text.replace(/\[.*\]\s/, ''));
161      frm.dataFile.selectedIndex = 0;
162    }
163    </script>
164  </base:head>
165  <base:body>
166    <form name="import" action="index.jsp" method="get" onsubmit="return false;">
167    <input type="hidden" name="ID" value="<%=ID%>">
168    <input type="hidden" name="cmd" value="AutoDetect">
169    <input type="hidden" name="item_type" value="<%=itemType.name()%>">
170    <input type="hidden" name="subcontext" value="<%=subContext%>">
171    <input type="hidden" name="context_type" value="<%=contextType.name()%>">
172    <input type="hidden" name="title" value="<%=title%>">
173    <input type="hidden" name="job_name" value="<%=HTML.encodeTags(request.getParameter("job_name"))%>">
174    <input type="hidden" name="job_description" value="<%=HTML.encodeTags(request.getParameter("job_description"))%>">
175    <input type="hidden" name="plugindefinition_id" value="<%=request.getParameter("plugindefinition_id")%>">
176    <input type="hidden" name="file_id" value="">
177   
178    <h3 class="docked"><%=title%> <base:help helpid="import.autodetect.selectfile" /></h3>
179    <div class="boxed">
180      <div class="helpmessage">
181      Select a file to import from.
182      </div>
183      <table class="form" width="100%">
184      <tr valign="top">
185        <td class="prompt">File</td>
186        <td>
187          <table border="0" cellspacing="0" cellpadding="0">
188          <tr>
189          <td><input type="text" class="text required" name="path" size="60" 
190            value="<%=currentFile != null ? HTML.encodeTags(currentFile.getPath().toString()) : "" %>">&nbsp;</td>
191          <td><base:button 
192              title="Browse&hellip;"
193              onclick="browseOnClick()"
194              />
195          </td>
196          </tr>
197          </table>
198        </td>
199      </tr>
200      <tr>
201        <td class="prompt">Character set</td>
202        <td>
203          <select name="charset">
204          <%
205          String defaultCharset = Config.getCharset();
206          for (String charset : Charset.availableCharsets().keySet())
207          {
208            %>
209            <option value="<%=charset%>" 
210              <%=defaultCharset.equalsIgnoreCase(charset) ? "selected" : ""%>><%=charset%>
211            <%
212          }
213          %>
214          </select>
215        </td>
216      </tr>
217      <%
218      if (dataFiles != null && dataFiles.size() > 0)
219      {
220        %>
221        <tr>
222          <td class="prompt">Data files</td>
223          <td>
224            <select name="dataFile" onchange="dataFileOnChange()">
225            <option value="">
226            <%
227            for (FileSetMember member : dataFiles)
228            {
229              File file = null;
230              DataFileType dft = null;
231              try
232              {
233                dft = member.getDataFileType();
234              }
235              catch (Throwable t)
236              {}
237              try
238              {
239                file = member.getFile();
240              }
241              catch (Throwable t)
242              {}
243              if (file != null)
244              {
245                String path = HTML.encodeTags(file.getPath().toString());
246                String type = dft != null ? "[" + HTML.encodeTags(dft.getName()) + "] " : "";
247                %>
248                <option value="<%=file.getId()%>"><%=type%><%=path%>
249                <%
250              }
251            }
252            %>
253            </select>
254          </td>
255        </tr>
256        <%
257      }
258      %>
259      <%
260      if (recentFiles.size() > 0)
261      {
262        %>
263        <tr>
264          <td class="prompt">Recently used</td>
265          <td>
266            <select name="recentFile" onchange="recentFileOnChange()">
267            <option value="">
268            <%
269            for (File recent : recentFiles)
270            {
271              String path = HTML.encodeTags(recent.getPath().toString());
272              %>
273              <option value="<%=recent.getId()%>"><%=path%>
274              <%
275            }
276            %>
277            </select>
278          </td>
279        </tr>
280        <%
281      }
282      %>
283      </table>
284      <div align=right>&nbsp;<i><base:icon image="required.gif" /> = required information</i></div>
285    </div>
286    </form>
287 
288    <table align="center">
289    <tr>
290      <td width="50%"><base:button onclick="doImport();" title="Next" /></td>
291      <td width="50%"><base:button onclick="window.close();" title="Cancel" /></td>
292    </tr>
293    </table>
294  </base:body>
295  </base:page>
296  <%
297}
298finally
299{
300  if (dc != null) dc.close();
301}
302%>
303
Note: See TracBrowser for help on using the repository browser.