www/filemanager/upload/drag_drop_upload.jsp

Code
Comments
Other
Rev Date Author Line
7987 30 Jun 21 nicklas 1 <%-- $Id: index.jsp 7954 2021-05-12 13:27:22Z nicklas $
7987 30 Jun 21 nicklas 2   ------------------------------------------------------------------
7987 30 Jun 21 nicklas 3   Copyright (C) 2021 Nicklas Nordborg
7987 30 Jun 21 nicklas 4
7987 30 Jun 21 nicklas 5   This file is part of BASE - BioArray Software Environment.
7987 30 Jun 21 nicklas 6   Available at http://base.thep.lu.se/
7987 30 Jun 21 nicklas 7
7987 30 Jun 21 nicklas 8   BASE is free software; you can redistribute it and/or
7987 30 Jun 21 nicklas 9   modify it under the terms of the GNU General Public License
7987 30 Jun 21 nicklas 10   as published by the Free Software Foundation; either version 3
7987 30 Jun 21 nicklas 11   of the License, or (at your option) any later version.
7987 30 Jun 21 nicklas 12
7987 30 Jun 21 nicklas 13   BASE is distributed in the hope that it will be useful,
7987 30 Jun 21 nicklas 14   but WITHOUT ANY WARRANTY; without even the implied warranty of
7987 30 Jun 21 nicklas 15   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
7987 30 Jun 21 nicklas 16   GNU General Public License for more details.
7987 30 Jun 21 nicklas 17
7987 30 Jun 21 nicklas 18   You should have received a copy of the GNU General Public License
7987 30 Jun 21 nicklas 19   along with BASE. If not, see <http://www.gnu.org/licenses/>.
7987 30 Jun 21 nicklas 20   ------------------------------------------------------------------
7987 30 Jun 21 nicklas 21
7987 30 Jun 21 nicklas 22   @author Nicklas
7987 30 Jun 21 nicklas 23 --%>
7987 30 Jun 21 nicklas 24 <%@ page pageEncoding="UTF-8" session="false"
7987 30 Jun 21 nicklas 25   import="net.sf.basedb.core.Application"
7987 30 Jun 21 nicklas 26   import="net.sf.basedb.core.SessionControl"
7987 30 Jun 21 nicklas 27   import="net.sf.basedb.core.DbControl"
7987 30 Jun 21 nicklas 28   import="net.sf.basedb.core.Config"
7987 30 Jun 21 nicklas 29   import="net.sf.basedb.core.Item"
7987 30 Jun 21 nicklas 30   import="net.sf.basedb.core.SystemItems"
7987 30 Jun 21 nicklas 31   import="net.sf.basedb.core.ItemContext"
7987 30 Jun 21 nicklas 32   import="net.sf.basedb.core.Permission"
7987 30 Jun 21 nicklas 33   import="net.sf.basedb.core.Directory"
7987 30 Jun 21 nicklas 34   import="net.sf.basedb.core.File"
7987 30 Jun 21 nicklas 35   import="net.sf.basedb.core.User"
7987 30 Jun 21 nicklas 36   import="net.sf.basedb.core.Group"
7987 30 Jun 21 nicklas 37   import="net.sf.basedb.core.Quota"
7987 30 Jun 21 nicklas 38   import="net.sf.basedb.core.QuotaType"
7987 30 Jun 21 nicklas 39   import="net.sf.basedb.core.ItemSubtype"
7987 30 Jun 21 nicklas 40   import="net.sf.basedb.core.Location"
7987 30 Jun 21 nicklas 41   import="net.sf.basedb.core.PluginDefinition"
7987 30 Jun 21 nicklas 42   import="net.sf.basedb.core.Include"
7987 30 Jun 21 nicklas 43   import="net.sf.basedb.core.ItemQuery"
7987 30 Jun 21 nicklas 44   import="net.sf.basedb.core.ItemResultList"
7987 30 Jun 21 nicklas 45   import="net.sf.basedb.core.PermissionDeniedException"
7987 30 Jun 21 nicklas 46   import="net.sf.basedb.core.BaseException"
7987 30 Jun 21 nicklas 47   import="net.sf.basedb.core.query.Orders"
7987 30 Jun 21 nicklas 48   import="net.sf.basedb.core.query.Hql"
7987 30 Jun 21 nicklas 49   import="net.sf.basedb.util.zip.FileUnpacker"
7987 30 Jun 21 nicklas 50   import="net.sf.basedb.clients.web.Base"
7987 30 Jun 21 nicklas 51   import="net.sf.basedb.clients.web.util.HTML"
7987 30 Jun 21 nicklas 52   import="net.sf.basedb.util.Values"
7987 30 Jun 21 nicklas 53   import="java.util.List"
7987 30 Jun 21 nicklas 54   import="java.util.Set"
7987 30 Jun 21 nicklas 55   import="java.util.HashSet"
7987 30 Jun 21 nicklas 56   import="java.nio.charset.Charset"
7987 30 Jun 21 nicklas 57   import="org.json.simple.JSONObject"
7987 30 Jun 21 nicklas 58   import="org.json.simple.JSONArray"
7987 30 Jun 21 nicklas 59 %>
7987 30 Jun 21 nicklas 60 <%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
7987 30 Jun 21 nicklas 61 <%@ taglib prefix="t" uri="/WEB-INF/tab.tld" %>
7987 30 Jun 21 nicklas 62 <%
7987 30 Jun 21 nicklas 63 final Item itemType = Item.FILE;
7987 30 Jun 21 nicklas 64 final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
7987 30 Jun 21 nicklas 65 final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, null);
7987 30 Jun 21 nicklas 66 final int itemId = cc.getId();
7987 30 Jun 21 nicklas 67 final String ID = sc.getId();
7987 30 Jun 21 nicklas 68 final float scale = Base.getScale(sc);
7987 30 Jun 21 nicklas 69 final DbControl dc = sc.newDbControl(":Drag drop file upload");
7987 30 Jun 21 nicklas 70 final int directoryId = Values.getInt(request.getParameter("toDir"));
7987 30 Jun 21 nicklas 71 final int numFiles = Values.getInt(request.getParameter("numFiles"));
7987 30 Jun 21 nicklas 72 try
7987 30 Jun 21 nicklas 73 {
7987 30 Jun 21 nicklas 74   final Directory dir = Directory.getById(dc, directoryId);
7990 01 Jul 21 nicklas 75   String numFilesText = numFiles == 1 ? "1 file" : numFiles+" files";
7990 01 Jul 21 nicklas 76   final String title = HTML.encodeTags("Uploading "+numFilesText+" to " + dir.getName());
8013 13 Aug 21 nicklas 77   
8013 13 Aug 21 nicklas 78   JSONArray jsonZipFormats = new JSONArray();
8013 13 Aug 21 nicklas 79   // Query to retreive FileUnpacker plugins
8013 13 Aug 21 nicklas 80   final ItemQuery<PluginDefinition> pluginQuery = PluginDefinition.getQuery(null, "net.sf.basedb.util.zip.FileUnpacker");
8013 13 Aug 21 nicklas 81   pluginQuery.order(Orders.asc(Hql.property("name")));
8013 13 Aug 21 nicklas 82   pluginQuery.include(Include.MINE, Include.SHARED, Include.IN_PROJECT, Include.OTHERS);
8013 13 Aug 21 nicklas 83   List<PluginDefinition> plugins = pluginQuery.list(dc);
8013 13 Aug 21 nicklas 84   for (PluginDefinition plugin : plugins)
8013 13 Aug 21 nicklas 85   {
8013 13 Aug 21 nicklas 86     FileUnpacker unpacker = plugin.newInstance(FileUnpacker.class, sc, null, null);
8013 13 Aug 21 nicklas 87     JSONObject jsonZipFormat = new JSONObject();
8013 13 Aug 21 nicklas 88     jsonZipFormat.put("id", plugin.getId());
8013 13 Aug 21 nicklas 89     jsonZipFormat.put("name", unpacker.getFormatName());
8013 13 Aug 21 nicklas 90     JSONArray jsonExtensions = new JSONArray();
8013 13 Aug 21 nicklas 91     jsonExtensions.addAll(unpacker.getExtensions());
8013 13 Aug 21 nicklas 92     jsonZipFormat.put("extensions", jsonExtensions);
8013 13 Aug 21 nicklas 93     jsonZipFormats.add(jsonZipFormat);
8013 13 Aug 21 nicklas 94   }
7987 30 Jun 21 nicklas 95   %>
7987 30 Jun 21 nicklas 96   <base:page type="popup" title="<%=title%>">
7990 01 Jul 21 nicklas 97   <base:head scripts="~drag_drop_upload.js" styles="progressbar.css">
7990 01 Jul 21 nicklas 98   
7990 01 Jul 21 nicklas 99   <style>
7990 01 Jul 21 nicklas 100   .filelist tr
7990 01 Jul 21 nicklas 101   {
7990 01 Jul 21 nicklas 102     border-bottom-width: 1px;
7990 01 Jul 21 nicklas 103     border-bottom-style: dotted;
7990 01 Jul 21 nicklas 104   }
7990 01 Jul 21 nicklas 105   .filelist td
7990 01 Jul 21 nicklas 106   {
7990 01 Jul 21 nicklas 107     white-space: nowrap;
7990 01 Jul 21 nicklas 108     max-width: 45em;
7990 01 Jul 21 nicklas 109     overflow: hidden;
7990 01 Jul 21 nicklas 110   }
7990 01 Jul 21 nicklas 111   .file td
7990 01 Jul 21 nicklas 112   {
7990 01 Jul 21 nicklas 113     padding: 1px 0.5em 1px 2px;
7990 01 Jul 21 nicklas 114   }
7990 01 Jul 21 nicklas 115   .folder
7990 01 Jul 21 nicklas 116   {
7990 01 Jul 21 nicklas 117     font-weight: bold;
7990 01 Jul 21 nicklas 118   }
7990 01 Jul 21 nicklas 119   .folder td:before
7990 01 Jul 21 nicklas 120   {
7990 01 Jul 21 nicklas 121     content: url('../../images/joust/folder-open.png');
7990 01 Jul 21 nicklas 122     vertical-align: -25%;
7990 01 Jul 21 nicklas 123     padding-right: 0.25em;
7990 01 Jul 21 nicklas 124   }
7990 01 Jul 21 nicklas 125   .pad
7990 01 Jul 21 nicklas 126   {
7990 01 Jul 21 nicklas 127     width: 20px;
7990 01 Jul 21 nicklas 128   }
7990 01 Jul 21 nicklas 129   .size, .morefiles
7990 01 Jul 21 nicklas 130   {
7990 01 Jul 21 nicklas 131     color: #777777;
7990 01 Jul 21 nicklas 132     font-style: italic;
7990 01 Jul 21 nicklas 133   }
7990 01 Jul 21 nicklas 134   </style>
7990 01 Jul 21 nicklas 135   </base:head>
7987 30 Jun 21 nicklas 136   <base:body>
7987 30 Jun 21 nicklas 137   
7987 30 Jun 21 nicklas 138   <div id="page-data" class="datacontainer"
7987 30 Jun 21 nicklas 139     data-directory-id="<%=directoryId%>"
7988 30 Jun 21 nicklas 140     data-directory-path="<%=HTML.encodeTags(dir.getPath().toString()) %>"
8013 13 Aug 21 nicklas 141     data-zip-formats="<%=HTML.encodeTags(jsonZipFormats.toJSONString()) %>"
7987 30 Jun 21 nicklas 142   ></div>
7987 30 Jun 21 nicklas 143
7990 01 Jul 21 nicklas 144   <div id="preUploadForm" class="absolutefull">
7990 01 Jul 21 nicklas 145     <h1 class="docked" id="mainTitle"><%=title %></h1>
7990 01 Jul 21 nicklas 146     <form name="upload">
7987 30 Jun 21 nicklas 147     <div class="content">
7990 01 Jul 21 nicklas 148       <table class="fullform input100 bottomborder">
8013 13 Aug 21 nicklas 149       <tr>
7990 01 Jul 21 nicklas 150         <th>Overwrite existing</th>
7990 01 Jul 21 nicklas 151         <td>
7990 01 Jul 21 nicklas 152           <label><input type="radio" name="overwrite" id="overwriteAlways" value="always">Always</label>
7990 01 Jul 21 nicklas 153           <label><input type="radio" name="overwrite" id="overwriteNever" value="never">Never</label>
7990 01 Jul 21 nicklas 154           <label><input type="radio" name="overwrite" id="overwriteSize" value="skipOrReplaceSize" checked>If different size</label>
7990 01 Jul 21 nicklas 155         </td>
7990 01 Jul 21 nicklas 156         <td></td>
7990 01 Jul 21 nicklas 157       </tr>
8013 13 Aug 21 nicklas 158       <tr id="unpackSection" style="display: none;">
8013 13 Aug 21 nicklas 159         <th class="subprompt"></th>
8013 13 Aug 21 nicklas 160         <td>
8013 13 Aug 21 nicklas 161           <label><input type="checkbox" name="unpackCompressed" id="unpackCompressed">Unpack compressed files</label>
8013 13 Aug 21 nicklas 162         </td>
8013 13 Aug 21 nicklas 163         <td></td>
8013 13 Aug 21 nicklas 164       </tr>
8013 13 Aug 21 nicklas 165       <tr class="big topborder" style="border-top-style: dotted;">
7990 01 Jul 21 nicklas 166         <th>Files</th>
7990 01 Jul 21 nicklas 167         <td colspan="2">
7990 01 Jul 21 nicklas 168           <div id="allFiles" style="height: 18em; max-height: 18em; overflow: auto;">
7990 01 Jul 21 nicklas 169           <img src="../../images/loading.gif" style="vertical-align: -14px;"><i>Please wait, loading information about dropped files...</i>
7990 01 Jul 21 nicklas 170           </div>
7990 01 Jul 21 nicklas 171         </td>
7990 01 Jul 21 nicklas 172       </tr>
7990 01 Jul 21 nicklas 173       <tr class="dynamic">
7990 01 Jul 21 nicklas 174         <th>Description</th>
7990 01 Jul 21 nicklas 175         <td>
7990 01 Jul 21 nicklas 176           <textarea class="text" rows="4" name="description" id="description"
7990 01 Jul 21 nicklas 177             ></textarea>
7990 01 Jul 21 nicklas 178         </td>
7990 01 Jul 21 nicklas 179         <td style="width: 20px;">
7990 01 Jul 21 nicklas 180           <base:zoom textarea="description" title="Description" />
7990 01 Jul 21 nicklas 181         </td>
7990 01 Jul 21 nicklas 182       </tr>
7990 01 Jul 21 nicklas 183       </table>
7990 01 Jul 21 nicklas 184     </div>
7990 01 Jul 21 nicklas 185     </form>
7990 01 Jul 21 nicklas 186     
7990 01 Jul 21 nicklas 187     <base:buttongroup subclass="dialogbuttons">
7990 01 Jul 21 nicklas 188       <base:button id="btnUpload" image="upload.png" title="Start upload" subclass="disabled" />
7990 01 Jul 21 nicklas 189       <base:button id="close" title="Cancel" />
7990 01 Jul 21 nicklas 190     </base:buttongroup>
7990 01 Jul 21 nicklas 191   </div>
7990 01 Jul 21 nicklas 192
7990 01 Jul 21 nicklas 193   <div id="progressForm" class="absolutefull" style="display: none;">
7990 01 Jul 21 nicklas 194     <h1 class="docked" id="progressTitle"><%=title %></h1>
7990 01 Jul 21 nicklas 195     <div class="content">
7987 30 Jun 21 nicklas 196       <table class="fullcc bg-filled-50 bottomborder"><tr><td>
7987 30 Jun 21 nicklas 197         <table class="progressbar" style="width: 100%;">
7987 30 Jun 21 nicklas 198         <tr>
7987 30 Jun 21 nicklas 199           <td style="width: 2em;"></td>
7987 30 Jun 21 nicklas 200           <td style="">
7987 30 Jun 21 nicklas 201             <table class="bar" style="width: 100%;">
7987 30 Jun 21 nicklas 202             <tr>
7987 30 Jun 21 nicklas 203               <td style="width: 0%;" class="percentDone" id="percentDone">&nbsp;</td>
7987 30 Jun 21 nicklas 204               <td style="width: 100%;" class="percentRemain" id="percentRemain">&nbsp;</td>
7987 30 Jun 21 nicklas 205             </tr>
7987 30 Jun 21 nicklas 206             </table>
7987 30 Jun 21 nicklas 207           </td>
7987 30 Jun 21 nicklas 208           <td style="width: 3em;" class="percentText" id="percentText">0%</td>
7987 30 Jun 21 nicklas 209           <td style="width: 2em;"></td>
7987 30 Jun 21 nicklas 210         </tr>
7987 30 Jun 21 nicklas 211         <tr>
7987 30 Jun 21 nicklas 212           <td></td>
7987 30 Jun 21 nicklas 213           <td colspan="2" style="text-align: left;">
7987 30 Jun 21 nicklas 214             <table class="transfer-info">
7990 01 Jul 21 nicklas 215             <tr><th>#</th><td><span id="fileCount"></span></td></tr>
7987 30 Jun 21 nicklas 216             <tr><th>File</th><td><span id="fileName"></span></td></tr>
7988 30 Jun 21 nicklas 217             <tr><th>Path</th><td><span id="path"></span></td></tr>
7990 01 Jul 21 nicklas 218             <tr><th>Transferred</th><td><span id="transferredBytes">0 bytes</span> of <span id="totalBytes">unknown</span><span id="skippedBytes"></span></span></td></tr>
7987 30 Jun 21 nicklas 219             <tr><th>Time</th><td><span id="transferTime">0s</span> <span id="transferRate"></span></td></tr>
7987 30 Jun 21 nicklas 220             <tr><th>Remain</th><td><span id="remainTime">unknown</span></td></tr>
7987 30 Jun 21 nicklas 221             <tr><td colspan="2"><span id="message"></span></td></tr>
7987 30 Jun 21 nicklas 222             </table>
7987 30 Jun 21 nicklas 223           </td>
7987 30 Jun 21 nicklas 224           <td></td>
7987 30 Jun 21 nicklas 225         </tr>
7987 30 Jun 21 nicklas 226         </table>
7987 30 Jun 21 nicklas 227       </td>
7987 30 Jun 21 nicklas 228       </tr>
7987 30 Jun 21 nicklas 229       </table>
7987 30 Jun 21 nicklas 230     </div>
7987 30 Jun 21 nicklas 231     
7987 30 Jun 21 nicklas 232     <base:buttongroup subclass="dialogbuttons">
7987 30 Jun 21 nicklas 233       <base:button id="btnAbort" image="cancel.png" title="Abort..." />
7987 30 Jun 21 nicklas 234     </base:buttongroup>
7987 30 Jun 21 nicklas 235   </div>
7987 30 Jun 21 nicklas 236   
7987 30 Jun 21 nicklas 237   <div id="uploadFailed" class="absolutefull" style="display:none;">
7987 30 Jun 21 nicklas 238     <h1 class="docked" id="failTitle">Upload failed</h1>
7987 30 Jun 21 nicklas 239     <div class="content bg-filled-50 bottomborder">
7987 30 Jun 21 nicklas 240       <table style="margin: auto; height: 100%;">
7987 30 Jun 21 nicklas 241       <tr><td>
7987 30 Jun 21 nicklas 242         <div class="messagecontainer error" id="failMessage" style="width: 30em; text-align: center;">
7987 30 Jun 21 nicklas 243         </div>
7987 30 Jun 21 nicklas 244       </td></tr>
7987 30 Jun 21 nicklas 245       </table>
7987 30 Jun 21 nicklas 246     </div>
7987 30 Jun 21 nicklas 247
7987 30 Jun 21 nicklas 248     <base:buttongroup subclass="dialogbuttons">
7987 30 Jun 21 nicklas 249       <base:button id="failClose" title="Close" />
7987 30 Jun 21 nicklas 250     </base:buttongroup>
7987 30 Jun 21 nicklas 251   </div>
7987 30 Jun 21 nicklas 252   
7987 30 Jun 21 nicklas 253   
7987 30 Jun 21 nicklas 254   </base:body>
7987 30 Jun 21 nicklas 255   </base:page>
7987 30 Jun 21 nicklas 256   <%
7987 30 Jun 21 nicklas 257 }
7987 30 Jun 21 nicklas 258 finally
7987 30 Jun 21 nicklas 259 {
7987 30 Jun 21 nicklas 260   if (dc != null) dc.close();
7987 30 Jun 21 nicklas 261 }
7987 30 Jun 21 nicklas 262 %>
7987 30 Jun 21 nicklas 263
7987 30 Jun 21 nicklas 264
7987 30 Jun 21 nicklas 265