[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); } }