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

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

Fixes #1274 Disable/hide "Validate" and "Extract metadata" options on the "Data files" tab if no file type supports it

  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Id
File size: 11.1 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  var updateCheckboxes = false;
138  function browseOnClick(inputName, extension, updateCheck)
139  {
140    var frm = document.forms['datafiles'];
141    updateCheckboxes = updateCheck;
142    var url = '../../filemanager/index.jsp?ID=<%=ID%>&cmd=SelectOne&callback=setFileCallback';
143    if (extension)
144    {
145      url += '&filter:STRING:name='+escape('%.' + extension);
146    }
147    else
148    {
149      url += '&filter:STRING:name=';
150    }
151    lastFileInputName = inputName;
152    Main.openPopup(url, 'SelectFile', 1000, 700);
153  }
154  function setFileCallback(fileId, path)
155  {
156    var frm = document.forms['datafiles'];
157    frm[lastFileInputName].value = path;
158    fileOnChange(lastFileInputName, updateCheckboxes);
159  }
160  function fileOnChange(inputName, updateCheckbox)
161  {
162    var frm = document.forms['datafiles'];
163    var validateCheckbox = frm['datafiles.validate'];
164    var metadataCheckbox = frm['datafiles.metadata'];
165
166    // Check boxes should be updated if the data file type
167    //supports validation or metadata-extraction
168    if (updateCheckbox)
169    {
170      if (frm[inputName].value != '')
171      {
172        // Data filetype supports validation
173        if (validateCheckbox)
174        {       
175          if (validateCheckbox.disabled) validateCheckbox.disabled = false; 
176          validateCheckbox.checked = "1";
177        }
178        // Data filetype supports metadata extraction
179        if (metadataCheckbox)
180        {     
181          if (metadataCheckbox.disabled) metadataCheckbox.disabled = false; 
182          metadataCheckbox.checked = "1";
183        }
184      }
185    }   
186  }
187  function recentOnChange(inputName, updateCheck)
188  {
189    var frm = document.forms['datafiles'];
190    var recentInput = frm['recent.'+inputName];
191    if (recentInput.selectedIndex > 0)
192    {
193      var option = recentInput[recentInput.selectedIndex];
194      var path = option.value == '' ? '' : option.text;
195      if (frm[inputName].value != path)
196      {
197        frm[inputName].value = path;
198        fileOnChange(inputName, updateCheck);
199      }
200      recentInput.selectedIndex = 0;
201    }
202  }
203  </script>
204  </base:head>
205 
206  <base:body onload="init()" style="background: #E0E0E0;">
207
208    <form name="datafiles">
209    <%
210    if (fileTypes.size() == 0)
211    {
212      %>
213      <div class="error">
214        The <%=platform == null ? "" : "'" + HTML.encodeTags(platform.getName()) + "'" %>
215        platform doesn't define any file types for <%=itemType.toString() %>
216        items.
217      </div>
218      <%
219    }
220    else if (deniedPlatform)
221    {
222      %>
223      <div class="error">Denied</div>
224      <%
225    }
226    else
227    {
228      %>
229      <table class="form" cellspacing="2" border="0" cellpadding="0" width="100%">
230      <%
231      boolean hasNonPlatformFiles = false;     
232      boolean activateCheckBoxes = false;
233
234      boolean validationSupport = false;
235      boolean metadataSupport = false;
236     
237      for (DataFileType dft : fileTypes)
238      {
239        PlatformFileType pft = platform == null ?
240          null : platform.getFileType(dft, variant);
241        // If file type is not registered with a variant, also check if it is inherited from platform
242        if (pft == null && variant != null) pft = platform.getFileType(dft, null);
243        boolean isPartOfPlatform = pft != null;
244        boolean isRequired = pft == null ? false : pft.isRequired();
245        FileSetMember member = fileSet == null || !fileSet.hasMember(dft) ?
246          null : fileSet.getMember(dft);
247        File file = null;
248        boolean deniedFile = false;
249        String extension = dft.getExtension();
250       
251        boolean hasValidator = dft.getValidatorClass() != null;
252        boolean hasMetadataExtractor = dft.getMetadataReaderClass() != null;
253        boolean affectCheckboxes = hasValidator || hasMetadataExtractor;
254        validationSupport = hasValidator ? true : validationSupport;
255        metadataSupport = hasMetadataExtractor ? true : metadataSupport;
256        if (member != null)
257        {
258          try
259          {
260            file = member.getFile();           
261          }
262          catch (PermissionDeniedException ex)
263          {
264            deniedFile = true;
265          }
266        }
267       
268        String path = "";
269        if (file != null)
270        {
271          path = file.getPath().toString();
272          activateCheckBoxes = activateCheckBoxes || hasValidator || hasMetadataExtractor;
273        }
274        else if (deniedFile || deniedPlatform)
275        {
276          path = "- denied -";
277        }
278        String inputName= "datafile."+dft.getId();
279        recentFiles = (List<File>)cc.getRecent(dc, Item.FILE, dft.getExternalId());       
280       
281        %>
282        <tr>
283          <td class="prompt"><%=HTML.encodeTags(dft.getName())%>
284          <%
285          if (!isPartOfPlatform && !deniedPlatform)
286          {
287            hasNonPlatformFiles = true;
288            %>
289            <base:icon image="warning.gif" tooltip="This file is not part of the platform" />
290            <%
291          }
292          %>
293          </td>
294          <td>
295            <table border="0" cellspacing="0" cellpadding="0">
296            <tr>
297              <td>     
298                <input <%=isRequired ? requiredClazz : clazz%> type="text" 
299                name="<%=inputName%>" value="<%=HTML.encodeTags(path)%>"
300                size="50" title="<%=HTML.encodeTags(dft.getDescription())%>"
301                <%=deniedFile || deniedPlatform ? "disabled" : "" %>
302                onchange="fileOnChange('<%=inputName%>', <%=affectCheckboxes %>)">&nbsp;
303              </td>
304              <td><base:button 
305                  title="Browse&hellip;"
306                  onclick="<%="browseOnClick('"+inputName+"', '" + HTML.javaScriptEncode(extension) + "', "+ affectCheckboxes + ")"%>"
307                  disabled="<%=deniedFile || deniedPlatform %>"
308                  />
309              </td>
310            </tr>
311            </table>
312          </td>
313        </tr>
314        <tr>
315          <td align="right"></td>
316          <td>
317          <%
318          if (recentFiles != null && recentFiles.size() > 0)
319          {
320            %>
321            <select name="recent.<%=inputName%>" onchange="recentOnChange('<%=inputName%>', <%=affectCheckboxes%>)">
322            <option value="">- recently used -
323            <option value="">- clear -
324            <%
325            for (File recent : recentFiles)
326            {
327              %>
328              <option value="<%=recent.getId()%>"><%=HTML.encodeTags(recent.getPath().toString())%>
329              <%
330            }
331            %>
332            </select>
333            <%
334          }
335          %>
336          </td>
337        </tr>
338        <%
339      }
340      if (validationSupport)
341      {
342      %>
343      <tr>
344        <td class="prompt">Validate</td>
345        <td><input type="checkbox" value="1" <%=activateCheckBoxes ? "" : "disabled"%> name="datafiles.validate"></td>
346      </tr>
347      <%
348      }
349      if (metadataSupport)
350      {
351      %>
352      <tr>
353        <td class="prompt">Extract metadata</td>
354        <td><input type="checkbox" value="1" <%=activateCheckBoxes ? "" : "disabled"%> name="datafiles.metadata"></td>
355      </tr>
356      <%
357      }
358      %>
359      </table>
360      <%
361      if (platform != null && hasNonPlatformFiles)
362      {
363        %>
364        <div align="right">
365        <base:icon image="warning.gif" /> 
366        = The file type is not part of the <i><%=HTML.encodeTags(platform.getName())%></i> platform
367        </div>
368        <%
369      }
370      %>
371      <%
372    }
373    %>
374
375    </form>
376   
377  </base:body>
378  </base:page>
379  <%
380}
381finally
382{
383  if (dc != null) dc.close();
384}
385%>
Note: See TracBrowser for help on using the repository browser.