Repository: openmeetings Updated Branches: refs/heads/master a38d35a11 -> 1d55047cf
[OPENMEETINGS-1671] room files can be specified via web service Project: http://git-wip-us.apache.org/repos/asf/openmeetings/repo Commit: http://git-wip-us.apache.org/repos/asf/openmeetings/commit/1d55047c Tree: http://git-wip-us.apache.org/repos/asf/openmeetings/tree/1d55047c Diff: http://git-wip-us.apache.org/repos/asf/openmeetings/diff/1d55047c Branch: refs/heads/master Commit: 1d55047cfc60a0b0cfc5dfc4554a01065e0a1ac0 Parents: a38d35a Author: Maxim Solodovnik <[email protected]> Authored: Wed Sep 27 17:45:15 2017 +0700 Committer: Maxim Solodovnik <[email protected]> Committed: Wed Sep 27 17:52:32 2017 +0700 ---------------------------------------------------------------------- .../db/dao/file/BaseFileItemDao.java | 93 +++++++++++++++ .../openmeetings/db/dao/file/FileItemDao.java | 51 ++------ .../db/dao/file/FileItemLogDao.java | 7 +- .../db/dao/record/RecordingDao.java | 71 ++--------- .../db/dto/calendar/AppointmentDTO.java | 5 +- .../openmeetings/db/dto/room/RoomDTO.java | 25 +++- .../openmeetings/db/dto/room/RoomFileDTO.java | 119 +++++++++++++++++++ .../db/entity/file/BaseFileItem.java | 4 +- .../openmeetings/db/entity/file/FileItem.java | 2 - .../db/entity/file/FileItemLog.java | 22 +--- .../db/entity/record/Recording.java | 4 +- .../test/webservice/AbstractWebServiceTest.java | 50 ++++++++ .../test/webservice/TestFileService.java | 34 +----- .../test/webservice/TestRoomService.java | 115 +++++++++++++++++- .../openmeetings/webservice/BaseWebService.java | 5 + .../webservice/CalendarWebService.java | 2 +- .../openmeetings/webservice/FileWebService.java | 18 ++- .../openmeetings/webservice/RoomWebService.java | 29 ++++- 18 files changed, 469 insertions(+), 187 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1d55047c/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/BaseFileItemDao.java ---------------------------------------------------------------------- diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/BaseFileItemDao.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/BaseFileItemDao.java new file mode 100644 index 0000000..b3d76bb --- /dev/null +++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/BaseFileItemDao.java @@ -0,0 +1,93 @@ +/* + * 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.OpenmeetingsVariables.webAppRootKey; + +import java.util.Date; + +import javax.persistence.EntityManager; +import javax.persistence.NoResultException; +import javax.persistence.PersistenceContext; +import javax.persistence.TypedQuery; + +import org.apache.openmeetings.db.entity.file.BaseFileItem; +import org.red5.logging.Red5LoggerFactory; +import org.slf4j.Logger; +import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; + +@Repository +@Transactional +public class BaseFileItemDao { + private static final Logger log = Red5LoggerFactory.getLogger(BaseFileItemDao.class, webAppRootKey); + @PersistenceContext + protected EntityManager em; + + public BaseFileItem get(String hash) { + log.debug("getByHash() started"); + BaseFileItem f = null; + TypedQuery<BaseFileItem> query = em.createNamedQuery("getFileByHash", BaseFileItem.class); + query.setParameter("hash", hash); + + try { + f = query.getSingleResult(); + } catch (NoResultException ex) { + //no-op + } + return f; + } + + public BaseFileItem get(Long id) { + BaseFileItem f = null; + if (id != null && id > 0) { + TypedQuery<BaseFileItem> query = em.createNamedQuery("getFileById", BaseFileItem.class) + .setParameter("id", id); + + try { + f = query.getSingleResult(); + } catch (NoResultException ex) { + } + } else { + log.info("[get] " + "Info: No id given"); + } + return f; + } + + public void delete(BaseFileItem f) { + if (f == null || f.getId() == null) { + return; + } + f.setDeleted(true); + f.setUpdated(new Date()); + + _update(f); + } + + public BaseFileItem _update(BaseFileItem f) { + if (f.getId() == null) { + f.setInserted(new Date()); + em.persist(f); + } else { + f.setUpdated(new Date()); + f = em.merge(f); + } + return f; + } +} http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1d55047c/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileItemDao.java ---------------------------------------------------------------------- diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileItemDao.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileItemDao.java index 5d2c544..10ed939 100644 --- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileItemDao.java +++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileItemDao.java @@ -27,9 +27,7 @@ import java.util.List; import java.util.UUID; import java.util.stream.Collectors; -import javax.persistence.EntityManager; import javax.persistence.NoResultException; -import javax.persistence.PersistenceContext; import javax.persistence.TypedQuery; import org.apache.openmeetings.db.entity.file.BaseFileItem; @@ -48,10 +46,8 @@ import org.springframework.transaction.annotation.Transactional; */ @Repository @Transactional -public class FileItemDao { +public class FileItemDao extends BaseFileItemDao { 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) { @@ -147,33 +143,14 @@ public class FileItemDao { } 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; + BaseFileItem bf = super.get(hash); + return bf instanceof FileItem ? (FileItem)bf : null; } + @Override 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; + BaseFileItem bf = super.get(id); + return bf instanceof FileItem ? (FileItem)bf : null; } public FileItem get(String externalId, String externalType) { @@ -201,13 +178,6 @@ public class FileItemDao { 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"); @@ -230,14 +200,7 @@ public class FileItemDao { } 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; + return (FileItem)super._update(f); } private void updateChilds(FileItem f) { http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1d55047c/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 40064b3..b6a2f29 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 @@ -43,17 +43,17 @@ public class FileItemLogDao { public long countErrors(BaseFileItem f) { return em.createNamedQuery("countErrorFileLogsByFile", Long.class).setParameter("fileId", f.getId()) - .setParameter("type", f.getType()).getSingleResult(); + .getSingleResult(); } public List<FileItemLog> get(BaseFileItem f) { return em.createNamedQuery("getFileLogsByFile", FileItemLog.class).setParameter("fileId", f.getId()) - .setParameter("type", f.getType()).getResultList(); + .getResultList(); } public void delete(BaseFileItem f) { em.createNamedQuery("deleteErrorFileLogsByFile").setParameter("fileId", f.getId()) - .setParameter("type", f.getType()).executeUpdate(); + .executeUpdate(); } public FileItemLog add(String name, BaseFileItem f, ConverterProcessResult returnMap) { @@ -62,7 +62,6 @@ public class FileItemLogDao { log.setInserted(new Date()); log.setExitCode(returnMap.getExitCode()); log.setFileId(f.getId()); - log.setFileType(f.getType()); log.setMessage(returnMap.buildLogMessage()); log.setName(name); http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1d55047c/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/record/RecordingDao.java ---------------------------------------------------------------------- diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/record/RecordingDao.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/record/RecordingDao.java index e4b111e..8c313b1 100644 --- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/record/RecordingDao.java +++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/record/RecordingDao.java @@ -27,13 +27,12 @@ import java.time.Instant; import java.util.Date; import java.util.List; -import javax.persistence.EntityManager; -import javax.persistence.NoResultException; -import javax.persistence.PersistenceContext; import javax.persistence.TypedQuery; +import org.apache.openmeetings.db.dao.file.BaseFileItemDao; import org.apache.openmeetings.db.dao.user.UserDao; import org.apache.openmeetings.db.dto.record.RecordingContainerData; +import org.apache.openmeetings.db.entity.file.BaseFileItem; import org.apache.openmeetings.db.entity.record.Recording; import org.apache.openmeetings.db.entity.record.Recording.Status; import org.apache.openmeetings.db.entity.user.GroupUser; @@ -49,45 +48,21 @@ import org.springframework.transaction.annotation.Transactional; */ @Repository @Transactional -public class RecordingDao { +public class RecordingDao extends BaseFileItemDao { private static final Logger log = Red5LoggerFactory.getLogger(RecordingDao.class, webAppRootKey); - @PersistenceContext - private EntityManager em; @Autowired private UserDao userDao; - public Recording get(Long recordingId) { - try { - TypedQuery<Recording> query = em.createNamedQuery("getRecordingById", Recording.class); - query.setParameter("id", recordingId); - - Recording recording = null; - try { - recording = query.getSingleResult(); - } catch (NoResultException ex) { - } - return recording; - } catch (Exception ex2) { - log.error("[get]: ", ex2); - } - return null; + @Override + public Recording get(Long id) { + BaseFileItem bf = super.get(id); + return bf instanceof Recording ? (Recording)bf : null; } public Recording getByHash(String hash) { - try { - TypedQuery<Recording> query = em.createNamedQuery("getRecordingByHash", Recording.class); - query.setParameter("hash", hash); - - try { - return query.getSingleResult(); - } catch (NoResultException ex) { - // noop - } - } catch (Exception ex2) { - log.error("[getByHash]: ", ex2); - } - return null; + BaseFileItem bf = super.get(hash); + return bf instanceof Recording ? (Recording)bf : null; } public List<Recording> getByExternalId(String externalId, String externalType) { @@ -201,34 +176,8 @@ public class RecordingDao { } } - public boolean delete(Recording f) { - if (f == null || f.getId() == null) { - return false; - } - f.setDeleted(true); - update(f); - return true; - } - public Recording update(Recording f) { - try { - if (f.getId() == null) { - if (f.getInserted() == null) { - //required to preserve date while import - f.setInserted(new Date()); - } - em.persist(f); - } else { - f.setUpdated(new Date()); - if (!em.contains(f)) { - f = em.merge(f); - } - } - - } catch (Exception ex2) { - log.error("[update]: ", ex2); - } - return f; + return (Recording)_update(f); } public void resetProcessingStatus() { http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1d55047c/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/AppointmentDTO.java ---------------------------------------------------------------------- diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/AppointmentDTO.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/AppointmentDTO.java index 9a73a10..e0ce566 100644 --- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/AppointmentDTO.java +++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/AppointmentDTO.java @@ -30,6 +30,7 @@ import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlRootElement; import org.apache.openmeetings.db.dao.calendar.AppointmentDao; +import org.apache.openmeetings.db.dao.file.BaseFileItemDao; import org.apache.openmeetings.db.dao.user.UserDao; import org.apache.openmeetings.db.dto.room.RoomDTO; import org.apache.openmeetings.db.dto.user.UserDTO; @@ -94,7 +95,7 @@ public class AppointmentDTO implements Serializable { reminderEmailSend = a.isReminderEmailSend(); } - public Appointment get(UserDao userDao, AppointmentDao appointmentDao, User u) { + public Appointment get(UserDao userDao, BaseFileItemDao fileDao, AppointmentDao appointmentDao, User u) { Appointment a = id == null ? new Appointment() : appointmentDao.get(id); a.setId(id); a.setTitle(title); @@ -107,7 +108,7 @@ public class AppointmentDTO implements Serializable { a.setUpdated(updated); a.setDeleted(deleted); a.setReminder(reminder); - a.setRoom(room.get()); + a.setRoom(room.get(fileDao)); a.setIcalId(icalId); List<MeetingMember> mml = new ArrayList<>(); for(MeetingMemberDTO mm : meetingMembers) { http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1d55047c/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomDTO.java ---------------------------------------------------------------------- diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomDTO.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomDTO.java index de7cea4..030d59b 100644 --- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomDTO.java +++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomDTO.java @@ -33,9 +33,11 @@ import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlRootElement; +import org.apache.openmeetings.db.dao.file.BaseFileItemDao; import org.apache.openmeetings.db.entity.room.Room; import org.apache.openmeetings.db.entity.room.Room.RoomElement; +import com.github.openjson.JSONArray; import com.github.openjson.JSONObject; @XmlRootElement @@ -62,6 +64,7 @@ public class RoomDTO implements Serializable { private boolean waitForRecording; private boolean audioOnly; private Set<RoomElement> hiddenElements = new HashSet<>(); + private List<RoomFileDTO> files = new ArrayList<>(); public RoomDTO() {} @@ -86,9 +89,10 @@ public class RoomDTO implements Serializable { waitForRecording = r.isWaitForRecording(); audioOnly = r.isAudioOnly(); hiddenElements = r.getHiddenElements(); + files = RoomFileDTO.get(r.getFiles()); } - public Room get() { + public Room get(BaseFileItemDao fileDao) { Room r = new Room(); r.setId(id); r.setName(name); @@ -109,6 +113,7 @@ public class RoomDTO implements Serializable { r.setWaitForRecording(waitForRecording); r.setAudioOnly(audioOnly); r.setHiddenElements(hiddenElements); + r.setFiles(RoomFileDTO.get(id, files, fileDao)); return r; } @@ -272,6 +277,14 @@ public class RoomDTO implements Serializable { this.closed = closed; } + public List<RoomFileDTO> getFiles() { + return files; + } + + public void setFiles(List<RoomFileDTO> files) { + this.files = files; + } + public static List<RoomDTO> list(List<Room> l) { List<RoomDTO> rList = new ArrayList<>(); if (l != null) { @@ -302,8 +315,8 @@ public class RoomDTO implements Serializable { r.demo = o.optBoolean("demo", false); r.closed = o.optBoolean("closed", false); r.demoTime = optInt(o, "demoTime"); - r.externalId = o.optString("externalId"); - r.externalType = o.optString("externalType"); + r.externalId = o.optString("externalId", null); + r.externalType = o.optString("externalType", null); r.redirectUrl = o.optString("redirectUrl"); r.moderated = o.optBoolean("moderated", false); r.allowUserQuestions = o.optBoolean("allowUserQuestions", false); @@ -311,6 +324,12 @@ public class RoomDTO implements Serializable { r.waitForRecording = o.optBoolean("waitForRecording", false); r.audioOnly = o.optBoolean("audioOnly", false); r.getHiddenElements().addAll(optEnumList(RoomElement.class, o.optJSONArray("hiddenElements"))); + JSONArray fa = o.optJSONArray("files"); + if (fa != null) { + for (int i = 0; i < fa.length(); ++i) { + r.getFiles().add(RoomFileDTO.get(fa.getJSONObject(i))); + } + } return r; } http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1d55047c/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomFileDTO.java ---------------------------------------------------------------------- diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomFileDTO.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomFileDTO.java new file mode 100644 index 0000000..bb6cc7a --- /dev/null +++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomFileDTO.java @@ -0,0 +1,119 @@ +/* + * 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.room; + +import static org.apache.openmeetings.db.util.DtoHelper.optLong; + +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.dao.file.BaseFileItemDao; +import org.apache.openmeetings.db.entity.room.RoomFile; + +import com.github.openjson.JSONObject; + +@XmlRootElement +@XmlAccessorType(XmlAccessType.FIELD) +public class RoomFileDTO implements Serializable { + private static final long serialVersionUID = 1L; + private Long id; + private long fileId; + private long wbIdx = 0; + + public RoomFileDTO() {} + + public RoomFileDTO(RoomFile rf) { + id = rf.getId(); + fileId = rf.getFile().getId(); + wbIdx = rf.getWbIdx(); + } + + public RoomFile get(BaseFileItemDao fileDao, Long roomId) { + RoomFile f = new RoomFile(); + f.setId(id); + f.setRoomId(roomId); + f.setFile(fileDao.get(fileId)); + f.setWbIdx(wbIdx); + return f; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public long getFileId() { + return fileId; + } + + public void setFileId(long fileId) { + this.fileId = fileId; + } + + public long getWbIdx() { + return wbIdx; + } + + public void setWbIdx(long wbIdx) { + this.wbIdx = wbIdx; + } + + public static List<RoomFileDTO> get(List<RoomFile> rfl) { + List<RoomFileDTO> r = new ArrayList<>(); + if (rfl != null) { + for (RoomFile rf : rfl) { + r.add(new RoomFileDTO(rf)); + } + } + return r; + } + + public static List<RoomFile> get(Long roomId, List<RoomFileDTO> rfl, BaseFileItemDao fileDao) { + List<RoomFile> r = new ArrayList<>(); + if (rfl != null) { + for (RoomFileDTO rf : rfl) { + RoomFile f = rf.get(fileDao, roomId); + if (f.getFile() == null) { + continue; + } + r.add(f); + } + } + return r; + } + + public static RoomFileDTO get(JSONObject o) { + if (o == null) { + return null; + } + RoomFileDTO rf = new RoomFileDTO(); + rf.id = optLong(o, "id"); + rf.fileId = o.getLong("fileId"); + rf.wbIdx = optLong(o, "wbIdx"); + return rf; + } +} http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1d55047c/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/BaseFileItem.java ---------------------------------------------------------------------- diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/BaseFileItem.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/BaseFileItem.java index a7064a2..33f7e74 100644 --- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/BaseFileItem.java +++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/BaseFileItem.java @@ -52,7 +52,9 @@ import org.simpleframework.xml.Element; @Entity @NamedQueries({ - @NamedQuery(name = "getAllFileItemsForRoom", query = "SELECT f FROM BaseFileItem f" + @NamedQuery(name = "getFileById", query = "SELECT f FROM BaseFileItem f WHERE f.deleted = false AND f.id = :id") + , @NamedQuery(name = "getFileByHash", query = "SELECT f FROM BaseFileItem f WHERE f.deleted = false AND f.hash = :hash") + , @NamedQuery(name = "getAllFileItemsForRoom", query = "SELECT f FROM BaseFileItem f" + " WHERE f.deleted = false AND f.type <> :folder" + " AND (f.roomId IS NULL OR f.roomId = :roomId)" + " AND (f.groupId IS NULL OR f.groupId IN :groups)" http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1d55047c/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 06e5d6e..3d286f6 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 @@ -29,8 +29,6 @@ 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 " http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1d55047c/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 dc47fba..6b337e1 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 @@ -20,13 +20,12 @@ package org.apache.openmeetings.db.entity.file; import static java.nio.charset.StandardCharsets.UTF_8; import static org.apache.openmeetings.util.process.ConverterProcessResult.ZERO; + import java.util.Arrays; import java.util.Date; 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; @@ -36,13 +35,12 @@ import javax.persistence.NamedQuery; import javax.persistence.Table; import org.apache.openmeetings.db.entity.IDataProviderEntity; -import org.apache.openmeetings.db.entity.file.BaseFileItem.Type; @Entity @NamedQueries({ - @NamedQuery(name = "getFileLogsByFile", query = "SELECT fl FROM FileItemLog fl WHERE fl.fileId = :fileId AND fl.fileType = :type"), - @NamedQuery(name = "countErrorFileLogsByFile", query = "SELECT COUNT(fl) FROM FileItemLog fl WHERE fl.fileId = :fileId AND fl.fileType = :type AND fl.exitCode <> 0"), - @NamedQuery(name = "deleteErrorFileLogsByFile", query = "DELETE FROM FileItemLog fl WHERE fl.fileId = :fileId AND fl.fileType = :type") }) + @NamedQuery(name = "getFileLogsByFile", query = "SELECT fl FROM FileItemLog fl WHERE fl.fileId = :fileId"), + @NamedQuery(name = "countErrorFileLogsByFile", query = "SELECT COUNT(fl) FROM FileItemLog fl WHERE fl.fileId = :fileId AND fl.exitCode <> 0"), + @NamedQuery(name = "deleteErrorFileLogsByFile", query = "DELETE FROM FileItemLog fl WHERE fl.fileId = :fileId") }) @Table(name = "file_log") public class FileItemLog implements IDataProviderEntity { private static final long serialVersionUID = 1L; @@ -55,10 +53,6 @@ public class FileItemLog implements IDataProviderEntity { @Column(name = "file_id") private Long fileId; - @Column(name = "file_type") - @Enumerated(EnumType.STRING) - private Type fileType; - @Column(name = "inserted") private Date inserted; @@ -90,14 +84,6 @@ public class FileItemLog implements IDataProviderEntity { this.fileId = fileId; } - public Type getFileType() { - return fileType; - } - - public void setFileType(Type fileType) { - this.fileType = fileType; - } - public Date getInserted() { return inserted; } http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1d55047c/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 e188afd..06ba134 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 @@ -61,9 +61,7 @@ import org.simpleframework.xml.Root; */ @Entity @NamedQueries({ - @NamedQuery(name = "getRecordingById", query = "SELECT f FROM Recording f WHERE f.id = :id") - , @NamedQuery(name = "getRecordingByHash", query = "SELECT f FROM Recording f WHERE f.hash = :hash") - , @NamedQuery(name = "getRecordingsByExternalUser", query = "SELECT c FROM Recording c, User u " + @NamedQuery(name = "getRecordingsByExternalUser", query = "SELECT c FROM Recording c, User u " + "WHERE c.insertedBy = u.id AND u.externalId = :externalId AND u.externalType = :externalType " + "AND c.deleted = false") , @NamedQuery(name = "getRecordingsPublic", query = "SELECT f FROM Recording f WHERE f.deleted = false AND f.ownerId IS NULL " http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1d55047c/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/AbstractWebServiceTest.java ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/AbstractWebServiceTest.java b/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/AbstractWebServiceTest.java index 846b7c2..0068c56 100644 --- a/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/AbstractWebServiceTest.java +++ b/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/AbstractWebServiceTest.java @@ -25,19 +25,28 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; import java.nio.file.Files; +import java.util.ArrayList; import java.util.Arrays; +import java.util.List; import java.util.UUID; import javax.ws.rs.core.Form; +import javax.ws.rs.core.MediaType; import org.apache.catalina.LifecycleState; import org.apache.catalina.startup.Tomcat; import org.apache.cxf.jaxrs.client.WebClient; +import org.apache.cxf.jaxrs.ext.multipart.Attachment; import org.apache.cxf.transports.http.configuration.HTTPClientPolicy; import org.apache.openmeetings.db.dto.basic.ServiceResult; import org.apache.openmeetings.db.dto.basic.ServiceResult.Type; +import org.apache.openmeetings.db.dto.file.FileItemDTO; import org.apache.openmeetings.db.dto.user.UserDTO; +import org.apache.openmeetings.db.entity.file.BaseFileItem; import org.apache.openmeetings.db.entity.user.User; import org.apache.openmeetings.test.AbstractJUnitDefaults; import org.apache.openmeetings.web.app.WebSession; @@ -54,6 +63,7 @@ public class AbstractWebServiceTest extends AbstractJUnitDefaults { public final static String BASE_SERVICES_URL = "http://localhost:8080" + CONTEXT + "/services"; public final static String USER_SERVICE_URL = BASE_SERVICES_URL + "/user"; public final static String INFO_SERVICE_URL = BASE_SERVICES_URL + "/info"; + public final static String FILE_SERVICE_URL = BASE_SERVICES_URL + "/file"; public final static String UNIT_TEST_EXT_TYPE = "om_unit_tests"; public final static long TIMEOUT = 5 * 60 * 1000; protected WicketTester tester; @@ -133,4 +143,44 @@ public class AbstractWebServiceTest extends AbstractJUnitDefaults { Assert.assertNotNull(user.getId()); u.setId(user.getId()); } + + public CallResult<FileItemDTO> createVerifiedFile(File fsFile) throws IOException { + ServiceResult r = login(); + + FileItemDTO f1 = null; + try (InputStream is = new FileInputStream(fsFile)) { + FileItemDTO file = new FileItemDTO(); + file.setName("test.txt"); + file.setHash(UUID.randomUUID().toString()); + file.setType(BaseFileItem.Type.Presentation); + List<Attachment> atts = new ArrayList<>(); + atts.add(new Attachment("file", MediaType.APPLICATION_JSON, file)); + atts.add(new Attachment("stream", MediaType.APPLICATION_OCTET_STREAM, is)); + f1 = getClient(FILE_SERVICE_URL) + .path("/") + .query("sid", r.getMessage()) + .type(MediaType.MULTIPART_FORM_DATA_TYPE).postCollection(atts, Attachment.class, FileItemDTO.class); + assertNotNull("Valid FileItem should be returned", f1); + assertNotNull("Valid FileItem should be returned", f1.getId()); + } + return new CallResult<>(r.getMessage(), f1); + } + + public static class CallResult<T> { + private final String sid; + private final T obj; + + public CallResult(String sid, T obj) { + this.sid = sid; + this.obj = obj; + } + + public String getSid() { + return sid; + } + + public T getObj() { + return obj; + } + } } http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1d55047c/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestFileService.java ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestFileService.java b/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestFileService.java index 70065ce..ef0bba2 100644 --- a/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestFileService.java +++ b/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestFileService.java @@ -19,23 +19,14 @@ package org.apache.openmeetings.test.webservice; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.File; -import java.io.FileInputStream; import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; import javax.imageio.ImageIO; -import javax.ws.rs.core.MediaType; -import org.apache.cxf.jaxrs.ext.multipart.Attachment; -import org.apache.openmeetings.db.dto.basic.ServiceResult; import org.apache.openmeetings.db.dto.file.FileItemDTO; import org.apache.openmeetings.db.entity.file.BaseFileItem; import org.apache.openmeetings.util.NonJenkinsTests; @@ -43,13 +34,10 @@ import org.junit.Test; import org.junit.experimental.categories.Category; public class TestFileService extends AbstractWebServiceTest { - public final static String FILE_SERVICE_URL = BASE_SERVICES_URL + "/file"; @Test @Category(NonJenkinsTests.class) public void addFileTest() throws IOException { - ServiceResult r = login(); - File img = null; try { img = File.createTempFile("omtest", ".jpg"); @@ -59,24 +47,10 @@ public class TestFileService extends AbstractWebServiceTest { Graphics g = image.getGraphics(); g.drawString("Hello World!!!", 10, 20); ImageIO.write(image, "jpg", img); - try (InputStream is = new FileInputStream(img)) { - FileItemDTO file = new FileItemDTO(); - file.setName("test.txt"); - file.setHash(UUID.randomUUID().toString()); - file.setType(BaseFileItem.Type.Presentation); - List<Attachment> atts = new ArrayList<>(); - atts.add(new Attachment("file", MediaType.APPLICATION_JSON, file)); - atts.add(new Attachment("stream", MediaType.APPLICATION_OCTET_STREAM, is)); - FileItemDTO f1 = getClient(FILE_SERVICE_URL) - .path("/") - .query("sid", r.getMessage()) - .type(MediaType.MULTIPART_FORM_DATA_TYPE).postCollection(atts, Attachment.class, FileItemDTO.class); - assertNotNull("Valid FileItem should be returned", f1); - assertNotNull("Valid FileItem should be returned", f1.getId()); - assertEquals("Type should be Image", BaseFileItem.Type.Image, f1.getType()); - assertEquals("Width should be determined", width, f1.getWidth()); - assertEquals("Height should be Image", height, f1.getHeight()); - } + CallResult<FileItemDTO> cr = createVerifiedFile(img); + assertEquals("Type should be Image", BaseFileItem.Type.Image, cr.getObj().getType()); + assertEquals("Width should be determined", width, cr.getObj().getWidth()); + assertEquals("Height should be Image", height, cr.getObj().getHeight()); } finally { if (img != null && img.exists()) { img.delete(); http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1d55047c/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestRoomService.java ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestRoomService.java b/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestRoomService.java index 1c41777..7413615 100644 --- a/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestRoomService.java +++ b/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestRoomService.java @@ -18,18 +18,28 @@ */ package org.apache.openmeetings.test.webservice; +import static javax.ws.rs.core.MediaType.APPLICATION_FORM_URLENCODED; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import java.io.IOException; import java.util.UUID; +import javax.ws.rs.core.Form; + import org.apache.openmeetings.db.dto.basic.ServiceResult; +import org.apache.openmeetings.db.dto.file.FileItemDTO; import org.apache.openmeetings.db.dto.room.RoomDTO; +import org.apache.openmeetings.db.dto.room.RoomFileDTO; import org.apache.openmeetings.db.entity.room.Room; +import org.apache.openmeetings.util.OmFileHelper; import org.junit.Test; public class TestRoomService extends AbstractWebServiceTest { public final static String ROOM_SERVICE_URL = BASE_SERVICES_URL + "/room"; + private final static long CAPACITY = 666L; @Test public void testExternal() { @@ -38,12 +48,11 @@ public class TestRoomService extends AbstractWebServiceTest { Room.Type type = Room.Type.presentation; String name = "Unit Test Ext Room"; String comment = "Unit Test Ext Room Comments"; - long num = 666L; RoomDTO r = new RoomDTO(); r.setType(type); r.setName(name); r.setComment(comment); - r.setCapacity(num); + r.setCapacity(CAPACITY); RoomDTO room = getClient(ROOM_SERVICE_URL).path(String.format("/%s/%s/%s", type, UNIT_TEST_EXT_TYPE, extId)) .query("sid", sr.getMessage()) .query("room", r.toString()) @@ -51,9 +60,109 @@ public class TestRoomService extends AbstractWebServiceTest { assertNotNull("Valid room should be returned", room); assertNotNull("Room ID should be not empty", room.getId()); - RoomDTO room1 = getClient(ROOM_SERVICE_URL).path(String.format("/%s/%s/%s", Room.Type.presentation, UNIT_TEST_EXT_TYPE, extId)).query("sid", sr.getMessage()) + RoomDTO room1 = getClient(ROOM_SERVICE_URL).path(String.format("/%s/%s/%s", Room.Type.presentation, UNIT_TEST_EXT_TYPE, extId)) + .query("sid", sr.getMessage()) .get(RoomDTO.class); assertNotNull("Valid room should be returned", room1); assertEquals("Same Room should be returned", room.getId(), room1.getId()); } + + private CallResult<RoomDTO> createAndValidate(RoomDTO r) { + return createAndValidate(null, r); + } + + private CallResult<RoomDTO> createAndValidate(String sid, RoomDTO r) { + if (sid == null) { + ServiceResult sr = login(); + sid = sr.getMessage(); + } + RoomDTO room = getClient(ROOM_SERVICE_URL) + .query("sid", sid) + .type(APPLICATION_FORM_URLENCODED) + .post(new Form().param("room", r.toString()), RoomDTO.class); + assertNotNull("Valid room should be returned", room); + assertNotNull("Room ID should be not empty", room.getId()); + + RoomDTO room1 = getClient(ROOM_SERVICE_URL).path(String.format("/%s", room.getId())) + .query("sid", sid) + .get(RoomDTO.class); + assertNotNull("Valid room should be returned", room1); + assertEquals("Room with same ID should be returned", room.getId(), room1.getId()); + assertEquals("Room with same Name should be returned", r.getName(), room1.getName()); + assertEquals("Room with same ExternalType should be returned", r.getExternalType(), room1.getExternalType()); + assertEquals("Room with same ExternalId should be returned", r.getExternalId(), room1.getExternalId()); + //TODO check other fields + return new CallResult<>(sid, room1); + } + + @Test + public void testCreate1() { + String extId = UUID.randomUUID().toString(); + Room.Type type = Room.Type.presentation; + String name = "Unit Test Ext Room1"; + String comment = "Unit Test Ext Room Comments1"; + RoomDTO r = new RoomDTO(); + r.setType(type); + r.setName(name); + r.setComment(comment); + r.setCapacity(CAPACITY); + r.setExternalType(UNIT_TEST_EXT_TYPE); + r.setExternalId(extId); + + createAndValidate(r); + } + + @Test + public void testCreate2() { + Room.Type type = Room.Type.presentation; + String name = "Unit Test Ext Room2"; + String comment = "Unit Test Ext Room Comments2"; + RoomDTO r = new RoomDTO(); + r.setType(type); + r.setName(name); + r.setComment(comment); + r.setCapacity(CAPACITY); + + createAndValidate(r); + } + + @Test + public void testCreateWithFiles1() { + Room.Type type = Room.Type.presentation; + String name = "Unit Test Ext Room3"; + String comment = "Unit Test Ext Room Comments3"; + RoomDTO r = new RoomDTO(); + r.setType(type); + r.setName(name); + r.setComment(comment); + r.setCapacity(CAPACITY); + RoomFileDTO rf = new RoomFileDTO(); + rf.setFileId(-666L); //not existent + r.getFiles().add(rf); + + CallResult<RoomDTO> res = createAndValidate(r); + assertTrue("No room files should be added", res.getObj().getFiles().isEmpty()); + } + + @Test + public void testCreateWithFiles2() throws IOException { + //lets create real file + CallResult<FileItemDTO> fileCall = createVerifiedFile(OmFileHelper.getDefaultProfilePicture()); + + Room.Type type = Room.Type.presentation; + String name = "Unit Test Ext Room4"; + String comment = "Unit Test Ext Room Comments4"; + RoomDTO r = new RoomDTO(); + r.setType(type); + r.setName(name); + r.setComment(comment); + r.setCapacity(CAPACITY); + + RoomFileDTO rf = new RoomFileDTO(); + rf.setFileId(fileCall.getObj().getId()); //not existent + r.getFiles().add(rf); + + CallResult<RoomDTO> res = createAndValidate(fileCall.getSid(), r); + assertFalse("Room files should NOT be empty", res.getObj().getFiles().isEmpty()); + } } http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1d55047c/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/BaseWebService.java ---------------------------------------------------------------------- diff --git a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/BaseWebService.java b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/BaseWebService.java index 0f663db..616d309 100644 --- a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/BaseWebService.java +++ b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/BaseWebService.java @@ -23,6 +23,7 @@ import static org.apache.openmeetings.util.OpenmeetingsVariables.wicketApplicati import java.util.Set; import org.apache.openmeetings.IApplication; +import org.apache.openmeetings.db.dao.file.FileItemDao; import org.apache.openmeetings.db.dao.room.RoomDao; import org.apache.openmeetings.db.dao.server.SessiondataDao; import org.apache.openmeetings.db.dao.user.UserDao; @@ -57,6 +58,10 @@ public abstract class BaseWebService { return getBean(RoomDao.class); } + static FileItemDao getFileDao() { + return getBean(FileItemDao.class); + } + static Set<Right> getRights(Long id) { return getUserDao().getRights(id); } http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1d55047c/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/CalendarWebService.java ---------------------------------------------------------------------- diff --git a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/CalendarWebService.java b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/CalendarWebService.java index f01512d..ef7f93d 100644 --- a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/CalendarWebService.java +++ b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/CalendarWebService.java @@ -298,7 +298,7 @@ public class CalendarWebService extends BaseWebService { //TODO check if objects passed with IDs are correct if (AuthLevelUtil.hasUserLevel(u.getRights())) { AppointmentDao dao = getDao(); - Appointment a = appointment.get(userDao, dao, u); + Appointment a = appointment.get(userDao, getFileDao(), dao, u); if (a.getRoom().getId() != null) { if (a.getRoom().isAppointment()) { a.getRoom().setIspublic(false); http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1d55047c/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/FileWebService.java ---------------------------------------------------------------------- diff --git a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/FileWebService.java b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/FileWebService.java index 9d530f3..157e904 100644 --- a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/FileWebService.java +++ b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/FileWebService.java @@ -74,10 +74,6 @@ import org.springframework.stereotype.Service; public class FileWebService extends BaseWebService { private static final Logger log = Red5LoggerFactory.getLogger(FileWebService.class, webAppRootKey); - private static FileItemDao getDao() { - return getBean(FileItemDao.class); - } - /** * deletes files or folders based on it id * @@ -94,7 +90,7 @@ public class FileWebService extends BaseWebService { try { Sessiondata sd = check(sid); - FileItemDao dao = getDao(); + FileItemDao dao = getFileDao(); FileItem f = dao.get(id); if (f == null) { return new ServiceResult("Bad id", Type.ERROR); @@ -137,7 +133,7 @@ public class FileWebService extends BaseWebService { { try { if (AuthLevelUtil.hasWebServiceLevel(getRights(sid))) { - FileItemDao dao = getDao(); + FileItemDao dao = getFileDao(); FileItem f = dao.get(externalId, externalType); dao.delete(f); return new ServiceResult("Deleted", Type.SUCCESS); @@ -193,7 +189,7 @@ public class FileWebService extends BaseWebService { throw new ServiceException(result.getLogMessage()); } } else { - f = getDao().update(f); + f = getFileDao().update(f); } return new FileItemDTO(f); } else { @@ -231,7 +227,7 @@ public class FileWebService extends BaseWebService { if (AuthLevelUtil.hasUserLevel(getRights(userId))) { log.debug("roomId " + roomId); - FileItemDao dao = getDao(); + FileItemDao dao = getFileDao(); FileExplorerObject fileExplorerObject = new FileExplorerObject(); // Home File List @@ -282,7 +278,7 @@ public class FileWebService extends BaseWebService { if (AuthLevelUtil.hasUserLevel(getRights(userId))) { log.debug("getRoomByParent " + parentId); - FileItemDao dao = getDao(); + FileItemDao dao = getFileDao(); List<FileItem> list = new ArrayList<>(); if (parentId < 0) { if (parentId == -1) { @@ -330,7 +326,7 @@ public class FileWebService extends BaseWebService { // FIXME TODO: check if this user is allowed to change this file log.debug("rename " + id); - FileItem f = getDao().rename(id, name); + FileItem f = getFileDao().rename(id, name); return f == null ? null : new FileItemDTO(f); } else { throw ServiceException.NO_PERMISSION; @@ -369,7 +365,7 @@ public class FileWebService extends BaseWebService { if (AuthLevelUtil.hasUserLevel(getRights(userId))) { // FIXME TODO A test is required that checks if the user is allowed to move the file log.debug("move " + id); - FileItem f = getDao().move(id, parentId, userId, roomId); + FileItem f = getFileDao().move(id, parentId, userId, roomId); return f == null ? null : new FileItemDTO(f); } else { throw ServiceException.NO_PERMISSION; http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1d55047c/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/RoomWebService.java ---------------------------------------------------------------------- diff --git a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/RoomWebService.java b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/RoomWebService.java index 3b29664..25c3914 100644 --- a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/RoomWebService.java +++ b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/RoomWebService.java @@ -53,6 +53,7 @@ import org.apache.openmeetings.db.dto.room.RoomDTO; import org.apache.openmeetings.db.entity.room.Invitation; import org.apache.openmeetings.db.entity.room.Invitation.MessageType; import org.apache.openmeetings.db.entity.room.Room; +import org.apache.openmeetings.db.entity.room.RoomFile; import org.apache.openmeetings.db.entity.server.Sessiondata; import org.apache.openmeetings.db.entity.user.User; import org.apache.openmeetings.db.util.AuthLevelUtil; @@ -129,6 +130,26 @@ public class RoomWebService extends BaseWebService { } } + /* + * This method is required to set additional fields on room sub-objects + * for ex: RoomFile.roomId + */ + private Room updateRtoRoom(Room r, Long userId) { + if (r.getFiles() == null) { + r.setFiles(new ArrayList<>()); + } + RoomDao roomDao = getRoomDao(); + if (r.getId() == null) { + List<RoomFile> files = r.getFiles(); + r.setFiles(null); + r = roomDao.update(r, userId); + r.setFiles(files); + } + for (RoomFile rf : r.getFiles()) { + rf.setRoomId(r.getId()); + } + return roomDao.update(r, userId); + } /** * Checks if a room with this exteralRoomId + externalRoomType does exist, * if yes it returns the room id if not, it will create the room and then @@ -167,10 +188,10 @@ public class RoomWebService extends BaseWebService { if (room == null) { return null; } else { - r = room.get(); + r = room.get(getFileDao()); r.setExternalType(externalType); r.setExternalId(externalId); - r = roomDao.update(r, userId); + r = updateRtoRoom(r, userId); return new RoomDTO(r); } } else { @@ -206,8 +227,8 @@ public class RoomWebService extends BaseWebService { Sessiondata sd = check(sid); Long userId = sd.getUserId(); if (AuthLevelUtil.hasWebServiceLevel(getRights(userId))) { - Room r = room.get(); - r = getRoomDao().update(r, userId); + Room r = room.get(getFileDao()); + r = updateRtoRoom(r, userId);; return new RoomDTO(r); } else { throw NO_PERMISSION;
