Author: solomax
Date: Wed Jan 18 12:05:51 2017
New Revision: 1779316

URL: http://svn.apache.org/viewvc?rev=1779316&view=rev
Log:
[OPENMEETINGS-1527] initial work on code clean-up

Added:
    
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/DownloadMenuItem.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/DownloadMenuItem.java
Modified:
    
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemTree.java
    
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java
    
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/UploadDialog.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemTree.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/UploadDialog.java

Added: 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/DownloadMenuItem.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/DownloadMenuItem.java?rev=1779316&view=auto
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/DownloadMenuItem.java
 (added)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/DownloadMenuItem.java
 Wed Jan 18 12:05:51 2017
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.common.tree;
+
+import java.io.File;
+
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.util.resource.FileResourceStream;
+
+import com.googlecode.wicket.jquery.ui.JQueryIcon;
+import com.googlecode.wicket.jquery.ui.widget.menu.MenuItem;
+
+public class DownloadMenuItem extends MenuItem {
+       private static final long serialVersionUID = 1L;
+       private final String ext;
+       private final FileTreePanel tree;
+
+       public DownloadMenuItem(String title, FileTreePanel tree, String ext) {
+               super(title, JQueryIcon.ARROWTHICKSTOP_1_S);
+               this.ext = ext;
+               this.tree = tree;
+       }
+
+       @Override
+       public boolean isEnabled() {
+               File f = tree.getLastSelected().getFile(ext);
+               return f != null && f.exists();
+       }
+
+       @Override
+       public void onClick(AjaxRequestTarget target) {
+               File f = tree.getLastSelected().getFile(ext);
+               tree.downloader.setFileName(f.getName());
+               tree.downloader.setResourceStream(new FileResourceStream(f));
+               tree.downloader.initiate(target);
+       }
+}

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemTree.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemTree.java?rev=1779316&r1=1779315&r2=1779316&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemTree.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemTree.java
 Wed Jan 18 12:05:51 2017
@@ -58,7 +58,7 @@ public class FileItemTree extends Defaul
                        shift = o.optBoolean(PARAM_SHIFT);
                        ctrl = o.optBoolean(PARAM_CTRL);
                }
-               treePanel.setSelected(f, target, shift, ctrl);
+               treePanel.select(f, target, shift, ctrl);
                if (Type.Folder == f.getType() && getState(f) == 
State.COLLAPSED) {
                        this.expand(f);
                } else {
@@ -78,13 +78,14 @@ public class FileItemTree extends Defaul
                        @Override
                        protected Component newLabelComponent(String id, final 
IModel<FileItem> lm) {
                                FileItem r = lm.getObject();
-                               return Type.Folder == r.getType() || r.getId() 
== null ? new FolderPanel(id, lm, treePanel) : new FileItemPanel(id, lm, 
treePanel);
+                               return Type.Folder == r.getType() || r.getId() 
== null
+                                               ? new FolderPanel(id, lm, 
treePanel)
+                                               : new FileItemPanel(id, lm, 
treePanel);
                        }
 
                        @Override
                        protected boolean isSelected() {
-                               FileItem f = getModelObject(), s = 
treePanel.getSelected();
-                               return s.getHash().equals(f.getHash());
+                               return treePanel.isSelected(getModelObject());
                        }
 
                        @Override

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java?rev=1779316&r1=1779315&r2=1779316&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java
 Wed Jan 18 12:05:51 2017
@@ -24,10 +24,12 @@ import static org.apache.openmeetings.ut
 import static org.apache.openmeetings.web.app.Application.getBean;
 import static org.apache.openmeetings.web.app.WebSession.getUserId;
 
-import java.io.File;
 import java.util.ArrayList;
 import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
 import java.util.UUID;
 
 import org.apache.openmeetings.db.dao.file.FileExplorerItemDao;
@@ -48,28 +50,25 @@ import org.apache.wicket.markup.html.Web
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.markup.html.panel.Panel;
-import org.apache.wicket.model.CompoundPropertyModel;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
-import org.apache.wicket.util.resource.FileResourceStream;
 
 import com.googlecode.wicket.jquery.core.JQueryBehavior;
 import com.googlecode.wicket.jquery.core.Options;
 import com.googlecode.wicket.jquery.core.ajax.IJQueryAjaxAware;
 import com.googlecode.wicket.jquery.core.ajax.JQueryAjaxBehavior;
-import com.googlecode.wicket.jquery.ui.JQueryIcon;
 import com.googlecode.wicket.jquery.ui.form.button.AjaxSplitButton;
 import com.googlecode.wicket.jquery.ui.interaction.droppable.Droppable;
 import com.googlecode.wicket.jquery.ui.interaction.droppable.DroppableBehavior;
 import com.googlecode.wicket.jquery.ui.widget.menu.IMenuItem;
-import com.googlecode.wicket.jquery.ui.widget.menu.MenuItem;
 
 public abstract class FileTreePanel extends Panel {
        private static final long serialVersionUID = 1L;
        final WebMarkupContainer trees = new 
WebMarkupContainer("tree-container");
        private final WebMarkupContainer sizes = new 
WebMarkupContainer("sizes");
-       private final IModel<FileItem> selected = new 
CompoundPropertyModel<FileItem>((FileItem)null);
-       private final AjaxDownload downloader = new AjaxDownload();
+       private FileItem lastSelected = null;
+       private Map<String, FileItem> selected = new HashMap<>();
+       final AjaxDownload downloader = new AjaxDownload();
        protected final IModel<String> homeSize = Model.of((String)null);
        protected final IModel<String> publicSize = Model.of((String)null);
        final ConvertingErrorsDialog errorsDialog = new 
ConvertingErrorsDialog("errors", Model.of((Recording)null));
@@ -82,7 +81,7 @@ public abstract class FileTreePanel exte
                super(id);
                this.addFolder = addFolder;
                OmTreeProvider tp = new OmTreeProvider(roomId);
-               setSelected(tp.getRoot(), null, false, false);
+               select(tp.getRoot(), null, false, false);
                form.add(tree = new FileItemTree("tree", this, tp));
                
form.add(download.setVisible(false).setOutputMarkupPlaceholderTag(true));
                add(form.add(downloader));
@@ -164,15 +163,16 @@ public abstract class FileTreePanel exte
 
                        @Override
                        protected void onEvent(AjaxRequestTarget target) {
-                               FileItem f = selected.getObject();
-                               if (f != null && f.getId() != null) {
+                               if (!selected.isEmpty()) {
                                        super.onEvent(target);
                                }
                        }
 
                        @Override
                        protected void onSubmit(AjaxRequestTarget target, 
Form<?> form) {
-                               delete(selected.getObject(), target);
+                               for (Entry<String, FileItem> e : 
selected.entrySet()) {
+                                       delete(e.getValue(), target);
+                               }
                        }
                });
 
@@ -191,8 +191,8 @@ public abstract class FileTreePanel exte
        }
 
        void delete(FileItem f, IPartialPageRequestHandler handler) {
-               long id = f.getId();
-               if (id > 0) {
+               Long id = f.getId();
+               if (id != null) {
                        if (f instanceof Recording) {
                                
getBean(RecordingDao.class).delete((Recording)f);
                        } else {
@@ -205,7 +205,7 @@ public abstract class FileTreePanel exte
        protected abstract void update(AjaxRequestTarget target, FileItem f);
 
        public void createFolder(AjaxRequestTarget target, String name) {
-               FileItem p = selected.getObject();
+               FileItem p = lastSelected;
                boolean isRecording = p instanceof Recording;
                FileItem f = isRecording ? new Recording() : new 
FileExplorerItem();
                f.setName(name);
@@ -213,6 +213,7 @@ public abstract class FileTreePanel exte
                f.setInserted(new Date());
                f.setType(Type.Folder);
                f.setOwnerId(p.getOwnerId());
+               //TODO lastSelected.parent??
                f.setParentId(Type.Folder == p.getType() ? p.getId() : null);
                if (isRecording) {
                        Recording r = (Recording)f;
@@ -227,8 +228,12 @@ public abstract class FileTreePanel exte
 
        public abstract void updateSizes();
 
-       public FileItem getSelected() {
-               return selected.getObject();
+       public boolean isSelected(FileItem f) {
+               return selected.containsKey(f.getHash());
+       }
+
+       public FileItem getLastSelected() {
+               return lastSelected;
        }
 
        public void update(IPartialPageRequestHandler handler) {
@@ -246,19 +251,29 @@ public abstract class FileTreePanel exte
                }
        }
 
-       public void setSelected(FileItem fi, AjaxRequestTarget target, boolean 
shift, boolean ctrl) {
-               FileItem _prev = selected.getObject();
-               updateNode(target, _prev);
+       public void select(FileItem fi, AjaxRequestTarget target, boolean 
shift, boolean ctrl) {
+               updateNode(target, lastSelected);
+               if (ctrl) {
+                       if (isSelected(fi)) {
+                               selected.remove(fi.getId());
+                       } else {
+                               selected.put(fi.getHash(), fi);
+                       }
+               } else if (shift) {
+                       //search
+               } else {
+                       selected.clear();
+                       selected.put(fi.getHash(), fi);
+               }
+               lastSelected = fi;
+               updateNode(target, lastSelected);
                if (target != null) {
-                       target.add(download.setVisible(fi.getType() == 
Type.Presentation || fi.getType() == Type.Image));
+                       target.add(download.setVisible(lastSelected.getType() 
== Type.Presentation || lastSelected.getType() == Type.Image));
                }
-               selected.setObject(fi);
-               updateNode(target, fi);
        }
 
        @Override
        protected void onDetach() {
-               selected.detach();
                homeSize.detach();
                publicSize.detach();
                super.onDetach();
@@ -268,59 +283,11 @@ public abstract class FileTreePanel exte
                List<IMenuItem> list = new ArrayList<>();
 
                //original
-               list.add(new MenuItem(getString("files.download.original"), 
JQueryIcon.ARROWTHICKSTOP_1_S) {
-                       private static final long serialVersionUID = 1L;
-
-                       @Override
-                       public boolean isEnabled() {
-                               File f = selected.getObject().getFile();
-                               return f != null && f.exists();
-                       }
-
-                       @Override
-                       public void onClick(AjaxRequestTarget target) {
-                               File f = selected.getObject().getFile();
-                               downloader.setFileName(f.getName());
-                               downloader.setResourceStream(new 
FileResourceStream(f));
-                               downloader.initiate(target);
-                       }
-               });
+               list.add(new 
DownloadMenuItem(getString("files.download.original"), this, null));
                //pdf
-               list.add(new MenuItem(getString("files.download.pdf"), 
JQueryIcon.ARROWTHICKSTOP_1_S) {
-                       private static final long serialVersionUID = 1L;
-
-                       @Override
-                       public boolean isEnabled() {
-                               File f = 
selected.getObject().getFile(EXTENSION_PDF);
-                               return f != null && f.exists();
-                       }
-
-                       @Override
-                       public void onClick(AjaxRequestTarget target) {
-                               File f = 
selected.getObject().getFile(EXTENSION_PDF);
-                               downloader.setFileName(f.getName());
-                               downloader.setResourceStream(new 
FileResourceStream(f));
-                               downloader.initiate(target);
-                       }
-               });
+               list.add(new DownloadMenuItem(getString("files.download.pdf"), 
this, EXTENSION_PDF));
                //jpg
-               list.add(new MenuItem(getString("files.download.jpg"), 
JQueryIcon.ARROWTHICKSTOP_1_S) {
-                       private static final long serialVersionUID = 1L;
-
-                       @Override
-                       public boolean isEnabled() {
-                               File f = 
selected.getObject().getFile(EXTENSION_JPG);
-                               return f != null && f.exists();
-                       }
-
-                       @Override
-                       public void onClick(AjaxRequestTarget target) {
-                               File f = 
selected.getObject().getFile(EXTENSION_JPG);
-                               downloader.setFileName(f.getName());
-                               downloader.setResourceStream(new 
FileResourceStream(f));
-                               downloader.initiate(target);
-                       }
-               });
+               list.add(new DownloadMenuItem(getString("files.download.jpg"), 
this, EXTENSION_JPG));
                return list;
        }
 }

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/UploadDialog.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/UploadDialog.java?rev=1779316&r1=1779315&r2=1779316&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/UploadDialog.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/UploadDialog.java
 Wed Jan 18 12:05:51 2017
@@ -102,7 +102,7 @@ public class UploadDialog extends Abstra
                form.add(feedback.setOutputMarkupId(true), 
toWb.setOutputMarkupId(true)
                                , 
cleanBlock.add(cleanWb.setOutputMarkupId(true)).setVisible(false).setOutputMarkupPlaceholderTag(true))
                        .setOutputMarkupId(true);
-       
+
                form.setMultiPart(true);
                
form.setMaxSize(Bytes.bytes(getBean(ConfigurationDao.class).getMaxUploadSize()));
                // Model is necessary here to avoid writing image to the User 
object
@@ -113,11 +113,11 @@ public class UploadDialog extends Abstra
                        @Override
                        public void detach() {
                        }
-                       
+
                        @Override
                        public void setObject(List<FileUpload> object) {
                        }
-                       
+
                        @Override
                        public List<FileUpload> getObject() {
                                return null;
@@ -147,12 +147,12 @@ public class UploadDialog extends Abstra
                        super.onClick(target, button);
                }
        }
-       
+
        @Override
        protected List<DialogButton> getButtons() {
                return Arrays.asList(upload, cancel);
        }
-       
+
        @Override
        public DialogButton getSubmitButton() {
                return upload;
@@ -171,7 +171,7 @@ public class UploadDialog extends Abstra
                handler.add(form, fileName);
                handler.appendJavaScript(String.format("bindUpload('%s', 
'%s');", form.getMarkupId(), fileName.getMarkupId()));
        }
-       
+
        @Override
        protected void onError(AjaxRequestTarget target) {
                target.add(feedback);
@@ -184,7 +184,7 @@ public class UploadDialog extends Abstra
                        FileExplorerItem f = new FileExplorerItem();
                        f.setSize(fu.getSize());
                        f.setName(fu.getClientFileName());
-                       FileItem parent = roomFiles.getSelected();
+                       FileItem parent = roomFiles.getLastSelected();
                        if (parent == null || !(parent instanceof 
FileExplorerItem)) {
                                f.setOwnerId(getUserId());
                        } else {
@@ -195,7 +195,7 @@ public class UploadDialog extends Abstra
                                }
                        }
                        f.setInsertedBy(getUserId());
-                       
+
                        try {
                                ConverterProcessResultList logs = 
getBean(FileProcessor.class).processFile(getUserId(), f, fu.getInputStream());
                                for (Entry<String, ConverterProcessResult> 
entry : logs.getJobs().entrySet()) {

Added: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/DownloadMenuItem.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/DownloadMenuItem.java?rev=1779316&view=auto
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/DownloadMenuItem.java
 (added)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/DownloadMenuItem.java
 Wed Jan 18 12:05:51 2017
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.common.tree;
+
+import java.io.File;
+
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.util.resource.FileResourceStream;
+
+import com.googlecode.wicket.jquery.ui.JQueryIcon;
+import com.googlecode.wicket.jquery.ui.widget.menu.MenuItem;
+
+public class DownloadMenuItem extends MenuItem {
+       private static final long serialVersionUID = 1L;
+       private final String ext;
+       private final FileTreePanel tree;
+
+       public DownloadMenuItem(String title, FileTreePanel tree, String ext) {
+               super(title, JQueryIcon.ARROWTHICKSTOP_1_S);
+               this.ext = ext;
+               this.tree = tree;
+       }
+
+       @Override
+       public boolean isEnabled() {
+               File f = tree.getLastSelected().getFile(ext);
+               return f != null && f.exists();
+       }
+
+       @Override
+       public void onClick(AjaxRequestTarget target) {
+               File f = tree.getLastSelected().getFile(ext);
+               tree.downloader.setFileName(f.getName());
+               tree.downloader.setResourceStream(new FileResourceStream(f));
+               tree.downloader.initiate(target);
+       }
+}

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemTree.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemTree.java?rev=1779316&r1=1779315&r2=1779316&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemTree.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemTree.java
 Wed Jan 18 12:05:51 2017
@@ -58,7 +58,7 @@ public class FileItemTree extends Defaul
                        shift = o.optBoolean(PARAM_SHIFT);
                        ctrl = o.optBoolean(PARAM_CTRL);
                }
-               treePanel.setSelected(f, target, shift, ctrl);
+               treePanel.select(f, target, shift, ctrl);
                if (Type.Folder == f.getType() && getState(f) == 
State.COLLAPSED) {
                        this.expand(f);
                } else {
@@ -78,13 +78,14 @@ public class FileItemTree extends Defaul
                        @Override
                        protected Component newLabelComponent(String id, final 
IModel<FileItem> lm) {
                                FileItem r = lm.getObject();
-                               return Type.Folder == r.getType() || r.getId() 
== null ? new FolderPanel(id, lm, treePanel) : new FileItemPanel(id, lm, 
treePanel);
+                               return Type.Folder == r.getType() || r.getId() 
== null
+                                               ? new FolderPanel(id, lm, 
treePanel)
+                                               : new FileItemPanel(id, lm, 
treePanel);
                        }
 
                        @Override
                        protected boolean isSelected() {
-                               FileItem f = getModelObject(), s = 
treePanel.getSelected();
-                               return s.getHash().equals(f.getHash());
+                               return treePanel.isSelected(getModelObject());
                        }
 
                        @Override

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java?rev=1779316&r1=1779315&r2=1779316&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java
 Wed Jan 18 12:05:51 2017
@@ -24,10 +24,12 @@ import static org.apache.openmeetings.ut
 import static org.apache.openmeetings.web.app.Application.getBean;
 import static org.apache.openmeetings.web.app.WebSession.getUserId;
 
-import java.io.File;
 import java.util.ArrayList;
 import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
 import java.util.UUID;
 
 import org.apache.openmeetings.db.dao.file.FileExplorerItemDao;
@@ -48,28 +50,25 @@ import org.apache.wicket.markup.html.Web
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.markup.html.panel.Panel;
-import org.apache.wicket.model.CompoundPropertyModel;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
-import org.apache.wicket.util.resource.FileResourceStream;
 
 import com.googlecode.wicket.jquery.core.JQueryBehavior;
 import com.googlecode.wicket.jquery.core.Options;
 import com.googlecode.wicket.jquery.core.ajax.IJQueryAjaxAware;
 import com.googlecode.wicket.jquery.core.ajax.JQueryAjaxBehavior;
-import com.googlecode.wicket.jquery.ui.JQueryIcon;
 import com.googlecode.wicket.jquery.ui.form.button.AjaxSplitButton;
 import com.googlecode.wicket.jquery.ui.interaction.droppable.Droppable;
 import com.googlecode.wicket.jquery.ui.interaction.droppable.DroppableBehavior;
 import com.googlecode.wicket.jquery.ui.widget.menu.IMenuItem;
-import com.googlecode.wicket.jquery.ui.widget.menu.MenuItem;
 
 public abstract class FileTreePanel extends Panel {
        private static final long serialVersionUID = 1L;
        final WebMarkupContainer trees = new 
WebMarkupContainer("tree-container");
        private final WebMarkupContainer sizes = new 
WebMarkupContainer("sizes");
-       private final IModel<FileItem> selected = new 
CompoundPropertyModel<FileItem>((FileItem)null);
-       private final AjaxDownload downloader = new AjaxDownload();
+       private FileItem lastSelected = null;
+       private Map<String, FileItem> selected = new HashMap<>();
+       final AjaxDownload downloader = new AjaxDownload();
        protected final IModel<String> homeSize = Model.of((String)null);
        protected final IModel<String> publicSize = Model.of((String)null);
        final ConvertingErrorsDialog errorsDialog = new 
ConvertingErrorsDialog("errors", Model.of((Recording)null));
@@ -82,7 +81,7 @@ public abstract class FileTreePanel exte
                super(id);
                this.addFolder = addFolder;
                OmTreeProvider tp = new OmTreeProvider(roomId);
-               setSelected(tp.getRoot(), null, false, false);
+               select(tp.getRoot(), null, false, false);
                form.add(tree = new FileItemTree("tree", this, tp));
                
form.add(download.setVisible(false).setOutputMarkupPlaceholderTag(true));
                add(form.add(downloader));
@@ -164,15 +163,16 @@ public abstract class FileTreePanel exte
 
                        @Override
                        protected void onEvent(AjaxRequestTarget target) {
-                               FileItem f = selected.getObject();
-                               if (f != null && f.getId() != null) {
+                               if (!selected.isEmpty()) {
                                        super.onEvent(target);
                                }
                        }
 
                        @Override
                        protected void onSubmit(AjaxRequestTarget target, 
Form<?> form) {
-                               delete(selected.getObject(), target);
+                               for (Entry<String, FileItem> e : 
selected.entrySet()) {
+                                       delete(e.getValue(), target);
+                               }
                        }
                });
 
@@ -191,8 +191,8 @@ public abstract class FileTreePanel exte
        }
 
        void delete(FileItem f, IPartialPageRequestHandler handler) {
-               long id = f.getId();
-               if (id > 0) {
+               Long id = f.getId();
+               if (id != null) {
                        if (f instanceof Recording) {
                                
getBean(RecordingDao.class).delete((Recording)f);
                        } else {
@@ -205,7 +205,7 @@ public abstract class FileTreePanel exte
        protected abstract void update(AjaxRequestTarget target, FileItem f);
 
        public void createFolder(AjaxRequestTarget target, String name) {
-               FileItem p = selected.getObject();
+               FileItem p = lastSelected;
                boolean isRecording = p instanceof Recording;
                FileItem f = isRecording ? new Recording() : new 
FileExplorerItem();
                f.setName(name);
@@ -213,6 +213,7 @@ public abstract class FileTreePanel exte
                f.setInserted(new Date());
                f.setType(Type.Folder);
                f.setOwnerId(p.getOwnerId());
+               //TODO lastSelected.parent??
                f.setParentId(Type.Folder == p.getType() ? p.getId() : null);
                if (isRecording) {
                        Recording r = (Recording)f;
@@ -227,8 +228,12 @@ public abstract class FileTreePanel exte
 
        public abstract void updateSizes();
 
-       public FileItem getSelected() {
-               return selected.getObject();
+       public boolean isSelected(FileItem f) {
+               return selected.containsKey(f.getHash());
+       }
+
+       public FileItem getLastSelected() {
+               return lastSelected;
        }
 
        public void update(IPartialPageRequestHandler handler) {
@@ -246,19 +251,29 @@ public abstract class FileTreePanel exte
                }
        }
 
-       public void setSelected(FileItem fi, AjaxRequestTarget target, boolean 
shift, boolean ctrl) {
-               FileItem _prev = selected.getObject();
-               updateNode(target, _prev);
+       public void select(FileItem fi, AjaxRequestTarget target, boolean 
shift, boolean ctrl) {
+               updateNode(target, lastSelected);
+               if (ctrl) {
+                       if (isSelected(fi)) {
+                               selected.remove(fi.getId());
+                       } else {
+                               selected.put(fi.getHash(), fi);
+                       }
+               } else if (shift) {
+                       //search
+               } else {
+                       selected.clear();
+                       selected.put(fi.getHash(), fi);
+               }
+               lastSelected = fi;
+               updateNode(target, lastSelected);
                if (target != null) {
-                       target.add(download.setVisible(fi.getType() == 
Type.Presentation || fi.getType() == Type.Image));
+                       target.add(download.setVisible(lastSelected.getType() 
== Type.Presentation || lastSelected.getType() == Type.Image));
                }
-               selected.setObject(fi);
-               updateNode(target, fi);
        }
 
        @Override
        protected void onDetach() {
-               selected.detach();
                homeSize.detach();
                publicSize.detach();
                super.onDetach();
@@ -268,59 +283,11 @@ public abstract class FileTreePanel exte
                List<IMenuItem> list = new ArrayList<>();
 
                //original
-               list.add(new MenuItem(getString("files.download.original"), 
JQueryIcon.ARROWTHICKSTOP_1_S) {
-                       private static final long serialVersionUID = 1L;
-
-                       @Override
-                       public boolean isEnabled() {
-                               File f = selected.getObject().getFile();
-                               return f != null && f.exists();
-                       }
-
-                       @Override
-                       public void onClick(AjaxRequestTarget target) {
-                               File f = selected.getObject().getFile();
-                               downloader.setFileName(f.getName());
-                               downloader.setResourceStream(new 
FileResourceStream(f));
-                               downloader.initiate(target);
-                       }
-               });
+               list.add(new 
DownloadMenuItem(getString("files.download.original"), this, null));
                //pdf
-               list.add(new MenuItem(getString("files.download.pdf"), 
JQueryIcon.ARROWTHICKSTOP_1_S) {
-                       private static final long serialVersionUID = 1L;
-
-                       @Override
-                       public boolean isEnabled() {
-                               File f = 
selected.getObject().getFile(EXTENSION_PDF);
-                               return f != null && f.exists();
-                       }
-
-                       @Override
-                       public void onClick(AjaxRequestTarget target) {
-                               File f = 
selected.getObject().getFile(EXTENSION_PDF);
-                               downloader.setFileName(f.getName());
-                               downloader.setResourceStream(new 
FileResourceStream(f));
-                               downloader.initiate(target);
-                       }
-               });
+               list.add(new DownloadMenuItem(getString("files.download.pdf"), 
this, EXTENSION_PDF));
                //jpg
-               list.add(new MenuItem(getString("files.download.jpg"), 
JQueryIcon.ARROWTHICKSTOP_1_S) {
-                       private static final long serialVersionUID = 1L;
-
-                       @Override
-                       public boolean isEnabled() {
-                               File f = 
selected.getObject().getFile(EXTENSION_JPG);
-                               return f != null && f.exists();
-                       }
-
-                       @Override
-                       public void onClick(AjaxRequestTarget target) {
-                               File f = 
selected.getObject().getFile(EXTENSION_JPG);
-                               downloader.setFileName(f.getName());
-                               downloader.setResourceStream(new 
FileResourceStream(f));
-                               downloader.initiate(target);
-                       }
-               });
+               list.add(new DownloadMenuItem(getString("files.download.jpg"), 
this, EXTENSION_JPG));
                return list;
        }
 }

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/UploadDialog.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/UploadDialog.java?rev=1779316&r1=1779315&r2=1779316&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/UploadDialog.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/UploadDialog.java
 Wed Jan 18 12:05:51 2017
@@ -102,7 +102,7 @@ public class UploadDialog extends Abstra
                form.add(feedback.setOutputMarkupId(true), 
toWb.setOutputMarkupId(true)
                                , 
cleanBlock.add(cleanWb.setOutputMarkupId(true)).setVisible(false).setOutputMarkupPlaceholderTag(true))
                        .setOutputMarkupId(true);
-       
+
                form.setMultiPart(true);
                
form.setMaxSize(Bytes.bytes(getBean(ConfigurationDao.class).getMaxUploadSize()));
                // Model is necessary here to avoid writing image to the User 
object
@@ -113,11 +113,11 @@ public class UploadDialog extends Abstra
                        @Override
                        public void detach() {
                        }
-                       
+
                        @Override
                        public void setObject(List<FileUpload> object) {
                        }
-                       
+
                        @Override
                        public List<FileUpload> getObject() {
                                return null;
@@ -147,12 +147,12 @@ public class UploadDialog extends Abstra
                        super.onClick(target, button);
                }
        }
-       
+
        @Override
        protected List<DialogButton> getButtons() {
                return Arrays.asList(upload, cancel);
        }
-       
+
        @Override
        public DialogButton getSubmitButton() {
                return upload;
@@ -171,7 +171,7 @@ public class UploadDialog extends Abstra
                handler.add(form, fileName);
                handler.appendJavaScript(String.format("bindUpload('%s', 
'%s');", form.getMarkupId(), fileName.getMarkupId()));
        }
-       
+
        @Override
        protected void onError(AjaxRequestTarget target) {
                target.add(feedback);
@@ -184,7 +184,7 @@ public class UploadDialog extends Abstra
                        FileExplorerItem f = new FileExplorerItem();
                        f.setSize(fu.getSize());
                        f.setName(fu.getClientFileName());
-                       FileItem parent = roomFiles.getSelected();
+                       FileItem parent = roomFiles.getLastSelected();
                        if (parent == null || !(parent instanceof 
FileExplorerItem)) {
                                f.setOwnerId(getUserId());
                        } else {
@@ -195,7 +195,7 @@ public class UploadDialog extends Abstra
                                }
                        }
                        f.setInsertedBy(getUserId());
-                       
+
                        try {
                                ConverterProcessResultList logs = 
getBean(FileProcessor.class).processFile(getUserId(), f, fu.getInputStream());
                                for (Entry<String, ConverterProcessResult> 
entry : logs.getJobs().entrySet()) {


Reply via email to