source: trunk/www/common/datafiles/select_files.jsp @ 4711

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

Merged patch release 2.9.1 to the trunk.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Id
File size: 9.6 KB
Line 
1<%-- $Id:select_files.jsp 3820 2007-10-12 10:03:18Z nicklas $
2  ------------------------------------------------------------------
3  Copyright (C) 2005 Nicklas Nordborg
4  Copyright (C) 2006 Jari Hakkinen, Nicklas Nordborg
5  Copyright (C) 2007 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 3
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 BASE. If not, see <http://www.gnu.org/licenses/>.
22  ------------------------------------------------------------------
23 
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.ItemContext"
30  import="net.sf.basedb.core.Type"
31  import="net.sf.basedb.core.BasicItem"
32  import="net.sf.basedb.core.Permission"
33  import="net.sf.basedb.core.Nameable"
34  import="net.sf.basedb.core.FileStoreEnabled"
35  import="net.sf.basedb.core.FileSet"
36  import="net.sf.basedb.core.FileSetMember"
37  import="net.sf.basedb.core.File"
38  import="net.sf.basedb.core.Platform"
39  import="net.sf.basedb.core.PlatformVariant"
40  import="net.sf.basedb.core.PlatformFileType"
41  import="net.sf.basedb.core.DataFileType"
42  import="net.sf.basedb.core.ItemQuery"
43  import="net.sf.basedb.core.Include"
44  import="net.sf.basedb.core.ItemResultList"
45  import="net.sf.basedb.core.PermissionDeniedException"
46  import="net.sf.basedb.core.query.Expressions"
47  import="net.sf.basedb.core.query.Restrictions"
48  import="net.sf.basedb.core.query.Hql"
49  import="net.sf.basedb.core.query.Orders"
50  import="net.sf.basedb.clients.web.Base"
51  import="net.sf.basedb.clients.web.util.HTML"
52  import="net.sf.basedb.util.formatter.Formatter"
53  import="net.sf.basedb.clients.web.formatter.FormatterFactory"
54  import="net.sf.basedb.clients.web.formatter.FormatterSettings"
55  import="net.sf.basedb.util.Values"
56  import="java.util.ArrayList"
57  import="java.util.List"
58  import="java.util.Date"
59  import="java.util.Set"
60  import="java.util.HashSet"
61  import="java.util.TreeSet"
62%>
63<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
64<%
65final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
66final String ID = sc.getId();
67final float scale = Base.getScale(sc);
68final Item itemType = Item.valueOf(request.getParameter("item_type"));
69final int itemId = Values.getInt(request.getParameter("item_id"));
70final int platformId = Values.getInt(request.getParameter("platform_id"), -1);
71final int variantId = Values.getInt(request.getParameter("variant_id"), -1);
72final ItemContext cc = sc.getCurrentContext(itemType);
73
74final DbControl dc = sc.newDbControl();
75try
76{
77
78  // Get the current item; null if we are editing a new item
79  final FileStoreEnabled item = itemId == 0 ? null : (FileStoreEnabled)itemType.getById(dc, itemId);
80  FileSet fileSet = null;
81  if (item != null && item.hasFileSet())
82  {
83    fileSet = item.getFileSet();
84  }
85
86  // Get the current platform/variant
87  // -- if not submitted in URL use values from current item
88  PlatformVariant variant = null;
89  Platform platform = null;
90  boolean deniedPlatform = false;
91  try
92  {
93    if (variantId > 0)
94    {
95      variant = PlatformVariant.getById(dc, variantId);
96      platform = variant.getPlatform();
97    }
98    else if (platformId > 0)
99    {
100      platform = Platform.getById(dc, platformId);
101    }
102    else if (item != null)
103    {
104      variant = item.getVariant();
105      platform = item.getPlatform();
106    }
107  }
108  catch (PermissionDeniedException ex)
109  {
110    deniedPlatform = true; 
111  }
112 
113  // Query to load data file types for specific itemType/platform/variant
114  final ItemQuery<DataFileType> fileTypeQuery = 
115    Base.getDataFileTypes(itemType, item, platform, variant);
116  List<DataFileType> fileTypes = fileTypeQuery.list(dc);
117 
118 
119  String title = "Select data files for " + 
120    HTML.encodeTags((item instanceof Nameable ? ((Nameable)item).getName() : 
121      (item == null ? " new item" : item.toString())));
122
123  final String clazz = "class=\"text\"";
124  final String requiredClazz = "class=\"text required\"";
125  final StringBuilder sb = new StringBuilder();
126  List<File> recentFiles = null;
127 
128  %>
129<base:page type="popup" title="<%=title%>">
130  <base:head scripts="" styles="parameters.css">
131 
132  <script language="JavaScript">
133  function init()
134  {
135  }
136  var lastFileInputName;
137  function browseOnClick(inputName, extension)
138  {
139    var frm = document.forms['datafiles'];
140    var url = '../../filemanager/index.jsp?ID=<%=ID%>&cmd=SelectOne&callback=setFileCallback';
141    if (extension)
142    {
143      url += '&filter:STRING:name='+escape('%.' + extension);
144    }
145    else
146    {
147      url += '&filter:STRING:name=';
148    }
149    lastFileInputName = inputName;
150    Main.openPopup(url, 'SelectFile', 1000, 700);
151  }
152  function setFileCallback(fileId, path)
153  {
154    var frm = document.forms['datafiles'];
155    frm[lastFileInputName].value = path;
156    fileOnChange(lastFileInputName);
157  }
158  function fileOnChange(inputName)
159  {
160    var frm = document.forms['datafiles'];
161    if (frm[inputName].value != '')
162    {
163      frm['datafiles.validate'].checked = true;
164      frm['datafiles.metadata'].checked = true;
165    }
166  }
167  function recentOnChange(inputName)
168  {
169    var frm = document.forms['datafiles'];
170    var recentInput = frm['recent.'+inputName];
171    if (recentInput.selectedIndex > 0)
172    {
173      var option = recentInput[recentInput.selectedIndex];
174      var path = option.value == '' ? '' : option.text;
175      if (frm[inputName].value != path)
176      {
177        frm[inputName].value = path;
178        fileOnChange(inputName);
179      }
180      recentInput.selectedIndex = 0;
181    }
182  }
183  </script>
184  </base:head>
185 
186  <base:body onload="init()" style="background: #E0E0E0;">
187
188    <form name="datafiles">
189    <%
190    if (fileTypes.size() == 0)
191    {
192      %>
193      <div class="error">
194        The <%=platform == null ? "" : "'" + HTML.encodeTags(platform.getName()) + "'" %>
195        platform doesn't define any file types for <%=itemType.toString() %>
196        items.
197      </div>
198      <%
199    }
200    else if (deniedPlatform)
201    {
202      %>
203      <div class="error">Denied</div>
204      <%
205    }
206    else
207    {
208      %>
209      <table class="form" cellspacing="2" border="0" cellpadding="0" width="100%">
210      <%
211      boolean hasNonPlatformFiles = false;
212      for (DataFileType dft : fileTypes)
213      {
214        PlatformFileType pft = platform == null ?
215          null : platform.getFileType(dft, variant);
216        // If file type is not registered with a variant, also check if it is inherited from platform
217        if (pft == null && variant != null) pft = platform.getFileType(dft, null);
218        boolean isPartOfPlatform = pft != null;
219        boolean isRequired = pft == null ? false : pft.isRequired();
220        FileSetMember member = fileSet == null || !fileSet.hasMember(dft) ?
221          null : fileSet.getMember(dft);
222        File file = null;
223        boolean deniedFile = false;
224        String extension = dft.getExtension();
225        if (member != null)
226        {
227          try
228          {
229            file = member.getFile();
230          }
231          catch (PermissionDeniedException ex)
232          {
233            deniedFile = true;
234          }
235        }
236       
237        String path = "";
238        if (file != null)
239        {
240          path = file.getPath().toString();
241        }
242        else if (deniedFile || deniedPlatform)
243        {
244          path = "- denied -";
245        }
246        String inputName= "datafile."+dft.getId();
247        recentFiles = (List<File>)cc.getRecent(dc, Item.FILE, dft.getExternalId());
248        %>
249        <tr>
250          <td class="prompt"><%=HTML.encodeTags(dft.getName())%>
251          <%
252          if (!isPartOfPlatform && !deniedPlatform)
253          {
254            hasNonPlatformFiles = true;
255            %>
256            <base:icon image="warning.gif" tooltip="This file is not part of the platform" />
257            <%
258          }
259          %>
260          </td>
261          <td>
262            <table border="0" cellspacing="0" cellpadding="0">
263            <tr>
264              <td>     
265                <input <%=isRequired ? requiredClazz : clazz%> type="text" 
266                name="<%=inputName%>" value="<%=HTML.encodeTags(path)%>"
267                size="50" title="<%=HTML.encodeTags(dft.getDescription())%>"
268                <%=deniedFile || deniedPlatform ? "disabled" : "" %>
269                onchange="fileOnChange('<%=inputName%>')">&nbsp;
270              </td>
271              <td><base:button 
272                  title="Browse&hellip;"
273                  onclick="<%="browseOnClick('"+inputName+"', '" + HTML.javaScriptEncode(extension) + "')"%>"
274                  disabled="<%=deniedFile || deniedPlatform %>"
275                  />
276              </td>
277            </tr>
278            </table>
279          </td>
280        </tr>
281        <tr>
282          <td align="right"></td>
283          <td>
284          <%
285          if (recentFiles != null && recentFiles.size() > 0)
286          {
287            %>
288            <select name="recent.<%=inputName%>" onchange="recentOnChange('<%=inputName%>')">
289            <option value="">- recently used -
290            <option value="">- clear -
291            <%
292            for (File recent : recentFiles)
293            {
294              %>
295              <option value="<%=recent.getId()%>"><%=HTML.encodeTags(recent.getPath().toString())%>
296              <%
297            }
298            %>
299            </select>
300            <%
301          }
302          %>
303          </td>
304        </tr>
305        <%
306      }
307      %>
308      <tr>
309        <td class="prompt">Validate</td>
310        <td><input type="checkbox" value="1" name="datafiles.validate"></td>
311      </tr>
312      <tr>
313        <td class="prompt">Extract metadata</td>
314        <td><input type="checkbox" value="1" name="datafiles.metadata"></td>
315      </tr>
316      </table>
317      <%
318      if (platform != null && hasNonPlatformFiles)
319      {
320        %>
321        <div align="right">
322        <base:icon image="warning.gif" /> 
323        = The file type is not part of the <i><%=HTML.encodeTags(platform.getName())%></i> platform
324        </div>
325        <%
326      }
327      %>
328      <%
329    }
330    %>
331
332    </form>
333   
334  </base:body>
335  </base:page>
336  <%
337}
338finally
339{
340  if (dc != null) dc.close();
341}
342%>
Note: See TracBrowser for help on using the repository browser.