[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 <solomax...@gmail.com>
Authored: Thu Sep 14 00:16:12 2017 +0700
Committer: Maxim Solodovnik <solomax...@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);
        }
 }

Reply via email to