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 2017/09/18 05:25:40 UTC

[01/18] openmeetings git commit: [OPENMEETINGS-1671] initial commit on room files

Repository: openmeetings
Updated Branches:
  refs/heads/3.3.x 0d43610b6 -> 1b23071ff


[OPENMEETINGS-1671] initial commit on room files


Project: http://git-wip-us.apache.org/repos/asf/openmeetings/repo
Commit: http://git-wip-us.apache.org/repos/asf/openmeetings/commit/da7a4ff0
Tree: http://git-wip-us.apache.org/repos/asf/openmeetings/tree/da7a4ff0
Diff: http://git-wip-us.apache.org/repos/asf/openmeetings/diff/da7a4ff0

Branch: refs/heads/3.3.x
Commit: da7a4ff04922a4db313f23e879a0b3bdd41ce71d
Parents: 4943f46
Author: Maxim Solodovnik <so...@gmail.com>
Authored: Wed Sep 13 17:14:41 2017 +0700
Committer: Maxim Solodovnik <so...@gmail.com>
Committed: Wed Sep 13 17:14:41 2017 +0700

----------------------------------------------------------------------
 .../openmeetings/db/dao/room/RoomDao.java       |  2 +-
 .../openmeetings/db/entity/room/Room.java       |  6 +++
 .../openmeetings/db/entity/room/RoomFile.java   | 51 ++++++++++++++++++++
 .../classes/META-INF/db2_persistence.xml        |  1 +
 .../classes/META-INF/derby_persistence.xml      |  1 +
 .../classes/META-INF/mssql_persistence.xml      |  3 +-
 .../classes/META-INF/mysql_persistence.xml      |  1 +
 .../classes/META-INF/oracle_persistence.xml     |  1 +
 .../classes/META-INF/postgresql_persistence.xml |  1 +
 9 files changed, 65 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/openmeetings/blob/da7a4ff0/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/RoomDao.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/RoomDao.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/RoomDao.java
index 0ea7a43..6dd79a8 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/RoomDao.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/RoomDao.java
@@ -83,7 +83,7 @@ public class RoomDao implements IGroupAdminDataProviderDao<Room> {
 				q.setParameter("id", id);
 				@SuppressWarnings("unchecked")
 				OpenJPAQuery<Room> kq = OpenJPAPersistence.cast(q);
-				kq.getFetchPlan().addFetchGroups("roomModerators", "roomGroups");
+				kq.getFetchPlan().addFetchGroups("roomModerators", "roomGroups", "roomFiles");
 				List<Room> l = kq.getResultList();
 				r = l.isEmpty() ? r : l.get(0);
 			} finally {

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/da7a4ff0/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java
index b09ae13..6f76946 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java
@@ -61,6 +61,7 @@ import org.simpleframework.xml.Root;
 @FetchGroups({
 	@FetchGroup(name = "roomModerators", attributes = { @FetchAttribute(name = "moderators") })
 	, @FetchGroup(name = "roomGroups", attributes = { @FetchAttribute(name = "roomGroups") })
+	, @FetchGroup(name = "roomFiles", attributes = { @FetchAttribute(name = "roomFiles") })
 })
 @NamedQueries({
 	@NamedQuery(name = "getNondeletedRooms", query = "SELECT r FROM Room r WHERE r.deleted = false"),
@@ -301,6 +302,11 @@ public class Room implements IDataProviderEntity {
 	@org.simpleframework.xml.Transient
 	private List<RoomGroup> roomGroups = new ArrayList<>();
 
+	@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
+	@JoinColumn(name = "room_id", insertable = true, updatable = true, nullable = false)
+	@ElementDependent
+	private List<RoomFile> roomfiles = new ArrayList<>();
+
 	@Transient
 	private List<StreamClient> currentusers;
 

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/da7a4ff0/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/RoomFile.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/RoomFile.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/RoomFile.java
new file mode 100644
index 0000000..3098aa9
--- /dev/null
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/RoomFile.java
@@ -0,0 +1,51 @@
+/*
+ * 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.db.entity.room;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+import org.apache.openmeetings.db.entity.IDataProviderEntity;
+
+@Entity
+@Table(name = "room_file")
+public class RoomFile implements IDataProviderEntity {
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	private Long id;
+
+	@Column(name = "room_id")
+	private Long roomId;
+
+	@Override
+	public Long getId() {
+		return id;
+	}
+
+	@Override
+	public void setId(Long id) {
+		this.id = id;
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/da7a4ff0/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/db2_persistence.xml
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/db2_persistence.xml b/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/db2_persistence.xml
index 7268dbf..7f8cee6 100644
--- a/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/db2_persistence.xml
+++ b/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/db2_persistence.xml
@@ -46,6 +46,7 @@
 		<class>org.apache.openmeetings.db.entity.room.RoomModerator</class>
 		<class>org.apache.openmeetings.db.entity.room.Room</class>
 		<class>org.apache.openmeetings.db.entity.room.RoomGroup</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomFile</class>
 		<class>org.apache.openmeetings.db.entity.room.Whiteboard</class>
 		<class>org.apache.openmeetings.db.entity.room.WhiteboardItem</class>
 		<class>org.apache.openmeetings.db.entity.user.Address</class>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/da7a4ff0/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/derby_persistence.xml
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/derby_persistence.xml b/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/derby_persistence.xml
index 1f1e117..1c7eee0 100644
--- a/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/derby_persistence.xml
+++ b/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/derby_persistence.xml
@@ -46,6 +46,7 @@
 		<class>org.apache.openmeetings.db.entity.room.RoomModerator</class>
 		<class>org.apache.openmeetings.db.entity.room.Room</class>
 		<class>org.apache.openmeetings.db.entity.room.RoomGroup</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomFile</class>
 		<class>org.apache.openmeetings.db.entity.room.Whiteboard</class>
 		<class>org.apache.openmeetings.db.entity.room.WhiteboardItem</class>
 		<class>org.apache.openmeetings.db.entity.user.Address</class>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/da7a4ff0/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/mssql_persistence.xml
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/mssql_persistence.xml b/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/mssql_persistence.xml
index 1406f21..453f180 100644
--- a/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/mssql_persistence.xml
+++ b/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/mssql_persistence.xml
@@ -45,9 +45,10 @@
 		<class>org.apache.openmeetings.db.entity.room.RoomPollAnswer</class>
 		<class>org.apache.openmeetings.db.entity.room.RoomModerator</class>
 		<class>org.apache.openmeetings.db.entity.room.Room</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomGroup</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomFile</class>
 		<class>org.apache.openmeetings.db.entity.room.Whiteboard</class>
 		<class>org.apache.openmeetings.db.entity.room.WhiteboardItem</class>
-		<class>org.apache.openmeetings.db.entity.room.RoomGroup</class>
 		<class>org.apache.openmeetings.db.entity.user.Address</class>
 		<class>org.apache.openmeetings.db.entity.user.PrivateMessage</class>
 		<class>org.apache.openmeetings.db.entity.user.PrivateMessageFolder</class>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/da7a4ff0/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/mysql_persistence.xml
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/mysql_persistence.xml b/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/mysql_persistence.xml
index bd84f1c..d645324 100644
--- a/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/mysql_persistence.xml
+++ b/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/mysql_persistence.xml
@@ -46,6 +46,7 @@
 		<class>org.apache.openmeetings.db.entity.room.RoomModerator</class>
 		<class>org.apache.openmeetings.db.entity.room.Room</class>
 		<class>org.apache.openmeetings.db.entity.room.RoomGroup</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomFile</class>
 		<class>org.apache.openmeetings.db.entity.room.Whiteboard</class>
 		<class>org.apache.openmeetings.db.entity.room.WhiteboardItem</class>
 		<class>org.apache.openmeetings.db.entity.user.Address</class>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/da7a4ff0/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/oracle_persistence.xml
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/oracle_persistence.xml b/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/oracle_persistence.xml
index a5229c1..b6a6326 100644
--- a/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/oracle_persistence.xml
+++ b/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/oracle_persistence.xml
@@ -46,6 +46,7 @@
 		<class>org.apache.openmeetings.db.entity.room.RoomModerator</class>
 		<class>org.apache.openmeetings.db.entity.room.Room</class>
 		<class>org.apache.openmeetings.db.entity.room.RoomGroup</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomFile</class>
 		<class>org.apache.openmeetings.db.entity.room.Whiteboard</class>
 		<class>org.apache.openmeetings.db.entity.room.WhiteboardItem</class>
 		<class>org.apache.openmeetings.db.entity.user.Address</class>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/da7a4ff0/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/postgresql_persistence.xml
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/postgresql_persistence.xml b/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/postgresql_persistence.xml
index 6d2c129..d7dbe26 100644
--- a/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/postgresql_persistence.xml
+++ b/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/postgresql_persistence.xml
@@ -46,6 +46,7 @@
 		<class>org.apache.openmeetings.db.entity.room.RoomModerator</class>
 		<class>org.apache.openmeetings.db.entity.room.Room</class>
 		<class>org.apache.openmeetings.db.entity.room.RoomGroup</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomFile</class>
 		<class>org.apache.openmeetings.db.entity.room.Whiteboard</class>
 		<class>org.apache.openmeetings.db.entity.room.WhiteboardItem</class>
 		<class>org.apache.openmeetings.db.entity.user.Address</class>


[17/18] openmeetings git commit: [OPENMEETINGS-1705] get appointment by title api method is fixed

Posted by so...@apache.org.
[OPENMEETINGS-1705] get appointment by title api method is fixed


Project: http://git-wip-us.apache.org/repos/asf/openmeetings/repo
Commit: http://git-wip-us.apache.org/repos/asf/openmeetings/commit/6f81604b
Tree: http://git-wip-us.apache.org/repos/asf/openmeetings/tree/6f81604b
Diff: http://git-wip-us.apache.org/repos/asf/openmeetings/diff/6f81604b

Branch: refs/heads/3.3.x
Commit: 6f81604bb0caae32a0d6163f8942e6182fd815a4
Parents: 6eec97d
Author: Maxim Solodovnik <so...@gmail.com>
Authored: Sat Sep 16 00:47:30 2017 +0700
Committer: Maxim Solodovnik <so...@gmail.com>
Committed: Sat Sep 16 00:47:30 2017 +0700

----------------------------------------------------------------------
 .../db/dao/calendar/AppointmentDao.java         |  2 +-
 .../test/webservice/TestCalendarService.java    | 42 ++++++++++++++++----
 2 files changed, 36 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/openmeetings/blob/6f81604b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/calendar/AppointmentDao.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/calendar/AppointmentDao.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/calendar/AppointmentDao.java
index 694784d..2d9709c 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/calendar/AppointmentDao.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/calendar/AppointmentDao.java
@@ -204,7 +204,7 @@ public class AppointmentDao {
 	}
 
 	public List<Appointment> searchAppointmentsByTitle(Long userId, String title) {
-		return em.createNamedQuery("getNextAppointment", Appointment.class)
+		return em.createNamedQuery("getAppointmentsByTitle", Appointment.class)
 				.setParameter("title", title).setParameter("userId", userId).getResultList();
 	}
 

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/6f81604b/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestCalendarService.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestCalendarService.java b/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestCalendarService.java
index 8af988b..6ceec81 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestCalendarService.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestCalendarService.java
@@ -90,9 +90,9 @@ public class TestCalendarService extends AbstractWebServiceTest {
 		actualTest(roomDao.get(5L)); //default public restricted room
 	}
 
-	private static JSONObject createAppointment() {
+	private static JSONObject createAppointment(String title) {
 		return new JSONObject()
-			.put("title", "test")
+			.put("title", title)
 			.put("start", "2025-01-20T20:30:03+0300")
 			.put("end", "2025-01-20T21:30:03+0300")
 			.put("description", "Русский Тест")
@@ -136,9 +136,8 @@ public class TestCalendarService extends AbstractWebServiceTest {
 		return sr.getMessage();
 	}
 
-	@Test
-	public void testCreate() throws Exception {
-		JSONObject o = createAppointment();
+	private String createApp(String title) throws Exception {
+		JSONObject o = createAppointment(title);
 
 		String sid = loginNewUser();
 
@@ -152,6 +151,13 @@ public class TestCalendarService extends AbstractWebServiceTest {
 		AppointmentDTO dto = resp.readEntity(AppointmentDTO.class);
 		assertNotNull("Valid DTO should be returned", dto);
 		assertNotNull("DTO id should be valid", dto.getId());
+
+		return sid;
+	}
+
+	@Test
+	public void testCreate() throws Exception {
+		createApp("test");
 	}
 
 	@Test
@@ -167,7 +173,7 @@ public class TestCalendarService extends AbstractWebServiceTest {
 
 	@Test
 	public void testCreateWithOmMm() throws Exception {
-		JSONObject o = createAppointment()
+		JSONObject o = createAppointment("test")
 				.put("meetingMembers", new JSONArray()
 						.put(new JSONObject().put("user", new JSONObject()
 								.put("id", 1))));
@@ -191,7 +197,7 @@ public class TestCalendarService extends AbstractWebServiceTest {
 	}
 
 	private static AppointmentDTO createEventWithGuests(String sid) throws Exception {
-		JSONObject o = createAppointment()
+		JSONObject o = createAppointment("test")
 				.put("meetingMembers", new JSONArray()
 						.put(new JSONObject().put("user", new JSONObject()
 								.put("firstname", "John 1")
@@ -277,4 +283,26 @@ public class TestCalendarService extends AbstractWebServiceTest {
 		assertNotNull("Meeting member user should not be deleted", uc);
 		assertFalse("Meeting member user should not be deleted", uc.isDeleted());
 	}
+
+	@Test
+	public void testGetByTitle() throws Exception {
+		String title = "title" + UUID.randomUUID().toString();
+		String sid = createApp(title);
+		@SuppressWarnings("unchecked")
+		List<AppointmentDTO> list = (List<AppointmentDTO>)getClient(CALENDAR_SERVICE_URL)
+			.path(String.format("/title/%s", title))
+			.query("sid", sid)
+			.getCollection(AppointmentDTO.class);
+
+		assertEquals("List of one item should be returned", 1, list.size());
+		assertEquals("Title should match", title, list.get(0).getTitle());
+
+		title = UUID.randomUUID().toString();
+		@SuppressWarnings("unchecked")
+		List<AppointmentDTO> list1 = (List<AppointmentDTO>)getClient(CALENDAR_SERVICE_URL)
+			.path(String.format("/title/%s", title))
+			.query("sid", sid)
+			.getCollection(AppointmentDTO.class);
+		assertEquals("None items should be returned", 0, list1.size());
+	}
 }


[10/18] openmeetings git commit: [OPENMEETINGS-1671] minor fixes

Posted by so...@apache.org.
[OPENMEETINGS-1671] minor fixes


Project: http://git-wip-us.apache.org/repos/asf/openmeetings/repo
Commit: http://git-wip-us.apache.org/repos/asf/openmeetings/commit/c17eb7c4
Tree: http://git-wip-us.apache.org/repos/asf/openmeetings/tree/c17eb7c4
Diff: http://git-wip-us.apache.org/repos/asf/openmeetings/diff/c17eb7c4

Branch: refs/heads/3.3.x
Commit: c17eb7c402dfed144815fc9336893d52c478edf2
Parents: d09f559
Author: Maxim Solodovnik <so...@gmail.com>
Authored: Thu Sep 14 13:44:32 2017 +0700
Committer: Maxim Solodovnik <so...@gmail.com>
Committed: Thu Sep 14 13:44:32 2017 +0700

----------------------------------------------------------------------
 .../java/org/apache/openmeetings/db/dao/file/FileItemDao.java    | 4 ++--
 .../org/apache/openmeetings/db/entity/file/BaseFileItem.java     | 2 +-
 2 files changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/openmeetings/blob/c17eb7c4/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileItemDao.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileItemDao.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileItemDao.java
index fc7f1c3..f8010f3 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileItemDao.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileItemDao.java
@@ -290,7 +290,7 @@ public class FileItemDao {
 		return em.createNamedQuery("getAllFileItemsForRoom", BaseFileItem.class)
 				.setParameter("folder", Type.Folder)
 				.setParameter("roomId", roomId)
-				.setParameter("groups", groups.stream().map(Group::getId).collect(Collectors.toList()))
+				.setParameter("groups", groups.parallelStream().map(Group::getId).collect(Collectors.toList()))
 				.setParameter("name", String.format("%%%s%%", search == null ? "" : search))
 				.setFirstResult(start)
 				.setMaxResults(count)
@@ -299,7 +299,7 @@ public class FileItemDao {
 
 	public List<BaseFileItem> get(Collection<String> ids) {
 		return em.createNamedQuery("getFileItemsByIds", BaseFileItem.class)
-				.setParameter("ids", ids.stream().map(Long::valueOf).collect(Collectors.toList()))
+				.setParameter("ids", ids.parallelStream().map(Long::valueOf).collect(Collectors.toList()))
 				.getResultList();
 	}
 

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/c17eb7c4/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/BaseFileItem.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/BaseFileItem.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/BaseFileItem.java
index 763e636..c83869d 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/BaseFileItem.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/BaseFileItem.java
@@ -54,7 +54,7 @@ import org.simpleframework.xml.Element;
 			+ " WHERE f.deleted = false AND f.type <> :folder"
 			+ " AND (f.roomId IS NULL OR f.roomId = :roomId)"
 			+ " AND (f.groupId IS NULL OR f.groupId IN :groups)"
-			//+ " AND (f.ownerId IS NULL OR f.ownerId = :ownerId)"
+			+ " AND f.ownerId IS NULL" // not loading personal files
 			+ " AND f.name LIKE :name"
 			+ " ORDER BY f.name")
 	, @NamedQuery(name = "getFileItemsByIds", query = "SELECT f FROM BaseFileItem f"


[18/18] openmeetings git commit: no jira: dev version bumped

Posted by so...@apache.org.
no jira: dev version bumped


Project: http://git-wip-us.apache.org/repos/asf/openmeetings/repo
Commit: http://git-wip-us.apache.org/repos/asf/openmeetings/commit/1b23071f
Tree: http://git-wip-us.apache.org/repos/asf/openmeetings/tree/1b23071f
Diff: http://git-wip-us.apache.org/repos/asf/openmeetings/diff/1b23071f

Branch: refs/heads/3.3.x
Commit: 1b23071ff9361df3f6ca6896217f04738d5c7fc7
Parents: 6f81604
Author: Maxim Solodovnik <so...@gmail.com>
Authored: Mon Sep 18 12:24:55 2017 +0700
Committer: Maxim Solodovnik <so...@gmail.com>
Committed: Mon Sep 18 12:24:55 2017 +0700

----------------------------------------------------------------------
 openmeetings-core/pom.xml        | 2 +-
 openmeetings-db/pom.xml          | 2 +-
 openmeetings-flash/pom.xml       | 2 +-
 openmeetings-install/pom.xml     | 2 +-
 openmeetings-screenshare/pom.xml | 2 +-
 openmeetings-server/pom.xml      | 2 +-
 openmeetings-service/pom.xml     | 2 +-
 openmeetings-util/pom.xml        | 2 +-
 openmeetings-web/pom.xml         | 2 +-
 openmeetings-webservice/pom.xml  | 2 +-
 pom.xml                          | 2 +-
 11 files changed, 11 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1b23071f/openmeetings-core/pom.xml
----------------------------------------------------------------------
diff --git a/openmeetings-core/pom.xml b/openmeetings-core/pom.xml
index e5b3a50..a488a99 100644
--- a/openmeetings-core/pom.xml
+++ b/openmeetings-core/pom.xml
@@ -22,7 +22,7 @@
 	<parent>
 		<groupId>org.apache.openmeetings</groupId>
 		<artifactId>openmeetings-parent</artifactId>
-		<version>3.3.2-SNAPSHOT</version>
+		<version>3.3.3-SNAPSHOT</version>
 		<relativePath>..</relativePath>
 	</parent>
 	<artifactId>openmeetings-core</artifactId>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1b23071f/openmeetings-db/pom.xml
----------------------------------------------------------------------
diff --git a/openmeetings-db/pom.xml b/openmeetings-db/pom.xml
index 683a972..0016119 100644
--- a/openmeetings-db/pom.xml
+++ b/openmeetings-db/pom.xml
@@ -22,7 +22,7 @@
 	<parent>
 		<groupId>org.apache.openmeetings</groupId>
 		<artifactId>openmeetings-parent</artifactId>
-		<version>3.3.2-SNAPSHOT</version>
+		<version>3.3.3-SNAPSHOT</version>
 		<relativePath>..</relativePath>
 	</parent>
 	<artifactId>openmeetings-db</artifactId>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1b23071f/openmeetings-flash/pom.xml
----------------------------------------------------------------------
diff --git a/openmeetings-flash/pom.xml b/openmeetings-flash/pom.xml
index 929373f..af590e5 100644
--- a/openmeetings-flash/pom.xml
+++ b/openmeetings-flash/pom.xml
@@ -21,7 +21,7 @@
 	<parent>
 		<groupId>org.apache.openmeetings</groupId>
 		<artifactId>openmeetings-parent</artifactId>
-		<version>3.3.2-SNAPSHOT</version>
+		<version>3.3.3-SNAPSHOT</version>
 		<relativePath>..</relativePath>
 	</parent>
 	<artifactId>openmeetings-flash</artifactId>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1b23071f/openmeetings-install/pom.xml
----------------------------------------------------------------------
diff --git a/openmeetings-install/pom.xml b/openmeetings-install/pom.xml
index 843e424..63d7e6f 100644
--- a/openmeetings-install/pom.xml
+++ b/openmeetings-install/pom.xml
@@ -22,7 +22,7 @@
 	<parent>
 		<groupId>org.apache.openmeetings</groupId>
 		<artifactId>openmeetings-parent</artifactId>
-		<version>3.3.2-SNAPSHOT</version>
+		<version>3.3.3-SNAPSHOT</version>
 		<relativePath>..</relativePath>
 	</parent>
 	<artifactId>openmeetings-install</artifactId>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1b23071f/openmeetings-screenshare/pom.xml
----------------------------------------------------------------------
diff --git a/openmeetings-screenshare/pom.xml b/openmeetings-screenshare/pom.xml
index b137fa7..9241a64 100644
--- a/openmeetings-screenshare/pom.xml
+++ b/openmeetings-screenshare/pom.xml
@@ -22,7 +22,7 @@
 	<parent>
 		<groupId>org.apache.openmeetings</groupId>
 		<artifactId>openmeetings-parent</artifactId>
-		<version>3.3.2-SNAPSHOT</version>
+		<version>3.3.3-SNAPSHOT</version>
 		<relativePath>..</relativePath>
 	</parent>
 	<artifactId>openmeetings-screenshare</artifactId>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1b23071f/openmeetings-server/pom.xml
----------------------------------------------------------------------
diff --git a/openmeetings-server/pom.xml b/openmeetings-server/pom.xml
index b7e6d16..e60b388 100644
--- a/openmeetings-server/pom.xml
+++ b/openmeetings-server/pom.xml
@@ -22,7 +22,7 @@
 	<parent>
 		<groupId>org.apache.openmeetings</groupId>
 		<artifactId>openmeetings-parent</artifactId>
-		<version>3.3.2-SNAPSHOT</version>
+		<version>3.3.3-SNAPSHOT</version>
 		<relativePath>..</relativePath>
 	</parent>
 	<artifactId>openmeetings-server</artifactId>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1b23071f/openmeetings-service/pom.xml
----------------------------------------------------------------------
diff --git a/openmeetings-service/pom.xml b/openmeetings-service/pom.xml
index e5a116a..76bb6b3 100644
--- a/openmeetings-service/pom.xml
+++ b/openmeetings-service/pom.xml
@@ -22,7 +22,7 @@
 	<parent>
 		<groupId>org.apache.openmeetings</groupId>
 		<artifactId>openmeetings-parent</artifactId>
-		<version>3.3.2-SNAPSHOT</version>
+		<version>3.3.3-SNAPSHOT</version>
 		<relativePath>..</relativePath>
 	</parent>
 	<artifactId>openmeetings-service</artifactId>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1b23071f/openmeetings-util/pom.xml
----------------------------------------------------------------------
diff --git a/openmeetings-util/pom.xml b/openmeetings-util/pom.xml
index b5ed0d9..6e5b918 100644
--- a/openmeetings-util/pom.xml
+++ b/openmeetings-util/pom.xml
@@ -22,7 +22,7 @@
 	<parent>
 		<groupId>org.apache.openmeetings</groupId>
 		<artifactId>openmeetings-parent</artifactId>
-		<version>3.3.2-SNAPSHOT</version>
+		<version>3.3.3-SNAPSHOT</version>
 		<relativePath>..</relativePath>
 	</parent>
 	<artifactId>openmeetings-util</artifactId>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1b23071f/openmeetings-web/pom.xml
----------------------------------------------------------------------
diff --git a/openmeetings-web/pom.xml b/openmeetings-web/pom.xml
index 996d0fc..9cfb889 100644
--- a/openmeetings-web/pom.xml
+++ b/openmeetings-web/pom.xml
@@ -22,7 +22,7 @@
 	<parent>
 		<groupId>org.apache.openmeetings</groupId>
 		<artifactId>openmeetings-parent</artifactId>
-		<version>3.3.2-SNAPSHOT</version>
+		<version>3.3.3-SNAPSHOT</version>
 		<relativePath>..</relativePath>
 	</parent>
 	<artifactId>openmeetings-web</artifactId>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1b23071f/openmeetings-webservice/pom.xml
----------------------------------------------------------------------
diff --git a/openmeetings-webservice/pom.xml b/openmeetings-webservice/pom.xml
index c928059..7fa3d61 100644
--- a/openmeetings-webservice/pom.xml
+++ b/openmeetings-webservice/pom.xml
@@ -22,7 +22,7 @@
 	<parent>
 		<groupId>org.apache.openmeetings</groupId>
 		<artifactId>openmeetings-parent</artifactId>
-		<version>3.3.2-SNAPSHOT</version>
+		<version>3.3.3-SNAPSHOT</version>
 		<relativePath>..</relativePath>
 	</parent>
 	<artifactId>openmeetings-webservice</artifactId>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1b23071f/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index f569183..25e0239 100644
--- a/pom.xml
+++ b/pom.xml
@@ -26,7 +26,7 @@
 	</parent>
 	<groupId>org.apache.openmeetings</groupId>
 	<artifactId>openmeetings-parent</artifactId>
-	<version>3.3.2-SNAPSHOT</version>
+	<version>3.3.3-SNAPSHOT</version>
 	<packaging>pom</packaging>
 	<name>Openmeetings</name>
 	<description>Parent project for all OpenMeetings Maven modules. Required to hold general settings</description>


[09/18] openmeetings git commit: Revert "Room parameter NumberOfPartizipants is renamed to Capacity"

Posted by so...@apache.org.
Revert "Room parameter NumberOfPartizipants is renamed to Capacity"

This reverts commit f10ba389af252d2e27bdb8db12dc676b9a98eca9.


Project: http://git-wip-us.apache.org/repos/asf/openmeetings/repo
Commit: http://git-wip-us.apache.org/repos/asf/openmeetings/commit/d09f559d
Tree: http://git-wip-us.apache.org/repos/asf/openmeetings/tree/d09f559d
Diff: http://git-wip-us.apache.org/repos/asf/openmeetings/diff/d09f559d

Branch: refs/heads/3.3.x
Commit: d09f559db034850c8df8a9e1857e96d9c98afd6d
Parents: 43792d1
Author: Maxim Solodovnik <so...@gmail.com>
Authored: Thu Sep 14 13:10:46 2017 +0700
Committer: Maxim Solodovnik <so...@gmail.com>
Committed: Thu Sep 14 13:10:46 2017 +0700

----------------------------------------------------------------------
 .../openmeetings/core/remote/MobileService.java     |  2 +-
 .../db/dao/calendar/AppointmentDao.java             |  2 +-
 .../apache/openmeetings/db/dao/room/RoomDao.java    |  2 +-
 .../apache/openmeetings/db/dto/room/RoomDTO.java    | 16 ++++++++--------
 .../apache/openmeetings/db/entity/room/Room.java    | 16 ++++++++--------
 .../openmeetings/installation/ImportInitvalues.java |  2 +-
 .../openmeetings/web/admin/rooms/RoomForm.java      |  2 +-
 .../openmeetings/web/admin/rooms/RoomsPanel.html    |  2 +-
 .../org/apache/openmeetings/web/room/RoomPanel.java |  2 +-
 .../apache/openmeetings/web/user/MessageDialog.java |  2 +-
 .../openmeetings/web/user/rooms/RoomListPanel.java  |  2 +-
 .../test/webservice/TestCalendarService.java        |  2 +-
 .../test/webservice/TestRoomService.java            |  2 +-
 .../openmeetings/webservice/RoomWebService.java     |  2 +-
 14 files changed, 28 insertions(+), 28 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/openmeetings/blob/d09f559d/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MobileService.java
----------------------------------------------------------------------
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MobileService.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MobileService.java
index eb19689..1e953da 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MobileService.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MobileService.java
@@ -288,7 +288,7 @@ public class MobileService {
 		}
 		room.put("first", first);
 		room.put("users", sessionManager.listByRoom(r.getId()).size());
-		room.put("total", r.getCapacity());
+		room.put("total", r.getNumberOfPartizipants());
 		room.put("audioOnly", r.isAudioOnly());
 		result.add(room);
 	}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/d09f559d/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/calendar/AppointmentDao.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/calendar/AppointmentDao.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/calendar/AppointmentDao.java
index 8f66079..694784d 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/calendar/AppointmentDao.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/calendar/AppointmentDao.java
@@ -107,7 +107,7 @@ public class AppointmentDao {
 		Room r = a.getRoom();
 		if (r.getId() == null) {
 			r.setName(a.getTitle());
-			r.setCapacity(cfgDao.getConfValue("calendar.conference.rooms.default.size", Long.class, "50"));
+			r.setNumberOfPartizipants(cfgDao.getConfValue("calendar.conference.rooms.default.size", Long.class, "50"));
 		}
 		roomDao.update(r, userId);
 		if (sendmails) {

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/d09f559d/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/RoomDao.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/RoomDao.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/RoomDao.java
index d3b307b..6dd79a8 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/RoomDao.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/RoomDao.java
@@ -260,7 +260,7 @@ public class RoomDao implements IGroupAdminDataProviderDao<Room> {
 			room.setName(name);
 			room.setType(type);
 			room.setComment("My Rooms of ownerId " + ownerId);
-			room.setCapacity(Room.Type.conference == type ? 25L : 120L);
+			room.setNumberOfPartizipants(Room.Type.conference == type ? 25L : 120L);
 			room.setAllowUserQuestions(true);
 			room.setOwnerId(ownerId);
 			room.setAllowRecording(true);

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/d09f559d/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomDTO.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomDTO.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomDTO.java
index de7cea4..4206cd6 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomDTO.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomDTO.java
@@ -46,7 +46,7 @@ public class RoomDTO implements Serializable {
 	private String name;
 	private String comment;
 	private Room.Type type;
-	private Long capacity = new Long(4);
+	private Long numberOfPartizipants = new Long(4);
 	private boolean appointment;
 	private String confno;
 	private boolean isPublic;
@@ -70,7 +70,7 @@ public class RoomDTO implements Serializable {
 		name = r.getName();
 		comment = r.getComment();
 		type = r.getType();
-		capacity = r.getCapacity();
+		numberOfPartizipants = r.getNumberOfPartizipants();
 		appointment = r.isAppointment();
 		confno = r.getConfno();
 		isPublic = r.getIspublic();
@@ -94,7 +94,7 @@ public class RoomDTO implements Serializable {
 		r.setName(name);
 		r.setComment(comment);
 		r.setType(type);
-		r.setCapacity(capacity);
+		r.setNumberOfPartizipants(numberOfPartizipants);
 		r.setAppointment(appointment);
 		r.setConfno(confno);
 		r.setIspublic(isPublic);
@@ -144,12 +144,12 @@ public class RoomDTO implements Serializable {
 		this.type = type;
 	}
 
-	public Long getCapacity() {
-		return capacity;
+	public Long getNumberOfPartizipants() {
+		return numberOfPartizipants;
 	}
 
-	public void setCapacity(Long capacity) {
-		this.capacity = capacity;
+	public void setNumberOfPartizipants(Long numberOfPartizipants) {
+		this.numberOfPartizipants = numberOfPartizipants;
 	}
 
 	public boolean isAppointment() {
@@ -295,7 +295,7 @@ public class RoomDTO implements Serializable {
 		r.name = o.optString("name");
 		r.comment = o.optString("comment");
 		r.type = optEnum(Room.Type.class, o, "type");
-		r.capacity = o.optLong("capacity", 4);
+		r.numberOfPartizipants = o.optLong("numberOfPartizipants", 4);
 		r.appointment = o.optBoolean("appointment", false);
 		r.confno = o.optString("confno");
 		r.isPublic = o.optBoolean("isPublic", false);

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/d09f559d/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java
index 524068b..84ed8e6 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java
@@ -78,7 +78,7 @@ import org.simpleframework.xml.Root;
 	@NamedQuery(name = "getSipRoomIdsByIds", query = "SELECT r.id FROM Room r WHERE r.deleted = false AND r.sipEnabled = true AND r.id IN :ids"),
 	@NamedQuery(name = "countRooms", query = "SELECT COUNT(r) FROM Room r WHERE r.deleted = false"),
 	@NamedQuery(name = "getBackupRooms", query = "SELECT r FROM Room r ORDER BY r.id"),
-	@NamedQuery(name = "getRoomsCapacityByIds", query = "SELECT SUM(r.capacity) FROM Room r WHERE r.deleted = false AND r.id IN :ids")
+	@NamedQuery(name = "getRoomsCapacityByIds", query = "SELECT SUM(r.numberOfPartizipants) FROM Room r WHERE r.deleted = false AND r.id IN :ids")
 	, @NamedQuery(name = "getGroupRooms", query = "SELECT DISTINCT r.room FROM RoomGroup r LEFT JOIN FETCH r.room "
 			+ "WHERE r.group.id = :groupId AND r.deleted = false AND r.room.deleted = false AND r.room.appointment = false "
 			+ "AND r.group.deleted = false ORDER BY r.room.name ASC")
@@ -192,9 +192,9 @@ public class Room implements IDataProviderEntity {
 	@Element(name = "ispublic", data = true, required = false)
 	private boolean ispublic;
 
-	@Column(name = "capacity")
-	@Element(name = "numberOfPartizipants", data = true, required = false)
-	private long capacity = 4L;
+	@Column(name = "numberOfPartizipants")
+	@Element(data = true, required = false)
+	private long numberOfPartizipants = 4L;
 
 	@Column(name = "appointment", nullable = false)
 	@Element(data = true, required = false)
@@ -384,12 +384,12 @@ public class Room implements IDataProviderEntity {
 		this.currentusers = currentusers;
 	}
 
-	public long getCapacity() {
-		return capacity;
+	public long getNumberOfPartizipants() {
+		return numberOfPartizipants;
 	}
 
-	public void setCapacity(long capacity) {
-		this.capacity = capacity;
+	public void setNumberOfPartizipants(long numberOfPartizipants) {
+		this.numberOfPartizipants = numberOfPartizipants;
 	}
 
 	public boolean isAppointment() {

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/d09f559d/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
----------------------------------------------------------------------
diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java b/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
index 7082b8a..8530d70 100644
--- a/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
+++ b/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
@@ -318,7 +318,7 @@ public class ImportInitvalues {
 		r.setName(name);
 		r.setComment("");
 		r.setInserted(new Date());
-		r.setCapacity(capacity);
+		r.setNumberOfPartizipants(capacity);
 		r.setType(type);
 		r.setIspublic(isPublic);
 		r.setAllowUserQuestions(true);

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/d09f559d/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
index 9a291ae..06cda04 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
@@ -124,7 +124,7 @@ public class RoomForm extends AdminBaseForm<Room> {
 		name.setLabel(new Model<>(Application.getString(193)));
 		add(name);
 
-		add(new DropDownChoice<>("capacity", //
+		add(new DropDownChoice<>("numberOfPartizipants", //
 				DROPDOWN_NUMBER_OF_PARTICIPANTS, //
 				new ChoiceRenderer<Long>() {
 					private static final long serialVersionUID = 1L;

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/d09f559d/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.html
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.html
index c43451b..aec520a 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.html
@@ -55,7 +55,7 @@
 						<label wicket:for="name"><wicket:message key="193" /></label><input type="text" wicket:id="name" />
 					</div>
 					<div class="formelement">
-						<label wicket:for="capacity"><wicket:message key="482" /></label><select wicket:id="capacity"/>
+						<label wicket:for="numberOfPartizipants"><wicket:message key="482" /></label><select wicket:id="numberOfPartizipants"/>
 					</div>
 					<div class="formelement">
 						<label wicket:for="type"><wicket:message key="194" /></label><select wicket:id="type"/>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/d09f559d/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
index 1143b51..5689ba3 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
@@ -209,7 +209,7 @@ public class RoomPanel extends BasePanel {
 		add(roomClosed = new RedirectMessageDialog("room-closed", "1098", r.isClosed(), r.getRedirectURL()));
 		if (r.isClosed()) {
 			room.setVisible(false);
-		} else if (getRoomClients(r.getId()).size() >= r.getCapacity()) {
+		} else if (getRoomClients(r.getId()).size() >= r.getNumberOfPartizipants()) {
 			accessDenied = new ExpiredMessageDialog(ACCESS_DENIED_ID, getString("99"), menu);
 			room.setVisible(false);
 		} else if (r.getId().equals(WebSession.get().getRoomId())) {

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/d09f559d/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/MessageDialog.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/MessageDialog.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/MessageDialog.java
index 729234f..7b6141f 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/MessageDialog.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/MessageDialog.java
@@ -193,7 +193,7 @@ public class MessageDialog extends AbstractFormDialog<PrivateMessage> {
 			Room r = m.getRoom();
 			r.setName(m.getSubject());
 			r.setComment("");
-			r.setCapacity(100L);
+			r.setNumberOfPartizipants(100L);
 			r.setAppointment(true);
 			r.setAllowUserQuestions(true);
 			r = getBean(RoomDao.class).update(r, getUserId());

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/d09f559d/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomListPanel.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomListPanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomListPanel.java
index f1aa056..454300f 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomListPanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomListPanel.java
@@ -69,7 +69,7 @@ public class RoomListPanel extends UserPanel {
 						.add(AttributeModifier.append("title", getString(String.format("room.type.%s.desc", r.getType().name())))));
 				final Label curUsers = new Label("curUsers", new Model<>(Application.getRoomClients(r.getId()).size()));
 				roomContainer.add(curUsers.setOutputMarkupId(true));
-				roomContainer.add(new Label("totalUsers", r.getCapacity()));
+				roomContainer.add(new Label("totalUsers", r.getNumberOfPartizipants()));
 				item.add(new Button("btn").add(new Label("label", label)).add(new RoomEnterBehavior(r.getId()) {
 					private static final long serialVersionUID = 1L;
 

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/d09f559d/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestCalendarService.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestCalendarService.java b/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestCalendarService.java
index 366b7a1..8af988b 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestCalendarService.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestCalendarService.java
@@ -101,7 +101,7 @@ public class TestCalendarService extends AbstractWebServiceTest {
 					.put("name", "test24")
 					.put("comment", "appointment test room")
 					.put("type", "conference")
-					.put("capacity", 15)
+					.put("numberOfPartizipants", 15)
 					.put("appointment", true)
 					.put("isPublic", false)
 					.put("demo", false)

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/d09f559d/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestRoomService.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestRoomService.java b/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestRoomService.java
index 0998ceb..7d91c09 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestRoomService.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestRoomService.java
@@ -43,7 +43,7 @@ public class TestRoomService extends AbstractWebServiceTest {
 		r.setType(type);
 		r.setName(name);
 		r.setComment(comment);
-		r.setCapacity(num);
+		r.setNumberOfPartizipants(num);
 		RoomDTO room = getClient(ROOM_SERVICE_URL).path(String.format("/%s/%s/%s", type, UNIT_TEST_EXT_TYPE, extId))
 				.query("sid", sr.getMessage())
 				.query("room", r.toString())

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/d09f559d/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/RoomWebService.java
----------------------------------------------------------------------
diff --git a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/RoomWebService.java b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/RoomWebService.java
index 63b2b65..ee17762 100644
--- a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/RoomWebService.java
+++ b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/RoomWebService.java
@@ -422,7 +422,7 @@ public class RoomWebService extends BaseWebService {
 					RoomCountDTO rCountBean = new RoomCountDTO();
 					rCountBean.setRoomId(room.getId());
 					rCountBean.setRoomName(room.getName());
-					rCountBean.setMaxUser(room.getCapacity());
+					rCountBean.setMaxUser(room.getNumberOfPartizipants());
 					rCountBean.setRoomCount(app.getOmRoomClients(room.getId()).size());
 
 					roomBeans.add(rCountBean);


[12/18] openmeetings git commit: [OPENMEETINGS-1671] add id filtering

Posted by so...@apache.org.
[OPENMEETINGS-1671] add id filtering


Project: http://git-wip-us.apache.org/repos/asf/openmeetings/repo
Commit: http://git-wip-us.apache.org/repos/asf/openmeetings/commit/db36ff2e
Tree: http://git-wip-us.apache.org/repos/asf/openmeetings/tree/db36ff2e
Diff: http://git-wip-us.apache.org/repos/asf/openmeetings/diff/db36ff2e

Branch: refs/heads/3.3.x
Commit: db36ff2e9e41ac82d846f084ce5364db0f82fc47
Parents: 8bfe1c0
Author: Maxim Solodovnik <so...@gmail.com>
Authored: Thu Sep 14 17:00:53 2017 +0700
Committer: Maxim Solodovnik <so...@gmail.com>
Committed: Thu Sep 14 17:00:53 2017 +0700

----------------------------------------------------------------------
 .../apache/openmeetings/web/admin/rooms/RoomForm.java | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/openmeetings/blob/db36ff2e/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
index 06cda04..8c9d147 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
@@ -29,6 +29,7 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import org.apache.openmeetings.db.dao.file.FileItemDao;
 import org.apache.openmeetings.db.dao.room.RoomDao;
@@ -170,16 +171,19 @@ public class RoomForm extends AdminBaseForm<Room> {
 
 			@Override
 			public void query(String term, int page, Response<RoomGroup> response) {
-				for (RoomGroup or : orgRooms) {
-					if (Strings.isEmpty(term) || or.getGroup().getName().contains(term)) {
-						response.add(or);
-					}
-				}
+				response.addAll(orgRooms.stream()
+						.filter(rg -> Strings.isEmpty(term) || rg.getGroup().getName().contains(term))
+						.collect(Collectors.toList())
+						);
 			}
 
 			@Override
 			public RoomGroup fromId(String _id) {
 				Long id = Long.valueOf(_id);
+
+				if (!orgList.stream().filter(g -> g.getId().equals(id)).findFirst().isPresent()) {
+					return null; // seems to be hacked
+				}
 				Group g = getBean(GroupDao.class).get(id);
 				return new RoomGroup(g, RoomForm.this.getModelObject());
 			}


[13/18] openmeetings git commit: Merge branch '3.3.x' into OPENMEETINGS-1671-room-files

Posted by so...@apache.org.
Merge branch '3.3.x' into OPENMEETINGS-1671-room-files


Project: http://git-wip-us.apache.org/repos/asf/openmeetings/repo
Commit: http://git-wip-us.apache.org/repos/asf/openmeetings/commit/6a8fef06
Tree: http://git-wip-us.apache.org/repos/asf/openmeetings/tree/6a8fef06
Diff: http://git-wip-us.apache.org/repos/asf/openmeetings/diff/6a8fef06

Branch: refs/heads/3.3.x
Commit: 6a8fef0646a4047cdb3961a111cf399197d3e26e
Parents: db36ff2 0d43610
Author: Maxim Solodovnik <so...@gmail.com>
Authored: Thu Sep 14 21:16:07 2017 +0700
Committer: Maxim Solodovnik <so...@gmail.com>
Committed: Thu Sep 14 21:16:07 2017 +0700

----------------------------------------------------------------------
 CHANGELOG                                       | 15 ++++++++
 README                                          | 14 ++++++++
 .../src/site/xdoc/NewsArchive.xml               | 24 +++++++++++++
 openmeetings-server/src/site/xdoc/downloads.xml | 36 ++++++++++----------
 openmeetings-server/src/site/xdoc/index.xml     | 21 ++++++------
 pom.xml                                         |  4 +--
 6 files changed, 83 insertions(+), 31 deletions(-)
----------------------------------------------------------------------



[07/18] openmeetings git commit: Room parameter NumberOfPartizipants is renamed to Capacity

Posted by so...@apache.org.
Room parameter NumberOfPartizipants is renamed to Capacity


Project: http://git-wip-us.apache.org/repos/asf/openmeetings/repo
Commit: http://git-wip-us.apache.org/repos/asf/openmeetings/commit/f10ba389
Tree: http://git-wip-us.apache.org/repos/asf/openmeetings/tree/f10ba389
Diff: http://git-wip-us.apache.org/repos/asf/openmeetings/diff/f10ba389

Branch: refs/heads/3.3.x
Commit: f10ba389af252d2e27bdb8db12dc676b9a98eca9
Parents: 0a058f6
Author: Maxim Solodovnik <so...@gmail.com>
Authored: Thu Sep 14 12:05:06 2017 +0700
Committer: Maxim Solodovnik <so...@gmail.com>
Committed: Thu Sep 14 12:05:06 2017 +0700

----------------------------------------------------------------------
 .../openmeetings/core/remote/MobileService.java     |  2 +-
 .../db/dao/calendar/AppointmentDao.java             |  2 +-
 .../apache/openmeetings/db/dao/room/RoomDao.java    |  2 +-
 .../apache/openmeetings/db/dto/room/RoomDTO.java    | 16 ++++++++--------
 .../apache/openmeetings/db/entity/room/Room.java    | 16 ++++++++--------
 .../openmeetings/installation/ImportInitvalues.java |  2 +-
 .../openmeetings/web/admin/rooms/RoomForm.java      |  2 +-
 .../openmeetings/web/admin/rooms/RoomsPanel.html    |  2 +-
 .../org/apache/openmeetings/web/room/RoomPanel.java |  2 +-
 .../apache/openmeetings/web/user/MessageDialog.java |  2 +-
 .../openmeetings/web/user/rooms/RoomListPanel.java  |  2 +-
 .../test/webservice/TestCalendarService.java        |  2 +-
 .../test/webservice/TestRoomService.java            |  2 +-
 .../openmeetings/webservice/RoomWebService.java     |  2 +-
 14 files changed, 28 insertions(+), 28 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/openmeetings/blob/f10ba389/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MobileService.java
----------------------------------------------------------------------
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MobileService.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MobileService.java
index 1e953da..eb19689 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MobileService.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MobileService.java
@@ -288,7 +288,7 @@ public class MobileService {
 		}
 		room.put("first", first);
 		room.put("users", sessionManager.listByRoom(r.getId()).size());
-		room.put("total", r.getNumberOfPartizipants());
+		room.put("total", r.getCapacity());
 		room.put("audioOnly", r.isAudioOnly());
 		result.add(room);
 	}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/f10ba389/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/calendar/AppointmentDao.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/calendar/AppointmentDao.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/calendar/AppointmentDao.java
index 694784d..8f66079 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/calendar/AppointmentDao.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/calendar/AppointmentDao.java
@@ -107,7 +107,7 @@ public class AppointmentDao {
 		Room r = a.getRoom();
 		if (r.getId() == null) {
 			r.setName(a.getTitle());
-			r.setNumberOfPartizipants(cfgDao.getConfValue("calendar.conference.rooms.default.size", Long.class, "50"));
+			r.setCapacity(cfgDao.getConfValue("calendar.conference.rooms.default.size", Long.class, "50"));
 		}
 		roomDao.update(r, userId);
 		if (sendmails) {

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/f10ba389/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/RoomDao.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/RoomDao.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/RoomDao.java
index 6dd79a8..d3b307b 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/RoomDao.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/RoomDao.java
@@ -260,7 +260,7 @@ public class RoomDao implements IGroupAdminDataProviderDao<Room> {
 			room.setName(name);
 			room.setType(type);
 			room.setComment("My Rooms of ownerId " + ownerId);
-			room.setNumberOfPartizipants(Room.Type.conference == type ? 25L : 120L);
+			room.setCapacity(Room.Type.conference == type ? 25L : 120L);
 			room.setAllowUserQuestions(true);
 			room.setOwnerId(ownerId);
 			room.setAllowRecording(true);

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/f10ba389/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomDTO.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomDTO.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomDTO.java
index 4206cd6..de7cea4 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomDTO.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomDTO.java
@@ -46,7 +46,7 @@ public class RoomDTO implements Serializable {
 	private String name;
 	private String comment;
 	private Room.Type type;
-	private Long numberOfPartizipants = new Long(4);
+	private Long capacity = new Long(4);
 	private boolean appointment;
 	private String confno;
 	private boolean isPublic;
@@ -70,7 +70,7 @@ public class RoomDTO implements Serializable {
 		name = r.getName();
 		comment = r.getComment();
 		type = r.getType();
-		numberOfPartizipants = r.getNumberOfPartizipants();
+		capacity = r.getCapacity();
 		appointment = r.isAppointment();
 		confno = r.getConfno();
 		isPublic = r.getIspublic();
@@ -94,7 +94,7 @@ public class RoomDTO implements Serializable {
 		r.setName(name);
 		r.setComment(comment);
 		r.setType(type);
-		r.setNumberOfPartizipants(numberOfPartizipants);
+		r.setCapacity(capacity);
 		r.setAppointment(appointment);
 		r.setConfno(confno);
 		r.setIspublic(isPublic);
@@ -144,12 +144,12 @@ public class RoomDTO implements Serializable {
 		this.type = type;
 	}
 
-	public Long getNumberOfPartizipants() {
-		return numberOfPartizipants;
+	public Long getCapacity() {
+		return capacity;
 	}
 
-	public void setNumberOfPartizipants(Long numberOfPartizipants) {
-		this.numberOfPartizipants = numberOfPartizipants;
+	public void setCapacity(Long capacity) {
+		this.capacity = capacity;
 	}
 
 	public boolean isAppointment() {
@@ -295,7 +295,7 @@ public class RoomDTO implements Serializable {
 		r.name = o.optString("name");
 		r.comment = o.optString("comment");
 		r.type = optEnum(Room.Type.class, o, "type");
-		r.numberOfPartizipants = o.optLong("numberOfPartizipants", 4);
+		r.capacity = o.optLong("capacity", 4);
 		r.appointment = o.optBoolean("appointment", false);
 		r.confno = o.optString("confno");
 		r.isPublic = o.optBoolean("isPublic", false);

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/f10ba389/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java
index 84ed8e6..524068b 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java
@@ -78,7 +78,7 @@ import org.simpleframework.xml.Root;
 	@NamedQuery(name = "getSipRoomIdsByIds", query = "SELECT r.id FROM Room r WHERE r.deleted = false AND r.sipEnabled = true AND r.id IN :ids"),
 	@NamedQuery(name = "countRooms", query = "SELECT COUNT(r) FROM Room r WHERE r.deleted = false"),
 	@NamedQuery(name = "getBackupRooms", query = "SELECT r FROM Room r ORDER BY r.id"),
-	@NamedQuery(name = "getRoomsCapacityByIds", query = "SELECT SUM(r.numberOfPartizipants) FROM Room r WHERE r.deleted = false AND r.id IN :ids")
+	@NamedQuery(name = "getRoomsCapacityByIds", query = "SELECT SUM(r.capacity) FROM Room r WHERE r.deleted = false AND r.id IN :ids")
 	, @NamedQuery(name = "getGroupRooms", query = "SELECT DISTINCT r.room FROM RoomGroup r LEFT JOIN FETCH r.room "
 			+ "WHERE r.group.id = :groupId AND r.deleted = false AND r.room.deleted = false AND r.room.appointment = false "
 			+ "AND r.group.deleted = false ORDER BY r.room.name ASC")
@@ -192,9 +192,9 @@ public class Room implements IDataProviderEntity {
 	@Element(name = "ispublic", data = true, required = false)
 	private boolean ispublic;
 
-	@Column(name = "numberOfPartizipants")
-	@Element(data = true, required = false)
-	private long numberOfPartizipants = 4L;
+	@Column(name = "capacity")
+	@Element(name = "numberOfPartizipants", data = true, required = false)
+	private long capacity = 4L;
 
 	@Column(name = "appointment", nullable = false)
 	@Element(data = true, required = false)
@@ -384,12 +384,12 @@ public class Room implements IDataProviderEntity {
 		this.currentusers = currentusers;
 	}
 
-	public long getNumberOfPartizipants() {
-		return numberOfPartizipants;
+	public long getCapacity() {
+		return capacity;
 	}
 
-	public void setNumberOfPartizipants(long numberOfPartizipants) {
-		this.numberOfPartizipants = numberOfPartizipants;
+	public void setCapacity(long capacity) {
+		this.capacity = capacity;
 	}
 
 	public boolean isAppointment() {

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/f10ba389/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
----------------------------------------------------------------------
diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java b/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
index 8530d70..7082b8a 100644
--- a/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
+++ b/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
@@ -318,7 +318,7 @@ public class ImportInitvalues {
 		r.setName(name);
 		r.setComment("");
 		r.setInserted(new Date());
-		r.setNumberOfPartizipants(capacity);
+		r.setCapacity(capacity);
 		r.setType(type);
 		r.setIspublic(isPublic);
 		r.setAllowUserQuestions(true);

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/f10ba389/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
index 156b2df..42e5b64 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
@@ -119,7 +119,7 @@ public class RoomForm extends AdminBaseForm<Room> {
 		name.setLabel(new Model<>(Application.getString(193)));
 		add(name);
 
-		add(new DropDownChoice<>("numberOfPartizipants", //
+		add(new DropDownChoice<>("capacity", //
 				DROPDOWN_NUMBER_OF_PARTICIPANTS, //
 				new ChoiceRenderer<Long>() {
 					private static final long serialVersionUID = 1L;

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/f10ba389/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.html
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.html
index a424408..8631b38 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.html
@@ -55,7 +55,7 @@
 						<label wicket:for="name"><wicket:message key="193" /></label><input type="text" wicket:id="name" />
 					</div>
 					<div class="formelement">
-						<label wicket:for="numberOfPartizipants"><wicket:message key="482" /></label><select wicket:id="numberOfPartizipants"/>
+						<label wicket:for="capacity"><wicket:message key="482" /></label><select wicket:id="capacity"/>
 					</div>
 					<div class="formelement">
 						<label wicket:for="type"><wicket:message key="194" /></label><select wicket:id="type"/>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/f10ba389/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
index 5689ba3..1143b51 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
@@ -209,7 +209,7 @@ public class RoomPanel extends BasePanel {
 		add(roomClosed = new RedirectMessageDialog("room-closed", "1098", r.isClosed(), r.getRedirectURL()));
 		if (r.isClosed()) {
 			room.setVisible(false);
-		} else if (getRoomClients(r.getId()).size() >= r.getNumberOfPartizipants()) {
+		} else if (getRoomClients(r.getId()).size() >= r.getCapacity()) {
 			accessDenied = new ExpiredMessageDialog(ACCESS_DENIED_ID, getString("99"), menu);
 			room.setVisible(false);
 		} else if (r.getId().equals(WebSession.get().getRoomId())) {

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/f10ba389/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/MessageDialog.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/MessageDialog.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/MessageDialog.java
index 7b6141f..729234f 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/MessageDialog.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/MessageDialog.java
@@ -193,7 +193,7 @@ public class MessageDialog extends AbstractFormDialog<PrivateMessage> {
 			Room r = m.getRoom();
 			r.setName(m.getSubject());
 			r.setComment("");
-			r.setNumberOfPartizipants(100L);
+			r.setCapacity(100L);
 			r.setAppointment(true);
 			r.setAllowUserQuestions(true);
 			r = getBean(RoomDao.class).update(r, getUserId());

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/f10ba389/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomListPanel.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomListPanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomListPanel.java
index 454300f..f1aa056 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomListPanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomListPanel.java
@@ -69,7 +69,7 @@ public class RoomListPanel extends UserPanel {
 						.add(AttributeModifier.append("title", getString(String.format("room.type.%s.desc", r.getType().name())))));
 				final Label curUsers = new Label("curUsers", new Model<>(Application.getRoomClients(r.getId()).size()));
 				roomContainer.add(curUsers.setOutputMarkupId(true));
-				roomContainer.add(new Label("totalUsers", r.getNumberOfPartizipants()));
+				roomContainer.add(new Label("totalUsers", r.getCapacity()));
 				item.add(new Button("btn").add(new Label("label", label)).add(new RoomEnterBehavior(r.getId()) {
 					private static final long serialVersionUID = 1L;
 

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/f10ba389/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestCalendarService.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestCalendarService.java b/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestCalendarService.java
index 8af988b..366b7a1 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestCalendarService.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestCalendarService.java
@@ -101,7 +101,7 @@ public class TestCalendarService extends AbstractWebServiceTest {
 					.put("name", "test24")
 					.put("comment", "appointment test room")
 					.put("type", "conference")
-					.put("numberOfPartizipants", 15)
+					.put("capacity", 15)
 					.put("appointment", true)
 					.put("isPublic", false)
 					.put("demo", false)

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/f10ba389/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestRoomService.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestRoomService.java b/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestRoomService.java
index 7d91c09..0998ceb 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestRoomService.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestRoomService.java
@@ -43,7 +43,7 @@ public class TestRoomService extends AbstractWebServiceTest {
 		r.setType(type);
 		r.setName(name);
 		r.setComment(comment);
-		r.setNumberOfPartizipants(num);
+		r.setCapacity(num);
 		RoomDTO room = getClient(ROOM_SERVICE_URL).path(String.format("/%s/%s/%s", type, UNIT_TEST_EXT_TYPE, extId))
 				.query("sid", sr.getMessage())
 				.query("room", r.toString())

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/f10ba389/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/RoomWebService.java
----------------------------------------------------------------------
diff --git a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/RoomWebService.java b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/RoomWebService.java
index ee17762..63b2b65 100644
--- a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/RoomWebService.java
+++ b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/RoomWebService.java
@@ -422,7 +422,7 @@ public class RoomWebService extends BaseWebService {
 					RoomCountDTO rCountBean = new RoomCountDTO();
 					rCountBean.setRoomId(room.getId());
 					rCountBean.setRoomName(room.getName());
-					rCountBean.setMaxUser(room.getNumberOfPartizipants());
+					rCountBean.setMaxUser(room.getCapacity());
 					rCountBean.setRoomCount(app.getOmRoomClients(room.getId()).size());
 
 					roomBeans.add(rCountBean);


[14/18] openmeetings git commit: [OPENMEETINGS-1671] room file are saved/loaded

Posted by so...@apache.org.
[OPENMEETINGS-1671] room file are saved/loaded


Project: http://git-wip-us.apache.org/repos/asf/openmeetings/repo
Commit: http://git-wip-us.apache.org/repos/asf/openmeetings/commit/ffacf2ec
Tree: http://git-wip-us.apache.org/repos/asf/openmeetings/tree/ffacf2ec
Diff: http://git-wip-us.apache.org/repos/asf/openmeetings/diff/ffacf2ec

Branch: refs/heads/3.3.x
Commit: ffacf2ece0b4d23490c7954e0a07fd43876d1d9b
Parents: 6a8fef0
Author: Maxim Solodovnik <so...@gmail.com>
Authored: Fri Sep 15 00:13:41 2017 +0700
Committer: Maxim Solodovnik <so...@gmail.com>
Committed: Fri Sep 15 00:13:41 2017 +0700

----------------------------------------------------------------------
 .../db/entity/file/BaseFileItem.java            |   2 +-
 .../openmeetings/db/entity/room/Room.java       |  12 +-
 .../openmeetings/db/entity/room/RoomFile.java   |   8 ++
 .../openmeetings/web/admin/rooms/RoomForm.java  | 110 +++++++++++++++----
 .../web/admin/rooms/RoomsPanel.html             |  27 +++++
 5 files changed, 137 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/openmeetings/blob/ffacf2ec/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/BaseFileItem.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/BaseFileItem.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/BaseFileItem.java
index c83869d..b290eaf 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/BaseFileItem.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/BaseFileItem.java
@@ -58,7 +58,7 @@ import org.simpleframework.xml.Element;
 			+ " AND f.name LIKE :name"
 			+ " ORDER BY f.name")
 	, @NamedQuery(name = "getFileItemsByIds", query = "SELECT f FROM BaseFileItem f"
-			+ " WHERE f.deleted = false AND f.id IN :ids)")
+			+ " WHERE f.deleted = false AND f.id IN :ids")
 })
 @Table(name = "file")
 @Inheritance(strategy = InheritanceType.SINGLE_TABLE)

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/ffacf2ec/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java
index 84ed8e6..087a446 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java
@@ -61,7 +61,7 @@ import org.simpleframework.xml.Root;
 @FetchGroups({
 	@FetchGroup(name = "roomModerators", attributes = { @FetchAttribute(name = "moderators") })
 	, @FetchGroup(name = "roomGroups", attributes = { @FetchAttribute(name = "roomGroups") })
-	, @FetchGroup(name = "roomFiles", attributes = { @FetchAttribute(name = "roomFiles") })
+	, @FetchGroup(name = "roomFiles", attributes = { @FetchAttribute(name = "files") })
 })
 @NamedQueries({
 	@NamedQuery(name = "getNondeletedRooms", query = "SELECT r FROM Room r WHERE r.deleted = false"),
@@ -305,7 +305,7 @@ public class Room implements IDataProviderEntity {
 	@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
 	@JoinColumn(name = "room_id", insertable = true, updatable = true, nullable = false)
 	@ElementDependent
-	private List<RoomFile> roomFiles = new ArrayList<>();
+	private List<RoomFile> files = new ArrayList<>();
 
 	@Transient
 	private List<StreamClient> currentusers;
@@ -589,6 +589,14 @@ public class Room implements IDataProviderEntity {
 		this.pin = pin;
 	}
 
+	public List<RoomFile> getFiles() {
+		return files;
+	}
+
+	public void setFiles(List<RoomFile> files) {
+		this.files = files;
+	}
+
 	@Override
 	public String toString() {
 		return "Room [id=" + id + ", name=" + name + ", type=" + type + "]";

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/ffacf2ec/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/RoomFile.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/RoomFile.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/RoomFile.java
index 329697c..e8bef4f 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/RoomFile.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/RoomFile.java
@@ -55,6 +55,14 @@ public class RoomFile implements IDataProviderEntity {
 	@Column(name = "wb_idx", nullable = false)
 	private long wbIdx = 0;
 
+	public RoomFile() {}
+
+	public RoomFile(Long roomId, BaseFileItem file, long wbIdx) {
+		this.roomId = roomId;
+		this.file = file;
+		this.wbIdx = wbIdx;
+	}
+
 	@Override
 	public Long getId() {
 		return id;

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/ffacf2ec/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
index 8c9d147..f879e49 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
@@ -28,6 +28,7 @@ import static org.apache.openmeetings.web.app.WebSession.getUserId;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
+import java.util.Iterator;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -40,6 +41,7 @@ import org.apache.openmeetings.db.dao.user.UserDao;
 import org.apache.openmeetings.db.entity.file.BaseFileItem;
 import org.apache.openmeetings.db.entity.room.Room;
 import org.apache.openmeetings.db.entity.room.Room.RoomElement;
+import org.apache.openmeetings.db.entity.room.RoomFile;
 import org.apache.openmeetings.db.entity.room.RoomGroup;
 import org.apache.openmeetings.db.entity.room.RoomModerator;
 import org.apache.openmeetings.db.entity.room.StreamClient;
@@ -80,6 +82,9 @@ import org.wicketstuff.select2.Response;
 import org.wicketstuff.select2.Select2Choice;
 import org.wicketstuff.select2.Select2MultiChoice;
 
+import com.googlecode.wicket.jquery.ui.JQueryIcon;
+import com.googlecode.wicket.jquery.ui.form.button.AjaxButton;
+
 public class RoomForm extends AdminBaseForm<Room> {
 	private static final long serialVersionUID = 1L;
 	private final static List<Long> DROPDOWN_NUMBER_OF_PARTICIPANTS = Arrays.asList(2L, 4L, 6L, 8L, 10L, 12L, 14L, 16L, 20L, 25L, 32L, 50L,
@@ -87,6 +92,7 @@ public class RoomForm extends AdminBaseForm<Room> {
 	private final WebMarkupContainer roomList;
 	private final TextField<String> pin = new TextField<>("pin");
 	private final WebMarkupContainer moderatorContainer = new WebMarkupContainer("moderatorContainer");
+	private final WebMarkupContainer filesContainer = new WebMarkupContainer("filesContainer");
 	private final WebMarkupContainer clientsContainer = new WebMarkupContainer("clientsContainer");
 	private final ListView<StreamClient> clients = new ListView<StreamClient>("clients", new ArrayList<>()) {
 		private static final long serialVersionUID = 1L;
@@ -111,6 +117,7 @@ public class RoomForm extends AdminBaseForm<Room> {
 	};
 	private IModel<User> moderator2add = Model.of((User)null);
 	private IModel<Collection<BaseFileItem>> files2add = new CollectionModel<>(new ArrayList<BaseFileItem>());
+	private IModel<Long> wbIdx = Model.of(0L);
 
 	public RoomForm(String id, WebMarkupContainer roomList, final Room room) {
 		super(id, new CompoundPropertyModel<>(room));
@@ -311,30 +318,83 @@ public class RoomForm extends AdminBaseForm<Room> {
 		add(new CheckBox("moderated"));
 
 		// Files
-		add(new Select2MultiChoice<>("files2add", files2add, new ChoiceProvider<BaseFileItem>() {
-			private static final long serialVersionUID = 1L;
+		Form<Void> filesForm = new Form<>("files");
+		add(filesForm.add(new Select2MultiChoice<>("files2add", files2add, new ChoiceProvider<BaseFileItem>() {
+				private static final long serialVersionUID = 1L;
 
-			@Override
-			public String getDisplayValue(BaseFileItem f) {
-				return f.getName();
-			}
+				@Override
+				public String getDisplayValue(BaseFileItem f) {
+					return f.getName();
+				}
 
-			@Override
-			public String getIdValue(BaseFileItem f) {
-				return "" + f.getId();
-			}
+				@Override
+				public String getIdValue(BaseFileItem f) {
+					return "" + f.getId();
+				}
 
-			@Override
-			public void query(String term, int page, Response<BaseFileItem> response) {
-				response.addAll(getBean(FileItemDao.class).getAllRoomFiles(term, page * PAGE_SIZE, PAGE_SIZE, RoomForm.this.getModelObject().getId(), orgList));
-				response.setHasMore(PAGE_SIZE == response.getResults().size());
-			}
+				@Override
+				public void query(String term, int page, Response<BaseFileItem> response) {
+					response.addAll(getBean(FileItemDao.class).getAllRoomFiles(term, page * PAGE_SIZE, PAGE_SIZE, RoomForm.this.getModelObject().getId(), orgList));
+					response.setHasMore(PAGE_SIZE == response.getResults().size());
+				}
+
+				@Override
+				public Collection<BaseFileItem> toChoices(Collection<String> ids) {
+					return getBean(FileItemDao.class).get(ids);
+				}
+			}).setLabel(Model.of(getString("245"))))
+			.add(new TextField<Long>("wbidx", wbIdx) {
+				private static final long serialVersionUID = 1L;
+
+				@Override
+				protected String[] getInputTypes() {
+					return new String[] {"number"};
+				}
+			})
+			.add(new AjaxButton("addFiles") {
+				private static final long serialVersionUID = 1L;
+
+				@Override
+				protected void onSubmit(AjaxRequestTarget target) {
+					Room r = RoomForm.this.getModelObject();
+					for (BaseFileItem f : files2add.getObject()) {
+						r.getFiles().add(new RoomFile(r.getId(), f, wbIdx.getObject()));
+					}
+					target.add(filesContainer, filesForm);
+				}
+
+				@Override
+				protected String getIcon() {
+					return JQueryIcon.PLUSTHICK;
+				}
+			}).setOutputMarkupId(true)
+		);
+		add(filesContainer.add(new ListView<RoomFile>("files") {
+			private static final long serialVersionUID = 1L;
 
 			@Override
-			public Collection<BaseFileItem> toChoices(Collection<String> ids) {
-				return getBean(FileItemDao.class).get(ids);
+			protected void populateItem(final ListItem<RoomFile> item) {
+				final RoomFile rf = item.getModelObject();
+				item.add(new Label("name", new PropertyModel<>(rf.getFile(), "name")))
+					.add(new Label("wbIdx", new PropertyModel<>(rf, "wbIdx")))
+					.add(new ConfirmableAjaxBorder("delete", getString("80"), getString("833")) {
+						private static final long serialVersionUID = 1L;
+
+						@Override
+						protected void onSubmit(AjaxRequestTarget target) {
+							Room r = RoomForm.this.getModelObject();
+							for (Iterator<RoomFile> iter = r.getFiles().iterator(); iter.hasNext();) {
+								RoomFile _rf = iter.next();
+								if (_rf.getFile().getId().equals(rf.getFile().getId())) {
+									iter.remove();
+									break;
+								}
+							}
+							target.add(filesContainer);
+						}
+					});
 			}
-		}).setLabel(Model.of(getString("245"))));
+		}).setOutputMarkupId(true));
 
 		// Users in this Room
 		add(clientsContainer.add(clients.setOutputMarkupId(true)).setOutputMarkupId(true));
@@ -373,6 +433,9 @@ public class RoomForm extends AdminBaseForm<Room> {
 			for (RoomModerator rm : r.getModerators()) {
 				rm.setRoomId(r.getId());
 			}
+			for (RoomFile rf : r.getFiles()) {
+				rf.setRoomId(r.getId());
+			}
 			// FIXME double update
 			getBean(RoomDao.class).update(getModelObject(), getUserId());
 		}
@@ -427,9 +490,16 @@ public class RoomForm extends AdminBaseForm<Room> {
 	}
 
 	public void updateView(AjaxRequestTarget target) {
+		moderator2add.setObject(null);
+		files2add.getObject().clear();
+		wbIdx.setObject(0L);
+		Room r = getModelObject();
+		if (r.getFiles() == null) {
+			r.setFiles(new ArrayList<>());
+		}
 		target.add(this);
 		target.add(roomList);
-		target.add(pin.setEnabled(getModelObject().isSipEnabled()));
+		target.add(pin.setEnabled(r.isSipEnabled()));
 		updateClients(target);
 		target.appendJavaScript("adminPanelInit();");
 	}
@@ -437,6 +507,8 @@ public class RoomForm extends AdminBaseForm<Room> {
 	@Override
 	protected void onDetach() {
 		moderator2add.detach();
+		files2add.detach();
+		wbIdx.detach();
 		super.onDetach();
 	}
 }

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/ffacf2ec/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.html
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.html
index aec520a..2d82f4f 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.html
@@ -143,10 +143,37 @@
 				<!-- Room files -->
 				<fieldset class="ui-widget-content">
 					<legend class="ui-widget-header"><wicket:message key="245" /></legend>
+					<form wicket:id="files">
 					<div class="formelement">
 						<label wicket:for="files2add"><wicket:message key="245" /></label>
 						<div class="om-select2"><select class="input" wicket:id="files2add"></select></div>
 					</div>
+					<div class="formelement">
+						<label wicket:for="wbidx"><wicket:message key="615" /></label>
+						<input type="number" class="input" wicket:id="wbidx"/>
+					</div>
+					<button type="button" wicket:id="addFiles"><wicket:message key="175"/></button>
+					</form>
+					<table class="adminListTable">
+						<thead>
+							<tr>
+								<th class="ui-widget-header" style="width: 380px"><wicket:message key="165" /></th>
+								<th class="ui-widget-header" style="width: 80px"><wicket:message key="615" /></th>
+								<th class="ui-widget-header" style="width: 50px"><wicket:message key="590" /></th>
+							</tr>
+						</thead>
+					</table>
+					<div class="tableWrapperSmall" id="adminTableSmall">
+						<table class="adminListTable">
+							<tbody wicket:id="filesContainer">
+								<tr wicket:id="files">
+									<td style="width: 380px"><div class="three_column_layout_divcolumn1" style="width: auto"><span wicket:id="name"></span></div></td>
+									<td style="width: 80px"><span wicket:id="wbIdx"></span></td>
+									<td style="width: 50px"><div class="formCancelButton" wicket:id="delete" wicket:message="title:604"></div></td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
 				</fieldset>
 
 				<!-- Users in this Room -->


[02/18] openmeetings git commit: [OPENMEETINGS-1671] DB related part of work seems to be done

Posted by so...@apache.org.
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/7b5cd392/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/mssql_persistence.xml
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/mssql_persistence.xml b/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/mssql_persistence.xml
index 453f180..71d030e 100644
--- a/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/mssql_persistence.xml
+++ b/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/mssql_persistence.xml
@@ -24,42 +24,42 @@
 		version="2.0">
 	<persistence-unit name="openmeetings" transaction-type="RESOURCE_LOCAL">
 		<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
+		<class>org.apache.openmeetings.db.entity.basic.ChatMessage</class>
 		<class>org.apache.openmeetings.db.entity.basic.Configuration</class>
 		<class>org.apache.openmeetings.db.entity.basic.ErrorValue</class>
-		<class>org.apache.openmeetings.db.entity.server.LdapConfig</class>
 		<class>org.apache.openmeetings.db.entity.basic.MailMessage</class>
-		<class>org.apache.openmeetings.db.entity.server.Sessiondata</class>
-		<class>org.apache.openmeetings.db.entity.server.SOAPLogin</class>
 		<class>org.apache.openmeetings.db.entity.calendar.Appointment</class>
 		<class>org.apache.openmeetings.db.entity.calendar.MeetingMember</class>
 		<class>org.apache.openmeetings.db.entity.calendar.OmCalendar</class>
-		<class>org.apache.openmeetings.db.entity.basic.ChatMessage</class>
-		<class>org.apache.openmeetings.db.entity.user.Group</class>
-		<class>org.apache.openmeetings.db.entity.user.GroupUser</class>
+		<class>org.apache.openmeetings.db.entity.file.BaseFileItem</class>
+		<class>org.apache.openmeetings.db.entity.file.FileItem</class>
+		<class>org.apache.openmeetings.db.entity.file.FileItemLog</class>
+		<class>org.apache.openmeetings.db.entity.log.ConferenceLog</class>
 		<class>org.apache.openmeetings.db.entity.record.Recording</class>
 		<class>org.apache.openmeetings.db.entity.record.RecordingMetaData</class>
 		<class>org.apache.openmeetings.db.entity.record.RecordingMetaDelta</class>
 		<class>org.apache.openmeetings.db.entity.room.Invitation</class>
-		<class>org.apache.openmeetings.db.entity.log.ConferenceLog</class>
-		<class>org.apache.openmeetings.db.entity.room.RoomPoll</class>
-		<class>org.apache.openmeetings.db.entity.room.RoomPollAnswer</class>
-		<class>org.apache.openmeetings.db.entity.room.RoomModerator</class>
 		<class>org.apache.openmeetings.db.entity.room.Room</class>
-		<class>org.apache.openmeetings.db.entity.room.RoomGroup</class>
 		<class>org.apache.openmeetings.db.entity.room.RoomFile</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomGroup</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomModerator</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomPoll</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomPollAnswer</class>
 		<class>org.apache.openmeetings.db.entity.room.Whiteboard</class>
 		<class>org.apache.openmeetings.db.entity.room.WhiteboardItem</class>
+		<class>org.apache.openmeetings.db.entity.server.LdapConfig</class>
+		<class>org.apache.openmeetings.db.entity.server.OAuthServer</class>
+		<class>org.apache.openmeetings.db.entity.server.Sessiondata</class>
+		<class>org.apache.openmeetings.db.entity.server.SOAPLogin</class>
 		<class>org.apache.openmeetings.db.entity.user.Address</class>
+		<class>org.apache.openmeetings.db.entity.user.AsteriskSipUser</class>
+		<class>org.apache.openmeetings.db.entity.user.Group</class>
+		<class>org.apache.openmeetings.db.entity.user.GroupUser</class>
 		<class>org.apache.openmeetings.db.entity.user.PrivateMessage</class>
 		<class>org.apache.openmeetings.db.entity.user.PrivateMessageFolder</class>
+		<class>org.apache.openmeetings.db.entity.user.User</class>
 		<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.FileItemLog</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>
 		<exclude-unlisted-classes>false</exclude-unlisted-classes>
 		<properties>
 			<property name="openjpa.RuntimeUnenhancedClasses" value="unsupported" />

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/7b5cd392/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/mysql_persistence.xml
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/mysql_persistence.xml b/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/mysql_persistence.xml
index d645324..74cc32b 100644
--- a/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/mysql_persistence.xml
+++ b/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/mysql_persistence.xml
@@ -24,42 +24,42 @@
 		version="2.0">
 	<persistence-unit name="openmeetings" transaction-type="RESOURCE_LOCAL">
 		<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
+		<class>org.apache.openmeetings.db.entity.basic.ChatMessage</class>
 		<class>org.apache.openmeetings.db.entity.basic.Configuration</class>
 		<class>org.apache.openmeetings.db.entity.basic.ErrorValue</class>
-		<class>org.apache.openmeetings.db.entity.server.LdapConfig</class>
 		<class>org.apache.openmeetings.db.entity.basic.MailMessage</class>
-		<class>org.apache.openmeetings.db.entity.server.Sessiondata</class>
-		<class>org.apache.openmeetings.db.entity.server.SOAPLogin</class>
 		<class>org.apache.openmeetings.db.entity.calendar.Appointment</class>
 		<class>org.apache.openmeetings.db.entity.calendar.MeetingMember</class>
 		<class>org.apache.openmeetings.db.entity.calendar.OmCalendar</class>
-		<class>org.apache.openmeetings.db.entity.basic.ChatMessage</class>
-		<class>org.apache.openmeetings.db.entity.user.Group</class>
-		<class>org.apache.openmeetings.db.entity.user.GroupUser</class>
+		<class>org.apache.openmeetings.db.entity.file.BaseFileItem</class>
+		<class>org.apache.openmeetings.db.entity.file.FileItem</class>
+		<class>org.apache.openmeetings.db.entity.file.FileItemLog</class>
+		<class>org.apache.openmeetings.db.entity.log.ConferenceLog</class>
 		<class>org.apache.openmeetings.db.entity.record.Recording</class>
 		<class>org.apache.openmeetings.db.entity.record.RecordingMetaData</class>
 		<class>org.apache.openmeetings.db.entity.record.RecordingMetaDelta</class>
 		<class>org.apache.openmeetings.db.entity.room.Invitation</class>
-		<class>org.apache.openmeetings.db.entity.log.ConferenceLog</class>
-		<class>org.apache.openmeetings.db.entity.room.RoomPoll</class>
-		<class>org.apache.openmeetings.db.entity.room.RoomPollAnswer</class>
-		<class>org.apache.openmeetings.db.entity.room.RoomModerator</class>
 		<class>org.apache.openmeetings.db.entity.room.Room</class>
-		<class>org.apache.openmeetings.db.entity.room.RoomGroup</class>
 		<class>org.apache.openmeetings.db.entity.room.RoomFile</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomGroup</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomModerator</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomPoll</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomPollAnswer</class>
 		<class>org.apache.openmeetings.db.entity.room.Whiteboard</class>
 		<class>org.apache.openmeetings.db.entity.room.WhiteboardItem</class>
+		<class>org.apache.openmeetings.db.entity.server.LdapConfig</class>
+		<class>org.apache.openmeetings.db.entity.server.OAuthServer</class>
+		<class>org.apache.openmeetings.db.entity.server.Sessiondata</class>
+		<class>org.apache.openmeetings.db.entity.server.SOAPLogin</class>
 		<class>org.apache.openmeetings.db.entity.user.Address</class>
+		<class>org.apache.openmeetings.db.entity.user.AsteriskSipUser</class>
+		<class>org.apache.openmeetings.db.entity.user.Group</class>
+		<class>org.apache.openmeetings.db.entity.user.GroupUser</class>
 		<class>org.apache.openmeetings.db.entity.user.PrivateMessage</class>
 		<class>org.apache.openmeetings.db.entity.user.PrivateMessageFolder</class>
+		<class>org.apache.openmeetings.db.entity.user.User</class>
 		<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.FileItemLog</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>
 		<exclude-unlisted-classes>false</exclude-unlisted-classes>
 		<properties>
 			<property name="openjpa.RuntimeUnenhancedClasses" value="unsupported" />

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/7b5cd392/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/oracle_persistence.xml
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/oracle_persistence.xml b/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/oracle_persistence.xml
index b6a6326..589f407 100644
--- a/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/oracle_persistence.xml
+++ b/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/oracle_persistence.xml
@@ -24,42 +24,42 @@
 		version="2.0">
 	<persistence-unit name="openmeetings" transaction-type="RESOURCE_LOCAL">
 		<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
+		<class>org.apache.openmeetings.db.entity.basic.ChatMessage</class>
 		<class>org.apache.openmeetings.db.entity.basic.Configuration</class>
 		<class>org.apache.openmeetings.db.entity.basic.ErrorValue</class>
-		<class>org.apache.openmeetings.db.entity.server.LdapConfig</class>
 		<class>org.apache.openmeetings.db.entity.basic.MailMessage</class>
-		<class>org.apache.openmeetings.db.entity.server.Sessiondata</class>
-		<class>org.apache.openmeetings.db.entity.server.SOAPLogin</class>
 		<class>org.apache.openmeetings.db.entity.calendar.Appointment</class>
 		<class>org.apache.openmeetings.db.entity.calendar.MeetingMember</class>
 		<class>org.apache.openmeetings.db.entity.calendar.OmCalendar</class>
-		<class>org.apache.openmeetings.db.entity.basic.ChatMessage</class>
-		<class>org.apache.openmeetings.db.entity.user.Group</class>
-		<class>org.apache.openmeetings.db.entity.user.GroupUser</class>
+		<class>org.apache.openmeetings.db.entity.file.BaseFileItem</class>
+		<class>org.apache.openmeetings.db.entity.file.FileItem</class>
+		<class>org.apache.openmeetings.db.entity.file.FileItemLog</class>
+		<class>org.apache.openmeetings.db.entity.log.ConferenceLog</class>
 		<class>org.apache.openmeetings.db.entity.record.Recording</class>
 		<class>org.apache.openmeetings.db.entity.record.RecordingMetaData</class>
 		<class>org.apache.openmeetings.db.entity.record.RecordingMetaDelta</class>
 		<class>org.apache.openmeetings.db.entity.room.Invitation</class>
-		<class>org.apache.openmeetings.db.entity.log.ConferenceLog</class>
-		<class>org.apache.openmeetings.db.entity.room.RoomPoll</class>
-		<class>org.apache.openmeetings.db.entity.room.RoomPollAnswer</class>
-		<class>org.apache.openmeetings.db.entity.room.RoomModerator</class>
 		<class>org.apache.openmeetings.db.entity.room.Room</class>
-		<class>org.apache.openmeetings.db.entity.room.RoomGroup</class>
 		<class>org.apache.openmeetings.db.entity.room.RoomFile</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomGroup</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomModerator</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomPoll</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomPollAnswer</class>
 		<class>org.apache.openmeetings.db.entity.room.Whiteboard</class>
 		<class>org.apache.openmeetings.db.entity.room.WhiteboardItem</class>
+		<class>org.apache.openmeetings.db.entity.server.LdapConfig</class>
+		<class>org.apache.openmeetings.db.entity.server.OAuthServer</class>
+		<class>org.apache.openmeetings.db.entity.server.Sessiondata</class>
+		<class>org.apache.openmeetings.db.entity.server.SOAPLogin</class>
 		<class>org.apache.openmeetings.db.entity.user.Address</class>
+		<class>org.apache.openmeetings.db.entity.user.AsteriskSipUser</class>
+		<class>org.apache.openmeetings.db.entity.user.Group</class>
+		<class>org.apache.openmeetings.db.entity.user.GroupUser</class>
 		<class>org.apache.openmeetings.db.entity.user.PrivateMessage</class>
 		<class>org.apache.openmeetings.db.entity.user.PrivateMessageFolder</class>
+		<class>org.apache.openmeetings.db.entity.user.User</class>
 		<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.FileItemLog</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>
 		<exclude-unlisted-classes>false</exclude-unlisted-classes>
 		<properties>
 			<property name="openjpa.RuntimeUnenhancedClasses" value="unsupported" />

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/7b5cd392/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/postgresql_persistence.xml
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/postgresql_persistence.xml b/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/postgresql_persistence.xml
index d7dbe26..062d941 100644
--- a/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/postgresql_persistence.xml
+++ b/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/postgresql_persistence.xml
@@ -24,42 +24,42 @@
 		version="2.0">
 	<persistence-unit name="openmeetings" transaction-type="RESOURCE_LOCAL">
 		<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
+		<class>org.apache.openmeetings.db.entity.basic.ChatMessage</class>
 		<class>org.apache.openmeetings.db.entity.basic.Configuration</class>
 		<class>org.apache.openmeetings.db.entity.basic.ErrorValue</class>
-		<class>org.apache.openmeetings.db.entity.server.LdapConfig</class>
 		<class>org.apache.openmeetings.db.entity.basic.MailMessage</class>
-		<class>org.apache.openmeetings.db.entity.server.Sessiondata</class>
-		<class>org.apache.openmeetings.db.entity.server.SOAPLogin</class>
 		<class>org.apache.openmeetings.db.entity.calendar.Appointment</class>
 		<class>org.apache.openmeetings.db.entity.calendar.MeetingMember</class>
 		<class>org.apache.openmeetings.db.entity.calendar.OmCalendar</class>
-		<class>org.apache.openmeetings.db.entity.basic.ChatMessage</class>
-		<class>org.apache.openmeetings.db.entity.user.Group</class>
-		<class>org.apache.openmeetings.db.entity.user.GroupUser</class>
+		<class>org.apache.openmeetings.db.entity.file.BaseFileItem</class>
+		<class>org.apache.openmeetings.db.entity.file.FileItem</class>
+		<class>org.apache.openmeetings.db.entity.file.FileItemLog</class>
+		<class>org.apache.openmeetings.db.entity.log.ConferenceLog</class>
 		<class>org.apache.openmeetings.db.entity.record.Recording</class>
 		<class>org.apache.openmeetings.db.entity.record.RecordingMetaData</class>
 		<class>org.apache.openmeetings.db.entity.record.RecordingMetaDelta</class>
 		<class>org.apache.openmeetings.db.entity.room.Invitation</class>
-		<class>org.apache.openmeetings.db.entity.log.ConferenceLog</class>
-		<class>org.apache.openmeetings.db.entity.room.RoomPoll</class>
-		<class>org.apache.openmeetings.db.entity.room.RoomPollAnswer</class>
-		<class>org.apache.openmeetings.db.entity.room.RoomModerator</class>
 		<class>org.apache.openmeetings.db.entity.room.Room</class>
-		<class>org.apache.openmeetings.db.entity.room.RoomGroup</class>
 		<class>org.apache.openmeetings.db.entity.room.RoomFile</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomGroup</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomModerator</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomPoll</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomPollAnswer</class>
 		<class>org.apache.openmeetings.db.entity.room.Whiteboard</class>
 		<class>org.apache.openmeetings.db.entity.room.WhiteboardItem</class>
+		<class>org.apache.openmeetings.db.entity.server.LdapConfig</class>
+		<class>org.apache.openmeetings.db.entity.server.OAuthServer</class>
+		<class>org.apache.openmeetings.db.entity.server.Sessiondata</class>
+		<class>org.apache.openmeetings.db.entity.server.SOAPLogin</class>
 		<class>org.apache.openmeetings.db.entity.user.Address</class>
+		<class>org.apache.openmeetings.db.entity.user.AsteriskSipUser</class>
+		<class>org.apache.openmeetings.db.entity.user.Group</class>
+		<class>org.apache.openmeetings.db.entity.user.GroupUser</class>
 		<class>org.apache.openmeetings.db.entity.user.PrivateMessage</class>
 		<class>org.apache.openmeetings.db.entity.user.PrivateMessageFolder</class>
+		<class>org.apache.openmeetings.db.entity.user.User</class>
 		<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.FileItemLog</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>
 		<exclude-unlisted-classes>false</exclude-unlisted-classes>
 		<properties>
 			<property name="openjpa.RuntimeUnenhancedClasses" value="unsupported" />

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/7b5cd392/openmeetings-web/src/main/webapp/WEB-INF/classes/applicationContext.xml
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/webapp/WEB-INF/classes/applicationContext.xml b/openmeetings-web/src/main/webapp/WEB-INF/classes/applicationContext.xml
index 12e412e..8438397 100644
--- a/openmeetings-web/src/main/webapp/WEB-INF/classes/applicationContext.xml
+++ b/openmeetings-web/src/main/webapp/WEB-INF/classes/applicationContext.xml
@@ -166,7 +166,7 @@
 	<bean id="conferenceLogDao" class="org.apache.openmeetings.db.dao.log.ConferenceLogDao" />
 	<bean id="emailManagement" class="org.apache.openmeetings.service.mail.EmailManager" />
 	<bean id="fileItemLogDao" class="org.apache.openmeetings.db.dao.file.FileItemLogDao" />
-	<bean id="fileExplorerItemDao" class="org.apache.openmeetings.db.dao.file.FileExplorerItemDao" />
+	<bean id="fileItemDao" class="org.apache.openmeetings.db.dao.file.FileItemDao" />
 	<bean id="recordingDao" class="org.apache.openmeetings.db.dao.record.RecordingDao" />
 	<bean id="recordingMetaDataDao" class="org.apache.openmeetings.db.dao.record.RecordingMetaDataDao" />
 	<bean id="recordingMetaDeltaDao" class="org.apache.openmeetings.db.dao.record.RecordingMetaDeltaDao" />

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/7b5cd392/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestFileService.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestFileService.java b/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestFileService.java
index 4816c9c..70065ce 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestFileService.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestFileService.java
@@ -36,8 +36,8 @@ import javax.ws.rs.core.MediaType;
 
 import org.apache.cxf.jaxrs.ext.multipart.Attachment;
 import org.apache.openmeetings.db.dto.basic.ServiceResult;
-import org.apache.openmeetings.db.dto.file.FileExplorerItemDTO;
-import org.apache.openmeetings.db.entity.file.FileItem;
+import org.apache.openmeetings.db.dto.file.FileItemDTO;
+import org.apache.openmeetings.db.entity.file.BaseFileItem;
 import org.apache.openmeetings.util.NonJenkinsTests;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
@@ -60,20 +60,20 @@ public class TestFileService extends AbstractWebServiceTest {
 			g.drawString("Hello World!!!", 10, 20);
 			ImageIO.write(image, "jpg", img);
 			try (InputStream is = new FileInputStream(img)) {
-				FileExplorerItemDTO file = new FileExplorerItemDTO();
+				FileItemDTO file = new FileItemDTO();
 				file.setName("test.txt");
 				file.setHash(UUID.randomUUID().toString());
-				file.setType(FileItem.Type.Presentation);
+				file.setType(BaseFileItem.Type.Presentation);
 				List<Attachment> atts = new ArrayList<>();
 				atts.add(new Attachment("file", MediaType.APPLICATION_JSON, file));
 				atts.add(new Attachment("stream", MediaType.APPLICATION_OCTET_STREAM, is));
-				FileExplorerItemDTO f1 = getClient(FILE_SERVICE_URL)
+				FileItemDTO f1 = getClient(FILE_SERVICE_URL)
 						.path("/")
 						.query("sid", r.getMessage())
-						.type(MediaType.MULTIPART_FORM_DATA_TYPE).postCollection(atts, Attachment.class, FileExplorerItemDTO.class);
+						.type(MediaType.MULTIPART_FORM_DATA_TYPE).postCollection(atts, Attachment.class, FileItemDTO.class);
 				assertNotNull("Valid FileItem should be returned", f1);
 				assertNotNull("Valid FileItem should be returned", f1.getId());
-				assertEquals("Type should be Image", FileItem.Type.Image, f1.getType());
+				assertEquals("Type should be Image", BaseFileItem.Type.Image, f1.getType());
 				assertEquals("Width should be determined", width, f1.getWidth());
 				assertEquals("Height should be Image", height, f1.getHeight());
 			}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/7b5cd392/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/FileWebService.java
----------------------------------------------------------------------
diff --git a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/FileWebService.java b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/FileWebService.java
index bcadbff..d627690 100644
--- a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/FileWebService.java
+++ b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/FileWebService.java
@@ -43,12 +43,12 @@ import javax.ws.rs.core.MediaType;
 import org.apache.cxf.feature.Features;
 import org.apache.cxf.jaxrs.ext.multipart.Multipart;
 import org.apache.openmeetings.core.data.file.FileProcessor;
-import org.apache.openmeetings.db.dao.file.FileExplorerItemDao;
+import org.apache.openmeetings.db.dao.file.FileItemDao;
 import org.apache.openmeetings.db.dto.basic.ServiceResult;
 import org.apache.openmeetings.db.dto.basic.ServiceResult.Type;
-import org.apache.openmeetings.db.dto.file.FileExplorerItemDTO;
 import org.apache.openmeetings.db.dto.file.FileExplorerObject;
-import org.apache.openmeetings.db.entity.file.FileExplorerItem;
+import org.apache.openmeetings.db.dto.file.FileItemDTO;
+import org.apache.openmeetings.db.entity.file.FileItem;
 import org.apache.openmeetings.db.entity.server.Sessiondata;
 import org.apache.openmeetings.db.entity.user.User.Right;
 import org.apache.openmeetings.db.util.AuthLevelUtil;
@@ -72,8 +72,8 @@ import org.slf4j.Logger;
 public class FileWebService extends BaseWebService {
 	private static final Logger log = Red5LoggerFactory.getLogger(FileWebService.class, webAppRootKey);
 
-	private static FileExplorerItemDao getDao() {
-		return getBean(FileExplorerItemDao.class);
+	private static FileItemDao getDao() {
+		return getBean(FileItemDao.class);
 	}
 
 	/**
@@ -92,8 +92,8 @@ public class FileWebService extends BaseWebService {
 		try {
 			Sessiondata sd = check(sid);
 
-			FileExplorerItemDao dao = getDao();
-			FileExplorerItem f = dao.get(id);
+			FileItemDao dao = getDao();
+			FileItem f = dao.get(id);
 			if (f == null) {
 				return new ServiceResult(-1L, "Bad id", Type.ERROR);
 			}
@@ -135,19 +135,19 @@ public class FileWebService extends BaseWebService {
 	{
 		try {
 			if (AuthLevelUtil.hasWebServiceLevel(getRights(sid))) {
-				FileExplorerItemDao dao = getDao();
-				FileExplorerItem f = dao.get(externalId, externalType);
+				FileItemDao dao = getDao();
+				FileItem f = dao.get(externalId, externalType);
 				dao.delete(f);
 				return new ServiceResult(f.getId(), "Deleted", Type.SUCCESS);
 			}
 		} catch (Exception err) {
-			log.error("[deleteFileOrFolderByExternalIdAndType]", err);
+			log.error("[deleteExternal]", err);
 		}
 		return null;
 	}
 
 	/**
-	 * to add a folder to the private drive, set parentFileExplorerItemId = 0 and isOwner to 1/true and
+	 * to add a folder to the private drive, set parentId = 0 and isOwner to 1/true and
 	 * externalUserId/externalUserType to a valid user
 	 *
 	 * @param sid
@@ -163,8 +163,8 @@ public class FileWebService extends BaseWebService {
 	@POST
 	@Consumes(MediaType.MULTIPART_FORM_DATA)
 	@Path("/")
-	public FileExplorerItemDTO add(@WebParam(name="sid") @QueryParam("sid") String sid
-			, @Multipart(value = "file", type = MediaType.APPLICATION_JSON) @WebParam(name="file") FileExplorerItemDTO file
+	public FileItemDTO add(@WebParam(name="sid") @QueryParam("sid") String sid
+			, @Multipart(value = "file", type = MediaType.APPLICATION_JSON) @WebParam(name="file") FileItemDTO file
 			, @Multipart(value = "stream", type = MediaType.APPLICATION_OCTET_STREAM, required = false) @WebParam(name="stream") InputStream stream
 			) throws ServiceException
 	{
@@ -172,7 +172,7 @@ public class FileWebService extends BaseWebService {
 			Sessiondata sd = check(sid);
 			Long userId = sd.getUserId();
 
-			FileExplorerItem f = file == null ? null : file.get();
+			FileItem f = file == null ? null : file.get();
 			if (f == null || f.getId() != null) {
 				throw new ServiceException("Bad id");//TODO err code -1 ????
 			}
@@ -193,7 +193,7 @@ public class FileWebService extends BaseWebService {
 				} else {
 					f = getDao().update(f);
 				}
-				return new FileExplorerItemDTO(f);
+				return new FileItemDTO(f);
 			} else {
 				throw new ServiceException("Insufficient permissions"); //TODO code -26
 			}
@@ -229,15 +229,15 @@ public class FileWebService extends BaseWebService {
 			if (AuthLevelUtil.hasUserLevel(getRights(userId))) {
 				log.debug("roomId " + roomId);
 
-				FileExplorerItemDao dao = getDao();
+				FileItemDao dao = getDao();
 				FileExplorerObject fileExplorerObject = new FileExplorerObject();
 
 				// Home File List
-				List<FileExplorerItem> fList = dao.getByOwner(userId);
+				List<FileItem> fList = dao.getByOwner(userId);
 				fileExplorerObject.setUser(fList, dao.getSize(fList));
 
 				// Public File List
-				List<FileExplorerItem> rList = dao.getByRoom(roomId);
+				List<FileItem> rList = dao.getByRoom(roomId);
 				fileExplorerObject.setRoom(rList, dao.getSize(rList));
 
 				return fileExplorerObject;
@@ -254,7 +254,7 @@ public class FileWebService extends BaseWebService {
 
 	/**
 	 *
-	 * Get list of {@link FileExplorerItemDTO} by parent
+	 * Get list of {@link FileItemDTO} by parent
 	 *
 	 * @param sid
 	 *            SID The SID of the User. This SID must be marked as logged in
@@ -268,7 +268,7 @@ public class FileWebService extends BaseWebService {
 	@WebMethod
 	@GET
 	@Path("/room/{id}/{parent}")
-	public List<FileExplorerItemDTO> getRoomByParent(@WebParam(name="sid") @QueryParam("sid") String sid
+	public List<FileItemDTO> getRoomByParent(@WebParam(name="sid") @QueryParam("sid") String sid
 			, @WebParam(name="id") @PathParam("id") long roomId
 			, @WebParam(name="parent") @PathParam("parent") long parentId
 			) throws ServiceException
@@ -280,8 +280,8 @@ public class FileWebService extends BaseWebService {
 			if (AuthLevelUtil.hasUserLevel(getRights(userId))) {
 				log.debug("getRoomByParent " + parentId);
 
-				FileExplorerItemDao dao = getDao();
-				List<FileExplorerItem> list = new ArrayList<>();
+				FileItemDao dao = getDao();
+				List<FileItem> list = new ArrayList<>();
 				if (parentId < 0) {
 					if (parentId == -1) {
 						list = dao.getByOwner(userId);
@@ -291,7 +291,7 @@ public class FileWebService extends BaseWebService {
 				} else {
 					list = dao.getByParent(parentId);
 				}
-				return FileExplorerItemDTO.list(list);
+				return FileItemDTO.list(list);
 			} else {
 				throw new ServiceException("Insufficient permissions"); //TODO code -26
 			}
@@ -319,7 +319,7 @@ public class FileWebService extends BaseWebService {
 	@WebMethod
 	@POST
 	@Path("/rename/{id}/{name}")
-	public FileExplorerItemDTO rename(@WebParam(name="sid") @QueryParam("sid") String sid
+	public FileItemDTO rename(@WebParam(name="sid") @QueryParam("sid") String sid
 			, @WebParam(name="id") @PathParam("id") long id
 			, @WebParam(name="name") @PathParam("name") String name) throws ServiceException
 	{
@@ -328,8 +328,8 @@ public class FileWebService extends BaseWebService {
 				// FIXME TODO: check if this user is allowed to change this file
 
 				log.debug("rename " + id);
-				FileExplorerItem f = getDao().rename(id, name);
-				return f == null ? null : new FileExplorerItemDTO(f);
+				FileItem f = getDao().rename(id, name);
+				return f == null ? null : new FileItemDTO(f);
 			} else {
 				throw new ServiceException("Insufficient permissions"); //TODO code -26
 			}
@@ -356,7 +356,7 @@ public class FileWebService extends BaseWebService {
 	@WebMethod
 	@POST
 	@Path("/move/{roomid}/{id}/{parentid}")
-	public FileExplorerItemDTO move(@WebParam(name="sid") @QueryParam("sid") String sid
+	public FileItemDTO move(@WebParam(name="sid") @QueryParam("sid") String sid
 			, @WebParam(name="id") @PathParam("id") long id
 			, @WebParam(name="roomid") @PathParam("roomid") long roomId
 			, @WebParam(name="parentid") @PathParam("parentid") long parentId) throws ServiceException
@@ -367,8 +367,8 @@ public class FileWebService extends BaseWebService {
 			if (AuthLevelUtil.hasUserLevel(getRights(userId))) {
 				// FIXME TODO A test is required that checks if the user is allowed to move the file
 				log.debug("move " + id);
-				FileExplorerItem f = getDao().move(id, parentId, userId, roomId);
-				return f == null ? null : new FileExplorerItemDTO(f);
+				FileItem f = getDao().move(id, parentId, userId, roomId);
+				return f == null ? null : new FileItemDTO(f);
 			} else {
 				throw new ServiceException("Insufficient permissions"); //TODO code -26
 			}


[03/18] openmeetings git commit: [OPENMEETINGS-1671] DB related part of work seems to be done

Posted by so...@apache.org.
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/7b5cd392/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java
index 6f76946..84ed8e6 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java
@@ -305,7 +305,7 @@ public class Room implements IDataProviderEntity {
 	@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
 	@JoinColumn(name = "room_id", insertable = true, updatable = true, nullable = false)
 	@ElementDependent
-	private List<RoomFile> roomfiles = new ArrayList<>();
+	private List<RoomFile> roomFiles = new ArrayList<>();
 
 	@Transient
 	private List<StreamClient> currentusers;

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/7b5cd392/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/RoomFile.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/RoomFile.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/RoomFile.java
index 3098aa9..329697c 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/RoomFile.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/RoomFile.java
@@ -20,12 +20,17 @@ package org.apache.openmeetings.db.entity.room;
 
 import javax.persistence.Column;
 import javax.persistence.Entity;
+import javax.persistence.FetchType;
 import javax.persistence.GeneratedValue;
 import javax.persistence.GenerationType;
 import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
 import javax.persistence.Table;
 
+import org.apache.openjpa.persistence.jdbc.ForeignKey;
 import org.apache.openmeetings.db.entity.IDataProviderEntity;
+import org.apache.openmeetings.db.entity.file.BaseFileItem;
 
 @Entity
 @Table(name = "room_file")
@@ -36,9 +41,20 @@ public class RoomFile implements IDataProviderEntity {
 	@GeneratedValue(strategy = GenerationType.IDENTITY)
 	private Long id;
 
-	@Column(name = "room_id")
+	@Column(name = "room_id", nullable = false)
 	private Long roomId;
 
+	@ManyToOne(fetch = FetchType.EAGER, optional = false)
+	@JoinColumn(name = "file_id", insertable = true, updatable = true, nullable = false)
+	@ForeignKey(enabled = true)
+	private BaseFileItem file;
+
+	/*
+	 * Index of whiteboard for this file, zero based
+	 */
+	@Column(name = "wb_idx", nullable = false)
+	private long wbIdx = 0;
+
 	@Override
 	public Long getId() {
 		return id;
@@ -48,4 +64,28 @@ public class RoomFile implements IDataProviderEntity {
 	public void setId(Long id) {
 		this.id = id;
 	}
+
+	public Long getRoomId() {
+		return roomId;
+	}
+
+	public void setRoomId(Long roomId) {
+		this.roomId = roomId;
+	}
+
+	public BaseFileItem getFile() {
+		return file;
+	}
+
+	public void setFile(BaseFileItem file) {
+		this.file = file;
+	}
+
+	public long getWbIdx() {
+		return wbIdx;
+	}
+
+	public void setWbIdx(long wbIdx) {
+		this.wbIdx = wbIdx;
+	}
 }

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/7b5cd392/openmeetings-flash/src/main/swf/modules/conference/whiteboard/dynamicFileName.lzx
----------------------------------------------------------------------
diff --git a/openmeetings-flash/src/main/swf/modules/conference/whiteboard/dynamicFileName.lzx b/openmeetings-flash/src/main/swf/modules/conference/whiteboard/dynamicFileName.lzx
index 9ea2d5f..4976bec 100644
--- a/openmeetings-flash/src/main/swf/modules/conference/whiteboard/dynamicFileName.lzx
+++ b/openmeetings-flash/src/main/swf/modules/conference/whiteboard/dynamicFileName.lzx
@@ -68,7 +68,7 @@
 
 	<method name="createFileComplete" args="event">
 		var o = JSON.parse(event.target.data);
-		var f = o.fileExplorerItemDTO;
+		var f = o.fileItemDTO;
 		if ($debug) Debug.info("addFolderComplete ", event, o);
 		this.refObj.setAttribute("fileName", f.name);
 		this.refObj.setAttribute("fileId", f.id);

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/7b5cd392/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupExport.java
----------------------------------------------------------------------
diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupExport.java b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupExport.java
index 17bf2e7..ae6c809 100644
--- a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupExport.java
+++ b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupExport.java
@@ -42,7 +42,7 @@ import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
 import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
 import org.apache.openmeetings.db.dao.calendar.MeetingMemberDao;
 import org.apache.openmeetings.db.dao.calendar.OmCalendarDao;
-import org.apache.openmeetings.db.dao.file.FileExplorerItemDao;
+import org.apache.openmeetings.db.dao.file.FileItemDao;
 import org.apache.openmeetings.db.dao.record.RecordingDao;
 import org.apache.openmeetings.db.dao.room.PollDao;
 import org.apache.openmeetings.db.dao.room.RoomDao;
@@ -58,7 +58,7 @@ import org.apache.openmeetings.db.entity.basic.ChatMessage;
 import org.apache.openmeetings.db.entity.basic.Configuration;
 import org.apache.openmeetings.db.entity.calendar.Appointment;
 import org.apache.openmeetings.db.entity.calendar.OmCalendar;
-import org.apache.openmeetings.db.entity.file.FileExplorerItem;
+import org.apache.openmeetings.db.entity.file.FileItem;
 import org.apache.openmeetings.db.entity.record.Recording;
 import org.apache.openmeetings.db.entity.room.Room;
 import org.apache.openmeetings.db.entity.room.RoomPoll;
@@ -99,7 +99,7 @@ public class BackupExport {
 	@Autowired
 	private OmCalendarDao calendarDao;
 	@Autowired
-	private FileExplorerItemDao fileExplorerItemDao;
+	private FileItemDao fileItemDao;
 	@Autowired
 	private RecordingDao recordingDao;
 	@Autowired
@@ -296,7 +296,7 @@ public class BackupExport {
 			 * ##################### File-Explorer
 			 */
 			{
-				List<FileExplorerItem> list = fileExplorerItemDao.get();
+				List<FileItem> list = fileItemDao.get();
 				Registry registry = new Registry();
 				Strategy strategy = new RegistryStrategy(registry);
 				Serializer serializer = new Persister(strategy);

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/7b5cd392/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupImport.java
----------------------------------------------------------------------
diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupImport.java b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupImport.java
index fad26ab..b1262f2 100644
--- a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupImport.java
+++ b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupImport.java
@@ -74,7 +74,7 @@ import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
 import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
 import org.apache.openmeetings.db.dao.calendar.MeetingMemberDao;
 import org.apache.openmeetings.db.dao.calendar.OmCalendarDao;
-import org.apache.openmeetings.db.dao.file.FileExplorerItemDao;
+import org.apache.openmeetings.db.dao.file.FileItemDao;
 import org.apache.openmeetings.db.dao.record.RecordingDao;
 import org.apache.openmeetings.db.dao.room.PollDao;
 import org.apache.openmeetings.db.dao.room.RoomDao;
@@ -91,8 +91,8 @@ import org.apache.openmeetings.db.entity.basic.Configuration;
 import org.apache.openmeetings.db.entity.calendar.Appointment;
 import org.apache.openmeetings.db.entity.calendar.MeetingMember;
 import org.apache.openmeetings.db.entity.calendar.OmCalendar;
-import org.apache.openmeetings.db.entity.file.FileExplorerItem;
 import org.apache.openmeetings.db.entity.file.FileItem;
+import org.apache.openmeetings.db.entity.file.BaseFileItem;
 import org.apache.openmeetings.db.entity.record.Recording;
 import org.apache.openmeetings.db.entity.record.RecordingMetaData;
 import org.apache.openmeetings.db.entity.room.Room;
@@ -158,7 +158,7 @@ public class BackupImport {
 	@Autowired
 	private LdapConfigDao ldapConfigDao;
 	@Autowired
-	private FileExplorerItemDao fileExplorerItemDao;
+	private FileItemDao fileItemDao;
 	@Autowired
 	private UserContactDao userContactDao;
 	@Autowired
@@ -645,8 +645,8 @@ public class BackupImport {
 		 * ##################### Import File-Explorer Items
 		 */
 		{
-			List<FileExplorerItem> list = readFileExplorerItemList(f, "fileExplorerItems.xml", "fileExplorerItems");
-			for (FileExplorerItem file : list) {
+			List<FileItem> list = readFileItemList(f, "fileExplorerItems.xml", "fileExplorerItems");
+			for (FileItem file : list) {
 				// We need to reset this as openJPA reject to store them otherwise
 				file.setId(null);
 				Long roomId = file.getRoomId();
@@ -660,7 +660,7 @@ public class BackupImport {
 				if (Strings.isEmpty(file.getHash())) {
 					file.setHash(UUID.randomUUID().toString());
 				}
-				fileExplorerItemDao.update(file);
+				fileItemDao.update(file);
 			}
 		}
 
@@ -755,8 +755,8 @@ public class BackupImport {
 	}
 
 	//FIXME (need to be removed in later versions) HACK to fix old properties
-	public List<FileExplorerItem> readFileExplorerItemList(File baseDir, String fileName, String listNodeName) throws Exception {
-		List<FileExplorerItem> list = new ArrayList<>();
+	public List<FileItem> readFileItemList(File baseDir, String fileName, String listNodeName) throws Exception {
+		List<FileItem> list = new ArrayList<>();
 		File xml = new File(baseDir, fileName);
 		if (xml.exists()) {
 			Registry registry = new Registry();
@@ -777,37 +777,37 @@ public class BackupImport {
 					InputNode item = listNode.getNext();
 					InputNode item1 = listNode1.getNext(); //HACK to handle old isFolder, isImage, isVideo, isRecording, isPresentation, isStoredWmlFile, isChart
 					while (item != null) {
-						FileExplorerItem f = ser.read(FileExplorerItem.class, item, false);
+						FileItem f = ser.read(FileItem.class, item, false);
 
 						//HACK to handle old isFolder, isImage, isVideo, isRecording, isPresentation, isStoredWmlFile, isChart, wmlFilePath
 						do {
 							String name = item1.getName();
 							String val = item1.getValue();
 							if ("wmlFilePath".equals(name) && !Strings.isEmpty(val)) {
-								f.setType(FileItem.Type.WmlFile);
+								f.setType(BaseFileItem.Type.WmlFile);
 								f.setHash(val);
 							}
 							if ("isChart".equals(name) && "true".equals(val)) {
-								f.setType(FileItem.Type.PollChart);
+								f.setType(BaseFileItem.Type.PollChart);
 							}
 							if ("isImage".equals(name) && "true".equals(val)) {
-								f.setType(FileItem.Type.Image);
+								f.setType(BaseFileItem.Type.Image);
 							}
 							if ("isVideo".equals(name) && "true".equals(val)) {
-								f.setType(FileItem.Type.Video);
+								f.setType(BaseFileItem.Type.Video);
 							}
 							if ("isRecording".equals(name) && "true".equals(val)) {
 								log.warn("Recording is stored in FileExplorer Items");
-								f.setType(FileItem.Type.Video);
+								f.setType(BaseFileItem.Type.Video);
 							}
 							if ("isPresentation".equals(name) && "true".equals(val)) {
-								f.setType(FileItem.Type.Presentation);
+								f.setType(BaseFileItem.Type.Presentation);
 							}
 							if ("isStoredWmlFile".equals(name) && "true".equals(val)) {
-								f.setType(FileItem.Type.WmlFile);
+								f.setType(BaseFileItem.Type.WmlFile);
 							}
 							if (("folder".equals(name) || "isFolder".equals(name)) && "true".equals(val)) {
-								f.setType(FileItem.Type.Folder);
+								f.setType(BaseFileItem.Type.Folder);
 							}
 							item1 = listNode1.getNext(); //HACK to handle old isFolder, isImage, isVideo, isRecording, isPresentation, isStoredWmlFile, isChart, wmlFilePath
 						} while (item1 != null && !"fileExplorerItem".equals(item1.getName()));
@@ -816,7 +816,7 @@ public class BackupImport {
 						int idx = f.getHash() == null ? -1 : f.getHash().indexOf('.');
 						if (idx > -1) {
 							String hash = f.getHash().substring(0, idx);
-							if (FileItem.Type.Image == f.getType()) {
+							if (BaseFileItem.Type.Image == f.getType()) {
 								fileMap.put(f.getHash(), String.format("%s/%s", hash, f.getHash()));
 							}
 							f.setHash(hash);
@@ -868,7 +868,7 @@ public class BackupImport {
 						} while (item1 != null && !"flvrecording".equals(item1.getName()));
 
 						if (r.getType() == null) {
-							r.setType(isFolder ? FileItem.Type.Folder : FileItem.Type.Recording);
+							r.setType(isFolder ? BaseFileItem.Type.Folder : BaseFileItem.Type.Recording);
 						}
 						list.add(r);
 						item = listNode.getNext();

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/7b5cd392/openmeetings-install/src/main/java/org/apache/openmeetings/cli/Admin.java
----------------------------------------------------------------------
diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/cli/Admin.java b/openmeetings-install/src/main/java/org/apache/openmeetings/cli/Admin.java
index 1308d63..b88e26d 100644
--- a/openmeetings-install/src/main/java/org/apache/openmeetings/cli/Admin.java
+++ b/openmeetings-install/src/main/java/org/apache/openmeetings/cli/Admin.java
@@ -51,7 +51,7 @@ import org.apache.openmeetings.backup.ProgressHolder;
 import org.apache.openmeetings.core.ldap.LdapLoginManagement;
 import org.apache.openmeetings.core.util.StrongPasswordValidator;
 import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
-import org.apache.openmeetings.db.dao.file.FileExplorerItemDao;
+import org.apache.openmeetings.db.dao.file.FileItemDao;
 import org.apache.openmeetings.db.dao.record.RecordingDao;
 import org.apache.openmeetings.db.dao.user.UserDao;
 import org.apache.openmeetings.db.entity.user.User;
@@ -347,7 +347,7 @@ public class Admin {
 							back.cleanup();
 						}
 						//Files
-						FileExplorerItemDao fileDao = ctx.getBean(FileExplorerItemDao.class);
+						FileItemDao fileDao = ctx.getBean(FileItemDao.class);
 						CleanupEntityUnit files = CleanupHelper.getFileUnit(fileDao);
 						restSize -= files.getSizeTotal();
 						report.append("\t\tfiles: ").append(files.getHumanTotal()).append("\n");

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/7b5cd392/openmeetings-install/src/main/java/org/apache/openmeetings/cli/CleanupHelper.java
----------------------------------------------------------------------
diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/cli/CleanupHelper.java b/openmeetings-install/src/main/java/org/apache/openmeetings/cli/CleanupHelper.java
index e30df24..4897bb7 100644
--- a/openmeetings-install/src/main/java/org/apache/openmeetings/cli/CleanupHelper.java
+++ b/openmeetings-install/src/main/java/org/apache/openmeetings/cli/CleanupHelper.java
@@ -27,10 +27,10 @@ import java.util.ArrayList;
 import java.util.List;
 
 import org.apache.commons.io.FileUtils;
-import org.apache.openmeetings.db.dao.file.FileExplorerItemDao;
+import org.apache.openmeetings.db.dao.file.FileItemDao;
 import org.apache.openmeetings.db.dao.record.RecordingDao;
 import org.apache.openmeetings.db.dao.user.UserDao;
-import org.apache.openmeetings.db.entity.file.FileExplorerItem;
+import org.apache.openmeetings.db.entity.file.FileItem;
 import org.apache.openmeetings.db.entity.record.Recording;
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.util.OmFileHelper;
@@ -71,13 +71,13 @@ public class CleanupHelper {
 		return new CleanupUnit(OmFileHelper.getUploadBackupDir());
 	}
 
-	public static CleanupEntityUnit getFileUnit(final FileExplorerItemDao fileDao) {
+	public static CleanupEntityUnit getFileUnit(final FileItemDao fileDao) {
 		File parent = OmFileHelper.getUploadFilesDir();
 		List<File> invalid = new ArrayList<>();
 		List<File> deleted = new ArrayList<>();
 		int missing = 0;
 		for (File f : list(parent, null)) {
-			FileExplorerItem item = fileDao.getByHash(f.getName()); // TODO probable extension should be stripped
+			FileItem item = fileDao.getByHash(f.getName()); // TODO probable extension should be stripped
 			if (item == null) {
 				invalid.add(f);
 			} else if (item.isDeleted()) {
@@ -85,7 +85,7 @@ public class CleanupHelper {
 			}
 		}
 		//TODO WML_DIR should also be checked
-		for (FileExplorerItem item : fileDao.get()) {
+		for (FileItem item : fileDao.get()) {
 			if (!item.isDeleted() && item.getHash() != null && !new File(parent, item.getHash()).exists()) {
 				missing++;
 			}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/7b5cd392/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/AdminPanel.html
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/AdminPanel.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/AdminPanel.html
index f98fa41..c05f498 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/AdminPanel.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/AdminPanel.html
@@ -19,18 +19,6 @@
 
 -->
 <html xmlns:wicket="http://wicket.apache.org">
-<wicket:head>
-	<script type="text/javascript">
-		function adminPanelInit() {
-			if (typeof extAdminPanelInit === 'function') {
-				extAdminPanelInit();
-			}
-			var h = $(window).height() - 5;
-			$('#adminForm').height(h - $('#adminForm').position().top);
-			$('#adminTable').height(h - $('#adminTable').position().top);
-		}
-	</script>
-</wicket:head>
 <wicket:panel>
 	<div class="adminPanel">
 		<wicket:child/>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/7b5cd392/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/AdminPanel.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/AdminPanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/AdminPanel.java
index 5686bd9..264af05 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/AdminPanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/AdminPanel.java
@@ -21,10 +21,16 @@ package org.apache.openmeetings.web.admin;
 import org.apache.openmeetings.web.common.BasePanel;
 import org.apache.wicket.authroles.authorization.strategies.role.annotations.AuthorizeInstantiation;
 import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
+import org.apache.wicket.markup.head.IHeaderResponse;
+import org.apache.wicket.markup.head.JavaScriptHeaderItem;
+import org.apache.wicket.markup.head.PriorityHeaderItem;
+import org.apache.wicket.request.resource.JavaScriptResourceReference;
 
 @AuthorizeInstantiation("Admin")
 public abstract class AdminPanel extends BasePanel {
 	private static final long serialVersionUID = 1L;
+	private static final JavaScriptResourceReference ADMIN_SCRIPT = new JavaScriptResourceReference(AdminPanel.class, "admin.js");
+
 	protected final static String BASE_ROW_CLASS = "ui-widget-content";
 	protected final static String ROW_CLASS = BASE_ROW_CLASS + " clickable";
 
@@ -33,6 +39,12 @@ public abstract class AdminPanel extends BasePanel {
 	}
 
 	@Override
+	public void renderHead(IHeaderResponse response) {
+		super.renderHead(response);
+		response.render(new PriorityHeaderItem(JavaScriptHeaderItem.forReference(ADMIN_SCRIPT)));
+	}
+
+	@Override
 	public BasePanel onMenuPanelLoad(IPartialPageRequestHandler handler) {
 		super.onMenuPanelLoad(handler);
 		handler.appendJavaScript("adminPanelInit();");

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/7b5cd392/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
index f87cf91..156b2df 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
@@ -246,6 +246,7 @@ public class RoomForm extends AdminBaseForm<Room> {
 				return String.format("\"%s %s\" <%s>", choice.getFirstname(), choice.getLastname(), a == null ? "" : a.getEmail());
 			}
 		});
+		moderatorChoice.getSettings().setCloseOnSelect(true);
 		add(moderatorChoice.add(new AjaxFormComponentUpdatingBehavior("change") {
 			private static final long serialVersionUID = 1L;
 

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/7b5cd392/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.html
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.html
index d8d1473..a424408 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.html
@@ -140,6 +140,15 @@
 					</div>
 				</fieldset>
 
+				<!-- Room files -->
+				<fieldset class="ui-widget-content">
+					<legend class="ui-widget-header"><wicket:message key="245" /></legend>
+					<div class="formelement">
+						<label ><wicket:message key="245" /></label>
+						<div class="om-select2"><select class="input" ></select></div>
+					</div>
+				</fieldset>
+
 				<!-- Users in this Room -->
 				<fieldset class="ui-widget-content">
 					<legend class="ui-widget-header"><wicket:message key="587" /></legend>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/7b5cd392/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/ConvertingErrorsDialog.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/ConvertingErrorsDialog.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/ConvertingErrorsDialog.java
index a0a2ec0..362d8e9 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/ConvertingErrorsDialog.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/ConvertingErrorsDialog.java
@@ -24,7 +24,7 @@ import java.util.ArrayList;
 import java.util.List;
 
 import org.apache.openmeetings.db.dao.file.FileItemLogDao;
-import org.apache.openmeetings.db.entity.file.FileItem;
+import org.apache.openmeetings.db.entity.file.BaseFileItem;
 import org.apache.openmeetings.db.entity.file.FileItemLog;
 import org.apache.openmeetings.web.app.Application;
 import org.apache.wicket.AttributeModifier;
@@ -39,7 +39,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 ConvertingErrorsDialog extends AbstractDialog<FileItem> {
+public class ConvertingErrorsDialog extends AbstractDialog<BaseFileItem> {
 	private static final long serialVersionUID = 1L;
 	private final WebMarkupContainer container = new WebMarkupContainer("container");
 	private final Label message = new Label("message", Model.of((String)null));
@@ -72,22 +72,22 @@ public class ConvertingErrorsDialog extends AbstractDialog<FileItem> {
 		return true;
 	}
 
-	public ConvertingErrorsDialog(String id, IModel<FileItem> model) {
+	public ConvertingErrorsDialog(String id, IModel<BaseFileItem> model) {
 		super(id, Application.getString(887), model);
 		add(container.add(message.setVisible(false), logView.setVisible(false)).setOutputMarkupId(true));
 	}
 
 	@Override
 	protected void onOpen(IPartialPageRequestHandler handler) {
-		FileItem f = getModelObject();
-		setTitle(handler, Model.of(getString(f.getType() == FileItem.Type.Recording ? "887" : "convert.errors.file")));
+		BaseFileItem f = getModelObject();
+		setTitle(handler, Model.of(getString(f.getType() == BaseFileItem.Type.Recording ? "887" : "convert.errors.file")));
 		List<FileItemLog> logs = getBean(FileItemLogDao.class).get(f);
 		if (f.getHash() == null) {
 			message.setVisible(true);
 			message.setDefaultModelObject(Application.getString(888));
 		} else if (!f.exists()) {
 			message.setVisible(true);
-			message.setDefaultModelObject(getString(f.getType() == FileItem.Type.Recording ? "1595" : "convert.errors.file.missing"));
+			message.setDefaultModelObject(getString(f.getType() == BaseFileItem.Type.Recording ? "1595" : "convert.errors.file.missing"));
 		} else {
 			message.setVisible(false);
 		}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/7b5cd392/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/DownloadMenuItem.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/DownloadMenuItem.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/DownloadMenuItem.java
index 7c1f33b..d431c8c 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/DownloadMenuItem.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/DownloadMenuItem.java
@@ -27,8 +27,8 @@ import java.io.FileFilter;
 import java.util.HashSet;
 import java.util.Set;
 
-import org.apache.openmeetings.db.entity.file.FileItem;
-import org.apache.openmeetings.db.entity.file.FileItem.Type;
+import org.apache.openmeetings.db.entity.file.BaseFileItem;
+import org.apache.openmeetings.db.entity.file.BaseFileItem.Type;
 import org.apache.openmeetings.util.OmFileHelper;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 
@@ -57,7 +57,7 @@ public class DownloadMenuItem extends MenuItem {
 
 	@Override
 	public void onClick(AjaxRequestTarget target) {
-		FileItem fi = tree.getLastSelected();
+		BaseFileItem fi = tree.getLastSelected();
 		File f = fi.getFile(ext);
 		if (f != null && f.exists()) {
 			if (ext == null && (Type.Image == fi.getType() || Type.Presentation == fi.getType())) {
@@ -72,10 +72,10 @@ public class DownloadMenuItem extends MenuItem {
 	}
 
 	private static class OriginalFilter implements FileFilter {
-		final FileItem fi;
+		final BaseFileItem fi;
 		Set<String> exclusions = new HashSet<>();
 
-		OriginalFilter(FileItem fi) {
+		OriginalFilter(BaseFileItem fi) {
 			this.fi = fi;
 			exclusions.add(EXTENSION_JPG);
 			if (Type.Presentation == fi.getType()) {

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/7b5cd392/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemPanel.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemPanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemPanel.java
index e018f90..1db38f4 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemPanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemPanel.java
@@ -21,7 +21,7 @@ package org.apache.openmeetings.web.common.tree;
 import static org.apache.openmeetings.web.app.Application.getBean;
 
 import org.apache.openmeetings.db.dao.file.FileItemLogDao;
-import org.apache.openmeetings.db.entity.file.FileItem;
+import org.apache.openmeetings.db.entity.file.BaseFileItem;
 import org.apache.openmeetings.db.entity.record.Recording;
 import org.apache.openmeetings.db.entity.record.Recording.Status;
 import org.apache.wicket.ajax.AjaxEventBehavior;
@@ -33,12 +33,12 @@ public class FileItemPanel extends FolderPanel {
 	private static final long serialVersionUID = 1L;
 	private final WebMarkupContainer errors = new WebMarkupContainer("errors");
 
-	public FileItemPanel(String id, final IModel<? extends FileItem> model, final FileTreePanel fileTreePanel) {
+	public FileItemPanel(String id, final IModel<? extends BaseFileItem> model, final FileTreePanel fileTreePanel) {
 		super(id, model, fileTreePanel);
-		FileItem f = model.getObject();
+		BaseFileItem f = model.getObject();
 		long errorCount = getBean(FileItemLogDao.class).countErrors(f);
 		boolean visible = errorCount != 0;
-		if (FileItem.Type.Recording == f.getType()) {
+		if (BaseFileItem.Type.Recording == f.getType()) {
 			Recording r = (Recording)f;
 			visible |= (Status.RECORDING != r.getStatus() && Status.CONVERTING != r.getStatus() && !f.exists());
 		} else {

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/7b5cd392/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemTree.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemTree.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemTree.java
index f416316..c927df4 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemTree.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemTree.java
@@ -20,8 +20,8 @@ package org.apache.openmeetings.web.common.tree;
 
 import java.util.Optional;
 
-import org.apache.openmeetings.db.entity.file.FileItem;
-import org.apache.openmeetings.db.entity.file.FileItem.Type;
+import org.apache.openmeetings.db.entity.file.BaseFileItem;
+import org.apache.openmeetings.db.entity.file.BaseFileItem.Type;
 import org.apache.openmeetings.db.entity.record.Recording;
 import org.apache.openmeetings.db.entity.record.Recording.Status;
 import org.apache.wicket.Component;
@@ -39,7 +39,7 @@ import org.apache.wicket.util.string.Strings;
 
 import com.github.openjson.JSONObject;
 
-public class FileItemTree extends DefaultNestedTree<FileItem> {
+public class FileItemTree extends DefaultNestedTree<BaseFileItem> {
 	private static final long serialVersionUID = 1L;
 	private final static String CSS_CLASS_FILE = "file ";
 	private final static String PARAM_MOD = "mod";
@@ -47,13 +47,13 @@ public class FileItemTree extends DefaultNestedTree<FileItem> {
 	private final static String PARAM_CTRL = "c";
 	final FileTreePanel treePanel;
 
-	public FileItemTree(String id, FileTreePanel treePanel, ITreeProvider<FileItem> tp) {
+	public FileItemTree(String id, FileTreePanel treePanel, ITreeProvider<BaseFileItem> tp) {
 		super(id, tp);
 		this.treePanel = treePanel;
 		setItemReuseStrategy(new ReuseIfModelsEqualStrategy());
 	}
 
-	private void onClick(AjaxRequestTarget target, FileItem f) {
+	private void onClick(AjaxRequestTarget target, BaseFileItem f) {
 		String mod = getRequest().getRequestParameters().getParameterValue(PARAM_MOD).toOptionalString();
 		boolean shift = false, ctrl = false;
 		if (!Strings.isEmpty(mod)) {
@@ -83,17 +83,17 @@ public class FileItemTree extends DefaultNestedTree<FileItem> {
 		getModelObject().clear();
 		modelChanged();
 		getProvider().refreshRoots(all);
-		replace(newSubtree("subtree", Model.of((FileItem)null)));
+		replace(newSubtree("subtree", Model.of((BaseFileItem)null)));
 	}
 
 	@Override
-	protected Component newContentComponent(String id, IModel<FileItem> node) {
-		return new Folder<FileItem>(id, this, node) {
+	protected Component newContentComponent(String id, IModel<BaseFileItem> node) {
+		return new Folder<BaseFileItem>(id, this, node) {
 			private static final long serialVersionUID = 1L;
 
 			@Override
-			protected Component newLabelComponent(String id, final IModel<FileItem> lm) {
-				FileItem r = lm.getObject();
+			protected Component newLabelComponent(String id, final IModel<BaseFileItem> lm) {
+				BaseFileItem r = lm.getObject();
 				return Type.Folder == r.getType() || r.getId() == null
 						? new FolderPanel(id, lm, treePanel)
 						: new FileItemPanel(id, lm, treePanel);
@@ -115,8 +115,8 @@ public class FileItemTree extends DefaultNestedTree<FileItem> {
 			}
 
 			@Override
-			protected MarkupContainer newLinkComponent(String id, IModel<FileItem> model) {
-				final FileItem f = getModelObject();
+			protected MarkupContainer newLinkComponent(String id, IModel<BaseFileItem> model) {
+				final BaseFileItem f = getModelObject();
 				return new AjaxLink<Void>(id) {
 					private static final long serialVersionUID = 1L;
 
@@ -141,7 +141,7 @@ public class FileItemTree extends DefaultNestedTree<FileItem> {
 			}
 
 			@Override
-			protected String getOtherStyleClass(FileItem r) {
+			protected String getOtherStyleClass(BaseFileItem r) {
 				return getItemStyle(r, false);
 			}
 
@@ -161,13 +161,13 @@ public class FileItemTree extends DefaultNestedTree<FileItem> {
 			}
 
 			@Override
-			protected IModel<String> newLabelModel(IModel<FileItem> model) {
+			protected IModel<String> newLabelModel(IModel<BaseFileItem> model) {
 				return Model.of(model.getObject().getName());
 			}
 		};
 	}
 
-	private static String getItemStyle(FileItem f, boolean open) {
+	private static String getItemStyle(BaseFileItem f, boolean open) {
 		StringBuilder style = new StringBuilder("big om-icon ");
 		if (f.getId() == null) {
 			style.append(CSS_CLASS_FILE).append(f.getHash().indexOf("my") > -1 ? "my" : "public");

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/7b5cd392/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java
index 60ed81d..b145d77 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java
@@ -35,11 +35,11 @@ import java.util.Map;
 import java.util.Map.Entry;
 import java.util.UUID;
 
-import org.apache.openmeetings.db.dao.file.FileExplorerItemDao;
+import org.apache.openmeetings.db.dao.file.FileItemDao;
 import org.apache.openmeetings.db.dao.record.RecordingDao;
-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.file.BaseFileItem;
+import org.apache.openmeetings.db.entity.file.BaseFileItem.Type;
 import org.apache.openmeetings.db.entity.record.Recording;
 import org.apache.openmeetings.web.common.ConfirmableAjaxBorder;
 import org.apache.openmeetings.web.common.ConfirmableAjaxBorder.ConfirmableBorderDialog;
@@ -80,8 +80,8 @@ public abstract class FileTreePanel extends Panel {
 	private final static String DISABLED_CLASS = " disabled";
 	final WebMarkupContainer trees = new WebMarkupContainer("tree-container");
 	private final WebMarkupContainer sizes = new WebMarkupContainer("sizes");
-	private FileItem lastSelected = null;
-	private Map<String, FileItem> selected = new HashMap<>();
+	private BaseFileItem lastSelected = null;
+	private Map<String, BaseFileItem> selected = new HashMap<>();
 	File dwnldFile;
 	final AjaxDownload downloader = new AjaxDownload(new IResource() {
 		private static final long serialVersionUID = 1L;
@@ -144,7 +144,7 @@ public abstract class FileTreePanel extends Panel {
 	protected void onInitialize() {
 		super.onInitialize();
 		download.setDefaultModelObject(newDownloadMenuList());
-		Droppable<FileItem> trashToolbar = new Droppable<FileItem>("trash-toolbar") {
+		Droppable<BaseFileItem> trashToolbar = new Droppable<BaseFileItem>("trash-toolbar") {
 			private static final long serialVersionUID = 1L;
 
 			@Override
@@ -188,8 +188,8 @@ public abstract class FileTreePanel extends Panel {
 			@Override
 			public void onDrop(AjaxRequestTarget target, Component component) {
 				Object o = component.getDefaultModelObject();
-				if (o instanceof FileItem) {
-					FileItem f = (FileItem)o;
+				if (o instanceof BaseFileItem) {
+					BaseFileItem f = (BaseFileItem)o;
 					if (isSelected(f)) {
 						deleteAll(target);
 					} else {
@@ -244,8 +244,8 @@ public abstract class FileTreePanel extends Panel {
 	}
 
 	private void deleteAll(AjaxRequestTarget target) {
-		for (Entry<String, FileItem> e : selected.entrySet()) {
-			FileItem f = e.getValue();
+		for (Entry<String, BaseFileItem> e : selected.entrySet()) {
+			BaseFileItem f = e.getValue();
 			if (!f.isReadOnly()) {
 				delete(f, target);
 			}
@@ -254,13 +254,13 @@ public abstract class FileTreePanel extends Panel {
 		selected.clear();
 	}
 
-	void delete(FileItem f, IPartialPageRequestHandler handler) {
+	void delete(BaseFileItem f, IPartialPageRequestHandler handler) {
 		Long id = f.getId();
 		if (id != null) {
 			if (f instanceof Recording) {
 				getBean(RecordingDao.class).delete((Recording)f);
 			} else {
-				getBean(FileExplorerItemDao.class).delete((FileExplorerItem)f);
+				getBean(FileItemDao.class).delete((FileItem)f);
 			}
 		}
 		update(handler);
@@ -286,12 +286,12 @@ public abstract class FileTreePanel extends Panel {
 		return readOnly;
 	}
 
-	protected abstract void update(AjaxRequestTarget target, FileItem f);
+	protected abstract void update(AjaxRequestTarget target, BaseFileItem f);
 
 	public void createFolder(AjaxRequestTarget target, String name) {
-		FileItem p = lastSelected;
+		BaseFileItem p = lastSelected;
 		boolean isRecording = p instanceof Recording;
-		FileItem f = isRecording ? new Recording() : new FileExplorerItem();
+		BaseFileItem f = isRecording ? new Recording() : new FileItem();
 		f.setName(name);
 		f.setHash(UUID.randomUUID().toString());
 		f.setInsertedBy(getUserId());
@@ -305,22 +305,22 @@ public abstract class FileTreePanel extends Panel {
 		if (isRecording) {
 			getBean(RecordingDao.class).update((Recording)f);
 		} else {
-			getBean(FileExplorerItemDao.class).update((FileExplorerItem)f);
+			getBean(FileItemDao.class).update((FileItem)f);
 		}
 		update(target);
 	}
 
 	public abstract void updateSizes();
 
-	public boolean isSelected(FileItem f) {
+	public boolean isSelected(BaseFileItem f) {
 		return selected.containsKey(f.getHash());
 	}
 
-	public Map<String, FileItem> getSelected() {
+	public Map<String, BaseFileItem> getSelected() {
 		return selected;
 	}
 
-	public FileItem getLastSelected() {
+	public BaseFileItem getLastSelected() {
 		return lastSelected;
 	}
 
@@ -330,12 +330,12 @@ public abstract class FileTreePanel extends Panel {
 	}
 
 	private void updateSelected(AjaxRequestTarget target) {
-		for (Entry<String, FileItem> e : selected.entrySet()) {
+		for (Entry<String, BaseFileItem> e : selected.entrySet()) {
 			updateNode(target, e.getValue());
 		}
 	}
 
-	void updateNode(AjaxRequestTarget target, FileItem fi) {
+	void updateNode(AjaxRequestTarget target, BaseFileItem fi) {
 		if (fi != null && target != null) {
 			if (Type.Folder == fi.getType()) {
 				tree.updateBranch(fi, target);
@@ -345,8 +345,8 @@ public abstract class FileTreePanel extends Panel {
 		}
 	}
 
-	private static boolean sameParent(Long roomId, FileItem f1, FileItem f2) {
-		if (f1 instanceof Recording && f2 instanceof FileExplorerItem) {
+	private static boolean sameParent(Long roomId, BaseFileItem f1, BaseFileItem f2) {
+		if (f1 instanceof Recording && f2 instanceof FileItem) {
 			return false;
 		}
 		if (f1.getParentId() != null && f1.getParentId().equals(f2.getParentId())) {
@@ -359,18 +359,18 @@ public abstract class FileTreePanel extends Panel {
 			if (f1.getRoomId() != null && f1.getRoomId().equals(f2.getRoomId())) {
 				return true;
 			}
-			if (f2 instanceof FileExplorerItem && roomId != null && f1.getRoomId() == null && f2.getRoomId() == null && f1.getOwnerId() == null && f2.getOwnerId() == null) {
+			if (f2 instanceof FileItem && roomId != null && f1.getRoomId() == null && f2.getRoomId() == null && f1.getOwnerId() == null && f2.getOwnerId() == null) {
 				return true;
 			}
 		}
 		return false;
 	}
 
-	private static boolean isDownloadable(FileItem f) {
+	private static boolean isDownloadable(BaseFileItem f) {
 		return !f.isReadOnly() && (f.getType() == Type.Presentation || f.getType() == Type.Image);
 	}
 
-	public void select(FileItem fi, AjaxRequestTarget target, boolean shift, boolean ctrl) {
+	public void select(BaseFileItem fi, AjaxRequestTarget target, boolean shift, boolean ctrl) {
 		updateSelected(target); //all previously selected are in update list
 		if (ctrl) {
 			if (isSelected(fi)) {
@@ -382,7 +382,7 @@ public abstract class FileTreePanel extends Panel {
 		} else if (shift && lastSelected != null && !lastSelected.getHash().equals(fi.getHash()) && sameParent(roomId, fi, lastSelected)) {
 			selected.clear();
 			String lastHash = null;
-			for (FileItem f : tree.getProvider().getByParent(fi, fi.getParentId())) {
+			for (BaseFileItem f : tree.getProvider().getByParent(fi, fi.getParentId())) {
 				if (lastHash == null) {
 					if (f.getHash().equals(lastSelected.getHash())) {
 						lastHash = fi.getHash();

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/7b5cd392/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FolderPanel.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FolderPanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FolderPanel.java
index 3ee055d..afc7bab 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FolderPanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FolderPanel.java
@@ -22,11 +22,11 @@ import static org.apache.openmeetings.web.app.Application.getBean;
 
 import java.util.Map.Entry;
 
-import org.apache.openmeetings.db.dao.file.FileExplorerItemDao;
+import org.apache.openmeetings.db.dao.file.FileItemDao;
 import org.apache.openmeetings.db.dao.record.RecordingDao;
-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.file.BaseFileItem;
+import org.apache.openmeetings.db.entity.file.BaseFileItem.Type;
 import org.apache.openmeetings.db.entity.record.Recording;
 import org.apache.wicket.AttributeModifier;
 import org.apache.wicket.Component;
@@ -49,11 +49,11 @@ public class FolderPanel extends Panel {
 	protected final MarkupContainer drop;
 	protected final MarkupContainer drag;
 
-	public FolderPanel(String id, final IModel<? extends FileItem> model, final FileTreePanel treePanel) {
+	public FolderPanel(String id, final IModel<? extends BaseFileItem> model, final FileTreePanel treePanel) {
 		super(id, model);
-		FileItem r = model.getObject();
+		BaseFileItem r = model.getObject();
 		boolean editable = !treePanel.isReadOnly() && !r.isReadOnly();
-		drop = r.getType() == Type.Folder && editable ? new Droppable<FileItem>("drop", Model.of(r)) {
+		drop = r.getType() == Type.Folder && editable ? new Droppable<BaseFileItem>("drop", Model.of(r)) {
 			private static final long serialVersionUID = 1L;
 
 			@Override
@@ -66,9 +66,9 @@ public class FolderPanel extends Panel {
 			@Override
 			public void onDrop(AjaxRequestTarget target, Component component) {
 				Object o = component.getDefaultModelObject();
-				if (o instanceof FileItem) {
-					FileItem p = (FileItem)drop.getDefaultModelObject();
-					FileItem f = (FileItem)o;
+				if (o instanceof BaseFileItem) {
+					BaseFileItem p = (BaseFileItem)drop.getDefaultModelObject();
+					BaseFileItem f = (BaseFileItem)o;
 					if (treePanel.isSelected(f)) {
 						moveAll(treePanel, target, p);
 					} else {
@@ -82,7 +82,7 @@ public class FolderPanel extends Panel {
 		if (r.getId() == null || treePanel.isReadOnly()) {
 			drag = new WebMarkupContainer("drag");
 		} else {
-			drag = new Draggable<FileItem>("drag", Model.of(r)) {
+			drag = new Draggable<BaseFileItem>("drag", Model.of(r)) {
 				private static final long serialVersionUID = 1L;
 
 				@Override
@@ -108,12 +108,12 @@ public class FolderPanel extends Panel {
 			@Override
 			protected void onSubmit(AjaxRequestTarget target) {
 				super.onSubmit(target);
-				FileItem fi = model.getObject();
+				BaseFileItem fi = model.getObject();
 				fi.setName(getEditor().getModelObject());
 				if (fi instanceof Recording) {
 					getBean(RecordingDao.class).update((Recording)fi);
 				} else {
-					getBean(FileExplorerItemDao.class).update((FileExplorerItem)fi);
+					getBean(FileItemDao.class).update((FileItem)fi);
 				}
 			}
 		};
@@ -122,13 +122,13 @@ public class FolderPanel extends Panel {
 		add(AttributeModifier.append("title", r.getName()));
 	}
 
-	private static void moveAll(final FileTreePanel treePanel, AjaxRequestTarget target, FileItem p) {
-		for (Entry<String, FileItem> e : treePanel.getSelected().entrySet()) {
+	private static void moveAll(final FileTreePanel treePanel, AjaxRequestTarget target, BaseFileItem p) {
+		for (Entry<String, BaseFileItem> e : treePanel.getSelected().entrySet()) {
 			move(treePanel, target, p, e.getValue());
 		}
 	}
 
-	private static void move(final FileTreePanel treePanel, AjaxRequestTarget target, FileItem p, FileItem f) {
+	private static void move(final FileTreePanel treePanel, AjaxRequestTarget target, BaseFileItem p, BaseFileItem f) {
 		Long pid = p.getId();
 		//FIXME parent should not be moved to child !!!!!!!
 		if (pid != null && pid.equals(f.getId())) {
@@ -141,7 +141,7 @@ public class FolderPanel extends Panel {
 		if (f instanceof Recording) {
 			getBean(RecordingDao.class).update((Recording)f);
 		} else {
-			getBean(FileExplorerItemDao.class).update((FileExplorerItem)f);
+			getBean(FileItemDao.class).update((FileItem)f);
 		}
 		treePanel.updateNode(target, f);
 	}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/7b5cd392/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/OmTreeProvider.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/OmTreeProvider.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/OmTreeProvider.java
index 4fe46e0..5082694 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/OmTreeProvider.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/OmTreeProvider.java
@@ -28,12 +28,12 @@ import java.util.Arrays;
 import java.util.Iterator;
 import java.util.List;
 
-import org.apache.openmeetings.db.dao.file.FileExplorerItemDao;
+import org.apache.openmeetings.db.dao.file.FileItemDao;
 import org.apache.openmeetings.db.dao.record.RecordingDao;
 import org.apache.openmeetings.db.dao.user.UserDao;
-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.file.BaseFileItem;
+import org.apache.openmeetings.db.entity.file.BaseFileItem.Type;
 import org.apache.openmeetings.db.entity.record.Recording;
 import org.apache.openmeetings.db.entity.user.Group;
 import org.apache.openmeetings.db.entity.user.GroupUser;
@@ -42,7 +42,7 @@ import org.apache.wicket.extensions.markup.html.repeater.tree.ITreeProvider;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
 
-public class OmTreeProvider implements ITreeProvider<FileItem> {
+public class OmTreeProvider implements ITreeProvider<BaseFileItem> {
 	private static final long serialVersionUID = 1L;
 	private static final List<Type> VIDEO_TYPES = Arrays.asList(Type.Folder, Type.Video);
 	public static String RECORDINGS_MY = "recordings-my";
@@ -52,7 +52,7 @@ public class OmTreeProvider implements ITreeProvider<FileItem> {
 	public static String FILES_ROOM = "files-room";
 	public static String FILES_GROUP = "files-group-%s";
 	private final Long roomId;
-	private final List<FileItem> roots = new ArrayList<>();
+	private final List<BaseFileItem> roots = new ArrayList<>();
 	private final String PUBLIC, GROUP_FILE, GROUP_REC;
 
 	public OmTreeProvider(Long roomId) {
@@ -64,27 +64,27 @@ public class OmTreeProvider implements ITreeProvider<FileItem> {
 	}
 
 	public void refreshRoots(boolean all) {
-		List<FileItem> fRoot = new ArrayList<>(), rRoot = new ArrayList<>();
+		List<BaseFileItem> fRoot = new ArrayList<>(), rRoot = new ArrayList<>();
 		if (all) {
 			if (roomId != null) {
-				FileItem r = createRoot(Application.getString(706), FILES_MY, false);
+				BaseFileItem r = createRoot(Application.getString(706), FILES_MY, false);
 				r.setOwnerId(getUserId());
 				fRoot.add(r);
 			}
 		}
 		if (roomId != null) {
-			FileItem r = createRoot(Application.getString(707), FILES_ROOM, false);
+			BaseFileItem r = createRoot(Application.getString(707), FILES_ROOM, false);
 			r.setRoomId(roomId);
 			fRoot.add(r);
 		}
 		if (all) {
 			{
-				FileItem r = createRoot(Application.getString(860), RECORDINGS_MY, true);
+				BaseFileItem r = createRoot(Application.getString(860), RECORDINGS_MY, true);
 				r.setOwnerId(getUserId());
 				rRoot.add(r);
 			}
 			{
-				FileItem r = createRoot(PUBLIC, RECORDINGS_PUBLIC, true);
+				BaseFileItem r = createRoot(PUBLIC, RECORDINGS_PUBLIC, true);
 				rRoot.add(r);
 			}
 		}
@@ -92,12 +92,12 @@ public class OmTreeProvider implements ITreeProvider<FileItem> {
 			Group g = gu.getGroup();
 			boolean readOnly = g.isRestricted() && !hasAdminLevel(getRights()) && !gu.isModerator();
 			if (all) {
-				FileItem r = createRoot(String.format("%s (%s)", GROUP_REC, g.getName()), String.format(RECORDINGS_GROUP, g.getId()), true);
+				BaseFileItem r = createRoot(String.format("%s (%s)", GROUP_REC, g.getName()), String.format(RECORDINGS_GROUP, g.getId()), true);
 				r.setReadOnly(readOnly);
 				r.setGroupId(g.getId());
 				rRoot.add(r);
 			}
-			FileItem r = createRoot(String.format("%s (%s)", GROUP_FILE, g.getName()), String.format(FILES_GROUP, g.getId()), false);
+			BaseFileItem r = createRoot(String.format("%s (%s)", GROUP_FILE, g.getName()), String.format(FILES_GROUP, g.getId()), false);
 			r.setGroupId(g.getId());
 			//group videos are read-only in recordings tree
 			r.setReadOnly(roomId == null || readOnly);
@@ -113,25 +113,25 @@ public class OmTreeProvider implements ITreeProvider<FileItem> {
 		}
 	}
 
-	static FileItem createRoot(String name, String hash, boolean rec) {
-		FileItem f = rec ? new Recording() : new FileExplorerItem();
+	static BaseFileItem createRoot(String name, String hash, boolean rec) {
+		BaseFileItem f = rec ? new Recording() : new FileItem();
 		f.setType(Type.Folder);
 		f.setName(name);
 		f.setHash(hash);
 		return f;
 	}
 
-	public FileItem getRoot() {
+	public BaseFileItem getRoot() {
 		return roots.get(0);
 	}
 
 	@Override
-	public Iterator<FileItem> getRoots() {
+	public Iterator<BaseFileItem> getRoots() {
 		return roots.iterator();
 	}
 
-	public List<FileItem> getByParent(FileItem node, Long id) {
-		List<FileItem> list = new ArrayList<>();
+	public List<BaseFileItem> getByParent(BaseFileItem node, Long id) {
+		List<BaseFileItem> list = new ArrayList<>();
 		if (node instanceof Recording) {
 			Recording rec = (Recording)node;
 			RecordingDao dao = getBean(RecordingDao.class);
@@ -147,8 +147,8 @@ public class OmTreeProvider implements ITreeProvider<FileItem> {
 			}
 			list.addAll(_list);
 		} else {
-			FileExplorerItemDao dao = getBean(FileExplorerItemDao.class);
-			List<FileExplorerItem> _list;
+			FileItemDao dao = getBean(FileItemDao.class);
+			List<FileItem> _list;
 			if (id == null) {
 				if (node.getRoomId() != null) {
 					_list = dao.getByRoom(node.getRoomId());
@@ -163,7 +163,7 @@ public class OmTreeProvider implements ITreeProvider<FileItem> {
 			list.addAll(_list);
 		}
 		if (node.isReadOnly()) {
-			for (FileItem f : list) {
+			for (BaseFileItem f : list) {
 				f.setReadOnly(true);
 			}
 		}
@@ -171,17 +171,17 @@ public class OmTreeProvider implements ITreeProvider<FileItem> {
 	}
 
 	@Override
-	public Iterator<FileItem> getChildren(FileItem node) {
+	public Iterator<BaseFileItem> getChildren(BaseFileItem node) {
 		return getByParent(node, node.getId()).iterator();
 	}
 
 	@Override
-	public boolean hasChildren(FileItem node) {
+	public boolean hasChildren(BaseFileItem node) {
 		return node.getId() == null || Type.Folder == node.getType();
 	}
 
 	@Override
-	public IModel<FileItem> model(FileItem object) {
+	public IModel<BaseFileItem> model(BaseFileItem object) {
 		// TODO LDM should be used
 		return Model.of(object);
 	}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/7b5cd392/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomFileResourceReference.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomFileResourceReference.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomFileResourceReference.java
index 2d6831f..65a0169 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomFileResourceReference.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomFileResourceReference.java
@@ -22,7 +22,7 @@ import static org.apache.openmeetings.util.OmFileHelper.getFileExt;
 
 import java.io.File;
 
-import org.apache.openmeetings.db.entity.file.FileExplorerItem;
+import org.apache.openmeetings.db.entity.file.FileItem;
 import org.apache.wicket.request.resource.IResource.Attributes;
 
 public class RoomFileResourceReference extends RoomResourceReference {
@@ -33,17 +33,17 @@ public class RoomFileResourceReference extends RoomResourceReference {
 	}
 
 	@Override
-	protected String getMimeType(FileExplorerItem r) {
+	protected String getMimeType(FileItem r) {
 		return "application/octet-stream";
 	}
 
 	@Override
-	protected String getFileName(FileExplorerItem r) {
+	protected String getFileName(FileItem r) {
 		return r.getName();
 	}
 
 	@Override
-	protected File getFile(FileExplorerItem r, Attributes attr) {
+	protected File getFile(FileItem r, Attributes attr) {
 		return getFile(r, getFileExt(r.getName()));
 	}
 }

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/7b5cd392/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
index 83bb862..5689ba3 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
@@ -47,7 +47,7 @@ import org.apache.openmeetings.db.dao.user.UserDao;
 import org.apache.openmeetings.db.entity.basic.Client;
 import org.apache.openmeetings.db.entity.calendar.Appointment;
 import org.apache.openmeetings.db.entity.calendar.MeetingMember;
-import org.apache.openmeetings.db.entity.file.FileItem;
+import org.apache.openmeetings.db.entity.file.BaseFileItem;
 import org.apache.openmeetings.db.entity.log.ConferenceLog;
 import org.apache.openmeetings.db.entity.room.Room;
 import org.apache.openmeetings.db.entity.room.Room.Right;
@@ -177,7 +177,7 @@ public class RoomPanel extends BasePanel {
 
 		room.add(menu = new RoomMenuPanel("menu", this));
 		room.add(AttributeModifier.append("data-room-id", r.getId()));
-		Droppable<FileItem> wbArea = new Droppable<FileItem>("wb-area") {
+		Droppable<BaseFileItem> wbArea = new Droppable<BaseFileItem>("wb-area") {
 			private static final long serialVersionUID = 1L;
 
 			@Override
@@ -190,10 +190,10 @@ public class RoomPanel extends BasePanel {
 			@Override
 			public void onDrop(AjaxRequestTarget target, Component component) {
 				Object o = component.getDefaultModelObject();
-				if (activeWbId > -1 && o instanceof FileItem) {
-					FileItem f = (FileItem)o;
+				if (activeWbId > -1 && o instanceof BaseFileItem) {
+					BaseFileItem f = (BaseFileItem)o;
 					if (sidebar.getFilesPanel().isSelected(f)) {
-						for (Entry<String, FileItem> e : sidebar.getFilesPanel().getSelected().entrySet()) {
+						for (Entry<String, BaseFileItem> e : sidebar.getFilesPanel().getSelected().entrySet()) {
 							sendFileToWb(e.getValue(), false);
 						}
 					} else {
@@ -646,9 +646,9 @@ public class RoomPanel extends BasePanel {
 		return publishingUser;
 	}
 
-	public void sendFileToWb(FileItem fi, boolean clean) {
-		if (activeWbId > -1 && fi.getId() != null && FileItem.Type.Folder != fi.getType()) {
-			if (FileItem.Type.WmlFile == fi.getType()) {
+	public void sendFileToWb(BaseFileItem fi, boolean clean) {
+		if (activeWbId > -1 && fi.getId() != null && BaseFileItem.Type.Folder != fi.getType()) {
+			if (BaseFileItem.Type.WmlFile == fi.getType()) {
 				getBean(ConferenceLibrary.class).sendToWhiteboard(getClient().getUid(), activeWbId, fi);
 			} else {
 				String url = null;

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/7b5cd392/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPdfResourceReference.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPdfResourceReference.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPdfResourceReference.java
index 36fba0f..705ed08 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPdfResourceReference.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPdfResourceReference.java
@@ -20,7 +20,7 @@ package org.apache.openmeetings.web.room;
 
 import java.io.File;
 
-import org.apache.openmeetings.db.entity.file.FileExplorerItem;
+import org.apache.openmeetings.db.entity.file.FileItem;
 import org.apache.wicket.request.resource.IResource.Attributes;
 
 public class RoomPdfResourceReference extends RoomResourceReference {
@@ -31,17 +31,17 @@ public class RoomPdfResourceReference extends RoomResourceReference {
 	}
 
 	@Override
-	protected String getMimeType(FileExplorerItem r) {
+	protected String getMimeType(FileItem r) {
 		return "application/pdf";
 	}
 
 	@Override
-	protected String getFileName(FileExplorerItem r) {
+	protected String getFileName(FileItem r) {
 		return r.getName();
 	}
 
 	@Override
-	protected File getFile(FileExplorerItem r, Attributes attr) {
+	protected File getFile(FileItem r, Attributes attr) {
 		return getFile(r, "pdf");
 	}
 }

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/7b5cd392/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomResourceReference.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomResourceReference.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomResourceReference.java
index 4df920d..057fce4 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomResourceReference.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomResourceReference.java
@@ -32,21 +32,21 @@ import java.util.Map.Entry;
 
 import org.apache.directory.api.util.Strings;
 import org.apache.openmeetings.core.data.whiteboard.WhiteboardCache;
-import org.apache.openmeetings.db.dao.file.FileExplorerItemDao;
+import org.apache.openmeetings.db.dao.file.FileItemDao;
 import org.apache.openmeetings.db.dao.user.GroupUserDao;
 import org.apache.openmeetings.db.dto.room.Whiteboard;
 import org.apache.openmeetings.db.dto.room.Whiteboards;
 import org.apache.openmeetings.db.entity.basic.Client;
-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.file.BaseFileItem;
+import org.apache.openmeetings.db.entity.file.BaseFileItem.Type;
 import org.apache.openmeetings.web.app.WebSession;
 import org.apache.openmeetings.web.util.FileItemResourceReference;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.request.resource.IResource.Attributes;
 import org.apache.wicket.util.string.StringValue;
 
-public class RoomResourceReference extends FileItemResourceReference<FileExplorerItem> {
+public class RoomResourceReference extends FileItemResourceReference<FileItem> {
 	private static final long serialVersionUID = 1L;
 	public static final String DEFAULT_NAME = "wb-room-file";
 	private boolean preview = false;
@@ -60,7 +60,7 @@ public class RoomResourceReference extends FileItemResourceReference<FileExplore
 	}
 
 	@Override
-	protected String getMimeType(FileExplorerItem r) {
+	protected String getMimeType(FileItem r) {
 		String mime = null;
 		switch (r.getType()) {
 			case WmlFile:
@@ -82,7 +82,7 @@ public class RoomResourceReference extends FileItemResourceReference<FileExplore
 	}
 
 	@Override
-	protected FileExplorerItem getFileItem(Attributes attributes) {
+	protected FileItem getFileItem(Attributes attributes) {
 		PageParameters params = attributes.getParameters();
 		StringValue _id = params.get("id");
 		StringValue _preview = params.get("preview");
@@ -99,7 +99,7 @@ public class RoomResourceReference extends FileItemResourceReference<FileExplore
 		if (id == null || !ws.isSignedIn() || c == null) {
 			return null;
 		}
-		FileExplorerItem f = getBean(FileExplorerItemDao.class).get(id);
+		FileItem f = getBean(FileItemDao.class).get(id);
 		String ruid = params.get("ruid").toString();
 		Whiteboards wbs = getBean(WhiteboardCache.class).get(c.getRoomId());
 		if (!Strings.isEmpty(ruid) && ruid.equals(wbs.getUid())) {
@@ -115,22 +115,22 @@ public class RoomResourceReference extends FileItemResourceReference<FileExplore
 		return null;
 	}
 
-	protected File getFile(FileExplorerItem f, String ext) {
+	protected File getFile(FileItem f, String ext) {
 		File file = f.getFile(ext);
 		if (file == null || !file.exists()) {
 			file = new File(new File(getOmHome(), "default"), String.format("deleted.%s"
-					, FileItem.Type.Image == f.getType() ? EXTENSION_JPG : EXTENSION_SWF));
+					, BaseFileItem.Type.Image == f.getType() ? EXTENSION_JPG : EXTENSION_SWF));
 		}
 		return file;
 	}
 
 	@Override
-	protected File getFile(FileExplorerItem f, Attributes attr) {
+	protected File getFile(FileItem f, Attributes attr) {
 		return getFile(f, Type.Video == f.getType() && preview ? EXTENSION_JPG : null);
 	}
 
 	@Override
-	protected String getFileName(FileExplorerItem f) {
+	protected String getFileName(FileItem f) {
 		return f.getFileName(preview ? EXTENSION_JPG : null);
 	}
 }

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/7b5cd392/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomFilePanel.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomFilePanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomFilePanel.java
index d215d71..33c5af0 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomFilePanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomFilePanel.java
@@ -22,10 +22,10 @@ import static org.apache.openmeetings.util.OmFileHelper.getHumanSize;
 import static org.apache.openmeetings.web.app.Application.getBean;
 import static org.apache.openmeetings.web.app.WebSession.getUserId;
 
-import org.apache.openmeetings.db.dao.file.FileExplorerItemDao;
+import org.apache.openmeetings.db.dao.file.FileItemDao;
 import org.apache.openmeetings.db.dao.record.RecordingDao;
 import org.apache.openmeetings.db.dto.record.RecordingContainerData;
-import org.apache.openmeetings.db.entity.file.FileItem;
+import org.apache.openmeetings.db.entity.file.BaseFileItem;
 import org.apache.openmeetings.web.common.NameDialog;
 import org.apache.openmeetings.web.common.ConfirmableAjaxBorder.ConfirmableBorderDialog;
 import org.apache.openmeetings.web.common.tree.FileTreePanel;
@@ -45,7 +45,7 @@ public class RoomFilePanel extends FileTreePanel {
 
 	@Override
 	public void updateSizes() {
-		FileExplorerItemDao dao = getBean(FileExplorerItemDao.class);
+		FileItemDao dao = getBean(FileItemDao.class);
 		RecordingContainerData sizeData = getBean(RecordingDao.class).getContainerData(getUserId());
 		long userSize = dao.getOwnSize(getUserId());
 		long roomSize = dao.getRoomSize(room.getRoom().getId());
@@ -58,7 +58,7 @@ public class RoomFilePanel extends FileTreePanel {
 	}
 
 	@Override
-	protected void update(AjaxRequestTarget target, FileItem f) {
+	protected void update(AjaxRequestTarget target, BaseFileItem f) {
 	}
 
 	@Override

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/7b5cd392/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/UploadDialog.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/UploadDialog.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/UploadDialog.java
index 67d00d6..d911d8a 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/UploadDialog.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/UploadDialog.java
@@ -29,7 +29,7 @@ import java.util.Map.Entry;
 import org.apache.openmeetings.core.data.file.FileProcessor;
 import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
 import org.apache.openmeetings.db.dao.file.FileItemLogDao;
-import org.apache.openmeetings.db.entity.file.FileExplorerItem;
+import org.apache.openmeetings.db.entity.file.BaseFileItem;
 import org.apache.openmeetings.db.entity.file.FileItem;
 import org.apache.openmeetings.util.StoredFile;
 import org.apache.openmeetings.util.process.ConverterProcessResult;
@@ -183,18 +183,18 @@ public class UploadDialog extends AbstractFormDialog<String> {
 		if (ful != null) {
 			boolean clean = cleanWb.getModelObject();
 			for (FileUpload fu : ful) {
-				FileExplorerItem f = new FileExplorerItem();
+				FileItem f = new FileItem();
 				f.setSize(fu.getSize());
 				f.setName(fu.getClientFileName());
-				FileItem parent = roomFiles.getLastSelected();
-				if (parent == null || !(parent instanceof FileExplorerItem)) {
+				BaseFileItem parent = roomFiles.getLastSelected();
+				if (parent == null || !(parent instanceof FileItem)) {
 					f.setOwnerId(getUserId());
 				} else {
 					f.setRoomId(parent.getRoomId());
 					f.setOwnerId(parent.getOwnerId());
 					f.setGroupId(parent.getGroupId());
 					if (parent.getId() != null) {
-						f.setParentId(FileItem.Type.Folder == parent.getType() ? parent.getId() : parent.getParentId());
+						f.setParentId(BaseFileItem.Type.Folder == parent.getType() ? parent.getId() : parent.getParentId());
 					}
 				}
 				f.setInsertedBy(getUserId());

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/7b5cd392/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/admin/AdminCleanupInfoDialog.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/admin/AdminCleanupInfoDialog.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/admin/AdminCleanupInfoDialog.java
index 4ebeed8..c79ac0b 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/admin/AdminCleanupInfoDialog.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/admin/AdminCleanupInfoDialog.java
@@ -30,7 +30,7 @@ import static org.apache.openmeetings.web.app.Application.getBean;
 
 import org.apache.openmeetings.cli.CleanupEntityUnit;
 import org.apache.openmeetings.cli.CleanupUnit;
-import org.apache.openmeetings.db.dao.file.FileExplorerItemDao;
+import org.apache.openmeetings.db.dao.file.FileItemDao;
 import org.apache.openmeetings.db.dao.record.RecordingDao;
 import org.apache.openmeetings.db.dao.user.UserDao;
 import org.apache.wicket.ajax.AjaxRequestTarget;
@@ -111,7 +111,7 @@ public class AdminCleanupInfoDialog extends AbstractDialog<String> {
 		profile.setDefaultModelObject(getProfileUnit(getBean(UserDao.class)));
 		imp.setDefaultModelObject(getImportUnit());
 		backup.setDefaultModelObject(getBackupUnit());
-		files.setDefaultModelObject(getFileUnit(getBean(FileExplorerItemDao.class)));
+		files.setDefaultModelObject(getFileUnit(getBean(FileItemDao.class)));
 		streamsSize.setDefaultModelObject(getHumanSize(getStreamsDir()));
 		fin.setDefaultModelObject(getRecUnit(getBean(RecordingDao.class)));
 		target.add(container);

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/7b5cd392/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingResourceReference.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingResourceReference.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingResourceReference.java
index 763d705..1dab584 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingResourceReference.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingResourceReference.java
@@ -36,7 +36,7 @@ import org.apache.openmeetings.db.dao.user.UserDao;
 import org.apache.openmeetings.db.dto.room.Whiteboard;
 import org.apache.openmeetings.db.dto.room.Whiteboards;
 import org.apache.openmeetings.db.entity.basic.Client;
-import org.apache.openmeetings.db.entity.file.FileItem.Type;
+import org.apache.openmeetings.db.entity.file.BaseFileItem.Type;
 import org.apache.openmeetings.db.entity.record.Recording;
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.web.app.WebSession;

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/7b5cd392/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingsPanel.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingsPanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingsPanel.java
index 4026398..3a351b9 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingsPanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingsPanel.java
@@ -24,7 +24,7 @@ import static org.apache.openmeetings.web.app.WebSession.getUserId;
 
 import org.apache.openmeetings.db.dao.record.RecordingDao;
 import org.apache.openmeetings.db.dto.record.RecordingContainerData;
-import org.apache.openmeetings.db.entity.file.FileItem;
+import org.apache.openmeetings.db.entity.file.BaseFileItem;
 import org.apache.openmeetings.web.app.Application;
 import org.apache.openmeetings.web.common.NameDialog;
 import org.apache.openmeetings.web.common.UserPanel;
@@ -60,7 +60,7 @@ public class RecordingsPanel extends UserPanel {
 			}
 
 			@Override
-			protected void update(AjaxRequestTarget target, FileItem f) {
+			protected void update(AjaxRequestTarget target, BaseFileItem f) {
 				video.update(target, f);
 				info.update(target, f);
 			}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/7b5cd392/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/VideoInfo.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/VideoInfo.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/VideoInfo.java
index 76fd174..387f11d 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/VideoInfo.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/VideoInfo.java
@@ -34,7 +34,7 @@ import org.apache.openmeetings.core.converter.InterviewConverter;
 import org.apache.openmeetings.core.converter.RecordingConverter;
 import org.apache.openmeetings.db.dao.record.RecordingMetaDataDao;
 import org.apache.openmeetings.db.dao.room.RoomDao;
-import org.apache.openmeetings.db.entity.file.FileItem;
+import org.apache.openmeetings.db.entity.file.BaseFileItem;
 import org.apache.openmeetings.db.entity.record.Recording;
 import org.apache.openmeetings.db.entity.record.Recording.Status;
 import org.apache.openmeetings.db.entity.record.RecordingMetaData;
@@ -132,7 +132,7 @@ public class VideoInfo extends Panel {
 		update(null, r);
 	}
 
-	public VideoInfo update(AjaxRequestTarget target, FileItem _r) {
+	public VideoInfo update(AjaxRequestTarget target, BaseFileItem _r) {
 		boolean reConvEnabled = false;
 		boolean exists = false;
 		if (_r instanceof Recording) {
@@ -198,7 +198,7 @@ public class VideoInfo extends Panel {
 
 			@Override
 			public boolean isEnabled() {
-				FileItem r = rm.getObject();
+				BaseFileItem r = rm.getObject();
 				return r != null && r.exists(EXTENSION_MP4) && !r.isReadOnly();
 			}
 

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/7b5cd392/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/VideoPlayer.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/VideoPlayer.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/VideoPlayer.java
index 5708ef5..6c3538d 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/VideoPlayer.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/VideoPlayer.java
@@ -20,7 +20,7 @@ package org.apache.openmeetings.web.user.record;
 
 import static org.apache.openmeetings.util.OmFileHelper.MP4_MIME_TYPE;
 
-import org.apache.openmeetings.db.entity.file.FileItem;
+import org.apache.openmeetings.db.entity.file.BaseFileItem;
 import org.apache.openmeetings.db.entity.record.Recording;
 import org.apache.openmeetings.web.common.MainPanel;
 import org.apache.openmeetings.web.room.RoomResourceReference;
@@ -67,7 +67,7 @@ public class VideoPlayer extends Panel {
 		update(null, null);
 	}
 
-	public VideoPlayer update(AjaxRequestTarget target, FileItem r) {
+	public VideoPlayer update(AjaxRequestTarget target, BaseFileItem r) {
 		boolean videoExists = r != null && r.exists();
 		if (videoExists) {
 			PageParameters pp = new PageParameters();

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/7b5cd392/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/FileItemResourceReference.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/FileItemResourceReference.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/FileItemResourceReference.java
index 680159d..19a061f 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/FileItemResourceReference.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/FileItemResourceReference.java
@@ -26,14 +26,14 @@ import java.io.IOException;
 
 import javax.servlet.http.HttpServletResponse;
 
-import org.apache.openmeetings.db.entity.file.FileItem;
+import org.apache.openmeetings.db.entity.file.BaseFileItem;
 import org.apache.wicket.request.resource.IResource;
 import org.apache.wicket.request.resource.IResource.Attributes;
 import org.apache.wicket.resource.FileSystemResource;
 import org.apache.wicket.resource.FileSystemResourceReference;
 import org.slf4j.Logger;
 
-public abstract class FileItemResourceReference<T extends FileItem> extends FileSystemResourceReference {
+public abstract class FileItemResourceReference<T extends BaseFileItem> extends FileSystemResourceReference {
 	private static final long serialVersionUID = 1L;
 	private static final Logger log = getLogger(FileItemResourceReference.class, webAppRootKey);
 

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/7b5cd392/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/db2_persistence.xml
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/db2_persistence.xml b/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/db2_persistence.xml
index 7f8cee6..7fa7321 100644
--- a/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/db2_persistence.xml
+++ b/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/db2_persistence.xml
@@ -24,42 +24,42 @@
 		version="2.0">
 	<persistence-unit name="openmeetings" transaction-type="RESOURCE_LOCAL">
 		<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
+		<class>org.apache.openmeetings.db.entity.basic.ChatMessage</class>
 		<class>org.apache.openmeetings.db.entity.basic.Configuration</class>
 		<class>org.apache.openmeetings.db.entity.basic.ErrorValue</class>
-		<class>org.apache.openmeetings.db.entity.server.LdapConfig</class>
 		<class>org.apache.openmeetings.db.entity.basic.MailMessage</class>
-		<class>org.apache.openmeetings.db.entity.server.Sessiondata</class>
-		<class>org.apache.openmeetings.db.entity.server.SOAPLogin</class>
 		<class>org.apache.openmeetings.db.entity.calendar.Appointment</class>
 		<class>org.apache.openmeetings.db.entity.calendar.MeetingMember</class>
 		<class>org.apache.openmeetings.db.entity.calendar.OmCalendar</class>
-		<class>org.apache.openmeetings.db.entity.basic.ChatMessage</class>
-		<class>org.apache.openmeetings.db.entity.user.Group</class>
-		<class>org.apache.openmeetings.db.entity.user.GroupUser</class>
+		<class>org.apache.openmeetings.db.entity.file.BaseFileItem</class>
+		<class>org.apache.openmeetings.db.entity.file.FileItem</class>
+		<class>org.apache.openmeetings.db.entity.file.FileItemLog</class>
+		<class>org.apache.openmeetings.db.entity.log.ConferenceLog</class>
 		<class>org.apache.openmeetings.db.entity.record.Recording</class>
 		<class>org.apache.openmeetings.db.entity.record.RecordingMetaData</class>
 		<class>org.apache.openmeetings.db.entity.record.RecordingMetaDelta</class>
 		<class>org.apache.openmeetings.db.entity.room.Invitation</class>
-		<class>org.apache.openmeetings.db.entity.log.ConferenceLog</class>
-		<class>org.apache.openmeetings.db.entity.room.RoomPoll</class>
-		<class>org.apache.openmeetings.db.entity.room.RoomPollAnswer</class>
-		<class>org.apache.openmeetings.db.entity.room.RoomModerator</class>
 		<class>org.apache.openmeetings.db.entity.room.Room</class>
-		<class>org.apache.openmeetings.db.entity.room.RoomGroup</class>
 		<class>org.apache.openmeetings.db.entity.room.RoomFile</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomGroup</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomModerator</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomPoll</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomPollAnswer</class>
 		<class>org.apache.openmeetings.db.entity.room.Whiteboard</class>
 		<class>org.apache.openmeetings.db.entity.room.WhiteboardItem</class>
+		<class>org.apache.openmeetings.db.entity.server.LdapConfig</class>
+		<class>org.apache.openmeetings.db.entity.server.OAuthServer</class>
+		<class>org.apache.openmeetings.db.entity.server.Sessiondata</class>
+		<class>org.apache.openmeetings.db.entity.server.SOAPLogin</class>
 		<class>org.apache.openmeetings.db.entity.user.Address</class>
+		<class>org.apache.openmeetings.db.entity.user.AsteriskSipUser</class>
+		<class>org.apache.openmeetings.db.entity.user.Group</class>
+		<class>org.apache.openmeetings.db.entity.user.GroupUser</class>
 		<class>org.apache.openmeetings.db.entity.user.PrivateMessage</class>
 		<class>org.apache.openmeetings.db.entity.user.PrivateMessageFolder</class>
+		<class>org.apache.openmeetings.db.entity.user.User</class>
 		<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.FileItemLog</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>
 		<exclude-unlisted-classes>false</exclude-unlisted-classes>
 		<properties>
 			<property name="openjpa.RuntimeUnenhancedClasses" value="unsupported" />

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/7b5cd392/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/derby_persistence.xml
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/derby_persistence.xml b/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/derby_persistence.xml
index 1c7eee0..20a4fc3 100644
--- a/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/derby_persistence.xml
+++ b/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/derby_persistence.xml
@@ -24,42 +24,42 @@
 		version="2.0">
 	<persistence-unit name="openmeetings" transaction-type="RESOURCE_LOCAL">
 		<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
+		<class>org.apache.openmeetings.db.entity.basic.ChatMessage</class>
 		<class>org.apache.openmeetings.db.entity.basic.Configuration</class>
 		<class>org.apache.openmeetings.db.entity.basic.ErrorValue</class>
-		<class>org.apache.openmeetings.db.entity.server.LdapConfig</class>
 		<class>org.apache.openmeetings.db.entity.basic.MailMessage</class>
-		<class>org.apache.openmeetings.db.entity.server.Sessiondata</class>
-		<class>org.apache.openmeetings.db.entity.server.SOAPLogin</class>
 		<class>org.apache.openmeetings.db.entity.calendar.Appointment</class>
 		<class>org.apache.openmeetings.db.entity.calendar.MeetingMember</class>
 		<class>org.apache.openmeetings.db.entity.calendar.OmCalendar</class>
-		<class>org.apache.openmeetings.db.entity.basic.ChatMessage</class>
-		<class>org.apache.openmeetings.db.entity.user.Group</class>
-		<class>org.apache.openmeetings.db.entity.user.GroupUser</class>
+		<class>org.apache.openmeetings.db.entity.file.BaseFileItem</class>
+		<class>org.apache.openmeetings.db.entity.file.FileItem</class>
+		<class>org.apache.openmeetings.db.entity.file.FileItemLog</class>
+		<class>org.apache.openmeetings.db.entity.log.ConferenceLog</class>
 		<class>org.apache.openmeetings.db.entity.record.Recording</class>
 		<class>org.apache.openmeetings.db.entity.record.RecordingMetaData</class>
 		<class>org.apache.openmeetings.db.entity.record.RecordingMetaDelta</class>
 		<class>org.apache.openmeetings.db.entity.room.Invitation</class>
-		<class>org.apache.openmeetings.db.entity.log.ConferenceLog</class>
-		<class>org.apache.openmeetings.db.entity.room.RoomPoll</class>
-		<class>org.apache.openmeetings.db.entity.room.RoomPollAnswer</class>
-		<class>org.apache.openmeetings.db.entity.room.RoomModerator</class>
 		<class>org.apache.openmeetings.db.entity.room.Room</class>
-		<class>org.apache.openmeetings.db.entity.room.RoomGroup</class>
 		<class>org.apache.openmeetings.db.entity.room.RoomFile</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomGroup</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomModerator</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomPoll</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomPollAnswer</class>
 		<class>org.apache.openmeetings.db.entity.room.Whiteboard</class>
 		<class>org.apache.openmeetings.db.entity.room.WhiteboardItem</class>
+		<class>org.apache.openmeetings.db.entity.server.LdapConfig</class>
+		<class>org.apache.openmeetings.db.entity.server.OAuthServer</class>
+		<class>org.apache.openmeetings.db.entity.server.Sessiondata</class>
+		<class>org.apache.openmeetings.db.entity.server.SOAPLogin</class>
 		<class>org.apache.openmeetings.db.entity.user.Address</class>
+		<class>org.apache.openmeetings.db.entity.user.AsteriskSipUser</class>
+		<class>org.apache.openmeetings.db.entity.user.Group</class>
+		<class>org.apache.openmeetings.db.entity.user.GroupUser</class>
 		<class>org.apache.openmeetings.db.entity.user.PrivateMessage</class>
 		<class>org.apache.openmeetings.db.entity.user.PrivateMessageFolder</class>
+		<class>org.apache.openmeetings.db.entity.user.User</class>
 		<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.FileItemLog</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>
 		<exclude-unlisted-classes>false</exclude-unlisted-classes>
 		<properties>
 			<property name="openjpa.RuntimeUnenhancedClasses" value="unsupported" />


[04/18] openmeetings git commit: [OPENMEETINGS-1671] DB related part of work seems to be done

Posted by so...@apache.org.
[OPENMEETINGS-1671] DB related part of work seems to be done


Project: http://git-wip-us.apache.org/repos/asf/openmeetings/repo
Commit: http://git-wip-us.apache.org/repos/asf/openmeetings/commit/7b5cd392
Tree: http://git-wip-us.apache.org/repos/asf/openmeetings/tree/7b5cd392
Diff: http://git-wip-us.apache.org/repos/asf/openmeetings/diff/7b5cd392

Branch: refs/heads/3.3.x
Commit: 7b5cd392ae57443d898cb00bb134e6acfbd6bdc5
Parents: da7a4ff
Author: Maxim Solodovnik <so...@gmail.com>
Authored: Thu Sep 14 00:16:12 2017 +0700
Committer: Maxim Solodovnik <so...@gmail.com>
Committed: Thu Sep 14 00:16:12 2017 +0700

----------------------------------------------------------------------
 .../core/converter/DocumentConverter.java       |   4 +-
 .../core/converter/FlvExplorerConverter.java    |  10 +-
 .../core/converter/ImageConverter.java          |   4 +-
 .../core/data/file/FileProcessor.java           |  11 +-
 .../LoadLibraryPresentationToObject.java        |  12 +-
 .../core/remote/ConferenceLibrary.java          |  12 +-
 .../core/remote/RecordingService.java           |   2 +-
 .../core/remote/ScopeApplicationAdapter.java    |  12 +-
 .../db/dao/file/FileExplorerItemDao.java        | 337 -----------------
 .../openmeetings/db/dao/file/FileItemDao.java   | 338 ++++++++++++++++++
 .../db/dao/file/FileItemLogDao.java             |  10 +-
 .../db/dto/file/FileExplorerItemDTO.java        | 205 -----------
 .../db/dto/file/FileExplorerObject.java         |  22 +-
 .../openmeetings/db/dto/file/FileItemDTO.java   | 205 +++++++++++
 .../db/dto/file/PresentationObject.java         |  24 +-
 .../db/entity/file/BaseFileItem.java            | 357 +++++++++++++++++++
 .../db/entity/file/FileExplorerItem.java        | 108 ------
 .../openmeetings/db/entity/file/FileItem.java   | 343 +++---------------
 .../db/entity/file/FileItemLog.java             |   2 +-
 .../db/entity/record/Recording.java             |  35 +-
 .../openmeetings/db/entity/room/Room.java       |   2 +-
 .../openmeetings/db/entity/room/RoomFile.java   |  42 ++-
 .../conference/whiteboard/dynamicFileName.lzx   |   2 +-
 .../openmeetings/backup/BackupExport.java       |   8 +-
 .../openmeetings/backup/BackupImport.java       |  38 +-
 .../java/org/apache/openmeetings/cli/Admin.java |   4 +-
 .../apache/openmeetings/cli/CleanupHelper.java  |  10 +-
 .../openmeetings/web/admin/AdminPanel.html      |  12 -
 .../openmeetings/web/admin/AdminPanel.java      |  12 +
 .../openmeetings/web/admin/rooms/RoomForm.java  |   1 +
 .../web/admin/rooms/RoomsPanel.html             |   9 +
 .../web/common/tree/ConvertingErrorsDialog.java |  12 +-
 .../web/common/tree/DownloadMenuItem.java       |  10 +-
 .../web/common/tree/FileItemPanel.java          |   8 +-
 .../web/common/tree/FileItemTree.java           |  30 +-
 .../web/common/tree/FileTreePanel.java          |  54 +--
 .../web/common/tree/FolderPanel.java            |  32 +-
 .../web/common/tree/OmTreeProvider.java         |  48 +--
 .../web/room/RoomFileResourceReference.java     |   8 +-
 .../apache/openmeetings/web/room/RoomPanel.java |  16 +-
 .../web/room/RoomPdfResourceReference.java      |   8 +-
 .../web/room/RoomResourceReference.java         |  22 +-
 .../web/room/sidebar/RoomFilePanel.java         |   8 +-
 .../web/room/sidebar/UploadDialog.java          |  10 +-
 .../dashboard/admin/AdminCleanupInfoDialog.java |   4 +-
 .../user/record/RecordingResourceReference.java |   2 +-
 .../web/user/record/RecordingsPanel.java        |   4 +-
 .../openmeetings/web/user/record/VideoInfo.java |   6 +-
 .../web/user/record/VideoPlayer.java            |   4 +-
 .../web/util/FileItemResourceReference.java     |   4 +-
 .../classes/META-INF/db2_persistence.xml        |  34 +-
 .../classes/META-INF/derby_persistence.xml      |  34 +-
 .../classes/META-INF/mssql_persistence.xml      |  34 +-
 .../classes/META-INF/mysql_persistence.xml      |  34 +-
 .../classes/META-INF/oracle_persistence.xml     |  34 +-
 .../classes/META-INF/postgresql_persistence.xml |  34 +-
 .../WEB-INF/classes/applicationContext.xml      |   2 +-
 .../test/webservice/TestFileService.java        |  14 +-
 .../openmeetings/webservice/FileWebService.java |  58 +--
 59 files changed, 1409 insertions(+), 1352 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/openmeetings/blob/7b5cd392/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/DocumentConverter.java
----------------------------------------------------------------------
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/DocumentConverter.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/DocumentConverter.java
index 499d69b..e790b6d 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/DocumentConverter.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/DocumentConverter.java
@@ -26,7 +26,7 @@ import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
 import java.io.File;
 
 import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
-import org.apache.openmeetings.db.entity.file.FileExplorerItem;
+import org.apache.openmeetings.db.entity.file.FileItem;
 import org.apache.openmeetings.util.StoredFile;
 import org.apache.openmeetings.util.process.ConverterProcessResult;
 import org.apache.openmeetings.util.process.ConverterProcessResultList;
@@ -49,7 +49,7 @@ public class DocumentConverter {
 	@Autowired
 	private ImageConverter imageConverter;
 
-	public ConverterProcessResultList convertPDF(FileExplorerItem f, StoredFile sf) throws Exception {
+	public ConverterProcessResultList convertPDF(FileItem f, StoredFile sf) throws Exception {
 		ConverterProcessResultList result = new ConverterProcessResultList();
 
 		boolean fullProcessing = !sf.isPdf();

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/7b5cd392/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/FlvExplorerConverter.java
----------------------------------------------------------------------
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/FlvExplorerConverter.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/FlvExplorerConverter.java
index 60ae550..2079be9 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/FlvExplorerConverter.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/FlvExplorerConverter.java
@@ -29,9 +29,9 @@ import java.nio.file.Path;
 import java.util.ArrayList;
 import java.util.List;
 
-import org.apache.openmeetings.db.dao.file.FileExplorerItemDao;
-import org.apache.openmeetings.db.entity.file.FileExplorerItem;
-import org.apache.openmeetings.db.entity.file.FileItem.Type;
+import org.apache.openmeetings.db.dao.file.FileItemDao;
+import org.apache.openmeetings.db.entity.file.FileItem;
+import org.apache.openmeetings.db.entity.file.BaseFileItem.Type;
 import org.apache.openmeetings.util.process.ConverterProcessResult;
 import org.apache.openmeetings.util.process.ProcessHelper;
 import org.red5.logging.Red5LoggerFactory;
@@ -43,9 +43,9 @@ public class FlvExplorerConverter extends BaseConverter {
 
 	// Spring loaded Beans
 	@Autowired
-	private FileExplorerItemDao fileDao;
+	private FileItemDao fileDao;
 
-	public List<ConverterProcessResult> convertToMP4(FileExplorerItem f, String ext) {
+	public List<ConverterProcessResult> convertToMP4(FileItem f, String ext) {
 		List<ConverterProcessResult> logs = new ArrayList<>();
 		try {
 			File mp4 = f.getFile(EXTENSION_MP4);

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/7b5cd392/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/ImageConverter.java
----------------------------------------------------------------------
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/ImageConverter.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/ImageConverter.java
index df62bb2..e9fe235 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/ImageConverter.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/ImageConverter.java
@@ -31,7 +31,7 @@ import java.io.IOException;
 
 import org.apache.commons.io.FileUtils;
 import org.apache.openmeetings.db.dao.user.UserDao;
-import org.apache.openmeetings.db.entity.file.FileItem;
+import org.apache.openmeetings.db.entity.file.BaseFileItem;
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.util.OmFileHelper;
 import org.apache.openmeetings.util.StoredFile;
@@ -48,7 +48,7 @@ public class ImageConverter extends BaseConverter {
 	@Autowired
 	private UserDao userDao;
 
-	public ConverterProcessResultList convertImage(FileItem f, StoredFile sf) throws IOException {
+	public ConverterProcessResultList convertImage(BaseFileItem f, StoredFile sf) throws IOException {
 		ConverterProcessResultList returnMap = new ConverterProcessResultList();
 
 		File jpg = f.getFile(EXTENSION_JPG);

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/7b5cd392/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/file/FileProcessor.java
----------------------------------------------------------------------
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/file/FileProcessor.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/file/FileProcessor.java
index 8c4b620..170dbbc 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/file/FileProcessor.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/file/FileProcessor.java
@@ -31,9 +31,9 @@ import java.util.UUID;
 import org.apache.openmeetings.core.converter.DocumentConverter;
 import org.apache.openmeetings.core.converter.FlvExplorerConverter;
 import org.apache.openmeetings.core.converter.ImageConverter;
-import org.apache.openmeetings.db.dao.file.FileExplorerItemDao;
-import org.apache.openmeetings.db.entity.file.FileExplorerItem;
-import org.apache.openmeetings.db.entity.file.FileItem.Type;
+import org.apache.openmeetings.db.dao.file.FileItemDao;
+import org.apache.openmeetings.db.entity.file.BaseFileItem.Type;
+import org.apache.openmeetings.db.entity.file.FileItem;
 import org.apache.openmeetings.util.StoredFile;
 import org.apache.openmeetings.util.process.ConverterProcessResult;
 import org.apache.openmeetings.util.process.ConverterProcessResultList;
@@ -48,14 +48,14 @@ public class FileProcessor {
 	@Autowired
 	private FlvExplorerConverter flvExplorerConverter;
 	@Autowired
-	private FileExplorerItemDao fileDao;
+	private FileItemDao fileDao;
 	@Autowired
 	private ImageConverter imageConverter;
 	@Autowired
 	private DocumentConverter generatePDF;
 
 	//FIXME TODO this method need to be refactored to throw exceptions
-	public ConverterProcessResultList processFile(FileExplorerItem f, InputStream is) throws Exception {
+	public ConverterProcessResultList processFile(FileItem f, InputStream is) throws Exception {
 		ConverterProcessResultList result = new ConverterProcessResultList();
 		// Generate a random string to prevent any problems with
 		// foreign characters and duplicates
@@ -136,6 +136,7 @@ public class FileProcessor {
 			result.setCompleteName(file.getName());
 			result.setFileItemId(f.getId());
 		} catch (Exception e) {
+			log.debug("Error while processing the file", e);
 			result.addItem("exception", new ConverterProcessResult("Unexpected exception: " + e.getMessage()));
 			throw e;
 		} finally {

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/7b5cd392/openmeetings-core/src/main/java/org/apache/openmeetings/core/documents/LoadLibraryPresentationToObject.java
----------------------------------------------------------------------
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/documents/LoadLibraryPresentationToObject.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/documents/LoadLibraryPresentationToObject.java
index 581d333..89ec1c5 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/documents/LoadLibraryPresentationToObject.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/documents/LoadLibraryPresentationToObject.java
@@ -21,7 +21,7 @@ package org.apache.openmeetings.core.documents;
 import java.util.Iterator;
 import java.util.LinkedList;
 
-import org.apache.openmeetings.db.dto.file.FileExplorerItemDTO;
+import org.apache.openmeetings.db.dto.file.FileItemDTO;
 import org.apache.openmeetings.db.dto.file.PresentationObject;
 import org.apache.openmeetings.util.OpenmeetingsVariables;
 import org.dom4j.Document;
@@ -81,11 +81,11 @@ public class LoadLibraryPresentationToObject {
 		}
 	}
 
-	public FileExplorerItemDTO createListObjectLibraryByFileDocument(Element fileElement){
+	public FileItemDTO createListObjectLibraryByFileDocument(Element fileElement){
 		try {
 
 			log.info("createListObjectLibraryByFileDocument"+fileElement);
-			FileExplorerItemDTO fileObject = new FileExplorerItemDTO();
+			FileItemDTO fileObject = new FileItemDTO();
 			fileObject.setName(fileElement.getText());
 			//FIXME TODO fileObject.setLastModified(fileElement.attribute("lastmod").getText());
 			//FIXME TODO fileObject.setSize(fileElement.attribute("size").getText());
@@ -96,15 +96,15 @@ public class LoadLibraryPresentationToObject {
 		return null;
 	}
 
-	public LinkedList<FileExplorerItemDTO> createListObjectLibraryByFileDocumentThumbs(Element fileElement){
+	public LinkedList<FileItemDTO> createListObjectLibraryByFileDocumentThumbs(Element fileElement){
 		try {
 
-			LinkedList<FileExplorerItemDTO> thumbMap = new LinkedList<>();
+			LinkedList<FileItemDTO> thumbMap = new LinkedList<>();
 
 			for (Iterator<Element> i = fileElement.elementIterator(); i.hasNext(); ) {
 				Element thumbElement = i.next();
 				log.info("createListObjectLibraryByFileDocumentThumbs"+thumbElement);
-				FileExplorerItemDTO singleThumb = new FileExplorerItemDTO();
+				FileItemDTO singleThumb = new FileItemDTO();
 				singleThumb.setName(thumbElement.getName());
 				//FIXME TODO singleThumb.setFileNamePure(thumbElement.getText());
 				//FIXME TODO singleThumb.setLastModified(thumbElement.attribute("lastmod").getText());

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/7b5cd392/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ConferenceLibrary.java
----------------------------------------------------------------------
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ConferenceLibrary.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ConferenceLibrary.java
index ca77ff9..da8c6c9 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ConferenceLibrary.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ConferenceLibrary.java
@@ -29,13 +29,13 @@ import org.apache.openmeetings.core.data.whiteboard.WhiteboardManager;
 import org.apache.openmeetings.core.documents.LibraryChartLoader;
 import org.apache.openmeetings.core.documents.LibraryDocumentConverter;
 import org.apache.openmeetings.core.documents.LibraryWmlLoader;
-import org.apache.openmeetings.db.dao.file.FileExplorerItemDao;
+import org.apache.openmeetings.db.dao.file.FileItemDao;
 import org.apache.openmeetings.db.dao.server.ISessionManager;
 import org.apache.openmeetings.db.dao.server.SessiondataDao;
 import org.apache.openmeetings.db.dao.user.UserDao;
-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.file.BaseFileItem;
+import org.apache.openmeetings.db.entity.file.BaseFileItem.Type;
 import org.apache.openmeetings.db.entity.room.StreamClient;
 import org.apache.openmeetings.db.entity.server.Sessiondata;
 import org.apache.openmeetings.db.util.AuthLevelUtil;
@@ -61,7 +61,7 @@ public class ConferenceLibrary implements IPendingServiceCallback {
 	@Autowired
 	private UserDao userDao;
 	@Autowired
-	private FileExplorerItemDao fileDao;
+	private FileItemDao fileDao;
 	@Autowired
 	private WhiteboardManager whiteboardManager;
 	@Autowired
@@ -92,7 +92,7 @@ public class ConferenceLibrary implements IPendingServiceCallback {
 
 				log.debug("saveAsObject" + tObject.size());
 
-				FileExplorerItem file = fileDao.add(fileName, null, null, roomId, sd.getUserId(), Type.WmlFile, "", "");
+				FileItem file = fileDao.add(fileName, null, null, roomId, sd.getUserId(), Type.WmlFile, "", "");
 				LibraryDocumentConverter.writeToLocalFolder(file.getHash(), tObject);
 
 				return file.getId();
@@ -111,7 +111,7 @@ public class ConferenceLibrary implements IPendingServiceCallback {
 	 * @param wbId - id of whiteboard
 	 * @param fi - FileItem of the Wml being loaded
 	 */
-	public void sendToWhiteboard(String uid, Long wbId, FileItem fi) {
+	public void sendToWhiteboard(String uid, Long wbId, BaseFileItem fi) {
 		StreamClient client = sessionManager.get(uid);
 		if (client == null) {
 			log.warn("No client was found to send Wml:: {}", uid);

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/7b5cd392/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/RecordingService.java
----------------------------------------------------------------------
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/RecordingService.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/RecordingService.java
index c6ebddc..a7d7985 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/RecordingService.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/RecordingService.java
@@ -36,7 +36,7 @@ import org.apache.openmeetings.db.dao.record.RecordingMetaDataDao;
 import org.apache.openmeetings.db.dao.record.RecordingMetaDeltaDao;
 import org.apache.openmeetings.db.dao.server.ISessionManager;
 import org.apache.openmeetings.db.dao.user.UserDao;
-import org.apache.openmeetings.db.entity.file.FileItem.Type;
+import org.apache.openmeetings.db.entity.file.BaseFileItem.Type;
 import org.apache.openmeetings.db.entity.record.Recording;
 import org.apache.openmeetings.db.entity.record.RecordingMetaData;
 import org.apache.openmeetings.db.entity.record.RecordingMetaData.Status;

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/7b5cd392/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ScopeApplicationAdapter.java
----------------------------------------------------------------------
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ScopeApplicationAdapter.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ScopeApplicationAdapter.java
index 47cc25e..8c28f6c 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ScopeApplicationAdapter.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ScopeApplicationAdapter.java
@@ -63,7 +63,7 @@ import org.apache.openmeetings.db.dao.user.UserDao;
 import org.apache.openmeetings.db.dto.room.BrowserStatus;
 import org.apache.openmeetings.db.dto.room.RoomStatus;
 import org.apache.openmeetings.db.entity.basic.Client;
-import org.apache.openmeetings.db.entity.file.FileItem;
+import org.apache.openmeetings.db.entity.file.BaseFileItem;
 import org.apache.openmeetings.db.entity.log.ConferenceLog;
 import org.apache.openmeetings.db.entity.room.Room;
 import org.apache.openmeetings.db.entity.room.Room.RoomElement;
@@ -1125,7 +1125,7 @@ public class ScopeApplicationAdapter extends MultiThreadedApplicationAdapter imp
 		}
 	}
 
-	private static Point getSize(FileItem fi) {
+	private static Point getSize(BaseFileItem fi) {
 		Point result = new Point(0, 0);
 		if (fi.getWidth() != null && fi.getHeight() != null) {
 			result.x = fi.getWidth();
@@ -1134,7 +1134,7 @@ public class ScopeApplicationAdapter extends MultiThreadedApplicationAdapter imp
 		return result;
 	}
 
-	private static List<?> getWbObject(FileItem fi, String url) {
+	private static List<?> getWbObject(BaseFileItem fi, String url) {
 		Point size = getSize(fi);
 		String type = "n/a";
 		switch (fi.getType()) {
@@ -1178,7 +1178,7 @@ public class ScopeApplicationAdapter extends MultiThreadedApplicationAdapter imp
 				);
 	}
 
-	private static List<?> getMp4WbObject(FileItem fi, String url) {
+	private static List<?> getMp4WbObject(BaseFileItem fi, String url) {
 		Point size = getSize(fi);
 		return Arrays.asList(
 				"flv" // 0: 'flv'
@@ -1198,7 +1198,7 @@ public class ScopeApplicationAdapter extends MultiThreadedApplicationAdapter imp
 				);
 	}
 
-	private static void copyFileToRoom(Long roomId, FileItem f) {
+	private static void copyFileToRoom(Long roomId, BaseFileItem f) {
 		try {
 			if (roomId != null && f != null) {
 				File mp4 = f.getFile(EXTENSION_MP4);
@@ -1215,7 +1215,7 @@ public class ScopeApplicationAdapter extends MultiThreadedApplicationAdapter imp
 		}
 	}
 
-	public void sendToWhiteboard(String uid, Long wbId, FileItem fi, String url, boolean clean) {
+	public void sendToWhiteboard(String uid, Long wbId, BaseFileItem fi, String url, boolean clean) {
 		StreamClient client = sessionManager.get(uid);
 
 		List<?> wbObject = new ArrayList<>();

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/7b5cd392/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileExplorerItemDao.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileExplorerItemDao.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileExplorerItemDao.java
deleted file mode 100644
index de6c582..0000000
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileExplorerItemDao.java
+++ /dev/null
@@ -1,337 +0,0 @@
-/*
- * 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.db.dao.file;
-
-import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_JPG;
-import static org.apache.openmeetings.util.OmFileHelper.thumbImagePrefix;
-import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
-
-import java.io.File;
-import java.util.Date;
-import java.util.List;
-import java.util.UUID;
-
-import javax.persistence.EntityManager;
-import javax.persistence.NoResultException;
-import javax.persistence.PersistenceContext;
-import javax.persistence.TypedQuery;
-
-import org.apache.openmeetings.db.entity.file.FileExplorerItem;
-import org.apache.openmeetings.db.entity.file.FileItem.Type;
-import org.apache.openmeetings.util.OmFileHelper;
-import org.red5.logging.Red5LoggerFactory;
-import org.slf4j.Logger;
-import org.springframework.transaction.annotation.Transactional;
-
-/**
- * @author sebastianwagner
- *
- */
-@Transactional
-public class FileExplorerItemDao {
-	private static final Logger log = Red5LoggerFactory.getLogger(FileExplorerItemDao.class, webAppRootKey);
-	@PersistenceContext
-	private EntityManager em;
-
-	public FileExplorerItem add(String fileName, Long parentId, Long ownerId, Long roomId, Long insertedBy,
-			Type type, String externalId, String externalType) {
-		log.debug(".add(): adding file " + fileName + " roomID: " + roomId);
-		try {
-			FileExplorerItem fileItem = new FileExplorerItem();
-			fileItem.setName(fileName);
-			fileItem.setHash(UUID.randomUUID().toString());
-			fileItem.setDeleted(false);
-			fileItem.setParentId(parentId);
-			fileItem.setOwnerId(ownerId);
-			fileItem.setRoomId(roomId);
-			fileItem.setInserted(new Date());
-			fileItem.setInsertedBy(insertedBy);
-			fileItem.setType(type);
-			fileItem.setUpdated(new Date());
-			fileItem.setExternalId(externalId);
-			fileItem.setExternalType(externalType);
-
-			fileItem = em.merge(fileItem);
-
-			log.debug(".add(): file " + fileName + " added as " + fileItem.getId());
-			return fileItem;
-		} catch (Exception ex2) {
-			log.error(".add(): ", ex2);
-		}
-		return null;
-	}
-
-	public List<FileExplorerItem> getFileExplorerItemsByRoomAndOwner(Long roomId, Long ownerId) {
-		log.debug(".getFileExplorerItemsByRoomAndOwner() started");
-		try {
-			TypedQuery<FileExplorerItem> query = em.createNamedQuery("getFilesByRoomAndOwner", FileExplorerItem.class);
-			query.setParameter("roomId", roomId);
-			query.setParameter("ownerId", ownerId);
-
-			List<FileExplorerItem> fileExplorerList = query.getResultList();
-
-			return fileExplorerList;
-		} catch (Exception ex2) {
-			log.error("[getFileExplorerItemsByRoomAndOwner]: ", ex2);
-		}
-		return null;
-	}
-
-	public List<FileExplorerItem> getByRoom(Long roomId) {
-		log.debug("getFileExplorerItemsByRoom roomId :: " + roomId);
-		return em.createNamedQuery("getFilesByRoom", FileExplorerItem.class).setParameter("roomId", roomId).getResultList();
-	}
-
-	public List<FileExplorerItem> getByOwner(Long ownerId) {
-		log.debug("getByOwner() started");
-		TypedQuery<FileExplorerItem> query = em.createNamedQuery("getFilesByOwner", FileExplorerItem.class);
-		query.setParameter("ownerId", ownerId);
-
-		return query.getResultList();
-	}
-
-	public List<FileExplorerItem> getByGroup(Long groupId) {
-		log.debug("getByGroup() started");
-		return em.createNamedQuery("getFileByGroup", FileExplorerItem.class)
-				.setParameter("groupId", groupId)
-				.getResultList();
-	}
-
-	public List<FileExplorerItem> getByGroup(Long groupId, List<Type> filter) {
-		if (filter == null) {
-			return getByGroup(groupId);
-		}
-		log.debug("getByGroup() started");
-		return em.createNamedQuery("getFileFilteredByGroup", FileExplorerItem.class)
-				.setParameter("filter", filter)
-				.setParameter("groupId", groupId)
-				.getResultList();
-	}
-
-	public List<FileExplorerItem> getByParent(Long parentId) {
-		log.debug("getByParent() started");
-		return em.createNamedQuery("getFilesByParent", FileExplorerItem.class)
-				.setParameter("parentId", parentId)
-				.getResultList();
-	}
-
-	public List<FileExplorerItem> getByParent(Long parentId, List<Type> filter) {
-		if (filter == null) {
-			return getByParent(parentId);
-		}
-		log.debug("getByParent(filter) started");
-		return em.createNamedQuery("getFilesFilteredByParent", FileExplorerItem.class)
-				.setParameter("filter", filter)
-				.setParameter("parentId", parentId)
-				.getResultList();
-	}
-
-	public FileExplorerItem getByHash(String hash) {
-		log.debug("getByHash() started");
-		FileExplorerItem f = null;
-		TypedQuery<FileExplorerItem> query = em.createNamedQuery("getFileByHash", FileExplorerItem.class);
-		query.setParameter("hash", hash);
-
-		try {
-			f = query.getSingleResult();
-		} catch (NoResultException ex) {
-			//no-op
-		}
-		return f;
-	}
-
-	public FileExplorerItem get(Long id) {
-		FileExplorerItem f = null;
-		if (id != null && id > 0) {
-			TypedQuery<FileExplorerItem> query = em.createNamedQuery("getFileById", FileExplorerItem.class)
-					.setParameter("id", id);
-
-			try {
-				f = query.getSingleResult();
-			} catch (NoResultException ex) {
-			}
-		} else {
-			log.info("[get] " + "Info: No id given");
-		}
-		return f;
-	}
-
-	public FileExplorerItem get(String externalId, String externalType) {
-		FileExplorerItem f = null;
-		log.debug("get started");
-
-		try {
-			TypedQuery<FileExplorerItem> query = em.createNamedQuery("getFileExternal", FileExplorerItem.class)
-					.setParameter("externalFileId", externalId).setParameter("externalType", externalType);
-
-			try {
-				f = query.getSingleResult();
-			} catch (NoResultException ex) {
-			}
-
-		} catch (Exception ex2) {
-			log.error("[get]: ", ex2);
-		}
-		return f;
-	}
-
-	public List<FileExplorerItem> get() {
-		log.debug("get started");
-
-		return em.createNamedQuery("getAllFiles", FileExplorerItem.class).getResultList();
-	}
-
-	public void delete(FileExplorerItem f) {
-		f.setDeleted(true);
-		f.setUpdated(new Date());
-
-		update(f);
-	}
-
-	public void delete(String externalId, String externalType) {
-		log.debug("delete started");
-
-		delete(get(externalId, externalType));
-	}
-
-	/**
-	 * @param id
-	 * @param name
-	 */
-	public FileExplorerItem rename(Long id, String name) {
-		log.debug("rename started");
-
-		FileExplorerItem f = get(id);
-		if (f == null) {
-			return null;
-		}
-		f.setName(name);
-		return update(f);
-	}
-
-	public FileExplorerItem update(FileExplorerItem f) {
-		if (f.getId() == null) {
-			f.setInserted(new Date());
-			em.persist(f);
-		} else {
-			f.setUpdated(new Date());
-			f = em.merge(f);
-		}
-		return f;
-	}
-
-	private void updateChilds(FileExplorerItem f) {
-		for (FileExplorerItem child : getByParent(f.getId())) {
-			child.setOwnerId(f.getOwnerId());
-			child.setRoomId(f.getRoomId());
-			update(child);
-			if (Type.Folder == f.getType()) {
-				updateChilds(child);
-			}
-		}
-	}
-
-	/**
-	 * @param id
-	 * @param newParentFileExplorerItemId
-	 * @param isOwner
-	 */
-	public FileExplorerItem move(long id, long parentId, long ownerId, long roomId) {
-		log.debug(".move() started");
-
-		FileExplorerItem f = get(id);
-		if (f == null) {
-			return null;
-		}
-
-		if (parentId < 0) {
-			if (parentId == -1) {
-				// move to personal Folder
-				f.setOwnerId(ownerId);
-				f.setRoomId(null);
-			} else {
-				// move to public room folder
-				f.setOwnerId(null);
-				f.setRoomId(roomId);
-			}
-			f.setParentId(null);
-		} else {
-			f.setParentId(parentId);
-			f.setOwnerId(null);
-		}
-		if (Type.Folder == f.getType()) {
-			updateChilds(f);
-		}
-		return update(f);
-	}
-
-	public long getOwnSize(Long userId) {
-		return getSize(getByOwner(userId));
-	}
-
-	public long getRoomSize(Long roomId) {
-		return getSize(getByRoom(roomId));
-	}
-
-	public long getSize(List<FileExplorerItem> list) {
-		long size = 0;
-		for (FileExplorerItem f : list) {
-			size += getSize(f);
-		}
-		return size;
-	}
-
-	public long getSize(FileExplorerItem f) {
-		long size = 0;
-		try {
-			if (f.exists()) {
-				File base = OmFileHelper.getUploadFilesDir();
-				if (Type.Image == f.getType()) {
-					size += f.getFile().length();
-					File thumbFile = new File(base, String.format("%s%s.%s", thumbImagePrefix, f.getHash(), EXTENSION_JPG));
-					if (thumbFile.exists()) {
-						size += thumbFile.length();
-					}
-				}
-				if (Type.Presentation == f.getType()) {
-					File tFolder = new File(base, f.getHash());
-
-					if (tFolder.exists()) {
-						size += OmFileHelper.getSize(tFolder);
-					}
-				}
-				if (Type.Video == f.getType()) {
-					size += f.getFile().length();
-					File thumb = f.getFile(EXTENSION_JPG);
-					if (thumb.exists()) {
-						size += thumb.length();
-					}
-				}
-			}
-			if (Type.Folder == f.getType()) {
-				for (FileExplorerItem child : getByParent(f.getId())) {
-					size += getSize(child);
-				}
-			}
-		} catch (Exception err) {
-			log.error("[getSize] ", err);
-		}
-		return size;
-	}
-}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/7b5cd392/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileItemDao.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileItemDao.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileItemDao.java
new file mode 100644
index 0000000..14c8ce9
--- /dev/null
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileItemDao.java
@@ -0,0 +1,338 @@
+/*
+ * 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.db.dao.file;
+
+import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_JPG;
+import static org.apache.openmeetings.util.OmFileHelper.thumbImagePrefix;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.io.File;
+import java.util.Date;
+import java.util.List;
+import java.util.UUID;
+
+import javax.persistence.EntityManager;
+import javax.persistence.NoResultException;
+import javax.persistence.PersistenceContext;
+import javax.persistence.TypedQuery;
+
+import org.apache.openmeetings.db.entity.file.BaseFileItem.Type;
+import org.apache.openmeetings.db.entity.file.FileItem;
+import org.apache.openmeetings.util.OmFileHelper;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * @author sebastianwagner
+ *
+ */
+@Transactional
+public class FileItemDao {
+	private static final Logger log = Red5LoggerFactory.getLogger(FileItemDao.class, webAppRootKey);
+	@PersistenceContext
+	private EntityManager em;
+
+	public FileItem add(String fileName, Long parentId, Long ownerId, Long roomId, Long insertedBy,
+			Type type, String externalId, String externalType) {
+		log.debug(".add(): adding file " + fileName + " roomID: " + roomId);
+		try {
+			FileItem fileItem = new FileItem();
+			fileItem.setName(fileName);
+			fileItem.setHash(UUID.randomUUID().toString());
+			fileItem.setDeleted(false);
+			fileItem.setParentId(parentId);
+			fileItem.setOwnerId(ownerId);
+			fileItem.setRoomId(roomId);
+			fileItem.setInserted(new Date());
+			fileItem.setInsertedBy(insertedBy);
+			fileItem.setType(type);
+			fileItem.setUpdated(new Date());
+			fileItem.setExternalId(externalId);
+			fileItem.setExternalType(externalType);
+
+			fileItem = em.merge(fileItem);
+
+			log.debug(".add(): file " + fileName + " added as " + fileItem.getId());
+			return fileItem;
+		} catch (Exception ex2) {
+			log.error(".add(): ", ex2);
+		}
+		return null;
+	}
+
+	public List<FileItem> getByRoomAndOwner(Long roomId, Long ownerId) {
+		log.debug(".getByRoomAndOwner() started");
+		try {
+			TypedQuery<FileItem> query = em.createNamedQuery("getFilesByRoomAndOwner", FileItem.class);
+			query.setParameter("roomId", roomId);
+			query.setParameter("ownerId", ownerId);
+
+			List<FileItem> fileExplorerList = query.getResultList();
+
+			return fileExplorerList;
+		} catch (Exception ex2) {
+			log.error("[getByRoomAndOwner]: ", ex2);
+		}
+		return null;
+	}
+
+	public List<FileItem> getByRoom(Long roomId) {
+		log.debug("getByRoom roomId :: " + roomId);
+		return em.createNamedQuery("getFilesByRoom", FileItem.class).setParameter("roomId", roomId).getResultList();
+	}
+
+	public List<FileItem> getByOwner(Long ownerId) {
+		log.debug("getByOwner() started");
+		TypedQuery<FileItem> query = em.createNamedQuery("getFilesByOwner", FileItem.class);
+		query.setParameter("ownerId", ownerId);
+
+		return query.getResultList();
+	}
+
+	public List<FileItem> getByGroup(Long groupId) {
+		log.debug("getByGroup() started");
+		return em.createNamedQuery("getFileByGroup", FileItem.class)
+				.setParameter("groupId", groupId)
+				.getResultList();
+	}
+
+	public List<FileItem> getByGroup(Long groupId, List<Type> filter) {
+		if (filter == null) {
+			return getByGroup(groupId);
+		}
+		log.debug("getByGroup() started");
+		return em.createNamedQuery("getFileFilteredByGroup", FileItem.class)
+				.setParameter("filter", filter)
+				.setParameter("groupId", groupId)
+				.getResultList();
+	}
+
+	public List<FileItem> getByParent(Long parentId) {
+		log.debug("getByParent() started");
+		return em.createNamedQuery("getFilesByParent", FileItem.class)
+				.setParameter("parentId", parentId)
+				.getResultList();
+	}
+
+	public List<FileItem> getByParent(Long parentId, List<Type> filter) {
+		if (filter == null) {
+			return getByParent(parentId);
+		}
+		log.debug("getByParent(filter) started");
+		return em.createNamedQuery("getFilesFilteredByParent", FileItem.class)
+				.setParameter("filter", filter)
+				.setParameter("parentId", parentId)
+				.getResultList();
+	}
+
+	public FileItem getByHash(String hash) {
+		log.debug("getByHash() started");
+		FileItem f = null;
+		TypedQuery<FileItem> query = em.createNamedQuery("getFileByHash", FileItem.class);
+		query.setParameter("hash", hash);
+
+		try {
+			f = query.getSingleResult();
+		} catch (NoResultException ex) {
+			//no-op
+		}
+		return f;
+	}
+
+	public FileItem get(Long id) {
+		FileItem f = null;
+		if (id != null && id > 0) {
+			TypedQuery<FileItem> query = em.createNamedQuery("getFileById", FileItem.class)
+					.setParameter("id", id);
+
+			try {
+				f = query.getSingleResult();
+			} catch (NoResultException ex) {
+			}
+		} else {
+			log.info("[get] " + "Info: No id given");
+		}
+		return f;
+	}
+
+	public FileItem get(String externalId, String externalType) {
+		FileItem f = null;
+		log.debug("get started");
+
+		try {
+			TypedQuery<FileItem> query = em.createNamedQuery("getFileExternal", FileItem.class)
+					.setParameter("externalFileId", externalId).setParameter("externalType", externalType);
+
+			try {
+				f = query.getSingleResult();
+			} catch (NoResultException ex) {
+			}
+
+		} catch (Exception ex2) {
+			log.error("[get]: ", ex2);
+		}
+		return f;
+	}
+
+	public List<FileItem> get() {
+		log.debug("get started");
+
+		return em.createNamedQuery("getAllFiles", FileItem.class).getResultList();
+	}
+
+	public void delete(FileItem f) {
+		f.setDeleted(true);
+		f.setUpdated(new Date());
+
+		update(f);
+	}
+
+	public void delete(String externalId, String externalType) {
+		log.debug("delete started");
+
+		delete(get(externalId, externalType));
+	}
+
+	/**
+	 * @param id
+	 * @param name
+	 */
+	public FileItem rename(Long id, String name) {
+		log.debug("rename started");
+
+		FileItem f = get(id);
+		if (f == null) {
+			return null;
+		}
+		f.setName(name);
+		return update(f);
+	}
+
+	public FileItem update(FileItem f) {
+		if (f.getId() == null) {
+			f.setInserted(new Date());
+			em.persist(f);
+		} else {
+			f.setUpdated(new Date());
+			f = em.merge(f);
+		}
+		return f;
+	}
+
+	private void updateChilds(FileItem f) {
+		for (FileItem child : getByParent(f.getId())) {
+			child.setOwnerId(f.getOwnerId());
+			child.setRoomId(f.getRoomId());
+			update(child);
+			if (Type.Folder == f.getType()) {
+				updateChilds(child);
+			}
+		}
+	}
+
+	/**
+	 * @param id
+	 * @param parentId
+	 * @param isOwner
+	 * @param roomId
+	 */
+	public FileItem move(long id, long parentId, long ownerId, long roomId) {
+		log.debug(".move() started");
+
+		FileItem f = get(id);
+		if (f == null) {
+			return null;
+		}
+
+		if (parentId < 0) {
+			if (parentId == -1) {
+				// move to personal Folder
+				f.setOwnerId(ownerId);
+				f.setRoomId(null);
+			} else {
+				// move to public room folder
+				f.setOwnerId(null);
+				f.setRoomId(roomId);
+			}
+			f.setParentId(null);
+		} else {
+			f.setParentId(parentId);
+			f.setOwnerId(null);
+		}
+		if (Type.Folder == f.getType()) {
+			updateChilds(f);
+		}
+		return update(f);
+	}
+
+	public long getOwnSize(Long userId) {
+		return getSize(getByOwner(userId));
+	}
+
+	public long getRoomSize(Long roomId) {
+		return getSize(getByRoom(roomId));
+	}
+
+	public long getSize(List<FileItem> list) {
+		long size = 0;
+		for (FileItem f : list) {
+			size += getSize(f);
+		}
+		return size;
+	}
+
+	public long getSize(FileItem f) {
+		long size = 0;
+		try {
+			if (f.exists()) {
+				File base = OmFileHelper.getUploadFilesDir();
+				if (Type.Image == f.getType()) {
+					size += f.getFile().length();
+					File thumbFile = new File(base, String.format("%s%s.%s", thumbImagePrefix, f.getHash(), EXTENSION_JPG));
+					if (thumbFile.exists()) {
+						size += thumbFile.length();
+					}
+				}
+				if (Type.Presentation == f.getType()) {
+					File tFolder = new File(base, f.getHash());
+
+					if (tFolder.exists()) {
+						size += OmFileHelper.getSize(tFolder);
+					}
+				}
+				if (Type.Video == f.getType()) {
+					size += f.getFile().length();
+					File thumb = f.getFile(EXTENSION_JPG);
+					if (thumb.exists()) {
+						size += thumb.length();
+					}
+				}
+			}
+			if (Type.Folder == f.getType()) {
+				for (FileItem child : getByParent(f.getId())) {
+					size += getSize(child);
+				}
+			}
+		} catch (Exception err) {
+			log.error("[getSize] ", err);
+		}
+		return size;
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/7b5cd392/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileItemLogDao.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileItemLogDao.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileItemLogDao.java
index eb2b225..652e2a3 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileItemLogDao.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileItemLogDao.java
@@ -26,7 +26,7 @@ import java.util.List;
 import javax.persistence.EntityManager;
 import javax.persistence.PersistenceContext;
 
-import org.apache.openmeetings.db.entity.file.FileItem;
+import org.apache.openmeetings.db.entity.file.BaseFileItem;
 import org.apache.openmeetings.db.entity.file.FileItemLog;
 import org.apache.openmeetings.util.process.ConverterProcessResult;
 import org.red5.logging.Red5LoggerFactory;
@@ -39,22 +39,22 @@ public class FileItemLogDao {
 	@PersistenceContext
 	private EntityManager em;
 
-	public long countErrors(FileItem f) {
+	public long countErrors(BaseFileItem f) {
 		return em.createNamedQuery("countErrorFileLogsByFile", Long.class).setParameter("fileId", f.getId())
 				.setParameter("type", f.getType()).getSingleResult();
 	}
 
-	public List<FileItemLog> get(FileItem f) {
+	public List<FileItemLog> get(BaseFileItem f) {
 		return em.createNamedQuery("getFileLogsByFile", FileItemLog.class).setParameter("fileId", f.getId())
 				.setParameter("type", f.getType()).getResultList();
 	}
 
-	public void delete(FileItem f) {
+	public void delete(BaseFileItem f) {
 		em.createNamedQuery("deleteErrorFileLogsByFile").setParameter("fileId", f.getId())
 				.setParameter("type", f.getType()).executeUpdate();
 	}
 
-	public FileItemLog add(String name, FileItem f, ConverterProcessResult returnMap) {
+	public FileItemLog add(String name, BaseFileItem f, ConverterProcessResult returnMap) {
 		log.trace("Adding log: {}, {}, {}", name, f, returnMap);
 		FileItemLog log = new FileItemLog();
 		log.setInserted(new Date());

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/7b5cd392/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/file/FileExplorerItemDTO.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/file/FileExplorerItemDTO.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/file/FileExplorerItemDTO.java
deleted file mode 100644
index 49f7b23..0000000
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/file/FileExplorerItemDTO.java
+++ /dev/null
@@ -1,205 +0,0 @@
-/*
- * 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.db.dto.file;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlRootElement;
-
-import org.apache.openmeetings.db.entity.file.FileExplorerItem;
-import org.apache.openmeetings.db.entity.file.FileItem.Type;
-
-/**
- * This Object will represent a File on the File-System
- *
- * @author sebastianwagner
- *
- */
-@XmlRootElement
-@XmlAccessorType(XmlAccessType.FIELD)
-public class FileExplorerItemDTO implements Serializable {
-	private static final long serialVersionUID = 1L;
-	private Long id;
-	private String name;
-	private String hash;
-	private Long parentId;
-	private Long roomId;
-	private Long groupId;
-	private Long ownerId;
-	private Long size;
-	private String externalId;
-	private String externalType;
-	private Type type;
-	private Integer width;
-	private Integer height;
-
-	public FileExplorerItemDTO() {}
-
-	public FileExplorerItemDTO(FileExplorerItem f) {
-		id = f.getId();
-		name = f.getName();
-		hash = f.getHash();
-		parentId = f.getParentId();
-		roomId = f.getRoomId();
-		groupId = f.getGroupId();
-		ownerId = f.getOwnerId();
-		size = f.getSize();
-		externalId = f.getExternalId();
-		externalType = f.getExternalType();
-		type = f.getType();
-		width = f.getWidth();
-		height = f.getHeight();
-	}
-
-	public FileExplorerItem get() {
-		FileExplorerItem f = new FileExplorerItem();
-		f.setId(id);
-		f.setName(name);
-		f.setHash(hash);
-		f.setParentId(parentId != null && parentId > 0 ? parentId : null);
-		f.setRoomId(roomId != null && roomId > 0 ? roomId : null);
-		f.setRoomId(groupId != null && groupId > 0 ? groupId : null);
-		f.setOwnerId(ownerId != null && ownerId > 0 ? ownerId : null);
-		f.setSize(size);
-		f.setExternalId(externalId);
-		f.setExternalType(externalType);
-		f.setType(type);
-		f.setWidth(width);
-		f.setHeight(height);
-		return f;
-	}
-
-	public Long getId() {
-		return id;
-	}
-
-	public void setId(Long id) {
-		this.id = id;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	public String getHash() {
-		return hash;
-	}
-
-	public void setHash(String hash) {
-		this.hash = hash;
-	}
-
-	public Long getParentId() {
-		return parentId;
-	}
-
-	public void setParentId(Long parentId) {
-		this.parentId = parentId;
-	}
-
-	public Long getRoomId() {
-		return roomId;
-	}
-
-	public void setRoomId(Long roomId) {
-		this.roomId = roomId;
-	}
-
-	public Long getGroupId() {
-		return groupId;
-	}
-
-	public void setGroupId(Long groupId) {
-		this.groupId = groupId;
-	}
-
-	public Long getOwnerId() {
-		return ownerId;
-	}
-
-	public void setOwnerId(Long ownerId) {
-		this.ownerId = ownerId;
-	}
-
-	public Long getSize() {
-		return size;
-	}
-
-	public void setSize(Long size) {
-		this.size = size;
-	}
-
-	public String getExternalId() {
-		return externalId;
-	}
-
-	public void setExternalId(String externalId) {
-		this.externalId = externalId;
-	}
-
-	public String getExternalType() {
-		return externalType;
-	}
-
-	public void setExternalType(String externalType) {
-		this.externalType = externalType;
-	}
-
-	public Type getType() {
-		return type;
-	}
-
-	public void setType(Type type) {
-		this.type = type;
-	}
-
-	public Integer getWidth() {
-		return width;
-	}
-
-	public void setWidth(Integer width) {
-		this.width = width;
-	}
-
-	public Integer getHeight() {
-		return height;
-	}
-
-	public void setHeight(Integer height) {
-		this.height = height;
-	}
-
-	public static List<FileExplorerItemDTO> list(List<FileExplorerItem> l) {
-		List<FileExplorerItemDTO> list = new ArrayList<>();
-		if (l != null) {
-			for (FileExplorerItem f : l) {
-				list.add(new FileExplorerItemDTO(f));
-			}
-		}
-		return list;
-	}
-}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/7b5cd392/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/file/FileExplorerObject.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/file/FileExplorerObject.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/file/FileExplorerObject.java
index d461fd8..3501183 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/file/FileExplorerObject.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/file/FileExplorerObject.java
@@ -25,7 +25,7 @@ import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
 
-import org.apache.openmeetings.db.entity.file.FileExplorerItem;
+import org.apache.openmeetings.db.entity.file.FileItem;
 
 /**
  * @author sebastianwagner
@@ -36,36 +36,36 @@ import org.apache.openmeetings.db.entity.file.FileExplorerItem;
 public class FileExplorerObject implements Serializable {
 	private static final long serialVersionUID = 1L;
 	
-	private List<FileExplorerItemDTO> userHome;
-	private List<FileExplorerItemDTO> roomHome;
+	private List<FileItemDTO> userHome;
+	private List<FileItemDTO> roomHome;
 	private Long userHomeSize;
 	private Long roomHomeSize;
 
 	public FileExplorerObject() {}
 
-	public List<FileExplorerItemDTO> getUserHome() {
+	public List<FileItemDTO> getUserHome() {
 		return userHome;
 	}
 
-	public void setUserHome(List<FileExplorerItemDTO> userHome) {
+	public void setUserHome(List<FileItemDTO> userHome) {
 		this.userHome = userHome;
 	}
 
-	public void setUser(List<FileExplorerItem> list, long size) {
-		this.userHome = FileExplorerItemDTO.list(list);
+	public void setUser(List<FileItem> list, long size) {
+		this.userHome = FileItemDTO.list(list);
 		this.userHomeSize = size;
 	}
 
-	public List<FileExplorerItemDTO> getRoomHome() {
+	public List<FileItemDTO> getRoomHome() {
 		return roomHome;
 	}
 
-	public void setRoomHome(List<FileExplorerItemDTO> roomHome) {
+	public void setRoomHome(List<FileItemDTO> roomHome) {
 		this.roomHome = roomHome;
 	}
 
-	public void setRoom(List<FileExplorerItem> list, long size) {
-		this.roomHome = FileExplorerItemDTO.list(list);
+	public void setRoom(List<FileItem> list, long size) {
+		this.roomHome = FileItemDTO.list(list);
 		this.roomHomeSize = size;
 	}
 

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/7b5cd392/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/file/FileItemDTO.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/file/FileItemDTO.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/file/FileItemDTO.java
new file mode 100644
index 0000000..563eafe
--- /dev/null
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/file/FileItemDTO.java
@@ -0,0 +1,205 @@
+/*
+ * 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.db.dto.file;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+
+import org.apache.openmeetings.db.entity.file.FileItem;
+import org.apache.openmeetings.db.entity.file.BaseFileItem.Type;
+
+/**
+ * This Object will represent a File on the File-System
+ *
+ * @author sebastianwagner
+ *
+ */
+@XmlRootElement
+@XmlAccessorType(XmlAccessType.FIELD)
+public class FileItemDTO implements Serializable {
+	private static final long serialVersionUID = 1L;
+	private Long id;
+	private String name;
+	private String hash;
+	private Long parentId;
+	private Long roomId;
+	private Long groupId;
+	private Long ownerId;
+	private Long size;
+	private String externalId;
+	private String externalType;
+	private Type type;
+	private Integer width;
+	private Integer height;
+
+	public FileItemDTO() {}
+
+	public FileItemDTO(FileItem f) {
+		id = f.getId();
+		name = f.getName();
+		hash = f.getHash();
+		parentId = f.getParentId();
+		roomId = f.getRoomId();
+		groupId = f.getGroupId();
+		ownerId = f.getOwnerId();
+		size = f.getSize();
+		externalId = f.getExternalId();
+		externalType = f.getExternalType();
+		type = f.getType();
+		width = f.getWidth();
+		height = f.getHeight();
+	}
+
+	public FileItem get() {
+		FileItem f = new FileItem();
+		f.setId(id);
+		f.setName(name);
+		f.setHash(hash);
+		f.setParentId(parentId != null && parentId > 0 ? parentId : null);
+		f.setRoomId(roomId != null && roomId > 0 ? roomId : null);
+		f.setRoomId(groupId != null && groupId > 0 ? groupId : null);
+		f.setOwnerId(ownerId != null && ownerId > 0 ? ownerId : null);
+		f.setSize(size);
+		f.setExternalId(externalId);
+		f.setExternalType(externalType);
+		f.setType(type);
+		f.setWidth(width);
+		f.setHeight(height);
+		return f;
+	}
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getHash() {
+		return hash;
+	}
+
+	public void setHash(String hash) {
+		this.hash = hash;
+	}
+
+	public Long getParentId() {
+		return parentId;
+	}
+
+	public void setParentId(Long parentId) {
+		this.parentId = parentId;
+	}
+
+	public Long getRoomId() {
+		return roomId;
+	}
+
+	public void setRoomId(Long roomId) {
+		this.roomId = roomId;
+	}
+
+	public Long getGroupId() {
+		return groupId;
+	}
+
+	public void setGroupId(Long groupId) {
+		this.groupId = groupId;
+	}
+
+	public Long getOwnerId() {
+		return ownerId;
+	}
+
+	public void setOwnerId(Long ownerId) {
+		this.ownerId = ownerId;
+	}
+
+	public Long getSize() {
+		return size;
+	}
+
+	public void setSize(Long size) {
+		this.size = size;
+	}
+
+	public String getExternalId() {
+		return externalId;
+	}
+
+	public void setExternalId(String externalId) {
+		this.externalId = externalId;
+	}
+
+	public String getExternalType() {
+		return externalType;
+	}
+
+	public void setExternalType(String externalType) {
+		this.externalType = externalType;
+	}
+
+	public Type getType() {
+		return type;
+	}
+
+	public void setType(Type type) {
+		this.type = type;
+	}
+
+	public Integer getWidth() {
+		return width;
+	}
+
+	public void setWidth(Integer width) {
+		this.width = width;
+	}
+
+	public Integer getHeight() {
+		return height;
+	}
+
+	public void setHeight(Integer height) {
+		this.height = height;
+	}
+
+	public static List<FileItemDTO> list(List<FileItem> l) {
+		List<FileItemDTO> list = new ArrayList<>();
+		if (l != null) {
+			for (FileItem f : l) {
+				list.add(new FileItemDTO(f));
+			}
+		}
+		return list;
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/7b5cd392/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/file/PresentationObject.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/file/PresentationObject.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/file/PresentationObject.java
index 88e7ebb..23285d5 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/file/PresentationObject.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/file/PresentationObject.java
@@ -26,35 +26,35 @@ import java.util.LinkedList;
  */
 public class PresentationObject {
 	
-	private FileExplorerItemDTO originalDocument;
-	private FileExplorerItemDTO pdfDocument;
-	private FileExplorerItemDTO swfDocument;
-	LinkedList<FileExplorerItemDTO> thumbs;
+	private FileItemDTO originalDocument;
+	private FileItemDTO pdfDocument;
+	private FileItemDTO swfDocument;
+	LinkedList<FileItemDTO> thumbs;
 
 	public PresentationObject() {}
 	
-	public FileExplorerItemDTO getOriginalDocument() {
+	public FileItemDTO getOriginalDocument() {
 		return originalDocument;
 	}
-	public void setOriginalDocument(FileExplorerItemDTO originalDocument) {
+	public void setOriginalDocument(FileItemDTO originalDocument) {
 		this.originalDocument = originalDocument;
 	}
-	public FileExplorerItemDTO getPdfDocument() {
+	public FileItemDTO getPdfDocument() {
 		return pdfDocument;
 	}
-	public void setPdfDocument(FileExplorerItemDTO pdfDocument) {
+	public void setPdfDocument(FileItemDTO pdfDocument) {
 		this.pdfDocument = pdfDocument;
 	}
-	public FileExplorerItemDTO getSwfDocument() {
+	public FileItemDTO getSwfDocument() {
 		return swfDocument;
 	}
-	public void setSwfDocument(FileExplorerItemDTO swfDocument) {
+	public void setSwfDocument(FileItemDTO swfDocument) {
 		this.swfDocument = swfDocument;
 	}
-	public LinkedList<FileExplorerItemDTO> getThumbs() {
+	public LinkedList<FileItemDTO> getThumbs() {
 		return thumbs;
 	}
-	public void setThumbs(LinkedList<FileExplorerItemDTO> thumbs) {
+	public void setThumbs(LinkedList<FileItemDTO> thumbs) {
 		this.thumbs = thumbs;
 	}
 	

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/7b5cd392/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/BaseFileItem.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/BaseFileItem.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/BaseFileItem.java
new file mode 100644
index 0000000..c439664
--- /dev/null
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/BaseFileItem.java
@@ -0,0 +1,357 @@
+/*
+ * 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.db.entity.file;
+
+import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_JPG;
+import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_MP4;
+import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_SWF;
+import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_WML;
+import static org.apache.openmeetings.util.OmFileHelper.getStreamsHibernateDir;
+import static org.apache.openmeetings.util.OmFileHelper.getUploadFilesDir;
+import static org.apache.openmeetings.util.OmFileHelper.getUploadWmlDir;
+
+import java.io.File;
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+import javax.xml.bind.annotation.XmlType;
+
+import org.apache.openmeetings.db.entity.IDataProviderEntity;
+import org.simpleframework.xml.Element;
+
+@Entity
+@Table(name = "file")
+@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
+public abstract class BaseFileItem implements IDataProviderEntity {
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name = "id")
+	private Long id;
+
+	@XmlType(namespace = "org.apache.openmeetings.file")
+	public enum Type {
+		// Folder need to be alphabetically first, for correct sorting
+		Folder, Image, PollChart, Presentation, Recording, Video, WmlFile
+	}
+
+	@Column(name = "name")
+	@Element(name = "fileName", data = true, required = false)
+	private String name;
+
+	@Column(name = "hash")
+	@Element(name = "fileHash", data = true, required = false)
+	private String hash;
+
+	@Column(name = "parent_item_id")
+	@Element(data = true, name = "parentFileExplorerItemId", required = false)
+	private Long parentId;
+
+	@Column(name = "room_id")
+	@Element(data = true, required = false, name = "room_id")
+	private Long roomId;
+
+	// OwnerID => only set if its directly root in Owner Directory, other Folders and Files
+	// maybe are also in a Home directory but just because their parent is
+	@Column(name = "owner_id")
+	@Element(data = true, required = false)
+	private Long ownerId;
+
+	@Column(name = "inserted_by")
+	@Element(data = true, required = false)
+	private Long insertedBy;
+
+	@Column(name = "inserted")
+	@Element(data = true, required = false)
+	private Date inserted;
+
+	@Column(name = "updated")
+	@Element(data = true, required = false)
+	private Date updated;
+
+	@Column(name = "deleted", nullable = false)
+	@Element(data = true)
+	private boolean deleted;
+
+	@Column(name = "flv_width")
+	@Element(data = true, required = false)
+	private Integer width;
+
+	@Column(name = "flv_height")
+	@Element(data = true, required = false)
+	private Integer height;
+
+	@Column(name = "type")
+	@Element(data = true, required = false)
+	@Enumerated(EnumType.STRING)
+	private Type type;
+
+	@Column(name = "group_id")
+	@Element(data = true, required = false)
+	private Long groupId;
+
+	// Not Mapped
+	@Transient
+	private List<FileItemLog> log;
+
+	@Transient
+	private boolean readOnly;
+
+	@Override
+	public Long getId() {
+		return id;
+	}
+
+	@Override
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getHash() {
+		return hash;
+	}
+
+	public void setHash(String hash) {
+		this.hash = hash;
+	}
+
+	public Long getParentId() {
+		return parentId;
+	}
+
+	public void setParentId(Long parentId) {
+		this.parentId = parentId;
+	}
+
+	public Long getRoomId() {
+		return roomId;
+	}
+
+	public void setRoomId(Long roomId) {
+		this.roomId = roomId;
+	}
+
+	public Long getOwnerId() {
+		return ownerId;
+	}
+
+	public void setOwnerId(Long ownerId) {
+		this.ownerId = ownerId;
+	}
+
+	public Long getInsertedBy() {
+		return insertedBy;
+	}
+
+	public void setInsertedBy(Long insertedBy) {
+		this.insertedBy = insertedBy;
+	}
+
+	public Date getInserted() {
+		return inserted;
+	}
+
+	public void setInserted(Date inserted) {
+		this.inserted = inserted;
+	}
+
+	public Date getUpdated() {
+		return updated;
+	}
+
+	public void setUpdated(Date updated) {
+		this.updated = updated;
+	}
+
+	public boolean isDeleted() {
+		return deleted;
+	}
+
+	public void setDeleted(boolean deleted) {
+		this.deleted = deleted;
+	}
+
+	public Integer getWidth() {
+		return width;
+	}
+
+	public void setWidth(Integer flvWidth) {
+		this.width = flvWidth;
+	}
+
+	public Integer getHeight() {
+		return height;
+	}
+
+	public void setHeight(Integer flvHeight) {
+		this.height = flvHeight;
+	}
+
+	public Type getType() {
+		return type;
+	}
+
+	public void setType(Type type) {
+		this.type = type;
+	}
+
+	public List<FileItemLog> getLog() {
+		return log;
+	}
+
+	public void setLog(List<FileItemLog> log) {
+		this.log = log;
+	}
+
+	public String getFileName(String ext) {
+		return ext == null ? name : String.format("%s.%s", name, ext);
+	}
+
+	public File getFile() {
+		return getFile(null);
+	}
+
+	public Long getGroupId() {
+		return groupId;
+	}
+
+	public void setGroupId(Long groupId) {
+		this.groupId = groupId;
+	}
+
+	public boolean isReadOnly() {
+		return readOnly;
+	}
+
+	public void setReadOnly(boolean readOnly) {
+		this.readOnly = readOnly;
+	}
+
+	public final File getFile(String ext) {
+		File f = null;
+		if (getHash() != null) {
+			File d = new File(getUploadFilesDir(), getHash());
+			switch (getType()) {
+				case WmlFile:
+					f = new File(getUploadWmlDir(), String.format("%s.%s", getHash(), ext == null ? EXTENSION_WML : ext));
+					break;
+				case Image:
+					f = new File(d, String.format("%s.%s", getHash(), ext == null ? EXTENSION_JPG : ext));
+					break;
+				case Recording:
+					f = new File(getStreamsHibernateDir(), String.format("%s.%s", getHash(), ext == null ? EXTENSION_MP4 : ext));
+					break;
+				case Video:
+					f = new File(d, String.format("%s.%s", getHash(), ext == null ? EXTENSION_MP4 : ext));
+					break;
+				case Presentation:
+					f = new File(d, String.format("%s.%s", getHash(), ext == null ? EXTENSION_SWF : ext));
+					break;
+				case PollChart:
+				case Folder:
+				default:
+			}
+		}
+		return f;
+	}
+
+	public final boolean exists() {
+		return exists(null);
+	}
+
+	public final boolean exists(String ext) {
+		if (getId() != null && !isDeleted()) {
+			File f = getFile(ext);
+			return f != null && f.exists() && f.isFile();
+		}
+		return false;
+	}
+
+	@Override
+	public int hashCode() {
+		final int prime = 31;
+		int result = 1;
+		result = prime * result + ((hash == null) ? 0 : hash.hashCode());
+		result = prime * result + ((name == null) ? 0 : name.hashCode());
+		result = prime * result + ((ownerId == null) ? 0 : ownerId.hashCode());
+		result = prime * result + ((parentId == null) ? 0 : parentId.hashCode());
+		result = prime * result + ((roomId == null) ? 0 : roomId.hashCode());
+		result = prime * result + ((type == null) ? 0 : type.hashCode());
+		return result;
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		if (this == obj)
+			return true;
+		if (obj == null)
+			return false;
+		if (getClass() != obj.getClass())
+			return false;
+		BaseFileItem other = (BaseFileItem) obj;
+		if (hash == null) {
+			if (other.hash != null)
+				return false;
+		} else if (!hash.equals(other.hash))
+			return false;
+		if (name == null) {
+			if (other.name != null)
+				return false;
+		} else if (!name.equals(other.name))
+			return false;
+		if (ownerId == null) {
+			if (other.ownerId != null)
+				return false;
+		} else if (!ownerId.equals(other.ownerId))
+			return false;
+		if (parentId == null) {
+			if (other.parentId != null)
+				return false;
+		} else if (!parentId.equals(other.parentId))
+			return false;
+		if (roomId == null) {
+			if (other.roomId != null)
+				return false;
+		} else if (!roomId.equals(other.roomId))
+			return false;
+		if (type != other.type)
+			return false;
+		return true;
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/7b5cd392/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/FileExplorerItem.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/FileExplorerItem.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/FileExplorerItem.java
deleted file mode 100644
index 10dcf0d..0000000
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/FileExplorerItem.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * 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.db.entity.file;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.NamedQueries;
-import javax.persistence.NamedQuery;
-import javax.persistence.Table;
-
-import org.simpleframework.xml.Element;
-import org.simpleframework.xml.Root;
-
-@Entity
-@NamedQueries({
-	@NamedQuery(name = "getAllFiles", query = "SELECT f FROM FileExplorerItem f ORDER BY f.id")
-	, @NamedQuery(name = "getFileById", query = "SELECT f FROM FileExplorerItem f WHERE f.id = :id")
-	, @NamedQuery(name = "getFileByHash", query = "SELECT f FROM FileExplorerItem f WHERE f.hash = :hash")
-	, @NamedQuery(name = "getFilesByRoom", query = "SELECT f FROM FileExplorerItem f WHERE f.deleted = false AND f.roomId = :roomId " +
-			"AND f.ownerId IS NULL AND f.parentId IS NULL ORDER BY f.type ASC, f.name ")
-	, @NamedQuery(name = "getFilesByOwner", query = "SELECT f FROM FileExplorerItem f WHERE f.deleted = false AND f.ownerId = :ownerId "
-			+ "AND f.parentId IS NULL ORDER BY f.type ASC, f.name ")
-	, @NamedQuery(name = "getFilesByParent", query = "SELECT f FROM FileExplorerItem f WHERE f.deleted = false "
-			+ "AND f.parentId = :parentId ORDER BY f.type ASC, f.name ")
-	, @NamedQuery(name = "getFilesFilteredByParent", query = "SELECT f FROM FileExplorerItem f WHERE f.deleted = false "
-			+ "AND f.parentId = :parentId AND f.type IN :filter ORDER BY f.type ASC, f.name ")
-	, @NamedQuery(name = "getFileExternal", query = "SELECT f FROM FileExplorerItem f WHERE f.externalId = :externalId AND f.externalType LIKE :externalType")
-	, @NamedQuery(name = "getFileByGroup", query = "SELECT f FROM FileExplorerItem f WHERE f.deleted = false AND f.ownerId IS NULL "
-			+ "AND f.groupId = :groupId AND f.parentId IS NULL "
-			+ "ORDER BY f.type ASC, f.name")
-	, @NamedQuery(name = "getFileFilteredByGroup", query = "SELECT f FROM FileExplorerItem f WHERE f.deleted = false AND f.ownerId IS NULL "
-			+ "AND f.groupId = :groupId AND f.parentId IS NULL AND f.type IN :filter "
-			+ "ORDER BY f.type ASC, f.name")
-})
-@Table(name = "fileexploreritem")
-@Root
-public class FileExplorerItem extends FileItem {
-	private static final long serialVersionUID = 1L;
-
-	@Id
-	@GeneratedValue(strategy = GenerationType.IDENTITY)
-	@Column(name = "id")
-	@Element(data = true, name = "fileExplorerItemId")
-	private Long id;
-
-	@Column(name = "filesize")
-	@Element(data = true, required = false)
-	private Long size;
-
-	@Column(name = "external_id")
-	private String externalId;
-
-	@Column(name = "external_type")
-	private String externalType;
-
-	@Override
-	public Long getId() {
-		return id;
-	}
-
-	@Override
-	public void setId(Long id) {
-		this.id = id;
-	}
-
-	public Long getSize() {
-		return size;
-	}
-
-	public void setSize(Long fileSize) {
-		this.size = fileSize;
-	}
-
-	public String getExternalId() {
-		return externalId;
-	}
-
-	public void setExternalId(String externalId) {
-		this.externalId = externalId;
-	}
-
-	public String getExternalType() {
-		return externalType;
-	}
-
-	public void setExternalType(String externalType) {
-		this.externalType = externalType;
-	}
-}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/7b5cd392/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/FileItem.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/FileItem.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/FileItem.java
index 04745e6..06e5d6e 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/FileItem.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/FileItem.java
@@ -18,317 +18,82 @@
  */
 package org.apache.openmeetings.db.entity.file;
 
-import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_JPG;
-import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_MP4;
-import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_SWF;
-import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_WML;
-import static org.apache.openmeetings.util.OmFileHelper.getStreamsHibernateDir;
-import static org.apache.openmeetings.util.OmFileHelper.getUploadFilesDir;
-import static org.apache.openmeetings.util.OmFileHelper.getUploadWmlDir;
-
-import java.io.File;
-import java.util.Date;
-import java.util.List;
-
 import javax.persistence.Column;
-import javax.persistence.EnumType;
-import javax.persistence.Enumerated;
-import javax.persistence.MappedSuperclass;
-import javax.persistence.Transient;
-import javax.xml.bind.annotation.XmlType;
+import javax.persistence.Entity;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
 
-import org.apache.openmeetings.db.entity.IDataProviderEntity;
 import org.simpleframework.xml.Element;
-
-@MappedSuperclass
-public abstract class FileItem implements IDataProviderEntity {
+import org.simpleframework.xml.Root;
+
+@Entity
+@NamedQueries({
+	@NamedQuery(name = "getAllFiles", query = "SELECT f FROM FileItem f ORDER BY f.id")
+	, @NamedQuery(name = "getFileById", query = "SELECT f FROM FileItem f WHERE f.id = :id")
+	, @NamedQuery(name = "getFileByHash", query = "SELECT f FROM FileItem f WHERE f.hash = :hash")
+	, @NamedQuery(name = "getFilesByRoom", query = "SELECT f FROM FileItem f WHERE f.deleted = false AND f.roomId = :roomId " +
+			"AND f.ownerId IS NULL AND f.parentId IS NULL ORDER BY f.type ASC, f.name ")
+	, @NamedQuery(name = "getFilesByOwner", query = "SELECT f FROM FileItem f WHERE f.deleted = false AND f.ownerId = :ownerId "
+			+ "AND f.parentId IS NULL ORDER BY f.type ASC, f.name ")
+	, @NamedQuery(name = "getFilesByParent", query = "SELECT f FROM FileItem f WHERE f.deleted = false "
+			+ "AND f.parentId = :parentId ORDER BY f.type ASC, f.name ")
+	, @NamedQuery(name = "getFilesFilteredByParent", query = "SELECT f FROM FileItem f WHERE f.deleted = false "
+			+ "AND f.parentId = :parentId AND f.type IN :filter ORDER BY f.type ASC, f.name ")
+	, @NamedQuery(name = "getFileExternal", query = "SELECT f FROM FileItem f WHERE f.externalId = :externalId AND f.externalType LIKE :externalType")
+	, @NamedQuery(name = "getFileByGroup", query = "SELECT f FROM FileItem f WHERE f.deleted = false AND f.ownerId IS NULL "
+			+ "AND f.groupId = :groupId AND f.parentId IS NULL "
+			+ "ORDER BY f.type ASC, f.name")
+	, @NamedQuery(name = "getFileFilteredByGroup", query = "SELECT f FROM FileItem f WHERE f.deleted = false AND f.ownerId IS NULL "
+			+ "AND f.groupId = :groupId AND f.parentId IS NULL AND f.type IN :filter "
+			+ "ORDER BY f.type ASC, f.name")
+})
+@Root
+public class FileItem extends BaseFileItem {
 	private static final long serialVersionUID = 1L;
 
-	@XmlType(namespace = "org.apache.openmeetings.file")
-	public enum Type {
-		// Folder need to be alphabetically first, for correct sorting
-		Folder, Image, PollChart, Presentation, Recording, Video, WmlFile
-	}
-
-	@Column(name = "name")
-	@Element(name = "fileName", data = true, required = false)
-	private String name;
-
-	@Column(name = "hash")
-	@Element(name = "fileHash", data = true, required = false)
-	private String hash;
-
-	@Column(name = "parent_item_id")
-	@Element(data = true, name = "parentFileExplorerItemId", required = false)
-	private Long parentId;
-
-	@Column(name = "room_id")
-	@Element(data = true, required = false, name = "room_id")
-	private Long roomId;
-
-	// OwnerID => only set if its directly root in Owner Directory, other Folders and Files
-	// maybe are also in a Home directory but just because their parent is
-	@Column(name = "owner_id")
-	@Element(data = true, required = false)
-	private Long ownerId;
-
-	@Column(name = "inserted_by")
-	@Element(data = true, required = false)
-	private Long insertedBy;
-
-	@Column(name = "inserted")
-	@Element(data = true, required = false)
-	private Date inserted;
-
-	@Column(name = "updated")
-	@Element(data = true, required = false)
-	private Date updated;
-
-	@Column(name = "deleted", nullable = false)
-	@Element(data = true)
-	private boolean deleted;
-
-	@Column(name = "flv_width")
-	@Element(data = true, required = false)
-	private Integer width;
-
-	@Column(name = "flv_height")
-	@Element(data = true, required = false)
-	private Integer height;
-
-	@Column(name = "type")
+	@Column(name = "filesize")
 	@Element(data = true, required = false)
-	@Enumerated(EnumType.STRING)
-	private Type type;
-
-	@Column(name = "group_id")
-	@Element(data = true, required = false)
-	private Long groupId;
-
-	// Not Mapped
-	@Transient
-	private List<FileItemLog> log;
-
-	@Transient
-	private boolean readOnly;
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	public String getHash() {
-		return hash;
-	}
-
-	public void setHash(String hash) {
-		this.hash = hash;
-	}
-
-	public Long getParentId() {
-		return parentId;
-	}
-
-	public void setParentId(Long parentId) {
-		this.parentId = parentId;
-	}
-
-	public Long getRoomId() {
-		return roomId;
-	}
-
-	public void setRoomId(Long roomId) {
-		this.roomId = roomId;
-	}
-
-	public Long getOwnerId() {
-		return ownerId;
-	}
-
-	public void setOwnerId(Long ownerId) {
-		this.ownerId = ownerId;
-	}
-
-	public Long getInsertedBy() {
-		return insertedBy;
-	}
-
-	public void setInsertedBy(Long insertedBy) {
-		this.insertedBy = insertedBy;
-	}
-
-	public Date getInserted() {
-		return inserted;
-	}
-
-	public void setInserted(Date inserted) {
-		this.inserted = inserted;
-	}
+	private Long size;
 
-	public Date getUpdated() {
-		return updated;
-	}
-
-	public void setUpdated(Date updated) {
-		this.updated = updated;
-	}
+	@Column(name = "external_id")
+	private String externalId;
 
-	public boolean isDeleted() {
-		return deleted;
-	}
-
-	public void setDeleted(boolean deleted) {
-		this.deleted = deleted;
-	}
+	@Column(name = "external_type")
+	private String externalType;
 
-	public Integer getWidth() {
-		return width;
-	}
-
-	public void setWidth(Integer flvWidth) {
-		this.width = flvWidth;
-	}
-
-	public Integer getHeight() {
-		return height;
-	}
-
-	public void setHeight(Integer flvHeight) {
-		this.height = flvHeight;
-	}
-
-	public Type getType() {
-		return type;
-	}
-
-	public void setType(Type type) {
-		this.type = type;
-	}
-
-	public List<FileItemLog> getLog() {
-		return log;
-	}
-
-	public void setLog(List<FileItemLog> log) {
-		this.log = log;
-	}
-
-	public String getFileName(String ext) {
-		return ext == null ? name : String.format("%s.%s", name, ext);
-	}
-
-	public File getFile() {
-		return getFile(null);
-	}
-
-	public Long getGroupId() {
-		return groupId;
-	}
-
-	public void setGroupId(Long groupId) {
-		this.groupId = groupId;
+	@Override
+	@Element(data = true, name = "fileExplorerItemId")
+	public Long getId() {
+		return super.getId();
 	}
 
-	public boolean isReadOnly() {
-		return readOnly;
+	@Override
+	@Element(data = true, name = "fileExplorerItemId")
+	public void setId(Long id) {
+		super.setId(id);
 	}
 
-	public void setReadOnly(boolean readOnly) {
-		this.readOnly = readOnly;
+	public Long getSize() {
+		return size;
 	}
 
-	public final File getFile(String ext) {
-		File f = null;
-		if (getHash() != null) {
-			File d = new File(getUploadFilesDir(), getHash());
-			switch (getType()) {
-				case WmlFile:
-					f = new File(getUploadWmlDir(), String.format("%s.%s", getHash(), ext == null ? EXTENSION_WML : ext));
-					break;
-				case Image:
-					f = new File(d, String.format("%s.%s", getHash(), ext == null ? EXTENSION_JPG : ext));
-					break;
-				case Recording:
-					f = new File(getStreamsHibernateDir(), String.format("%s.%s", getHash(), ext == null ? EXTENSION_MP4 : ext));
-					break;
-				case Video:
-					f = new File(d, String.format("%s.%s", getHash(), ext == null ? EXTENSION_MP4 : ext));
-					break;
-				case Presentation:
-					f = new File(d, String.format("%s.%s", getHash(), ext == null ? EXTENSION_SWF : ext));
-					break;
-				case PollChart:
-				case Folder:
-				default:
-			}
-		}
-		return f;
+	public void setSize(Long fileSize) {
+		this.size = fileSize;
 	}
 
-	public final boolean exists() {
-		return exists(null);
+	public String getExternalId() {
+		return externalId;
 	}
 
-	public final boolean exists(String ext) {
-		if (getId() != null && !isDeleted()) {
-			File f = getFile(ext);
-			return f != null && f.exists() && f.isFile();
-		}
-		return false;
+	public void setExternalId(String externalId) {
+		this.externalId = externalId;
 	}
 
-	@Override
-	public int hashCode() {
-		final int prime = 31;
-		int result = 1;
-		result = prime * result + ((hash == null) ? 0 : hash.hashCode());
-		result = prime * result + ((name == null) ? 0 : name.hashCode());
-		result = prime * result + ((ownerId == null) ? 0 : ownerId.hashCode());
-		result = prime * result + ((parentId == null) ? 0 : parentId.hashCode());
-		result = prime * result + ((roomId == null) ? 0 : roomId.hashCode());
-		result = prime * result + ((type == null) ? 0 : type.hashCode());
-		return result;
+	public String getExternalType() {
+		return externalType;
 	}
 
-	@Override
-	public boolean equals(Object obj) {
-		if (this == obj)
-			return true;
-		if (obj == null)
-			return false;
-		if (getClass() != obj.getClass())
-			return false;
-		FileItem other = (FileItem) obj;
-		if (hash == null) {
-			if (other.hash != null)
-				return false;
-		} else if (!hash.equals(other.hash))
-			return false;
-		if (name == null) {
-			if (other.name != null)
-				return false;
-		} else if (!name.equals(other.name))
-			return false;
-		if (ownerId == null) {
-			if (other.ownerId != null)
-				return false;
-		} else if (!ownerId.equals(other.ownerId))
-			return false;
-		if (parentId == null) {
-			if (other.parentId != null)
-				return false;
-		} else if (!parentId.equals(other.parentId))
-			return false;
-		if (roomId == null) {
-			if (other.roomId != null)
-				return false;
-		} else if (!roomId.equals(other.roomId))
-			return false;
-		if (type != other.type)
-			return false;
-		return true;
+	public void setExternalType(String externalType) {
+		this.externalType = externalType;
 	}
 }

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/7b5cd392/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/FileItemLog.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/FileItemLog.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/FileItemLog.java
index 2e1a0aa..dc47fba 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/FileItemLog.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/FileItemLog.java
@@ -36,7 +36,7 @@ import javax.persistence.NamedQuery;
 import javax.persistence.Table;
 
 import org.apache.openmeetings.db.entity.IDataProviderEntity;
-import org.apache.openmeetings.db.entity.file.FileItem.Type;
+import org.apache.openmeetings.db.entity.file.BaseFileItem.Type;
 
 @Entity
 @NamedQueries({

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/7b5cd392/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/record/Recording.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/record/Recording.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/record/Recording.java
index c1e13dc..e188afd 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/record/Recording.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/record/Recording.java
@@ -30,20 +30,16 @@ import javax.persistence.Entity;
 import javax.persistence.EnumType;
 import javax.persistence.Enumerated;
 import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
 import javax.persistence.JoinColumn;
 import javax.persistence.NamedQueries;
 import javax.persistence.NamedQuery;
 import javax.persistence.OneToMany;
-import javax.persistence.Table;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlType;
 
-import org.apache.openmeetings.db.entity.file.FileItem;
+import org.apache.openmeetings.db.entity.file.BaseFileItem;
 import org.simpleframework.xml.Element;
 import org.simpleframework.xml.ElementList;
 import org.simpleframework.xml.Root;
@@ -97,11 +93,10 @@ import org.simpleframework.xml.Root;
 			+ "    OR rec.roomId IN (SELECT rg.room.id FROM RoomGroup rg WHERE rg.group.id = :groupId)"
 			+ "  ) order by rec.inserted ASC")
 })
-@Table(name = "recording")
 @Root(name = "flvrecording")
 @XmlRootElement
 @XmlAccessorType(XmlAccessType.FIELD)
-public class Recording extends FileItem {
+public class Recording extends BaseFileItem {
 	private static final long serialVersionUID = 1L;
 
 	@XmlType(namespace="org.apache.openmeetings.record")
@@ -113,12 +108,6 @@ public class Recording extends FileItem {
 		, ERROR
 	}
 
-	@Id
-	@GeneratedValue(strategy = GenerationType.IDENTITY)
-	@Column(name = "id")
-	@Element(data = true, name = "flvRecordingId")
-	private Long id;
-
 	@Column(name = "comment")
 	@Element(data = true, required = false)
 	private String comment;
@@ -139,9 +128,9 @@ public class Recording extends FileItem {
 	@Element(data = true, required = false)
 	private String recorderStreamId;
 
-	@Column(name = "is_interview", nullable = false)
+	@Column(name = "is_interview")
 	@Element(data = true, required = false)
-	private boolean interview;
+	private Boolean interview = false;
 
 	@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
 	@JoinColumn(name = "recording_id")
@@ -153,18 +142,20 @@ public class Recording extends FileItem {
 	@Element(data = true, required = false)
 	private Status status = Status.NONE;
 
-	@Column(name = "notified", nullable = false)
+	@Column(name = "notified")
 	@Element(data = true, required = false)
-	private boolean notified = false;
+	private Boolean notified = false;
 
 	@Override
+	@Element(data = true, name = "flvRecordingId")
 	public Long getId() {
-		return id;
+		return super.getId();
 	}
 
 	@Override
+	@Element(data = true, name = "flvRecordingId")
 	public void setId(Long id) {
-		this.id = id;
+		super.setId(id);
 	}
 
 	public String getComment() {
@@ -216,7 +207,7 @@ public class Recording extends FileItem {
 	}
 
 	public boolean isInterview() {
-		return interview;
+		return Boolean.TRUE.equals(interview);
 	}
 
 	public void setInterview(boolean interview) {
@@ -232,7 +223,7 @@ public class Recording extends FileItem {
 	}
 
 	public boolean isNotified() {
-		return notified;
+		return Boolean.TRUE.equals(notified);
 	}
 
 	public void setNotified(boolean notified) {
@@ -241,6 +232,6 @@ public class Recording extends FileItem {
 
 	@Override
 	public String getFileName(String ext) {
-		return String.format("%s%s.%s", recordingFileName, id, ext == null ? EXTENSION_MP4 : ext);
+		return String.format("%s%s.%s", recordingFileName, getId(), ext == null ? EXTENSION_MP4 : ext);
 	}
 }


[11/18] openmeetings git commit: Merge branch '3.3.x' into OPENMEETINGS-1671-room-files

Posted by so...@apache.org.
Merge branch '3.3.x' into OPENMEETINGS-1671-room-files


Project: http://git-wip-us.apache.org/repos/asf/openmeetings/repo
Commit: http://git-wip-us.apache.org/repos/asf/openmeetings/commit/8bfe1c09
Tree: http://git-wip-us.apache.org/repos/asf/openmeetings/tree/8bfe1c09
Diff: http://git-wip-us.apache.org/repos/asf/openmeetings/diff/8bfe1c09

Branch: refs/heads/3.3.x
Commit: 8bfe1c09ee003f8f57fa6f947fc28afe1be87c6b
Parents: c17eb7c ccfeabb
Author: Maxim Solodovnik <so...@gmail.com>
Authored: Thu Sep 14 14:06:26 2017 +0700
Committer: Maxim Solodovnik <so...@gmail.com>
Committed: Thu Sep 14 14:06:26 2017 +0700

----------------------------------------------------------------------
 openmeetings-server/src/site/site.xml           |  1 +
 .../src/site/xdoc/ExternalVideo.xml             | 33 ++++++++++++++++++++
 2 files changed, 34 insertions(+)
----------------------------------------------------------------------



[08/18] openmeetings git commit: [OPENMEETINGS-1671] file selector is added to room admin

Posted by so...@apache.org.
[OPENMEETINGS-1671] file selector is added to room admin


Project: http://git-wip-us.apache.org/repos/asf/openmeetings/repo
Commit: http://git-wip-us.apache.org/repos/asf/openmeetings/commit/43792d16
Tree: http://git-wip-us.apache.org/repos/asf/openmeetings/tree/43792d16
Diff: http://git-wip-us.apache.org/repos/asf/openmeetings/diff/43792d16

Branch: refs/heads/3.3.x
Commit: 43792d16b66b5fc97829e076f853a3953432ccac
Parents: f10ba38
Author: Maxim Solodovnik <so...@gmail.com>
Authored: Thu Sep 14 13:10:22 2017 +0700
Committer: Maxim Solodovnik <so...@gmail.com>
Committed: Thu Sep 14 13:10:22 2017 +0700

----------------------------------------------------------------------
 .../openmeetings/db/dao/file/FileItemDao.java   | 21 +++++++++++
 .../db/entity/file/BaseFileItem.java            | 13 +++++++
 .../web/admin/AdminUserChoiceProvider.java      |  2 +-
 .../openmeetings/web/admin/rooms/RoomForm.java  | 37 ++++++++++++++++++--
 .../web/admin/rooms/RoomsPanel.html             |  4 +--
 5 files changed, 71 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/openmeetings/blob/43792d16/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileItemDao.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileItemDao.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileItemDao.java
index 14c8ce9..fc7f1c3 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileItemDao.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileItemDao.java
@@ -23,17 +23,21 @@ import static org.apache.openmeetings.util.OmFileHelper.thumbImagePrefix;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
 
 import java.io.File;
+import java.util.Collection;
 import java.util.Date;
 import java.util.List;
 import java.util.UUID;
+import java.util.stream.Collectors;
 
 import javax.persistence.EntityManager;
 import javax.persistence.NoResultException;
 import javax.persistence.PersistenceContext;
 import javax.persistence.TypedQuery;
 
+import org.apache.openmeetings.db.entity.file.BaseFileItem;
 import org.apache.openmeetings.db.entity.file.BaseFileItem.Type;
 import org.apache.openmeetings.db.entity.file.FileItem;
+import org.apache.openmeetings.db.entity.user.Group;
 import org.apache.openmeetings.util.OmFileHelper;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
@@ -282,6 +286,23 @@ public class FileItemDao {
 		return update(f);
 	}
 
+	public List<BaseFileItem> getAllRoomFiles(String search, int start, int count, Long roomId/*, Long ownerId*/, List<Group> groups) {
+		return em.createNamedQuery("getAllFileItemsForRoom", BaseFileItem.class)
+				.setParameter("folder", Type.Folder)
+				.setParameter("roomId", roomId)
+				.setParameter("groups", groups.stream().map(Group::getId).collect(Collectors.toList()))
+				.setParameter("name", String.format("%%%s%%", search == null ? "" : search))
+				.setFirstResult(start)
+				.setMaxResults(count)
+				.getResultList();
+	}
+
+	public List<BaseFileItem> get(Collection<String> ids) {
+		return em.createNamedQuery("getFileItemsByIds", BaseFileItem.class)
+				.setParameter("ids", ids.stream().map(Long::valueOf).collect(Collectors.toList()))
+				.getResultList();
+	}
+
 	public long getOwnSize(Long userId) {
 		return getSize(getByOwner(userId));
 	}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/43792d16/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/BaseFileItem.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/BaseFileItem.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/BaseFileItem.java
index c439664..763e636 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/BaseFileItem.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/BaseFileItem.java
@@ -39,6 +39,8 @@ import javax.persistence.GenerationType;
 import javax.persistence.Id;
 import javax.persistence.Inheritance;
 import javax.persistence.InheritanceType;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
 import javax.persistence.Table;
 import javax.persistence.Transient;
 import javax.xml.bind.annotation.XmlType;
@@ -47,6 +49,17 @@ import org.apache.openmeetings.db.entity.IDataProviderEntity;
 import org.simpleframework.xml.Element;
 
 @Entity
+@NamedQueries({
+	@NamedQuery(name = "getAllFileItemsForRoom", query = "SELECT f FROM BaseFileItem f"
+			+ " WHERE f.deleted = false AND f.type <> :folder"
+			+ " AND (f.roomId IS NULL OR f.roomId = :roomId)"
+			+ " AND (f.groupId IS NULL OR f.groupId IN :groups)"
+			//+ " AND (f.ownerId IS NULL OR f.ownerId = :ownerId)"
+			+ " AND f.name LIKE :name"
+			+ " ORDER BY f.name")
+	, @NamedQuery(name = "getFileItemsByIds", query = "SELECT f FROM BaseFileItem f"
+			+ " WHERE f.deleted = false AND f.id IN :ids)")
+})
 @Table(name = "file")
 @Inheritance(strategy = InheritanceType.SINGLE_TABLE)
 public abstract class BaseFileItem implements IDataProviderEntity {

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/43792d16/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/AdminUserChoiceProvider.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/AdminUserChoiceProvider.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/AdminUserChoiceProvider.java
index c29febf..6993bd5 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/AdminUserChoiceProvider.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/AdminUserChoiceProvider.java
@@ -31,7 +31,7 @@ import org.wicketstuff.select2.Response;
 
 public abstract class AdminUserChoiceProvider extends ChoiceProvider<User> {
 	private static final long serialVersionUID = 1L;
-	protected static int PAGE_SIZE = 20;
+	public static int PAGE_SIZE = 20;
 
 	@Override
 	public String getIdValue(User choice) {

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/43792d16/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
index 42e5b64..9a291ae 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
@@ -19,6 +19,7 @@
 package org.apache.openmeetings.web.admin.rooms;
 
 import static org.apache.openmeetings.db.util.AuthLevelUtil.hasGroupAdminLevel;
+import static org.apache.openmeetings.web.admin.AdminUserChoiceProvider.PAGE_SIZE;
 import static org.apache.openmeetings.web.app.Application.getBean;
 import static org.apache.openmeetings.web.app.WebSession.getRights;
 import static org.apache.openmeetings.web.app.WebSession.getSid;
@@ -29,11 +30,13 @@ import java.util.Arrays;
 import java.util.Collection;
 import java.util.List;
 
+import org.apache.openmeetings.db.dao.file.FileItemDao;
 import org.apache.openmeetings.db.dao.room.RoomDao;
 import org.apache.openmeetings.db.dao.server.ISessionManager;
 import org.apache.openmeetings.db.dao.user.GroupDao;
 import org.apache.openmeetings.db.dao.user.IUserManager;
 import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.file.BaseFileItem;
 import org.apache.openmeetings.db.entity.room.Room;
 import org.apache.openmeetings.db.entity.room.Room.RoomElement;
 import org.apache.openmeetings.db.entity.room.RoomGroup;
@@ -68,6 +71,7 @@ import org.apache.wicket.model.CompoundPropertyModel;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
 import org.apache.wicket.model.PropertyModel;
+import org.apache.wicket.model.util.CollectionModel;
 import org.apache.wicket.util.string.Strings;
 import org.apache.wicket.util.time.Duration;
 import org.wicketstuff.select2.ChoiceProvider;
@@ -105,6 +109,7 @@ public class RoomForm extends AdminBaseForm<Room> {
 		}
 	};
 	private IModel<User> moderator2add = Model.of((User)null);
+	private IModel<Collection<BaseFileItem>> files2add = new CollectionModel<>(new ArrayList<BaseFileItem>());
 
 	public RoomForm(String id, WebMarkupContainer roomList, final Room room) {
 		super(id, new CompoundPropertyModel<>(room));
@@ -227,9 +232,6 @@ public class RoomForm extends AdminBaseForm<Room> {
 		add(new CheckBox("filesOpened"));
 		add(new CheckBox("autoVideoSelect"));
 
-		// Users in this Room
-		add(clientsContainer.add(clients.setOutputMarkupId(true)).setOutputMarkupId(true));
-
 		// Moderators
 		final Select2Choice<User> moderatorChoice = new Select2Choice<>("moderator2add", moderator2add, new AdminUserChoiceProvider() {
 			private static final long serialVersionUID = 1L;
@@ -304,6 +306,35 @@ public class RoomForm extends AdminBaseForm<Room> {
 
 		add(new CheckBox("moderated"));
 
+		// Files
+		add(new Select2MultiChoice<>("files2add", files2add, new ChoiceProvider<BaseFileItem>() {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			public String getDisplayValue(BaseFileItem f) {
+				return f.getName();
+			}
+
+			@Override
+			public String getIdValue(BaseFileItem f) {
+				return "" + f.getId();
+			}
+
+			@Override
+			public void query(String term, int page, Response<BaseFileItem> response) {
+				response.addAll(getBean(FileItemDao.class).getAllRoomFiles(term, page * PAGE_SIZE, PAGE_SIZE, RoomForm.this.getModelObject().getId(), orgList));
+				response.setHasMore(PAGE_SIZE == response.getResults().size());
+			}
+
+			@Override
+			public Collection<BaseFileItem> toChoices(Collection<String> ids) {
+				return getBean(FileItemDao.class).get(ids);
+			}
+		}).setLabel(Model.of(getString("245"))));
+
+		// Users in this Room
+		add(clientsContainer.add(clients.setOutputMarkupId(true)).setOutputMarkupId(true));
+
 		add(new TextField<String>("confno").setEnabled(false));
 		add(pin);
 		pin.setEnabled(getModelObject().isSipEnabled());

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/43792d16/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.html
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.html
index 8631b38..c43451b 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.html
@@ -144,8 +144,8 @@
 				<fieldset class="ui-widget-content">
 					<legend class="ui-widget-header"><wicket:message key="245" /></legend>
 					<div class="formelement">
-						<label ><wicket:message key="245" /></label>
-						<div class="om-select2"><select class="input" ></select></div>
+						<label wicket:for="files2add"><wicket:message key="245" /></label>
+						<div class="om-select2"><select class="input" wicket:id="files2add"></select></div>
 					</div>
 				</fieldset>
 


[05/18] openmeetings git commit: [OPENMEETINGS-1671] header size is reduced

Posted by so...@apache.org.
[OPENMEETINGS-1671] header size is reduced


Project: http://git-wip-us.apache.org/repos/asf/openmeetings/repo
Commit: http://git-wip-us.apache.org/repos/asf/openmeetings/commit/c452a462
Tree: http://git-wip-us.apache.org/repos/asf/openmeetings/tree/c452a462
Diff: http://git-wip-us.apache.org/repos/asf/openmeetings/diff/c452a462

Branch: refs/heads/3.3.x
Commit: c452a462e704c7617f5520b74335ed8f17a82c55
Parents: 7b5cd39
Author: Maxim Solodovnik <so...@gmail.com>
Authored: Thu Sep 14 10:50:46 2017 +0700
Committer: Maxim Solodovnik <so...@gmail.com>
Committed: Thu Sep 14 10:50:46 2017 +0700

----------------------------------------------------------------------
 .../org/apache/openmeetings/web/admin/admin.js  | 10 +++++++
 .../org/apache/openmeetings/web/common/main.js  | 19 +-----------
 .../org/apache/openmeetings/web/pages/om-ga.js  | 19 +-----------
 .../web/room/activities/activities.js           | 19 +-----------
 .../org/apache/openmeetings/web/room/room.js    | 19 +-----------
 .../openmeetings/web/room/sidebar/upload.js     | 19 +-----------
 .../openmeetings/web/room/swf-functions.js      | 19 +-----------
 .../web/user/calendar/calendar-functions.js     | 22 +-------------
 .../apache/openmeetings/web/user/chat/chat.js   | 19 +-----------
 .../openmeetings/web/util/user-multi-choice.js  | 20 +------------
 .../main/webapp/js/openmeetings_functions.js    | 31 +-------------------
 11 files changed, 20 insertions(+), 196 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/openmeetings/blob/c452a462/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/admin.js
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/admin.js b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/admin.js
new file mode 100644
index 0000000..85a4f8b
--- /dev/null
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/admin.js
@@ -0,0 +1,10 @@
+/* Licensed under the Apache License, Version 2.0 (the "License") http://www.apache.org/licenses/LICENSE-2.0 */
+function adminPanelInit() {
+	if (typeof extAdminPanelInit === 'function') {
+		extAdminPanelInit();
+	}
+	let f = $('#adminForm'), t = $('#adminTable')
+		, h = $(window).height() - 5;
+	f.height(h - f.position().top);
+	t.height(h - t.position().top);
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/c452a462/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/main.js
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/main.js b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/main.js
index 9c87baf..1e20c77 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/main.js
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/main.js
@@ -1,21 +1,4 @@
-/**
- * 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.
- */
+/* Licensed under the Apache License, Version 2.0 (the "License") http://www.apache.org/licenses/LICENSE-2.0 */
 Wicket.BrowserInfo.collectExtraInfo = function(info) {
 	var l = window.location;
 	info.codebase = l.origin + l.pathname;

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/c452a462/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/om-ga.js
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/om-ga.js b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/om-ga.js
index a3226af..43b33e3 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/om-ga.js
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/om-ga.js
@@ -1,21 +1,4 @@
-/*
- * 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.
- */
+/* Licensed under the Apache License, Version 2.0 (the "License") http://www.apache.org/licenses/LICENSE-2.0 */
 (function(i,s,o,g,r,a,m){
 	i['GoogleAnalyticsObject']=r;
 	i[r]=i[r]||function(){

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/c452a462/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/activities.js
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/activities.js b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/activities.js
index fd8162d..7bf6281 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/activities.js
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/activities.js
@@ -1,21 +1,4 @@
-/**
- * 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.
- */
+/* Licensed under the Apache License, Version 2.0 (the "License") http://www.apache.org/licenses/LICENSE-2.0 */
 var Activities = function() {
 	var closedHeight = "20px", openedHeight = "345px";
 

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/c452a462/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js
index aa81d89..8b4c25a 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js
@@ -1,21 +1,4 @@
-/**
- * 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.
- */
+/* Licensed under the Apache License, Version 2.0 (the "License") http://www.apache.org/licenses/LICENSE-2.0 */
 function setRoomSizes() {
 	var sb = $(".room.sidebar.left")
 		, w = $(window).width() - sb.width() - 8

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/c452a462/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/upload.js
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/upload.js b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/upload.js
index 8c3688b..e6bd354 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/upload.js
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/upload.js
@@ -1,21 +1,4 @@
-/**
- * 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.
- */
+/* Licensed under the Apache License, Version 2.0 (the "License") http://www.apache.org/licenses/LICENSE-2.0 */
 function bindUpload(markupId, hiddenId) {
 	var fi = $('#' + markupId + ' .fileinput');
 	if (!fi.eventAdded) {

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/c452a462/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/swf-functions.js
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/swf-functions.js b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/swf-functions.js
index 90f952e..bf30645 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/swf-functions.js
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/swf-functions.js
@@ -1,21 +1,4 @@
-/*
- * 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.
- */
+/* Licensed under the Apache License, Version 2.0 (the "License") http://www.apache.org/licenses/LICENSE-2.0 */
 var labels
 function initSwf(_options) {
 	var options = $.extend({

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/c452a462/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/calendar-functions.js
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/calendar-functions.js b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/calendar-functions.js
index 86ec265..825f4c7 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/calendar-functions.js
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/calendar-functions.js
@@ -1,24 +1,4 @@
-/*
- * 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.
- */
-/**
- * @author Sebastien Briquet
- */
+/* Licensed under the Apache License, Version 2.0 (the "License") http://www.apache.org/licenses/LICENSE-2.0 */
 function getCalendarHeight() {
 	return $(window).height() - $('#${markupId}').position().top - 20;
 }

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/c452a462/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/chat.js
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/chat.js b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/chat.js
index 0c0c417..61404a4 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/chat.js
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/chat.js
@@ -1,21 +1,4 @@
-/**
- * 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.
- */
+/* Licensed under the Apache License, Version 2.0 (the "License") http://www.apache.org/licenses/LICENSE-2.0 */
 var Chat = function() {
 	var chatTabs
 		, tabTemplate = "<li><a href='#{href}'>#{label}</a></li>"

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/c452a462/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/user-multi-choice.js
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/user-multi-choice.js b/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/user-multi-choice.js
index de43cb3..3c7cee6 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/user-multi-choice.js
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/user-multi-choice.js
@@ -1,25 +1,7 @@
-/*
- * 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.
- */
+/* Licensed under the Apache License, Version 2.0 (the "License") http://www.apache.org/licenses/LICENSE-2.0 */
 function formatOmUser(user) {
 	return "<span class='user " + (user.contact ? "external" : "internal") + "' >" + user.text + "</span>";
 }
-
 function escapeOmUserMarkup(m) {
 	return m;
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/c452a462/openmeetings-web/src/main/webapp/js/openmeetings_functions.js
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/webapp/js/openmeetings_functions.js b/openmeetings-web/src/main/webapp/js/openmeetings_functions.js
index 09b3fc5..0fc5a70 100644
--- a/openmeetings-web/src/main/webapp/js/openmeetings_functions.js
+++ b/openmeetings-web/src/main/webapp/js/openmeetings_functions.js
@@ -1,52 +1,24 @@
-/*
-  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.
-  
-*/
-/*
- * Functions to be included in the HTML wrapper,
- * see the templates dir (*.vm) for the include statements
- *  
- */ 
-
+/* Licensed under the Apache License, Version 2.0 (the "License") http://www.apache.org/licenses/LICENSE-2.0 */
 function getBrowserInfo() {
 	//alert(navigator.userAgent);
 	document.getElementById("lzapp").getBrowserInfoCallback(navigator.userAgent);
 }
-
 function getBrowserLang() {
 	//alert(navigator.userAgent);
 	document.getElementById("lzapp").getBrowserLangCallback(navigator.language);
 }
-
 function redirectToUrl(url) {
 	//alert(navigator.userAgent);
 	window.location = url;
 	
 	document.getElementById("lzapp").redirectToUrlCallback("ok");
 }
-
 function loadingComplete() {
 	document.getElementById("swfloading").style.display = 'none';
 	var lzApp = document.getElementById("lzappContainer");
 	lzApp.style.width = '100%';
 	lzApp.style.height = '100%';
 }
-
 function getTimeZoneOffsetMinutes() {
 	var rightNow = new Date(), std_time_offset = -rightNow.getTimezoneOffset();
 	for (var i = 0; i < 12; ++i) {
@@ -58,7 +30,6 @@ function getTimeZoneOffsetMinutes() {
 	}
 	return std_time_offset;
 }
-
 function getTimeZoneOffset() {
 	document.getElementById("lzapp").getTimeZoneOffsetCallback(getTimeZoneOffsetMinutes()/60);
 }


[06/18] openmeetings git commit: Merge branch '3.3.x' into OPENMEETINGS-1671-room-files

Posted by so...@apache.org.
Merge branch '3.3.x' into OPENMEETINGS-1671-room-files


Project: http://git-wip-us.apache.org/repos/asf/openmeetings/repo
Commit: http://git-wip-us.apache.org/repos/asf/openmeetings/commit/0a058f6b
Tree: http://git-wip-us.apache.org/repos/asf/openmeetings/tree/0a058f6b
Diff: http://git-wip-us.apache.org/repos/asf/openmeetings/diff/0a058f6b

Branch: refs/heads/3.3.x
Commit: 0a058f6ba3eb0643bebad32cb039037a1843688d
Parents: c452a46 78078ea
Author: Maxim Solodovnik <so...@gmail.com>
Authored: Thu Sep 14 11:26:52 2017 +0700
Committer: Maxim Solodovnik <so...@gmail.com>
Committed: Thu Sep 14 11:26:52 2017 +0700

----------------------------------------------------------------------
 .../org/apache/openmeetings/web/room/SwfPanel.html  | 16 ----------------
 .../java/org/apache/openmeetings/web/room/room.js   |  4 ++++
 2 files changed, 4 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/openmeetings/blob/0a058f6b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js
----------------------------------------------------------------------
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js
index 8b4c25a,4f89d2f..75275db
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js
@@@ -1,4 -1,22 +1,5 @@@
 -/**
 - * 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.
 - */
 +/* Licensed under the Apache License, Version 2.0 (the "License") http://www.apache.org/licenses/LICENSE-2.0 */
+ var HtmlOverflow;
  function setRoomSizes() {
  	var sb = $(".room.sidebar.left")
  		, w = $(window).width() - sb.width() - 8


[16/18] openmeetings git commit: [OPENMEETINGS-1671] import/export seems to work

Posted by so...@apache.org.
[OPENMEETINGS-1671] import/export seems to work


Project: http://git-wip-us.apache.org/repos/asf/openmeetings/repo
Commit: http://git-wip-us.apache.org/repos/asf/openmeetings/commit/6eec97dc
Tree: http://git-wip-us.apache.org/repos/asf/openmeetings/tree/6eec97dc
Diff: http://git-wip-us.apache.org/repos/asf/openmeetings/diff/6eec97dc

Branch: refs/heads/3.3.x
Commit: 6eec97dced3a938e9c216b3068f106fb7d8656b9
Parents: 541bb1d
Author: Maxim Solodovnik <so...@gmail.com>
Authored: Fri Sep 15 23:00:21 2017 +0700
Committer: Maxim Solodovnik <so...@gmail.com>
Committed: Fri Sep 15 23:00:21 2017 +0700

----------------------------------------------------------------------
 .../apache/openmeetings/backup/AppointmentConverter.java | 10 +++++-----
 .../org/apache/openmeetings/backup/BackupImport.java     | 11 +++++++++--
 .../openmeetings/backup/BaseFileItemConverter.java       |  4 ++--
 .../org/apache/openmeetings/backup/DateConverter.java    |  2 +-
 .../org/apache/openmeetings/backup/GroupConverter.java   | 10 +++++-----
 .../apache/openmeetings/backup/PollTypeConverter.java    |  4 ++--
 .../org/apache/openmeetings/backup/RoomConverter.java    |  8 ++++----
 .../apache/openmeetings/backup/RoomTypeConverter.java    |  4 ++--
 .../apache/openmeetings/backup/SalutationConverter.java  |  2 +-
 .../org/apache/openmeetings/backup/UserConverter.java    | 10 +++++-----
 10 files changed, 36 insertions(+), 29 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/openmeetings/blob/6eec97dc/openmeetings-install/src/main/java/org/apache/openmeetings/backup/AppointmentConverter.java
----------------------------------------------------------------------
diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/AppointmentConverter.java b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/AppointmentConverter.java
index 79ee837..c219331 100644
--- a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/AppointmentConverter.java
+++ b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/AppointmentConverter.java
@@ -28,21 +28,21 @@ import org.simpleframework.xml.stream.OutputNode;
 public class AppointmentConverter extends OmConverter<Appointment> {
 	private AppointmentDao appointmentDao;
 	private Map<Long, Long> idMap;
-	
+
 	public AppointmentConverter() {
 		//default constructor is for export
 	}
-	
+
 	public AppointmentConverter(AppointmentDao appointmentDao, Map<Long, Long> idMap) {
 		this.appointmentDao = appointmentDao;
 		this.idMap = idMap;
 	}
-	
+
 	@Override
 	public Appointment read(InputNode node) throws Exception {
 		long oldId = getLong(node);
 		Long newId = idMap.containsKey(oldId) ? idMap.get(oldId) : oldId;
-		
+
 		Appointment a = appointmentDao.getAny(newId);
 		return a == null ? new Appointment() : a;
 	}
@@ -52,4 +52,4 @@ public class AppointmentConverter extends OmConverter<Appointment> {
 		node.setData(true);
 		node.setValue(value == null ? "0" : "" + value.getId());
 	}
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/6eec97dc/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupImport.java
----------------------------------------------------------------------
diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupImport.java b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupImport.java
index 14d60a5..414bb50 100644
--- a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupImport.java
+++ b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupImport.java
@@ -716,9 +716,16 @@ public class BackupImport {
 
 			registry.bind(BaseFileItem.class, new BaseFileItemConverter(fileItemDao, fileItemMap));
 
-			List<RoomFile> list = readList(serializer, f, "roomFiles.xml", "RoomFiles", RoomFile.class);
+			List<RoomFile> list = readList(serializer, f, "roomFiles.xml", "RoomFiles", RoomFile.class, true);
 			for (RoomFile rf : list) {
-				int i = 0;
+				Room r = roomDao.get(roomMap.get(rf.getRoomId()));
+				if (r.getFiles() == null) {
+					r.setFiles(new ArrayList<>());
+				}
+				rf.setId(null);
+				rf.setRoomId(r.getId());
+				r.getFiles().add(rf);
+				roomDao.update(r, null);
 			}
 		}
 

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/6eec97dc/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BaseFileItemConverter.java
----------------------------------------------------------------------
diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BaseFileItemConverter.java b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BaseFileItemConverter.java
index 3e0cb41..def8fa5 100644
--- a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BaseFileItemConverter.java
+++ b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BaseFileItemConverter.java
@@ -51,7 +51,7 @@ public class BaseFileItemConverter extends OmConverter<BaseFileItem> {
 	@Override
 	public void write(OutputNode node, BaseFileItem value) throws Exception {
 		node.setData(true);
-		node.setAttribute("type", Long.class.getCanonicalName());
+		node.getAttributes().forEach(name -> node.getAttributes().remove(name));
 		node.setValue(value == null ? "0" : "" + value.getId());
 	}
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/6eec97dc/openmeetings-install/src/main/java/org/apache/openmeetings/backup/DateConverter.java
----------------------------------------------------------------------
diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/DateConverter.java b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/DateConverter.java
index 7f3967d..7066ce9 100644
--- a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/DateConverter.java
+++ b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/DateConverter.java
@@ -38,4 +38,4 @@ public class DateConverter implements Converter<Date> {
 		node.setData(true);
 		node.setValue(value == null ? "0" : CalendarPatterns.getExportDate(value));
 	}
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/6eec97dc/openmeetings-install/src/main/java/org/apache/openmeetings/backup/GroupConverter.java
----------------------------------------------------------------------
diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/GroupConverter.java b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/GroupConverter.java
index 67c363b..7a07fe8 100644
--- a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/GroupConverter.java
+++ b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/GroupConverter.java
@@ -28,21 +28,21 @@ import org.simpleframework.xml.stream.OutputNode;
 public class GroupConverter extends OmConverter<Group> {
 	private GroupDao groupDao;
 	private Map<Long, Long> idMap;
-	
+
 	public GroupConverter() {
 		//default constructor is for export
 	}
-	
+
 	public GroupConverter(GroupDao groupDao, Map<Long, Long> idMap) {
 		this.groupDao = groupDao;
 		this.idMap = idMap;
 	}
-	
+
 	@Override
 	public Group read(InputNode node) throws Exception {
 		long oldId = getLong(node);
 		long newId = idMap.containsKey(oldId) ? idMap.get(oldId) : oldId;
-		
+
 		Group o = groupDao.get(newId);
 		return o == null ? new Group() : o;
 	}
@@ -52,4 +52,4 @@ public class GroupConverter extends OmConverter<Group> {
 		node.setData(true);
 		node.setValue(value == null ? "0" : "" + value.getId());
 	}
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/6eec97dc/openmeetings-install/src/main/java/org/apache/openmeetings/backup/PollTypeConverter.java
----------------------------------------------------------------------
diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/PollTypeConverter.java b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/PollTypeConverter.java
index 365904d..d627139 100644
--- a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/PollTypeConverter.java
+++ b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/PollTypeConverter.java
@@ -24,7 +24,7 @@ import org.simpleframework.xml.stream.OutputNode;
 
 public class PollTypeConverter extends OmConverter<RoomPoll.Type> {
 	public PollTypeConverter() {}
-	
+
 	@Override
 	public RoomPoll.Type read(InputNode node) throws Exception {
 		return RoomPoll.Type.get(getLong(node));
@@ -35,4 +35,4 @@ public class PollTypeConverter extends OmConverter<RoomPoll.Type> {
 		node.setData(true);
 		node.setValue(value == null ? "0" : "" + value.getId());
 	}
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/6eec97dc/openmeetings-install/src/main/java/org/apache/openmeetings/backup/RoomConverter.java
----------------------------------------------------------------------
diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/RoomConverter.java b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/RoomConverter.java
index 20ccba1..a47c036 100644
--- a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/RoomConverter.java
+++ b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/RoomConverter.java
@@ -28,16 +28,16 @@ import org.simpleframework.xml.stream.OutputNode;
 public class RoomConverter extends OmConverter<Room> {
 	private RoomDao roomDao;
 	private Map<Long, Long> idMap;
-	
+
 	public RoomConverter() {
 		//default constructor is for export
 	}
-	
+
 	public RoomConverter(RoomDao roomDao, Map<Long, Long> idMap) {
 		this.roomDao = roomDao;
 		this.idMap = idMap;
 	}
-	
+
 	@Override
 	public Room read(InputNode node) throws Exception {
 		long oldId = getLong(node);
@@ -52,4 +52,4 @@ public class RoomConverter extends OmConverter<Room> {
 		node.setData(true);
 		node.setValue(value == null ? "0" : "" + value.getId());
 	}
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/6eec97dc/openmeetings-install/src/main/java/org/apache/openmeetings/backup/RoomTypeConverter.java
----------------------------------------------------------------------
diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/RoomTypeConverter.java b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/RoomTypeConverter.java
index a6f8f5b..b5f3543 100644
--- a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/RoomTypeConverter.java
+++ b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/RoomTypeConverter.java
@@ -24,7 +24,7 @@ import org.simpleframework.xml.stream.OutputNode;
 
 public class RoomTypeConverter extends OmConverter<Type> {
 	public RoomTypeConverter() {}
-	
+
 	@Override
 	public Type read(InputNode node) throws Exception {
 		return Type.get(getInt(node));
@@ -35,4 +35,4 @@ public class RoomTypeConverter extends OmConverter<Type> {
 		node.setData(true);
 		node.setValue(value == null ? "0" : "" + value.getId());
 	}
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/6eec97dc/openmeetings-install/src/main/java/org/apache/openmeetings/backup/SalutationConverter.java
----------------------------------------------------------------------
diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/SalutationConverter.java b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/SalutationConverter.java
index 59e680a..7824802 100644
--- a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/SalutationConverter.java
+++ b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/SalutationConverter.java
@@ -33,4 +33,4 @@ public class SalutationConverter extends OmConverter<Salutation> {
 		node.setData(true);
 		node.setValue(value == null ? "0" : "" + value.getId());
 	}
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/6eec97dc/openmeetings-install/src/main/java/org/apache/openmeetings/backup/UserConverter.java
----------------------------------------------------------------------
diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/UserConverter.java b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/UserConverter.java
index 696bd8c..4853efa 100644
--- a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/UserConverter.java
+++ b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/UserConverter.java
@@ -28,21 +28,21 @@ import org.simpleframework.xml.stream.OutputNode;
 public class UserConverter extends OmConverter<User> {
 	private UserDao userDao;
 	private Map<Long, Long> idMap;
-	
+
 	public UserConverter() {
 		//default constructor is for export
 	}
-	
+
 	public UserConverter(UserDao userDao, Map<Long, Long> idMap) {
 		this.userDao = userDao;
 		this.idMap = idMap;
 	}
-	
+
 	@Override
 	public User read(InputNode node) throws Exception {
 		long oldId = getLong(node);
 		Long newId = idMap.containsKey(oldId) ? idMap.get(oldId) : oldId;
-		
+
 		User u = userDao.get(newId);
 		return u == null ? new User() : u;
 	}
@@ -52,4 +52,4 @@ public class UserConverter extends OmConverter<User> {
 		node.setData(true);
 		node.setValue(value == null ? "0" : "" + value.getId());
 	}
-}
\ No newline at end of file
+}


[15/18] openmeetings git commit: [OPENMEETINGS-1671] initial work on export/import

Posted by so...@apache.org.
[OPENMEETINGS-1671] initial work on export/import


Project: http://git-wip-us.apache.org/repos/asf/openmeetings/repo
Commit: http://git-wip-us.apache.org/repos/asf/openmeetings/commit/541bb1dc
Tree: http://git-wip-us.apache.org/repos/asf/openmeetings/tree/541bb1dc
Diff: http://git-wip-us.apache.org/repos/asf/openmeetings/diff/541bb1dc

Branch: refs/heads/3.3.x
Commit: 541bb1dc4f4ed73195409de2ba86d241823b4a3d
Parents: ffacf2e
Author: Maxim Solodovnik <so...@gmail.com>
Authored: Fri Sep 15 18:45:34 2017 +0700
Committer: Maxim Solodovnik <so...@gmail.com>
Committed: Fri Sep 15 18:45:34 2017 +0700

----------------------------------------------------------------------
 .../openmeetings/db/dao/room/RoomDao.java       |  8 ++-
 .../openmeetings/db/entity/room/Room.java       |  3 +-
 .../openmeetings/db/entity/room/RoomFile.java   |  6 +++
 .../openmeetings/db/entity/room/RoomGroup.java  | 10 ++--
 .../openmeetings/backup/BackupExport.java       | 15 ++++++
 .../openmeetings/backup/BackupImport.java       | 34 ++++++++++--
 .../backup/BaseFileItemConverter.java           | 57 ++++++++++++++++++++
 .../openmeetings/web/admin/rooms/RoomForm.java  |  9 ++--
 8 files changed, 126 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/openmeetings/blob/541bb1dc/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/RoomDao.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/RoomDao.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/RoomDao.java
index 6dd79a8..5bf22a1 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/RoomDao.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/RoomDao.java
@@ -43,6 +43,7 @@ import org.apache.openmeetings.db.dao.user.UserDao;
 import org.apache.openmeetings.db.entity.log.ConferenceLog;
 import org.apache.openmeetings.db.entity.room.Room;
 import org.apache.openmeetings.db.entity.room.Room.Type;
+import org.apache.openmeetings.db.entity.room.RoomFile;
 import org.apache.openmeetings.db.util.TimezoneUtil;
 import org.apache.openmeetings.util.DaoHelper;
 import org.red5.logging.Red5LoggerFactory;
@@ -103,7 +104,7 @@ public class RoomDao implements IGroupAdminDataProviderDao<Room> {
 			TypedQuery<Room> q = oem.createNamedQuery("getBackupRooms", Room.class);
 			@SuppressWarnings("unchecked")
 			OpenJPAQuery<Room> kq = OpenJPAPersistence.cast(q);
-			kq.getFetchPlan().addFetchGroups("roomModerators", "roomGroups");
+			kq.getFetchPlan().addFetchGroups("roomModerators", "roomGroups", "roomFiles");
 			return kq.getResultList();
 		} finally {
 			oem.getFetchPlan().setQueryResultCacheEnabled(qrce);
@@ -312,4 +313,9 @@ public class RoomDao implements IGroupAdminDataProviderDao<Room> {
 		}
 		return result;
 	}
+
+	public List<RoomFile> getFiles() {
+		return em.createQuery("SELECT rf FROM RoomFile rf", RoomFile.class)
+				.getResultList();
+	}
 }

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/541bb1dc/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java
index 087a446..9bc7134 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java
@@ -281,7 +281,7 @@ public class Room implements IDataProviderEntity {
 	@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
 	@JoinColumn(name = "roomId")
 	@ForeignKey(enabled = true)
-	@ElementList(name = "room_moderators", required=false)
+	@ElementList(name = "room_moderators", required = false)
 	private List<RoomModerator> moderators = new ArrayList<>();
 
 	@Column(name = "sip_enabled", nullable = false)
@@ -305,6 +305,7 @@ public class Room implements IDataProviderEntity {
 	@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
 	@JoinColumn(name = "room_id", insertable = true, updatable = true, nullable = false)
 	@ElementDependent
+	@org.simpleframework.xml.Transient
 	private List<RoomFile> files = new ArrayList<>();
 
 	@Transient

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/541bb1dc/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/RoomFile.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/RoomFile.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/RoomFile.java
index e8bef4f..528c300 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/RoomFile.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/RoomFile.java
@@ -31,22 +31,28 @@ import javax.persistence.Table;
 import org.apache.openjpa.persistence.jdbc.ForeignKey;
 import org.apache.openmeetings.db.entity.IDataProviderEntity;
 import org.apache.openmeetings.db.entity.file.BaseFileItem;
+import org.simpleframework.xml.Element;
+import org.simpleframework.xml.Root;
 
 @Entity
 @Table(name = "room_file")
+@Root(name = "RoomFile")
 public class RoomFile implements IDataProviderEntity {
 	private static final long serialVersionUID = 1L;
 
 	@Id
 	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Element(data = true, required = true)
 	private Long id;
 
 	@Column(name = "room_id", nullable = false)
+	@Element(data = true, required = true)
 	private Long roomId;
 
 	@ManyToOne(fetch = FetchType.EAGER, optional = false)
 	@JoinColumn(name = "file_id", insertable = true, updatable = true, nullable = false)
 	@ForeignKey(enabled = true)
+	@Element(data = true, required = true)
 	private BaseFileItem file;
 
 	/*

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/541bb1dc/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/RoomGroup.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/RoomGroup.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/RoomGroup.java
index 42bf899..9001a8d 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/RoomGroup.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/RoomGroup.java
@@ -72,15 +72,15 @@ public class RoomGroup implements IDataProviderEntity {
 	private Long id;
 
 	@ManyToOne(fetch = FetchType.EAGER)
-	@JoinColumn(name="room_id", nullable=true)
+	@JoinColumn(name = "room_id", nullable = true)
 	@ForeignKey(enabled = true)
-	@Element(name="rooms_id", data=true, required=false)
+	@Element(name="rooms_id", data = true, required = false)
 	private Room room;
 
 	@ManyToOne(fetch = FetchType.EAGER)
-	@JoinColumn(name="group_id", nullable=true)
+	@JoinColumn(name = "group_id", nullable = true)
 	@ForeignKey(enabled = true)
-	@Element(name="organisation_id", data=true, required=false)
+	@Element(name = "organisation_id", data = true, required = false)
 	private Group group;
 
 	@Column(name = "inserted")
@@ -90,7 +90,7 @@ public class RoomGroup implements IDataProviderEntity {
 	private Date updated;
 
 	@Column(name = "deleted", nullable = false)
-	@Element(data=true)
+	@Element(data = true)
 	private boolean deleted;
 
 	public RoomGroup(Group org, Room room) {

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/541bb1dc/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupExport.java
----------------------------------------------------------------------
diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupExport.java b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupExport.java
index ae6c809..7b68d30 100644
--- a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupExport.java
+++ b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupExport.java
@@ -179,6 +179,21 @@ public class BackupExport {
 			}
 
 			/*
+			 * ##################### Backup Room Files
+			 */
+			{
+				Registry registry = new Registry();
+				Strategy strategy = new RegistryStrategy(registry);
+				Serializer serializer = new Persister(strategy);
+
+				registry.bind(FileItem.class, BaseFileItemConverter.class);
+				registry.bind(Recording.class, BaseFileItemConverter.class);
+
+				writeList(serializer, zos, "roomFiles.xml", "RoomFiles", roomDao.getFiles());
+				progressHolder.setProgress(17);
+			}
+
+			/*
 			 * ##################### Backup Calendars
 			 */
 			{

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/541bb1dc/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupImport.java
----------------------------------------------------------------------
diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupImport.java b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupImport.java
index b1262f2..14d60a5 100644
--- a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupImport.java
+++ b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupImport.java
@@ -91,12 +91,13 @@ import org.apache.openmeetings.db.entity.basic.Configuration;
 import org.apache.openmeetings.db.entity.calendar.Appointment;
 import org.apache.openmeetings.db.entity.calendar.MeetingMember;
 import org.apache.openmeetings.db.entity.calendar.OmCalendar;
-import org.apache.openmeetings.db.entity.file.FileItem;
 import org.apache.openmeetings.db.entity.file.BaseFileItem;
+import org.apache.openmeetings.db.entity.file.FileItem;
 import org.apache.openmeetings.db.entity.record.Recording;
 import org.apache.openmeetings.db.entity.record.RecordingMetaData;
 import org.apache.openmeetings.db.entity.room.Room;
 import org.apache.openmeetings.db.entity.room.Room.RoomElement;
+import org.apache.openmeetings.db.entity.room.RoomFile;
 import org.apache.openmeetings.db.entity.room.RoomGroup;
 import org.apache.openmeetings.db.entity.room.RoomModerator;
 import org.apache.openmeetings.db.entity.room.RoomPoll;
@@ -181,6 +182,7 @@ public class BackupImport {
 	private final Map<Long, Long> calendarMap = new HashMap<>();
 	private final Map<Long, Long> appointmentMap = new HashMap<>();
 	private final Map<Long, Long> roomMap = new HashMap<>();
+	private final Map<Long, Long> fileItemMap = new HashMap<>();
 	private final Map<Long, Long> messageFolderMap = new HashMap<>();
 	private final Map<Long, Long> userContactMap = new HashMap<>();
 	private final Map<String, String> fileMap = new HashMap<>();
@@ -522,6 +524,7 @@ public class BackupImport {
 		{
 			List<Recording> list = readRecordingList(f, "flvRecordings.xml", "flvrecordings");
 			for (Recording r : list) {
+				Long recId = r.getId();
 				r.setId(null);
 				if (r.getRoomId() != null) {
 					r.setRoomId(roomMap.get(r.getRoomId()));
@@ -544,7 +547,8 @@ public class BackupImport {
 				if (Strings.isEmpty(r.getHash())) {
 					r.setHash(UUID.randomUUID().toString());
 				}
-				recordingDao.update(r);
+				r = recordingDao.update(r);
+				fileItemMap.put(recId, r.getId());
 			}
 		}
 
@@ -647,6 +651,7 @@ public class BackupImport {
 		{
 			List<FileItem> list = readFileItemList(f, "fileExplorerItems.xml", "fileExplorerItems");
 			for (FileItem file : list) {
+				Long fId = file.getId();
 				// We need to reset this as openJPA reject to store them otherwise
 				file.setId(null);
 				Long roomId = file.getRoomId();
@@ -660,7 +665,8 @@ public class BackupImport {
 				if (Strings.isEmpty(file.getHash())) {
 					file.setHash(UUID.randomUUID().toString());
 				}
-				fileItemDao.update(file);
+				file = fileItemDao.update(file);
+				fileItemMap.put(fId, file.getId());
 			}
 		}
 
@@ -699,7 +705,24 @@ public class BackupImport {
 			}
 		}
 
-		log.info("Poll import complete, starting copy of files and folders");
+		log.info("Poll import complete, starting room files import");
+		/*
+		 * ##################### Import Room Files
+		 */
+		{
+			Registry registry = new Registry();
+			Strategy strategy = new RegistryStrategy(registry);
+			Serializer serializer = new Persister(strategy);
+
+			registry.bind(BaseFileItem.class, new BaseFileItemConverter(fileItemDao, fileItemMap));
+
+			List<RoomFile> list = readList(serializer, f, "roomFiles.xml", "RoomFiles", RoomFile.class);
+			for (RoomFile rf : list) {
+				int i = 0;
+			}
+		}
+
+		log.info("Room files import complete, starting copy of files and folders");
 		/*
 		 * ##################### Import real files and folders
 		 */
@@ -781,6 +804,9 @@ public class BackupImport {
 
 						//HACK to handle old isFolder, isImage, isVideo, isRecording, isPresentation, isStoredWmlFile, isChart, wmlFilePath
 						do {
+							if (item1 == null) {
+								break;
+							}
 							String name = item1.getName();
 							String val = item1.getValue();
 							if ("wmlFilePath".equals(name) && !Strings.isEmpty(val)) {

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/541bb1dc/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BaseFileItemConverter.java
----------------------------------------------------------------------
diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BaseFileItemConverter.java b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BaseFileItemConverter.java
new file mode 100644
index 0000000..3e0cb41
--- /dev/null
+++ b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BaseFileItemConverter.java
@@ -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.backup;
+
+import java.util.Map;
+
+import org.apache.openmeetings.db.dao.file.FileItemDao;
+import org.apache.openmeetings.db.entity.file.BaseFileItem;
+import org.apache.openmeetings.db.entity.file.FileItem;
+import org.simpleframework.xml.stream.InputNode;
+import org.simpleframework.xml.stream.OutputNode;
+
+public class BaseFileItemConverter extends OmConverter<BaseFileItem> {
+	private FileItemDao fileDao;
+	private Map<Long, Long> idMap;
+
+	public BaseFileItemConverter() {
+		//default constructor is for export
+	}
+
+	public BaseFileItemConverter(FileItemDao fileDao, Map<Long, Long> idMap) {
+		this.fileDao = fileDao;
+		this.idMap = idMap;
+	}
+
+	@Override
+	public BaseFileItem read(InputNode node) throws Exception {
+		long oldId = getLong(node);
+		long newId = idMap.containsKey(oldId) ? idMap.get(oldId) : oldId;
+
+		BaseFileItem r = fileDao.get(newId);
+		return r == null ? new FileItem() : r;
+	}
+
+	@Override
+	public void write(OutputNode node, BaseFileItem value) throws Exception {
+		node.setData(true);
+		node.setAttribute("type", Long.class.getCanonicalName());
+		node.setValue(value == null ? "0" : "" + value.getId());
+	}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/541bb1dc/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
index f879e49..7398418 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
@@ -357,6 +357,9 @@ public class RoomForm extends AdminBaseForm<Room> {
 				@Override
 				protected void onSubmit(AjaxRequestTarget target) {
 					Room r = RoomForm.this.getModelObject();
+					if (r.getFiles() == null) {
+						r.setFiles(new ArrayList<>());
+					}
 					for (BaseFileItem f : files2add.getObject()) {
 						r.getFiles().add(new RoomFile(r.getId(), f, wbIdx.getObject()));
 					}
@@ -493,13 +496,9 @@ public class RoomForm extends AdminBaseForm<Room> {
 		moderator2add.setObject(null);
 		files2add.getObject().clear();
 		wbIdx.setObject(0L);
-		Room r = getModelObject();
-		if (r.getFiles() == null) {
-			r.setFiles(new ArrayList<>());
-		}
 		target.add(this);
 		target.add(roomList);
-		target.add(pin.setEnabled(r.isSipEnabled()));
+		target.add(pin.setEnabled(getModelObject().isSipEnabled()));
 		updateClients(target);
 		target.appendJavaScript("adminPanelInit();");
 	}