You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by so...@apache.org on 2014/06/27 10:50:51 UTC

svn commit: r1605992 [2/2] - in /openmeetings/trunk/singlewebapp: ./ openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/ openmeetings-core/src/main/java/org/apache/openmeetings/core/data/file/ openmeetings-core/src/main/java/org/apa...

Copied: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/ConvertingErrorsDialog.java (from r1605283, openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingErrorsDialog.java)
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/ConvertingErrorsDialog.java?p2=openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/ConvertingErrorsDialog.java&p1=openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingErrorsDialog.java&r1=1605283&r2=1605992&rev=1605992&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingErrorsDialog.java (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/ConvertingErrorsDialog.java Fri Jun 27 08:50:50 2014
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.openmeetings.web.user.record;
+package org.apache.openmeetings.web.common.tree;
 
 import static org.apache.openmeetings.util.OmFileHelper.MP4_EXTENSION;
 import static org.apache.openmeetings.util.OmFileHelper.isRecordingExists;
@@ -41,7 +41,7 @@ import org.apache.wicket.model.Model;
 import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractDialog;
 import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
 
-public class RecordingErrorsDialog extends AbstractDialog<FlvRecording> {
+public class ConvertingErrorsDialog extends AbstractDialog<FlvRecording> {
 	private static final long serialVersionUID = 1L;
 	private final WebMarkupContainer container = new WebMarkupContainer("container");
 	private final Label message = new Label("message", Model.of((String)null));
@@ -74,7 +74,7 @@ public class RecordingErrorsDialog exten
 		return true;
 	}
 
-	public RecordingErrorsDialog(String id, IModel<FlvRecording> model) {
+	public ConvertingErrorsDialog(String id, IModel<FlvRecording> model) {
 		super(id, WebSession.getString(887), model);
 		add(container.add(message.setVisible(false), logView.setVisible(false)).setOutputMarkupId(true));
 	}

Copied: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemPanel.java (from r1605283, openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingItemPanel.java)
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemPanel.java?p2=openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemPanel.java&p1=openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingItemPanel.java&r1=1605283&r2=1605992&rev=1605992&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingItemPanel.java (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemPanel.java Fri Jun 27 08:50:50 2014
@@ -16,13 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.openmeetings.web.user.record;
+package org.apache.openmeetings.web.common.tree;
 
 import static org.apache.openmeetings.util.OmFileHelper.MP4_EXTENSION;
 import static org.apache.openmeetings.util.OmFileHelper.isRecordingExists;
 import static org.apache.openmeetings.web.app.Application.getBean;
 
 import org.apache.openmeetings.db.dao.record.FlvRecordingLogDao;
+import org.apache.openmeetings.db.entity.file.FileItem;
 import org.apache.openmeetings.db.entity.record.FlvRecording;
 import org.apache.openmeetings.db.entity.record.FlvRecording.Status;
 import org.apache.wicket.ajax.AjaxEventBehavior;
@@ -30,22 +31,24 @@ import org.apache.wicket.ajax.AjaxReques
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.model.IModel;
 
-public class RecordingItemPanel extends RecordingPanel {
+public class FileItemPanel extends FolderPanel {
 	private static final long serialVersionUID = 1L;
 
-	public RecordingItemPanel(String id, final IModel<FlvRecording> model, final RecordingErrorsDialog errorsDialog) {
+	public FileItemPanel(String id, final IModel<? extends FileItem> model, final ConvertingErrorsDialog errorsDialog) {
 		super(id, model);
-		FlvRecording r = model.getObject();
-		long errorCount = getBean(FlvRecordingLogDao.class).countErrors(r.getId());
-		boolean visible = errorCount != 0 || (Status.PROCESSING != r.getStatus() && !isRecordingExists(r.getFileHash() + MP4_EXTENSION));
-		item.add(new WebMarkupContainer("errors").add(new AjaxEventBehavior("click") {
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			protected void onEvent(AjaxRequestTarget target) {
-				errorsDialog.setDefaultModel(model);
-				errorsDialog.open(target);
-			}
-		}).setVisible(visible));
+		if (model.getObject() instanceof FlvRecording) {
+			FlvRecording r = (FlvRecording)model.getObject();
+			long errorCount = getBean(FlvRecordingLogDao.class).countErrors(r.getId());
+			boolean visible = errorCount != 0 || (Status.PROCESSING != r.getStatus() && !isRecordingExists(r.getFileHash() + MP4_EXTENSION));
+			item.add(new WebMarkupContainer("errors").add(new AjaxEventBehavior("click") {
+				private static final long serialVersionUID = 1L;
+	
+				@Override
+				protected void onEvent(AjaxRequestTarget target) {
+					errorsDialog.setDefaultModel(model);
+					errorsDialog.open(target);
+				}
+			}).setVisible(visible));
+		}
 	}
 }

Added: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemTree.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemTree.java?rev=1605992&view=auto
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemTree.java (added)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemTree.java Fri Jun 27 08:50:50 2014
@@ -0,0 +1,218 @@
+/*
+ * 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 static org.apache.openmeetings.util.OmFileHelper.MP4_EXTENSION;
+import static org.apache.openmeetings.util.OmFileHelper.isRecordingExists;
+import static org.apache.openmeetings.web.app.Application.getBean;
+
+import org.apache.openmeetings.db.dao.file.FileExplorerItemDao;
+import org.apache.openmeetings.db.dao.record.FlvRecordingDao;
+import org.apache.openmeetings.db.entity.file.FileExplorerItem;
+import org.apache.openmeetings.db.entity.file.FileItem;
+import org.apache.openmeetings.db.entity.file.FileItem.Type;
+import org.apache.openmeetings.db.entity.record.FlvRecording;
+import org.apache.openmeetings.db.entity.record.FlvRecording.Status;
+import org.apache.wicket.Component;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.extensions.markup.html.repeater.tree.DefaultNestedTree;
+import org.apache.wicket.extensions.markup.html.repeater.tree.ITreeProvider;
+import org.apache.wicket.extensions.markup.html.repeater.tree.content.Folder;
+import org.apache.wicket.markup.repeater.ReuseIfModelsEqualStrategy;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+
+import wicketdnd.DragSource;
+import wicketdnd.DropTarget;
+import wicketdnd.Location;
+import wicketdnd.Operation;
+import wicketdnd.Reject;
+import wicketdnd.Transfer;
+
+public class FileItemTree<T extends FileItem> extends DefaultNestedTree<T> {
+	private static final long serialVersionUID = 1L;
+	private final FileTreePanel treePanel;
+	private final IModel<T> selectedItem = Model.of((T)null);
+
+	public FileItemTree(String id, FileTreePanel treePanel, ITreeProvider<T> tp) {
+		super(id, tp);
+		this.treePanel = treePanel;
+		setItemReuseStrategy(new ReuseIfModelsEqualStrategy());
+	}
+	
+	@Override
+	protected Component newContentComponent(String id, IModel<T> node) {
+		return new Folder<T>(id, this, node) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected Component newLabelComponent(String id, final IModel<T> lm) {
+				FileItem r = lm.getObject();
+				Component result = Type.Folder == r.getType() || r.getId() < 1 ? new FolderPanel(id, lm) : new FileItemPanel(id, lm, treePanel.errorsDialog);
+				if (r.getId() > 0) {
+					result.add(new DragSource(Operation.MOVE) {
+						private static final long serialVersionUID = 1L;
+
+						@Override
+						public void onBeforeDrop(Component drag, Transfer transfer) throws Reject {
+							transfer.setData(lm.getObject());
+						};
+						
+						@Override
+						public void onAfterDrop(AjaxRequestTarget target, wicketdnd.Transfer transfer) {
+							transfer.setData(null);
+						}
+					}.drag("div"));
+				}
+				if (r.getId() < 0 || Type.Folder == r.getType()) {
+					result.add(new DropTarget(Operation.MOVE) {
+						private static final long serialVersionUID = 1L;
+
+						@Override
+						public void onDrop(AjaxRequestTarget target, Transfer transfer, Location location) throws Reject {
+							FileItem p = lm.getObject();
+							long pid = p.getId();
+							T f = transfer.getData();
+							f.setParentItemId(pid > 0 ? pid : null);
+							f.setOwnerId(p.getOwnerId());
+							f.setRoomId(p.getRoomId());
+							if (f instanceof FlvRecording) {
+								FlvRecording r = (FlvRecording)f;
+								r.setOrganization_id(((FlvRecording)p).getOrganization_id());
+								getBean(FlvRecordingDao.class).update(r);
+							} else {
+								getBean(FileExplorerItemDao.class).update((FileExplorerItem)f);
+							}
+							target.add(treePanel.trees); //FIXME add correct refresh
+						}
+					}.dropCenter("div"));
+				}
+				return result;
+			}
+			
+			@Override
+			protected boolean isSelected() {
+				return getModelObject().getId() == treePanel.rm.getObject().getId();
+			}
+			
+			@Override
+			protected boolean isClickable() {
+				return true;
+			}
+			
+			@Override
+			protected void onClick(AjaxRequestTarget target) {
+				T r = getModelObject();
+				treePanel.selected.resetSelected(target);
+				selectedItem.setObject(r);
+				treePanel.rm.setObject(r);
+				treePanel.selected = FileItemTree.this;
+				if (Type.Folder == r.getType()) {
+					if (getState(r) == State.COLLAPSED) {
+						super.onClick(target);
+					}
+					updateBranch(r, target);
+				} else {
+					treePanel.update(target, r);
+					updateNode(r, target);
+				}
+			}
+			
+			private String getItemStyle(T f, String def) {
+				String style;
+				if (f.getId() == 0) {
+					style = "my file om-icon";
+				} else if (f.getId() < 0) {
+					style = "public file om-icon";
+				} else {
+					switch(f.getType()) {
+						case Folder:
+							style = def;
+							break;
+						case Image:
+							style = "image file om-icon";
+							break;
+						case PollChart:
+							style = "chart file om-icon";
+							break;
+						case WmlFile:
+							style = "wml file om-icon";
+							break;
+						case Recording:
+						{
+							FlvRecording r = (FlvRecording)f;
+							if (isRecordingExists(r.getFileHash() + MP4_EXTENSION)) {
+								style = "recording om-icon";
+							} else if (Status.PROCESSING == r.getStatus()) {
+								style = "processing-recording om-icon";
+							} else {
+								style = "broken-recording om-icon";
+							}
+						}
+							break;
+						case Presentation:
+							style = "doc file om-icon";
+							break;
+						case Video:
+						default:
+							style = "recording om-icon";
+							break;
+					}
+				}
+				return style;
+			}
+			
+			@Override
+			protected String getOtherStyleClass(T r) {
+				String style = getItemStyle(r, super.getOtherStyleClass(r));
+				if (isSelected()) {
+					style += " ui-state-active";
+				}
+				return style;
+			}
+			
+			@Override
+			protected String getOpenStyleClass() {
+				return getItemStyle(getModelObject(), super.getOpenStyleClass());
+			}
+			
+			@Override
+			protected String getClosedStyleClass() {
+				return getItemStyle(getModelObject(), super.getClosedStyleClass());
+			}
+			
+			@Override
+			protected IModel<String> newLabelModel(IModel<T> model) {
+				return Model.of(model.getObject().getFileName());
+			}
+		};
+	}
+
+	private void resetSelected(AjaxRequestTarget target) {
+		T _prev = selectedItem.getObject();
+		if (_prev != null) {
+			if (Type.Folder == _prev.getType()) {
+				updateBranch(_prev, target);
+			} else {
+				updateNode(_prev, target);
+			}
+			selectedItem.setObject(null);
+		}
+	}
+}

Added: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.html
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.html?rev=1605992&view=auto
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.html (added)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.html Fri Jun 27 08:50:50 2014
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<div class="file tree">
+		<div class="icons clear">
+			<span wicket:id="create" class="folder-create om-icon align-left clickable" wicket:ommessage="title:703"></span>
+			<span wicket:id="refresh" class="refresh om-icon align-left clickable" wicket:ommessage="title:704"></span>
+			<span wicket:id="trash" class="trash om-icon align-right clickable" wicket:ommessage="title:705"><span style="display: block;" wicket:id="drop-center">&nbsp;</span></span>
+			<div class="clear"></div>
+		</div>
+		<div wicket:id="tree-container" class="trees">
+			<div wicket:id="tree"></div>
+		</div>
+		<div class="sizes" wicket:id="sizes">
+			<table>
+				<tr>
+					<td><wicket:ommessage key="923"/></td>
+					<td><span wicket:id="homeSize"></span></td>
+				</tr>
+				<tr>
+					<td><wicket:ommessage key="924"/></td>
+					<td><span wicket:id="publicSize"></span></td>
+				</tr>
+			</table>
+		</div>
+		<div wicket:id="addFolder"></div>
+		<div wicket:id="errors"></div>
+	</div>
+</wicket:panel>
+</html>
\ No newline at end of file

Added: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java?rev=1605992&view=auto
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java (added)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java Fri Jun 27 08:50:50 2014
@@ -0,0 +1,139 @@
+/*
+ * 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 static org.apache.openmeetings.web.app.Application.getBean;
+
+import org.apache.openmeetings.db.dao.file.FileExplorerItemDao;
+import org.apache.openmeetings.db.dao.record.FlvRecordingDao;
+import org.apache.openmeetings.db.entity.file.FileExplorerItem;
+import org.apache.openmeetings.db.entity.file.FileItem;
+import org.apache.openmeetings.db.entity.record.FlvRecording;
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.openmeetings.web.common.AddFolderDialog;
+import org.apache.openmeetings.web.common.ConfirmableAjaxLink;
+import org.apache.wicket.ajax.AjaxEventBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.AjaxSelfUpdatingTimerBehavior;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.markup.repeater.RepeatingView;
+import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.util.time.Duration;
+
+import wicketdnd.DropTarget;
+import wicketdnd.Location;
+import wicketdnd.Operation;
+import wicketdnd.Reject;
+import wicketdnd.Transfer;
+
+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");
+	protected final IModel<FileItem> rm = new CompoundPropertyModel<FileItem>((FileItem)null);
+	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((FlvRecording)null));
+	protected FileItemTree<? extends FileItem> selected;
+	protected RepeatingView treesView = new RepeatingView("tree");
+
+	public FileTreePanel(String id) {
+		super(id);
+		defineTrees();
+		rm.getObject().setId(Long.MIN_VALUE);
+		final AddFolderDialog addFolder = new AddFolderDialog("addFolder", WebSession.getString(712)) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onSubmit(AjaxRequestTarget target) {
+				createFolder(getModelObject());
+				target.add(trees); //FIXME add correct refresh
+			}
+		};
+		add(addFolder);
+		add(new WebMarkupContainer("create").add(new AjaxEventBehavior("onclick") {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onEvent(AjaxRequestTarget target) {
+				addFolder.open(target);
+			}
+		}));
+		add(new WebMarkupContainer("refresh").add(new AjaxEventBehavior("onclick") {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onEvent(AjaxRequestTarget target) {
+				target.add(trees); //FIXME add correct refresh
+			}
+		}));
+		ConfirmableAjaxLink trash = new ConfirmableAjaxLink("trash", 713) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			public void onClick(AjaxRequestTarget target) {
+				FileItem f = rm.getObject();
+				long id = f.getId();
+				if (id > 0) {
+					if (f instanceof FlvRecording) {
+						getBean(FlvRecordingDao.class).delete((FlvRecording)f);
+					} else {
+						getBean(FileExplorerItemDao.class).delete((FileExplorerItem)f);
+					}
+				}
+				target.add(trees); //FIXME add correct refresh
+			}
+		};
+		trash.add(new WebMarkupContainer("drop-center").setOutputMarkupId(true)).add(new DropTarget(Operation.MOVE) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			public void onDrop(AjaxRequestTarget target, Transfer transfer, Location location) throws Reject {
+				FlvRecording r = transfer.getData();
+				getBean(FlvRecordingDao.class).delete(r);
+				target.add(trees); //FIXME add correct refresh
+			}
+		}.dropCenter("span"));
+		add(trash/*.add(new WindowsTheme())*/); //TODO check theme here
+		
+		add(trees.add(treesView).setOutputMarkupId(true));
+		updateSizes();
+		add(sizes.add(new Label("homeSize", homeSize), new Label("publicSize", publicSize)).setOutputMarkupId(true));
+		sizes.add(new AjaxSelfUpdatingTimerBehavior(Duration.seconds(30)) {
+			private static final long serialVersionUID = 1L;
+
+			protected void onPostProcessTarget(AjaxRequestTarget target) {
+				updateSizes();
+			}
+		});
+		add(errorsDialog);
+	}
+	
+	public abstract void defineTrees();
+	
+	public abstract void update(AjaxRequestTarget target, FileItem f);
+
+	public abstract void createFolder(String name);
+
+	public abstract void updateSizes();
+}

Copied: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FolderPanel.html (from r1605283, openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingPanel.html)
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FolderPanel.html?p2=openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FolderPanel.html&p1=openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingPanel.html&r1=1605283&r2=1605992&rev=1605992&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingPanel.html (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FolderPanel.html Fri Jun 27 08:50:50 2014
@@ -20,6 +20,6 @@
 -->
 <html xmlns:wicket="http://wicket.apache.org">
 <wicket:panel>
-	<div wicket:id="item" class="recording item"><span wicket:id="name" class="name"></span><wicket:child /></div>
+	<div wicket:id="item" class="file item"><wicket:child /><span wicket:id="name" class="name"></span></div>
 </wicket:panel>
 </html>

Copied: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FolderPanel.java (from r1605283, openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingPanel.java)
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FolderPanel.java?p2=openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FolderPanel.java&p1=openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingPanel.java&r1=1605283&r2=1605992&rev=1605992&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingPanel.java (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FolderPanel.java Fri Jun 27 08:50:50 2014
@@ -16,11 +16,15 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.openmeetings.web.user.record;
+package org.apache.openmeetings.web.common.tree;
 
 import static org.apache.openmeetings.web.app.Application.getBean;
 
+import org.apache.openmeetings.db.dao.file.FileExplorerItemDao;
 import org.apache.openmeetings.db.dao.record.FlvRecordingDao;
+import org.apache.openmeetings.db.entity.file.FileExplorerItem;
+import org.apache.openmeetings.db.entity.file.FileItem;
+import org.apache.openmeetings.db.entity.file.FileItem.Type;
 import org.apache.openmeetings.db.entity.record.FlvRecording;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.extensions.ajax.markup.html.AjaxEditableLabel;
@@ -32,15 +36,15 @@ import org.apache.wicket.model.Model;
 
 import wicketdnd.theme.WindowsTheme;
 
-public class RecordingPanel extends Panel {
+public class FolderPanel extends Panel {
 	private static final long serialVersionUID = 1L;
 	protected final WebMarkupContainer item = new WebMarkupContainer("item");
 
-	public RecordingPanel(String id, final IModel<FlvRecording> model) {
+	public FolderPanel(String id, final IModel<? extends FileItem> model) {
 		super(id, model);
-		FlvRecording r = model.getObject();
+		FileItem r = model.getObject();
 		add(new WindowsTheme());
-		item.add(r.isFolder() ? new AjaxEditableLabel<String>("name", Model.of(model.getObject().getFileName())) {
+		item.add(Type.Folder == r.getType() ? new AjaxEditableLabel<String>("name", Model.of(model.getObject().getFileName())) {
 			private static final long serialVersionUID = 1L;
 			
 			@Override
@@ -51,9 +55,13 @@ public class RecordingPanel extends Pane
 			@Override
 			protected void onSubmit(AjaxRequestTarget target) {
 				super.onSubmit(target);
-				FlvRecording r = model.getObject();
-				r.setFileName(getEditor().getModelObject());
-				getBean(FlvRecordingDao.class).update(r);
+				FileItem fi = model.getObject();
+				fi.setFileName(getEditor().getModelObject());
+				if (fi instanceof FlvRecording) {
+					getBean(FlvRecordingDao.class).update((FlvRecording)fi);
+				} else {
+					getBean(FileExplorerItemDao.class).update((FileExplorerItem)fi);
+				}
 			}
 			
 			@Override

Added: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/MyRecordingTreeProvider.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/MyRecordingTreeProvider.java?rev=1605992&view=auto
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/MyRecordingTreeProvider.java (added)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/MyRecordingTreeProvider.java Fri Jun 27 08:50:50 2014
@@ -0,0 +1,49 @@
+/*
+ * 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 static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+
+import java.util.Arrays;
+import java.util.Iterator;
+
+import org.apache.openmeetings.db.dao.record.FlvRecordingDao;
+import org.apache.openmeetings.db.entity.record.FlvRecording;
+import org.apache.openmeetings.web.app.WebSession;
+
+public class MyRecordingTreeProvider extends RecordingTreeProvider {
+	private static final long serialVersionUID = 1L;
+
+	public Iterator<? extends FlvRecording> getRoots() {
+		FlvRecording r = new FlvRecording();
+		r.setId(0L);
+		r.setFileName(WebSession.getString(860));
+		r.setOwnerId(getUserId());
+		return Arrays.asList(r).iterator();
+	}
+	
+	public Iterator<? extends FlvRecording> getChildren(FlvRecording node) {
+		if (node.getId() == 0) {
+			return getBean(FlvRecordingDao.class).getFlvRecordingRootByOwner(getUserId()).iterator();
+		} else {
+			return super.getChildren(node);
+		}
+	}
+}

Added: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/PublicRecordingTreeProvider.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/PublicRecordingTreeProvider.java?rev=1605992&view=auto
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/PublicRecordingTreeProvider.java (added)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/PublicRecordingTreeProvider.java Fri Jun 27 08:50:50 2014
@@ -0,0 +1,57 @@
+/*
+ * 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 static org.apache.openmeetings.web.app.Application.getBean;
+
+import java.util.Arrays;
+import java.util.Iterator;
+
+import org.apache.openmeetings.db.dao.record.FlvRecordingDao;
+import org.apache.openmeetings.db.entity.record.FlvRecording;
+import org.apache.openmeetings.web.app.WebSession;
+
+public class PublicRecordingTreeProvider extends RecordingTreeProvider {
+	private static final long serialVersionUID = 1L;
+	private final Long orgId;
+	private final String name;
+
+	public PublicRecordingTreeProvider(Long orgId, String name) {
+		this.orgId = orgId;
+		this.name = name;
+	}
+	
+	public Iterator<? extends FlvRecording> getRoots() {
+		FlvRecording r = new FlvRecording();
+		r.setId(orgId == null ? -1 : -orgId);
+		r.setOrganization_id(orgId);
+		r.setOwnerId(null);
+		String pub = WebSession.getString(861);
+		r.setFileName(orgId == null ? pub : String.format("%s (%s)", pub, name));
+		return Arrays.asList(r).iterator();
+	}
+	
+	public Iterator<? extends FlvRecording> getChildren(FlvRecording node) {
+		if (node.getId() < 0) {
+			return getBean(FlvRecordingDao.class).getFlvRecordingRootByPublic(orgId).iterator();
+		} else {
+			return super.getChildren(node);
+		}
+	}
+}

Added: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/RecordingTreeProvider.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/RecordingTreeProvider.java?rev=1605992&view=auto
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/RecordingTreeProvider.java (added)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/RecordingTreeProvider.java Fri Jun 27 08:50:50 2014
@@ -0,0 +1,52 @@
+/*
+ * 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 static org.apache.openmeetings.web.app.Application.getBean;
+
+import java.util.Iterator;
+
+import org.apache.openmeetings.db.dao.record.FlvRecordingDao;
+import org.apache.openmeetings.db.entity.file.FileItem.Type;
+import org.apache.openmeetings.db.entity.record.FlvRecording;
+import org.apache.wicket.extensions.markup.html.repeater.tree.ITreeProvider;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+
+public abstract class RecordingTreeProvider implements ITreeProvider<FlvRecording> {
+	private static final long serialVersionUID = 1L;
+
+	public void detach() {
+		// TODO LDM should be used
+	}
+
+	public boolean hasChildren(FlvRecording node) {
+		return node.getId() <= 0 || Type.Folder == node.getType();
+	}
+
+	public Iterator<? extends FlvRecording> getChildren(FlvRecording node) {
+		return getBean(FlvRecordingDao.class).getFlvRecordingByParent(node.getId()).iterator();
+	}
+
+	public IModel<FlvRecording> model(FlvRecording object) {
+		// TODO LDM should be used
+		return Model.of(object);
+	}
+	
+}

Modified: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.html
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.html?rev=1605992&r1=1605991&r2=1605992&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.html (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.html Fri Jun 27 08:50:50 2014
@@ -22,7 +22,13 @@
 <wicket:panel>
 	<div wicket:id="roomMenu"></div>
 	<div class="room sidebar left">
-		<div class="user list">
+		<div class="tabs">
+			<ul>
+				<li><a href="#utab"><wicket:ommessage key="613"/></a></li>
+				<li><a wicket:id="flink" href="#ftab"><wicket:ommessage key="614"/></a></li>
+			</ul>
+			<div id="utab"><div class="user list"></div></div>
+			<div wicket:id="ftab" id="ftab"><div class="file list"></div></div>
 		</div>
 	</div>
 	<div class="room wb area">

Modified: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java?rev=1605992&r1=1605991&r2=1605992&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java Fri Jun 27 08:50:50 2014
@@ -66,6 +66,9 @@ import org.red5.logging.Red5LoggerFactor
 import org.slf4j.Logger;
 import org.wicketstuff.whiteboard.WhiteboardBehavior;
 
+import com.googlecode.wicket.jquery.core.JQueryBehavior;
+import com.googlecode.wicket.jquery.core.Options;
+
 @AuthorizeInstantiation("Room")
 public class RoomPanel extends BasePanel {
 	private static final long serialVersionUID = 1L;
@@ -100,6 +103,17 @@ public class RoomPanel extends BasePanel
 		add(wb.setOutputMarkupId(true));
 		add(new WhiteboardBehavior("1", wb.getMarkupId(), null, null, null));
 		add(aab, AttributeAppender.append("style", "height: 100%;"));
+		boolean showFiles = !r.getHideFilesExplorer();
+		add(new WebMarkupContainer("flink").setVisible(showFiles));
+		add(new WebMarkupContainer("ftab").setVisible(showFiles));
+		add(new JQueryBehavior(".room.sidebar.left .tabs", "tabs", new Options("active", showFiles && r.isFilesOpened() ? "ftab" : "utab")) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void renderScript(JavaScriptHeaderItem script, IHeaderResponse response) {
+				response.render(new PriorityHeaderItem(script));
+			}
+		});
 	}
 
 	private JSONArray getStringLabels(long... ids) {
@@ -230,6 +244,7 @@ public class RoomPanel extends BasePanel
 	public void onMenuPanelLoad(AjaxRequestTarget target) {
 		target.add(getMainPage().getHeader().setVisible(false), getMainPage().getMenu().setVisible(false)
 				, getMainPage().getTopLinks().setVisible(false));
+		target.appendJavaScript("roomLoad();");
 	}
 	
 	@Override

Modified: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js?rev=1605992&r1=1605991&r2=1605992&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js Fri Jun 27 08:50:50 2014
@@ -113,18 +113,35 @@ function initVideo(sid, roomid, audioOnl
 			.attr('allowscriptaccess', 'sameDomain').attr('type', 'application/x-shockwave-flash')
 			.attr('pluginspage', 'http://www.macromedia.com/go/getflashplayer')
 	*/
-	r.dialog({ width: options.width, height: options.height, dialogClass: "video" });
+	r.dialog({width: options.width, height: options.height, dialogClass: "video"});
 }
 
 function setHeight() {
 	var h = $(window).height() - $('#roomMenu').height();
 	$(".room.sidebar.left").height(h);
+	var p = $(".room.sidebar.left .tabs");
+	p.height(h - 5); //FIXME hacks
+	$(".user.list", p).height(h - $("ul", p).height() - 15); //FIXME hacks
 	$(".room.wb.area").height(h);
 	$(".room.wb.area .wb").height(h);
 }
 
 $(document).ready(function() {
 	$(window).on('resize.openmeetings', function() {
+		roomWidth = $(window).width();
 		setHeight();
 	});
 });
+
+var roomWidth = $(window).width();
+function roomLoad() {
+	$(".room.sidebar.left").resizable({
+		handles: "e"
+		, stop: function(event, ui) {
+			//TODO not really works, need to be investigated
+			var w = roomWidth - $(this).width() - 5;
+			$(".room.wb.area").width(w);
+			$(".room.wb.area .wb").width(w);
+		}
+	});
+}
\ No newline at end of file

Modified: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingsPanel.html
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingsPanel.html?rev=1605992&r1=1605991&r2=1605992&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingsPanel.html (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingsPanel.html Fri Jun 27 08:50:50 2014
@@ -22,28 +22,8 @@
 <wicket:panel>
 	<table class="recording">
 		<tr>
-			<td valign="top" class="files">
-				<div class="icons clear">
-					<span wicket:id="create" class="folder-create om-icon align-left clickable"></span>
-					<span wicket:id="refresh" class="refresh om-icon align-left clickable"></span>
-					<span wicket:id="trash" class="trash om-icon align-right clickable" wicket:ommessage="title:705"><span style="display: block;" wicket:id="drop-center">&nbsp;</span></span>
-					<div class="clear"></div>
-				</div>
-				<div wicket:id="tree-container" class="trees">
-					<div wicket:id="tree"></div>
-				</div>
-				<div class="sizes" wicket:id="sizes">
-					<table>
-						<tr>
-							<td><wicket:ommessage key="923"/></td>
-							<td><span wicket:id="homeSize"></span></td>
-						</tr>
-						<tr>
-							<td><wicket:ommessage key="924"/></td>
-							<td><span wicket:id="publicSize"></span></td>
-						</tr>
-					</table>
-				</div>
+			<td valign="top" class="file tree container">
+				<div wicket:id="tree"></div>
 				<div wicket:id="info"></div>
 			</td>
 			<td valign="top">
@@ -51,7 +31,5 @@
 			</td>
 		</tr>
 	</table>
-	<div wicket:id="addFolder"></div>
-	<div wicket:id="errors"></div>
 </wicket:panel>
 </html>

Modified: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingsPanel.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingsPanel.java?rev=1605992&r1=1605991&r2=1605992&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingsPanel.java (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingsPanel.java Fri Jun 27 08:50:50 2014
@@ -18,358 +18,81 @@
  */
 package org.apache.openmeetings.web.user.record;
 
-import static org.apache.openmeetings.util.OmFileHelper.MP4_EXTENSION;
 import static org.apache.openmeetings.util.OmFileHelper.getHumanSize;
-import static org.apache.openmeetings.util.OmFileHelper.isRecordingExists;
 import static org.apache.openmeetings.web.app.Application.getBean;
 import static org.apache.openmeetings.web.app.WebSession.getUserId;
 
-import java.util.Arrays;
 import java.util.Date;
-import java.util.Iterator;
 
 import org.apache.openmeetings.db.dao.record.FlvRecordingDao;
 import org.apache.openmeetings.db.dao.user.UserDao;
 import org.apache.openmeetings.db.dto.file.RecordingContainerData;
+import org.apache.openmeetings.db.entity.file.FileItem;
+import org.apache.openmeetings.db.entity.file.FileItem.Type;
 import org.apache.openmeetings.db.entity.record.FlvRecording;
-import org.apache.openmeetings.db.entity.record.FlvRecording.Status;
 import org.apache.openmeetings.db.entity.user.Organisation;
 import org.apache.openmeetings.db.entity.user.Organisation_Users;
-import org.apache.openmeetings.web.app.WebSession;
-import org.apache.openmeetings.web.common.AddFolderDialog;
-import org.apache.openmeetings.web.common.ConfirmableAjaxLink;
 import org.apache.openmeetings.web.common.UserPanel;
-import org.apache.wicket.Component;
-import org.apache.wicket.ajax.AjaxEventBehavior;
+import org.apache.openmeetings.web.common.tree.FileItemTree;
+import org.apache.openmeetings.web.common.tree.FileTreePanel;
+import org.apache.openmeetings.web.common.tree.MyRecordingTreeProvider;
+import org.apache.openmeetings.web.common.tree.PublicRecordingTreeProvider;
 import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.AjaxSelfUpdatingTimerBehavior;
-import org.apache.wicket.extensions.markup.html.repeater.tree.DefaultNestedTree;
-import org.apache.wicket.extensions.markup.html.repeater.tree.ITreeProvider;
-import org.apache.wicket.extensions.markup.html.repeater.tree.content.Folder;
-import org.apache.wicket.markup.html.WebMarkupContainer;
-import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.repeater.RepeatingView;
-import org.apache.wicket.markup.repeater.ReuseIfModelsEqualStrategy;
-import org.apache.wicket.model.CompoundPropertyModel;
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.Model;
-import org.apache.wicket.util.time.Duration;
-
-import wicketdnd.DragSource;
-import wicketdnd.DropTarget;
-import wicketdnd.Location;
-import wicketdnd.Operation;
-import wicketdnd.Reject;
-import wicketdnd.Transfer;
 
 public class RecordingsPanel extends UserPanel {
 	private static final long serialVersionUID = 1L;
-	private final WebMarkupContainer trees = new WebMarkupContainer("tree-container");
-	private final WebMarkupContainer sizes = new WebMarkupContainer("sizes");
 	private final VideoPlayer video = new VideoPlayer("video");
 	private final VideoInfo info = new VideoInfo("info");
-	private final IModel<FlvRecording> rm = new CompoundPropertyModel<FlvRecording>(new FlvRecording());
-	private final IModel<String> homeSize = Model.of((String)null);
-	private final IModel<String> publicSize = Model.of((String)null);
-	private final RecordingErrorsDialog errorsDialog = new RecordingErrorsDialog("errors", Model.of((FlvRecording)null));
-	private RecordingTree selected;
 	
 	public RecordingsPanel(String id) {
 		super(id);
-		rm.getObject().setId(Long.MIN_VALUE);
-		final AddFolderDialog addFolder = new AddFolderDialog("addFolder", WebSession.getString(712)) {
+		add(new FileTreePanel("tree") {
 			private static final long serialVersionUID = 1L;
 
 			@Override
-			protected void onSubmit(AjaxRequestTarget target) {
-				FlvRecording f = new FlvRecording();
-				f.setFileName(getModelObject());
-				f.setInsertedBy(getUserId());
-				f.setInserted(new Date());
-				f.setFolder(true);
-				f.setIsImage(false);
-				f.setIsPresentation(false);
-				f.setIsRecording(true);
-				FlvRecording p = rm.getObject();
-				long parentId = p.getId();
-				if (p.isFolder()) {
-					f.setParentFileExplorerItemId(parentId);
+			public void defineTrees() {
+				rm.setObject(new FlvRecording());
+				treesView.add(selected = new FileItemTree<FlvRecording>(treesView.newChildId(), this, new MyRecordingTreeProvider()));
+				treesView.add(new FileItemTree<FlvRecording>(treesView.newChildId(), this, new PublicRecordingTreeProvider(null, null)));
+				for (Organisation_Users ou : getBean(UserDao.class).get(getUserId()).getOrganisation_users()) {
+					Organisation o = ou.getOrganisation();
+					treesView.add(new FileItemTree<FlvRecording>(treesView.newChildId(), this, new PublicRecordingTreeProvider(o.getId(), o.getName())));
 				}
-				f.setOwnerId(p.getOwnerId());
-				f.setOrganization_id(p.getOrganization_id());
-				getBean(FlvRecordingDao.class).update(f);
-				target.add(trees); //FIXME add correct refresh
-			}
-		};
-		add(addFolder);
-		add(new WebMarkupContainer("create").add(new AjaxEventBehavior("onclick") {
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			protected void onEvent(AjaxRequestTarget target) {
-				addFolder.open(target);
 			}
-		}));
-		add(new WebMarkupContainer("refresh").add(new AjaxEventBehavior("onclick") {
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			protected void onEvent(AjaxRequestTarget target) {
-				target.add(trees); //FIXME add correct refresh
-			}
-		}));
-		ConfirmableAjaxLink trash = new ConfirmableAjaxLink("trash", 713) {
-			private static final long serialVersionUID = 1L;
-
+			
 			@Override
-			public void onClick(AjaxRequestTarget target) {
-				long id = rm.getObject().getId();
-				if (id > 0) {
-					getBean(FlvRecordingDao.class).delete(rm.getObject());
+			public void updateSizes() {
+				RecordingContainerData sizeData = getBean(FlvRecordingDao.class).getRecordingContainerData(getUserId());
+				if (sizeData != null) {
+					homeSize.setObject(getHumanSize(sizeData.getUserHomeSize()));
+					publicSize.setObject(getHumanSize(sizeData.getPublicFileSize()));
 				}
-				target.add(trees); //FIXME add correct refresh
 			}
-		};
-		trash.add(new WebMarkupContainer("drop-center").setOutputMarkupId(true)).add(new DropTarget(Operation.MOVE) {
-			private static final long serialVersionUID = 1L;
-
+			
 			@Override
-			public void onDrop(AjaxRequestTarget target, Transfer transfer, Location location) throws Reject {
-				FlvRecording r = transfer.getData();
-				getBean(FlvRecordingDao.class).delete(r);
-				target.add(trees); //FIXME add correct refresh
-			}
-		}.dropCenter("span"));
-		add(trash/*.add(new WindowsTheme())*/); //TODO check theme here
-		RepeatingView treesView = new RepeatingView("tree");
-		treesView.add(selected = new RecordingTree(treesView.newChildId(), new MyRecordingTreeProvider()));
-		treesView.add(new RecordingTree(treesView.newChildId(), new PublicRecordingTreeProvider(null, null)));
-		for (Organisation_Users ou : getBean(UserDao.class).get(getUserId()).getOrganisation_users()) {
-			Organisation o = ou.getOrganisation();
-			treesView.add(new RecordingTree(treesView.newChildId(), new PublicRecordingTreeProvider(o.getId(), o.getName())));
-		}
-		add(trees.add(treesView).setOutputMarkupId(true));
-		updateSizes();
-		add(sizes.add(new Label("homeSize", homeSize), new Label("publicSize", publicSize)).setOutputMarkupId(true));
-		sizes.add(new AjaxSelfUpdatingTimerBehavior(Duration.seconds(30)) {
-			private static final long serialVersionUID = 1L;
-
-			protected void onPostProcessTarget(AjaxRequestTarget target) {
-				updateSizes();
+			public void update(AjaxRequestTarget target, FileItem f) {
+				video.update(target, (FlvRecording)f);
+				info.update(target, (FlvRecording)f);
 			}
-		});
-		add(video, info, errorsDialog);
-	}
-
-	private void updateSizes() {
-		RecordingContainerData sizeData = getBean(FlvRecordingDao.class).getRecordingContainerData(getUserId());
-		if (sizeData != null) {
-			homeSize.setObject(getHumanSize(sizeData.getUserHomeSize()));
-			publicSize.setObject(getHumanSize(sizeData.getPublicFileSize()));
-		}
-	}
-	
-	//FIXME need to be generalized to use as Room files explorer
-	class RecordingTree extends DefaultNestedTree<FlvRecording> {
-		private static final long serialVersionUID = 1L;
-
-		public RecordingTree(String id, ITreeProvider<FlvRecording> tp) {
-			super(id, tp);
-			setItemReuseStrategy(new ReuseIfModelsEqualStrategy());
-		}
-		
-		@Override
-		protected Component newContentComponent(String id, IModel<FlvRecording> node) {
-			return new Folder<FlvRecording>(id, this, node) {
-				private static final long serialVersionUID = 1L;
-
-				@Override
-				protected Component newLabelComponent(String id, final IModel<FlvRecording> lm) {
-					FlvRecording r = lm.getObject();
-					Component result = r.isFolder() || r.getId() < 1 ? new RecordingPanel(id, lm) : new RecordingItemPanel(id, lm, errorsDialog);
-					if (r.getId() > 0) {
-						result.add(new DragSource(Operation.MOVE) {
-							private static final long serialVersionUID = 1L;
-
-							@Override
-							public void onBeforeDrop(Component drag, Transfer transfer) throws Reject {
-								transfer.setData(lm.getObject());
-							};
-							
-							@Override
-							public void onAfterDrop(AjaxRequestTarget target, wicketdnd.Transfer transfer) {
-								transfer.setData(null);
-							}
-						}.drag("div"));
-					}
-					if (r.getId() < 0 || r.isFolder()) {
-						result.add(new DropTarget(Operation.MOVE) {
-							private static final long serialVersionUID = 1L;
-
-							@Override
-							public void onDrop(AjaxRequestTarget target, Transfer transfer, Location location) throws Reject {
-								FlvRecording p = lm.getObject();
-								long pid = p.getId();
-								FlvRecording r = transfer.getData();
-								r.setParentFileExplorerItemId(pid > 0 ? pid : null);
-								r.setOrganization_id(p.getOrganization_id());
-								r.setOwnerId(p.getOwnerId());
-								getBean(FlvRecordingDao.class).update(r);
-								target.add(trees); //FIXME add correct refresh
-							}
-						}.dropCenter("div"));
-					}
-					return result;
-				}
-				
-				@Override
-				protected boolean isSelected() {
-					return getModelObject().getId() == rm.getObject().getId();
-				}
-				
-				@Override
-				protected boolean isClickable() {
-					return true;
-				}
-				
-				@Override
-				protected void onClick(AjaxRequestTarget target) {
-					FlvRecording r = getModelObject();
-					FlvRecording _prev = rm.getObject();
-					rm.setObject(r);
-					if (_prev != null) {
-						if (_prev.isFolder()) {
-							selected.updateBranch(_prev, target);
-						} else {
-							selected.updateNode(_prev, target);
-						}
-					}
- 					selected = RecordingTree.this;
-					if (r.isFolder()) {
-						if (getState(r) == State.COLLAPSED) {
-							super.onClick(target);
-						}
-						updateBranch(r, target);
-					} else {
-						video.update(target, r);
-						info.update(target, r);
-						updateNode(r, target);
-					}
-				}
-				
-				private String getRecordingStyle(FlvRecording r, String def) {
-					String style;
-					if (r.getId() == 0) {
-						style = "my-recordings om-icon";
-					} else if (r.getId() < 0) {
-						style = "public-recordings om-icon";
-					} else if (r.isFolder()) {
-						style = def;
-					} else if (isRecordingExists(r.getFileHash() + MP4_EXTENSION)) {
-						style = "recording om-icon";
-					} else if (Status.PROCESSING == r.getStatus()) {
-						style = "processing-recording om-icon";
-					} else {
-						style = "broken-recording om-icon";
-					}
-					return style;
-				}
-				
-				@Override
-				protected String getOtherStyleClass(FlvRecording r) {
-					String style = getRecordingStyle(r, super.getOtherStyleClass(r));
-					if (isSelected()) {
-						style += " ui-state-active";
-					}
-					return style;
-				}
-				
-				@Override
-				protected String getOpenStyleClass() {
-					return getRecordingStyle(getModelObject(), super.getOpenStyleClass());
-				}
-				
-				@Override
-				protected String getClosedStyleClass() {
-					return getRecordingStyle(getModelObject(), super.getClosedStyleClass());
+			
+			@Override
+			public void createFolder(String name) {
+				FlvRecording f = new FlvRecording();
+				f.setFileName(name);
+				f.setInsertedBy(getUserId());
+				f.setInserted(new Date());
+				f.setType(Type.Folder);;
+				FlvRecording p = (FlvRecording)rm.getObject();
+				long parentId = p.getId();
+				if (Type.Folder == p.getType()) {
+					f.setParentItemId(parentId);
 				}
+				f.setOwnerId(p.getOwnerId());
+				f.setOrganization_id(p.getOrganization_id());
+				getBean(FlvRecordingDao.class).update(f);
 				
-				@Override
-				protected IModel<String> newLabelModel(IModel<FlvRecording> model) {
-					return Model.of(model.getObject().getFileName());
-				}
-			};
-		}
-	}
-	
-	class MyRecordingTreeProvider extends RecordingTreeProvider {
-		private static final long serialVersionUID = 1L;
-
-		public Iterator<? extends FlvRecording> getRoots() {
-			FlvRecording r = new FlvRecording();
-			r.setId(0L);
-			r.setFileName(WebSession.getString(860));
-			r.setOwnerId(getUserId());
-			return Arrays.asList(r).iterator();
-		}
-		
-		public Iterator<? extends FlvRecording> getChildren(FlvRecording node) {
-			if (node.getId() == 0) {
-				return getBean(FlvRecordingDao.class).getFlvRecordingRootByOwner(getUserId()).iterator();
-			} else {
-				return super.getChildren(node);
 			}
-		}
-	}
-	
-	class PublicRecordingTreeProvider extends RecordingTreeProvider {
-		private static final long serialVersionUID = 1L;
-		private final Long orgId;
-		private final String name;
-
-		public PublicRecordingTreeProvider(Long orgId, String name) {
-			this.orgId = orgId;
-			this.name = name;
-		}
-		
-		public Iterator<? extends FlvRecording> getRoots() {
-			FlvRecording r = new FlvRecording();
-			r.setId(orgId == null ? -1 : -orgId);
-			r.setOrganization_id(orgId);
-			r.setOwnerId(null);
-			String pub = WebSession.getString(861);
-			r.setFileName(orgId == null ? pub : String.format("%s (%s)", pub, name));
-			return Arrays.asList(r).iterator();
-		}
-		
-		public Iterator<? extends FlvRecording> getChildren(FlvRecording node) {
-			if (node.getId() < 0) {
-				return getBean(FlvRecordingDao.class).getFlvRecordingRootByPublic(orgId).iterator();
-			} else {
-				return super.getChildren(node);
-			}
-		}
-	}
-	
-	abstract class RecordingTreeProvider implements ITreeProvider<FlvRecording> {
-		private static final long serialVersionUID = 1L;
-
-		public void detach() {
-			// TODO LDM should be used
-		}
-
-		public boolean hasChildren(FlvRecording node) {
-			return node.getId() <= 0 || node.isFolder();
-		}
-
-		public Iterator<? extends FlvRecording> getChildren(FlvRecording node) {
-			return getBean(FlvRecordingDao.class).getFlvRecordingByParent(node.getId()).iterator();
-		}
-
-		public IModel<FlvRecording> model(FlvRecording object) {
-			// TODO LDM should be used
-			return Model.of(object);
-		}
-		
+		});
+		add(video, info);
 	}
 }

Modified: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/VideoInfo.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/VideoInfo.java?rev=1605992&r1=1605991&r2=1605992&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/VideoInfo.java (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/VideoInfo.java Fri Jun 27 08:50:50 2014
@@ -84,7 +84,7 @@ public class VideoInfo extends Panel {
 	public VideoInfo update(AjaxRequestTarget target, FlvRecording r) {
 		rm.setObject(r == null ? new FlvRecording() : r);
 		try {
-			Room room = getBean(RoomDao.class).get(r.getRoom_id());
+			Room room = getBean(RoomDao.class).get(r.getRoomId());
 			roomName.setObject(room.getName());
 		} catch (Exception e) {
 			//no-op

Modified: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/db2_persistence.xml
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/db2_persistence.xml?rev=1605992&r1=1605991&r2=1605992&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/db2_persistence.xml (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/db2_persistence.xml Fri Jun 27 08:50:50 2014
@@ -69,6 +69,7 @@
 		<class>org.apache.openmeetings.db.entity.user.UserContact</class>
 		<class>org.apache.openmeetings.db.entity.user.Userdata</class>
 		<class>org.apache.openmeetings.db.entity.user.User</class>
+		<class>org.apache.openmeetings.db.entity.file.FileItem</class>
 		<class>org.apache.openmeetings.db.entity.file.FileExplorerItem</class>
 		<class>org.apache.openmeetings.db.entity.user.AsteriskSipUser</class>
 		<class>org.apache.openmeetings.db.entity.server.OAuthServer</class>

Modified: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/derby_persistence.xml
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/derby_persistence.xml?rev=1605992&r1=1605991&r2=1605992&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/derby_persistence.xml (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/derby_persistence.xml Fri Jun 27 08:50:50 2014
@@ -69,6 +69,7 @@
 		<class>org.apache.openmeetings.db.entity.user.UserContact</class>
 		<class>org.apache.openmeetings.db.entity.user.Userdata</class>
 		<class>org.apache.openmeetings.db.entity.user.User</class>
+		<class>org.apache.openmeetings.db.entity.file.FileItem</class>
 		<class>org.apache.openmeetings.db.entity.file.FileExplorerItem</class>
 		<class>org.apache.openmeetings.db.entity.user.AsteriskSipUser</class>
 		<class>org.apache.openmeetings.db.entity.server.OAuthServer</class>

Modified: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/mssql_persistence.xml
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/mssql_persistence.xml?rev=1605992&r1=1605991&r2=1605992&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/mssql_persistence.xml (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/mssql_persistence.xml Fri Jun 27 08:50:50 2014
@@ -68,6 +68,7 @@
 		<class>org.apache.openmeetings.db.entity.user.UserContact</class>
 		<class>org.apache.openmeetings.db.entity.user.Userdata</class>
 		<class>org.apache.openmeetings.db.entity.user.User</class>
+		<class>org.apache.openmeetings.db.entity.file.FileItem</class>
 		<class>org.apache.openmeetings.db.entity.file.FileExplorerItem</class>
 		<class>org.apache.openmeetings.db.entity.user.AsteriskSipUser</class>
 		<class>org.apache.openmeetings.db.entity.server.OAuthServer</class>

Modified: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/mysql_persistence.xml
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/mysql_persistence.xml?rev=1605992&r1=1605991&r2=1605992&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/mysql_persistence.xml (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/mysql_persistence.xml Fri Jun 27 08:50:50 2014
@@ -69,6 +69,7 @@
 		<class>org.apache.openmeetings.db.entity.user.UserContact</class>
 		<class>org.apache.openmeetings.db.entity.user.Userdata</class>
 		<class>org.apache.openmeetings.db.entity.user.User</class>
+		<class>org.apache.openmeetings.db.entity.file.FileItem</class>
 		<class>org.apache.openmeetings.db.entity.file.FileExplorerItem</class>
 		<class>org.apache.openmeetings.db.entity.user.AsteriskSipUser</class>
 		<class>org.apache.openmeetings.db.entity.server.OAuthServer</class>

Modified: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/oracle_persistence.xml
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/oracle_persistence.xml?rev=1605992&r1=1605991&r2=1605992&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/oracle_persistence.xml (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/oracle_persistence.xml Fri Jun 27 08:50:50 2014
@@ -69,6 +69,7 @@
 		<class>org.apache.openmeetings.db.entity.user.UserContact</class>
 		<class>org.apache.openmeetings.db.entity.user.Userdata</class>
 		<class>org.apache.openmeetings.db.entity.user.User</class>
+		<class>org.apache.openmeetings.db.entity.file.FileItem</class>
 		<class>org.apache.openmeetings.db.entity.file.FileExplorerItem</class>
 		<class>org.apache.openmeetings.db.entity.user.AsteriskSipUser</class>
 		<class>org.apache.openmeetings.db.entity.server.OAuthServer</class>

Modified: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/postgresql_persistence.xml
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/postgresql_persistence.xml?rev=1605992&r1=1605991&r2=1605992&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/postgresql_persistence.xml (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/postgresql_persistence.xml Fri Jun 27 08:50:50 2014
@@ -69,6 +69,7 @@
 		<class>org.apache.openmeetings.db.entity.user.UserContact</class>
 		<class>org.apache.openmeetings.db.entity.user.Userdata</class>
 		<class>org.apache.openmeetings.db.entity.user.User</class>
+		<class>org.apache.openmeetings.db.entity.file.FileItem</class>
 		<class>org.apache.openmeetings.db.entity.file.FileExplorerItem</class>
 		<class>org.apache.openmeetings.db.entity.user.AsteriskSipUser</class>
 		<class>org.apache.openmeetings.db.entity.server.OAuthServer</class>

Added: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/css/images/chart_pie.png
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/css/images/chart_pie.png?rev=1605992&view=auto
==============================================================================
Binary file - no diff available.

Propchange: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/css/images/chart_pie.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/css/images/map.png
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/css/images/map.png?rev=1605992&view=auto
==============================================================================
Binary file - no diff available.

Propchange: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/css/images/map.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/css/images/photo.png
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/css/images/photo.png?rev=1605992&view=auto
==============================================================================
Binary file - no diff available.

Propchange: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/css/images/photo.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/css/images/report.png
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/css/images/report.png?rev=1605992&view=auto
==============================================================================
Binary file - no diff available.

Propchange: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/css/images/report.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Modified: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/css/room.css
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/css/room.css?rev=1605992&r1=1605991&r2=1605992&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/css/room.css (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/css/room.css Fri Jun 27 08:50:50 2014
@@ -44,6 +44,9 @@
 	padding-left: 5px;
     padding-top: 5px;
 }
+.room.sidebar.left .tabs, .room.sidebar.left .tabs #utab, .room.sidebar.left .tabs #ftab {
+	padding: 0;
+}
 .room.sidebar.left .user.list .user.current {
 	font-weight: bold;
 }

Modified: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/css/theme.css
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/css/theme.css?rev=1605992&r1=1605991&r2=1605992&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/css/theme.css (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/css/theme.css Fri Jun 27 08:50:50 2014
@@ -283,24 +283,23 @@ html, body {
 #feedcontainer {
 	overflow: auto;
 }
-.recording {
+.file.tree.container {
+	border: 1px solid #ccc;
+}
+.file.tree {
 	width: 100%;
 	display: inline-block;
 }
-.recording .files {
-	width: 250px;
-	border: 1px solid #ccc;
-}
-.recording .files .trees {
+.file.tree .trees {
 	min-height: 400px;
 	max-height: 600px;
 	overflow-x: hidden;
 	overflow-y: auto;
 }
-.recording .files .sizes table, .recording .files .info table {
+.file.tree .files .sizes table, .file.tree .files .info table {
 	width: 100%;
 }
-.recording .files .info input {
+.file.tree .files .info input {
 	width: 100%;
 	padding-right: 5px;
 	padding-left: 5px;
@@ -377,43 +376,53 @@ html, body {
 	background-image: url(images/film_processing.png);
 	background-repeat: no-repeat;
 }
-.my-recordings.om-icon {
+.file.om-icon {
 	padding-left: 18px;
-	background-image: url(images/house_link.png);
 	background-repeat: no-repeat;
 }
-.public-recordings.om-icon {
-	padding-left: 18px;
+.my.file.om-icon {
+	background-image: url(images/house_link.png);
+}
+.public.file.om-icon {
 	background-image: url(images/world_link.png);
-	background-repeat: no-repeat;
 }
-.selected .recording.item {
+.image.file.om-icon {
+	background-image: url(images/photo.png);
+}
+.chart.file.om-icon {
+	background-image: url(images/chart_pie.png);
+}
+.wml.file.om-icon {
+	background-image: url(images/map.png);
+}
+.doc.file.om-icon {
+	background-image: url(images/report.png);
+}
+.selected .file.item {
 	background-color: #0099FF;
 }
-.recording.item {
+.file.item {
 	position: relative;
+	display: inline-block;
 }
-.recording.item .name {
+.file.item .name {
 	color: black;
 }
-.recording.item .errors {
-	position: absolute;
-	right: 0px;
+.file.item .errors {
 	background-image: url(images/script_error.png);
 	width: 16px;
 	height: 16px;
 	background-repeat: no-repeat;
-	padding-right: 20px;
 }
-.recording.dialog.errors {
+.file.tree .dialog.errors {
 	width: 600px;
 	height: 500px;
 	font-size: small;
 }
-.recording.dialog.errors .alert {
+.file.tree .dialog.errors .alert {
 	color: red;
 }
-.recording.dialog.errors .message {
+.file.tree .dialog.errors .message {
 	display: block;
     unicode-bidi: embed;
     font-family: monospace;

Modified: openmeetings/trunk/singlewebapp/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/FileWebService.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/FileWebService.java?rev=1605992&r1=1605991&r2=1605992&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/FileWebService.java (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/FileWebService.java Fri Jun 27 08:50:50 2014
@@ -148,8 +148,7 @@ public class FileWebService {
 				// httpServletResponse.getWriter().print(returnError);
 				hs.put("message", "library");
 				hs.put("action", "newFile");
-				hs.put("fileExplorerItem", fileExplorerItemDao
-						.getFileExplorerItemsById(returnError.getFileExplorerItemId()));
+				hs.put("fileExplorerItem", fileExplorerItemDao.get(returnError.getFileExplorerItemId()));
 				hs.put("error", returnError.getLogMessage());
 				hs.put("fileName", returnError.getCompleteName());
 				
@@ -232,8 +231,7 @@ public class FileWebService {
 				// httpServletResponse.getWriter().print(returnError);
 				hs.put("message", "library");
 				hs.put("action", "newFile");
-				hs.put("fileExplorerItem", fileExplorerItemDao
-						.getFileExplorerItemsById(returnError.getFileExplorerItemId()));
+				hs.put("fileExplorerItem", fileExplorerItemDao.get(returnError.getFileExplorerItemId()));
 				hs.put("error", returnError);
 				hs.put("fileName", returnError.getCompleteName());
 				
@@ -490,7 +488,7 @@ public class FileWebService {
 
 			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
 
-				fileExplorerItemDao.deleteFileExplorerItem(fileExplorerItemId);
+				fileExplorerItemDao.delete(fileExplorerItemId);
 
 			}
 
@@ -521,7 +519,7 @@ public class FileWebService {
 
 				// TODO: Check if user has access or not to the file
 
-				fileExplorerItemDao.deleteFileExplorerItem(fileExplorerItemId);
+				fileExplorerItemDao.delete(fileExplorerItemId);
 
 			}
 
@@ -944,8 +942,7 @@ public class FileWebService {
 								newParentFileExplorerItemId, room_id, isOwner,
 								owner_id);
 
-				FileExplorerItem fileExplorerItem = fileExplorerItemDao
-						.getFileExplorerItemsById(fileExplorerItemId);
+				FileExplorerItem fileExplorerItem = fileExplorerItemDao.get(fileExplorerItemId);
 
 				if (moveToHome) {
 					// set this file and all subfiles and folders the ownerId
@@ -1003,8 +1000,7 @@ public class FileWebService {
 								newParentFileExplorerItemId, room_id, isOwner,
 								users_id);
 
-				FileExplorerItem fileExplorerItem = fileExplorerItemDao
-						.getFileExplorerItemsById(fileExplorerItemId);
+				FileExplorerItem fileExplorerItem = fileExplorerItemDao.get(fileExplorerItemId);
 
 				if (moveToHome) {
 					// set this file and all subfiles and folders the ownerId

Modified: openmeetings/trunk/singlewebapp/pom.xml
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/pom.xml?rev=1605992&r1=1605991&r2=1605992&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/pom.xml (original)
+++ openmeetings/trunk/singlewebapp/pom.xml Fri Jun 27 08:50:50 2014
@@ -566,7 +566,7 @@
 				<plugin>
 					<groupId>org.apache.maven.plugins</groupId>
 					<artifactId>maven-jar-plugin</artifactId>
-					<version>2.4</version>
+					<version>2.5</version>
 					<configuration>
 						<useDefaultManifestFile>true</useDefaultManifestFile>
 						<archive>