source: trunk/www/common/datafiles/list_files.jsp @ 5939

Last change on this file since 5939 was 5939, checked in by Nicklas Nordborg, 10 years ago

References #1655: GUI improvements

View pages for:

  • File server
  • Projects
  • Permission templates
  • Physical, derived and raw bioassays
  • Experiments, bioassay set
  • Formulas
  • Reporters
  • Reporter lists
  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Id
File size: 10.2 KB
Line 
1<%-- $Id: list_files.jsp 5939 2012-01-30 14:42:18Z nicklas $
2  ------------------------------------------------------------------
3  Copyright (C) 2006 Jari Häkkinen, Nicklas Nordborg, Martin Svensson
4
5  This file is part of BASE - BioArray Software Environment.
6  Available at http://base.thep.lu.se/
7
8  BASE is free software; you can redistribute it and/or
9  modify it under the terms of the GNU General Public License
10  as published by the Free Software Foundation; either version 3
11  of the License, or (at your option) any later version.
12
13  BASE is distributed in the hope that it will be useful,
14  but WITHOUT ANY WARRANTY; without even the implied warranty of
15  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  GNU General Public License for more details.
17
18  You should have received a copy of the GNU General Public License
19  along with BASE. If not, see <http://www.gnu.org/licenses/>.
20  ------------------------------------------------------------------
21
22  @author Nicklas
23  @version 2.0
24--%>
25<%@ page pageEncoding="UTF-8" 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.Permission"
31  import="net.sf.basedb.core.Platform"
32  import="net.sf.basedb.core.PlatformVariant"
33  import="net.sf.basedb.core.PlatformFileType"
34  import="net.sf.basedb.core.DataFileType"
35  import="net.sf.basedb.core.Subtypable"
36  import="net.sf.basedb.core.ItemSubtype"
37  import="net.sf.basedb.core.FileSet"
38  import="net.sf.basedb.core.FileSetMember"
39  import="net.sf.basedb.core.File"
40  import="net.sf.basedb.core.FileStoreEnabled"
41  import="net.sf.basedb.core.UsableDataFileType"
42  import="net.sf.basedb.core.ItemSubtypeFileType"
43  import="net.sf.basedb.core.Nameable"
44  import="net.sf.basedb.core.ItemQuery"
45  import="net.sf.basedb.core.ItemResultList"
46  import="net.sf.basedb.core.PermissionDeniedException"
47  import="net.sf.basedb.core.query.Orders"
48  import="net.sf.basedb.core.query.Expressions"
49  import="net.sf.basedb.core.query.Restrictions"
50  import="net.sf.basedb.core.query.Hql"
51  import="net.sf.basedb.util.NameableComparator"
52  import="net.sf.basedb.clients.web.Base"
53  import="net.sf.basedb.clients.web.util.HTML"
54  import="net.sf.basedb.util.formatter.Formatter"
55  import="net.sf.basedb.clients.web.formatter.FormatterFactory"
56  import="net.sf.basedb.util.Values"
57  import="java.util.Map"
58  import="java.util.Set"
59  import="java.util.HashSet"
60  import="java.util.HashMap"
61  import="java.util.List"
62  import="java.util.LinkedList"
63  import="java.util.Collection"
64%>
65<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
66<%@ taglib prefix="tbl" uri="/WEB-INF/table.tld" %>
67<%!
68
69private static class DataFile
70{
71  final DataFileType type;
72  final FileSetMember member;
73  final FileStoreEnabled parent;
74  DataFile(DataFileType type, FileSetMember member, FileStoreEnabled parent)
75  {
76    this.type = type;
77    this.member = member;
78    this.parent = parent;
79  }
80}
81
82%>
83<%
84final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
85final String ID = sc.getId();
86final Item itemType = Item.valueOf(request.getParameter("item_type"));
87final int itemId = Values.getInt(request.getParameter("item_id"));
88final float scale = Base.getScale(sc);
89final DbControl dc = sc.newDbControl();
90final ItemContext cc = sc.getCurrentContext(itemType);
91final String root = request.getContextPath() + "/";
92
93try
94{
95  final FileStoreEnabled item = (FileStoreEnabled)itemType.getById(dc, itemId);
96  final FileSet fileSet = item.hasFileSet() ? item.getFileSet() : null;
97  Collection<FileSet> parents = null;
98  try
99  {
100    parents = item.getParentFileSets();
101  }
102  catch (Throwable t)
103  {}
104 
105  Platform platform = null;
106  PlatformVariant variant = null;
107  ItemSubtype subtype = null;
108  try
109  {
110    platform = item.getPlatform();
111    variant = item.getVariant();
112  }
113  catch (Throwable t)
114  {}
115  if (item instanceof Subtypable)
116  {
117    try
118    {
119      subtype = ((Subtypable)item).getItemSubtype();
120    }
121    catch (Throwable t)
122    {}
123  }
124 
125  // Load member file types
126  List<DataFile> members = new LinkedList<DataFile>();
127  Set<DataFileType> existing = new HashSet<DataFileType>();
128  if (fileSet != null)
129  {
130    ItemQuery<FileSetMember> query = fileSet.getMembers();
131    query.order(Orders.asc(Hql.property("dataFileType.name")));
132    query.order(Orders.asc(Hql.property("file.name")));
133    for (FileSetMember member : query.list(dc))
134    {
135      DataFileType dft = null;
136      try
137      {
138        dft = member.getDataFileType();
139        existing.add(dft);
140      }
141      catch (Throwable t)
142      {}
143      members.add(new DataFile(dft, member, null));
144    }
145  }
146  int numMembers = members.size();
147  if (parents != null && !parents.isEmpty())
148  {
149    for (FileSet pFileSet : parents)
150    {
151      try
152      {
153        FileStoreEnabled  parent = pFileSet.getItem();
154        for (FileSetMember pMember : pFileSet.getMembers().list(dc))
155        {
156          DataFileType dft = null;
157          try
158          {
159            dft = pMember.getDataFileType();
160          }
161          catch (Throwable t)
162          {}
163          members.add(new DataFile(dft, pMember, parent));
164        }
165      }
166      catch (Throwable t)
167      {}
168    }
169  }
170  int numParents = members.size() - numMembers;
171 
172
173  // Load platform file types
174  Map<DataFileType, UsableDataFileType> usableFileTypes =
175    new HashMap<DataFileType, UsableDataFileType>();
176  if (platform != null)
177  {
178    ItemQuery<PlatformFileType> query = platform.getFileTypes(variant, variant == null);
179    for (PlatformFileType pft : query.list(dc))
180    {
181      DataFileType dft = null;
182      try
183      {
184        dft = pft.getDataFileType();
185        usableFileTypes.put(dft, pft);
186        if (dft.getItemType() == itemType && !existing.contains(dft))
187        {
188          members.add(new DataFile(dft, null, null));
189        }
190      }
191      catch (Throwable t)
192      {}
193    }
194  }
195 
196  // Load subtype-related file types
197  if (subtype != null)
198  {
199    ItemQuery<ItemSubtypeFileType> query = subtype.getDataFileTypes();
200    for (ItemSubtypeFileType sft : query.list(dc))
201    {
202      DataFileType dft = null;
203      try
204      {
205        dft = sft.getDataFileType();
206        usableFileTypes.put(dft, sft);
207        if (dft.getItemType() == itemType && !existing.contains(dft))
208        {
209          members.add(new DataFile(dft, null, null));
210        }
211      }
212      catch (Throwable t)
213      {}
214    }
215  }
216  %>
217  <base:page type="include">
218  <base:body>
219    <base:section 
220      id="datafiles" 
221      title="<%="Data files (" + (numMembers + numParents) +")"%>"
222      context="<%=cc%>">
223      <%
224      if (members.size() == 0)
225      {
226        %>
227        <div class="messagecontainer note">
228        No files have been added to this item
229        (or you don't have permission to view them).
230        </div>
231        <%
232      }
233      else
234      {
235        %>
236        <tbl:table
237          id="datafiles"
238          columns="all"
239          >
240          <tbl:columndef 
241            id="type"
242            title="Type"
243          />
244          <tbl:columndef 
245            id="file"
246            title="File"
247          />
248          <tbl:columndef 
249            id="required"
250            title="Required"
251          />
252          <tbl:columndef 
253            id="validation"
254            title="Validation"
255          />
256          <tbl:data>
257            <tbl:headers>
258              <tbl:headerrow>
259                <tbl:columnheaders />
260              </tbl:headerrow>
261            </tbl:headers>
262            <tbl:rows>
263            <%
264            for (DataFile dataFile : members)
265            {
266              FileSetMember member = dataFile.member;
267              DataFileType dft = dataFile.type;
268              FileStoreEnabled parent = dataFile.parent;
269              Boolean validFile = null;
270              String validationMessage = "";
271              boolean readFile = true;
272              File file = null;
273              boolean readDataFileType = true;
274              if (member != null)
275              {
276                try
277                {
278                  file = member.getFile();
279                }
280                catch (PermissionDeniedException ex)
281                {
282                  readFile = false;
283                }
284                try
285                {
286                  dft = member.getDataFileType();
287                }
288                catch (PermissionDeniedException ex)
289                {
290                  readDataFileType = false;
291                }
292              }
293              UsableDataFileType uft = usableFileTypes.get(dft);
294              boolean isRequired = uft == null ? false : uft.isRequired();
295              boolean isPartOfPlatform = uft != null || (subtype != null && subtype.isAssociatedDataFileType(dft));
296              String icon = null;
297              if (member == null)
298              {
299                if (isRequired)
300                {
301                  icon = "warning.gif";
302                  validationMessage = "Missing a required file";
303                }
304              }
305              else 
306              {
307                validFile = member.isValid();
308                if (Boolean.FALSE.equals(validFile))
309                {
310                  validationMessage = HTML.encodeTags(member.getErrorMessage());
311                  icon = "error.png";
312                }
313                else if (!isPartOfPlatform)
314                {
315                  icon = "warning.gif";
316                  if (platform != null)
317                  {
318                    validationMessage = "This file is not part of the <i>" + HTML.encodeTags(platform.getName()) + "</i> platform";
319                  }
320                  else if (subtype != null)
321                  {
322                    validationMessage = "This file is not part of the <i>" + HTML.encodeTags(subtype.getName()) + "</i> subtype";
323                  }
324                }
325                else if (Boolean.TRUE.equals(validFile))
326                {
327                  if (member.getErrorMessage() != null)
328                  {
329                    validationMessage = HTML.encodeTags(member.getErrorMessage());
330                    icon = "warning.gif";
331                  }
332                  else
333                  {
334                    validationMessage = "Ok";
335                    icon = "ok.png";
336                  }
337                }
338                else
339                {
340                  validationMessage = "<i>- not validated -</i>";
341                }
342              }
343              %>
344              <tbl:row>
345                <tbl:cell column="type"><base:icon 
346                    image="deleted.gif" 
347                    tooltip="This item has been scheduled for deletion" 
348                    visible="<%=dft != null && dft.isRemoved()%>"
349                  /><%=Base.getLinkedName(ID, dft, !readDataFileType, true)%></tbl:cell>
350                <tbl:cell column="file"><base:icon 
351                    image="deleted.gif" 
352                    tooltip="This item has been scheduled for deletion" 
353                    visible="<%=file != null && file.isRemoved()%>"
354                  />
355                  <%=Base.getLinkedFile(ID, file, !readFile, true, true, root)%>
356                  <%
357                  if (parent != null)
358                  {
359                    %>
360                    <i>(inherited from <%=Base.getLinkedName(ID, (Nameable)parent, false, true)%>)</i>
361                    <%
362                  }
363                  %>
364                </tbl:cell>
365                <tbl:cell column="required"><%=isRequired ? "yes" : "no" %></tbl:cell>
366                <tbl:cell column="validation">
367                  <base:icon image="<%=icon%>" visible="<%=icon != null %>" /> 
368                  <%=validationMessage %>
369                </tbl:cell>
370              </tbl:row>
371              <%
372            }
373            %>
374            </tbl:rows>
375          </tbl:data>
376        </tbl:table>
377        <%
378      }
379      %>
380    </base:section>
381  </base:body>
382  </base:page>
383  <%
384}
385finally
386{
387  if (dc != null) dc.close();
388}
389
390%>
Note: See TracBrowser for help on using the repository browser.