2 * Copyright 2008, 2009 Electronic Business Systems Ltd.
4 * This file is part of GSS.
6 * GSS is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
11 * GSS is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with GSS. If not, see <http://www.gnu.org/licenses/>.
19 package gr.ebs.gss.server.soap;
21 import gr.ebs.gss.client.exceptions.DuplicateNameException;
22 import gr.ebs.gss.client.exceptions.GSSIOException;
23 import gr.ebs.gss.client.exceptions.InsufficientPermissionsException;
24 import gr.ebs.gss.client.exceptions.ObjectNotFoundException;
25 import gr.ebs.gss.client.exceptions.QuotaExceededException;
26 import gr.ebs.gss.server.domain.FileHeader;
27 import gr.ebs.gss.server.domain.User;
28 import gr.ebs.gss.server.domain.dto.FileHeaderDTO;
29 import gr.ebs.gss.server.domain.dto.FolderDTO;
30 import gr.ebs.gss.server.domain.dto.GroupDTO;
31 import gr.ebs.gss.server.domain.dto.PermissionDTO;
32 import gr.ebs.gss.server.domain.dto.UserDTO;
33 import gr.ebs.gss.server.ejb.ExternalAPI;
34 import gr.ebs.gss.server.ejb.GSSDAO;
37 import java.io.IOException;
38 import java.util.Date;
39 import java.util.List;
42 import javax.activation.DataHandler;
43 import javax.activation.FileDataSource;
45 import javax.ejb.Stateless;
46 import javax.jws.WebMethod;
47 import javax.jws.WebParam;
48 import javax.jws.WebService;
49 import javax.xml.bind.annotation.XmlMimeType;
57 @WebService(name="GSSWSAPI")
58 public class WSAPIBean implements WSAPIRemote{
65 * @see gr.ebs.gss.server.soap.WSAPIRemote#copyFile(java.lang.Long, java.lang.Long, java.lang.Long, java.lang.String)
67 @WebMethod(operationName="copyFile")
69 public void copyFile(@WebParam(name="userId") Long userId, @WebParam(name="fileId") Long fileId, @WebParam(name="destId") Long destId, @WebParam(name="destName") String destName) throws ObjectNotFoundException, DuplicateNameException, GSSIOException, InsufficientPermissionsException, QuotaExceededException {
70 api.copyFile(userId, fileId, destId, destName);
75 * @see gr.ebs.gss.server.soap.WSAPIRemote#copyFolder(java.lang.Long, java.lang.Long, java.lang.Long, java.lang.String)
77 @WebMethod(operationName="copyFolder")
79 public void copyFolder(@WebParam(name="userId") Long userId, @WebParam(name="folderId") Long folderId, @WebParam(name="destId") Long destId, @WebParam(name="destName") String destName) throws ObjectNotFoundException, DuplicateNameException, InsufficientPermissionsException, GSSIOException, QuotaExceededException {
80 api.copyFolderStructure(userId, folderId, destId, destName);
85 * @see gr.ebs.gss.server.soap.WSAPIRemote#createFile(java.lang.Long, java.lang.Long, java.lang.String, java.lang.String, java.io.InputStream)
87 @WebMethod(operationName="createFile")
88 @XmlMimeType(value = "application/octet-stream")
90 public void createFile(@WebParam(name="userId")Long userId, @WebParam(name="folderId")Long folderId, @WebParam(name="name")String name, @WebParam(name="mimeType")String mimeType, @WebParam(name="stream")DataHandler stream) throws DuplicateNameException, ObjectNotFoundException, GSSIOException, InsufficientPermissionsException, QuotaExceededException {
92 FileHeaderDTO file = api.createFile(userId, folderId, name, mimeType, stream.getInputStream());
93 User user = api.getUser(userId);
94 api.updateAccounting(user, new Date(), file.getFileSize());
95 } catch (IOException e) {
96 throw new GSSIOException(e);
102 * @see gr.ebs.gss.server.soap.WSAPIRemote#createFolder(java.lang.Long, java.lang.Long, java.lang.String)
104 @WebMethod(operationName="createFolder")
106 public void createFolder(@WebParam(name="userId")Long userId, @WebParam(name="parentId")Long parentId, @WebParam(name="name")String name) throws DuplicateNameException, ObjectNotFoundException, InsufficientPermissionsException {
107 api.createFolder(userId, parentId, name);
112 * @see gr.ebs.gss.server.soap.WSAPIRemote#createGroup(java.lang.Long, java.lang.String)
114 @WebMethod(operationName="createGroup")
116 public void createGroup(@WebParam(name="userId") Long userId, @WebParam(name="name") String name) throws ObjectNotFoundException, DuplicateNameException {
117 api.createGroup(userId, name);
122 * @see gr.ebs.gss.server.soap.WSAPIRemote#createTag(java.lang.Long, java.lang.Long, java.lang.String)
124 @WebMethod(operationName="createTag")
126 public void createTag(@WebParam(name="userId") Long userId, @WebParam(name="fileHeaderId") Long fileHeaderId, @WebParam(name="tag") String tag) throws ObjectNotFoundException {
127 api.createTag(userId, fileHeaderId, tag);
132 * @see gr.ebs.gss.server.soap.WSAPIRemote#deleteFile(java.lang.Long, java.lang.Long)
134 @WebMethod(operationName="deleteFile")
136 public void deleteFile(@WebParam(name="userId") Long userId, @WebParam(name="fileId") Long fileId) throws ObjectNotFoundException, InsufficientPermissionsException {
137 api.deleteFile(userId, fileId);
142 * @see gr.ebs.gss.server.soap.WSAPIRemote#deleteFolder(java.lang.Long, java.lang.Long)
144 @WebMethod(operationName="deleteFolder")
146 public void deleteFolder(@WebParam(name="userId") Long userId, @WebParam(name="folderId") Long folderId) throws InsufficientPermissionsException, ObjectNotFoundException {
147 api.deleteFolder(userId, folderId);
152 * @see gr.ebs.gss.server.soap.WSAPIRemote#deleteGroup(java.lang.Long, java.lang.Long)
154 @WebMethod(operationName="deleteGroup")
156 public void deleteGroup(@WebParam(name="userId") Long userId, @WebParam(name="groupId") Long groupId) throws ObjectNotFoundException, InsufficientPermissionsException {
157 api.deleteGroup(userId, groupId);
162 * @see gr.ebs.gss.server.soap.WSAPIRemote#emptyTrash(java.lang.Long)
164 @WebMethod(operationName="emptyTrash")
166 public void emptyTrash( @WebParam(name="userId") Long userId) throws ObjectNotFoundException, InsufficientPermissionsException {
167 api.emptyTrash(userId);
172 * @see gr.ebs.gss.server.soap.WSAPIRemote#getDeletedFiles(java.lang.Long)
174 @WebMethod(operationName="getDeletedFiles")
176 public FileHeaderDTO[] getDeletedFiles( @WebParam(name="userId") Long userId) throws ObjectNotFoundException {
177 List<FileHeaderDTO> res = api.getDeletedFiles(userId);
178 return res.toArray(new FileHeaderDTO[res.size()]);
182 * @see gr.ebs.gss.server.soap.WSAPIRemote#getDeletedRootFolders(java.lang.Long)
184 @WebMethod(operationName="getDeletedRootFolders")
186 public FolderDTO[] getDeletedRootFolders(@WebParam(name="userId") Long userId) throws ObjectNotFoundException {
187 List<FolderDTO> res = api.getDeletedRootFolders(userId);
188 return res.toArray(new FolderDTO[res.size()]);
192 * @see gr.ebs.gss.server.soap.WSAPIRemote#getFile(java.lang.Long, java.lang.Long)
194 @WebMethod(operationName="getFile")
196 public FileHeaderDTO getFile(@WebParam(name="userId") Long userId, @WebParam(name="fileId") Long fileId) throws ObjectNotFoundException, InsufficientPermissionsException {
197 return api.getFile(userId, fileId);
201 * @see gr.ebs.gss.server.soap.WSAPIRemote#getFileContents(java.lang.Long, java.lang.Long)
203 @WebMethod(operationName="getFileContents")
205 public @XmlMimeType(value = "application/octet-stream")DataHandler getFileContents(@WebParam(name="userId") Long userId, @WebParam(name="fileId") Long fileId) throws ObjectNotFoundException, InsufficientPermissionsException {
207 throw new ObjectNotFoundException("No user specified");
209 throw new ObjectNotFoundException("No file specified");
211 final FileHeader header = dao.getEntityById(FileHeader.class, fileId);
212 final User user = dao.getEntityById(User.class, userId);
213 if (!header.hasReadPermission(user))
214 throw new InsufficientPermissionsException("You don't have the necessary permissions");
216 File f = new File(header.getCurrentBody().getStoredFilePath());
217 return new DataHandler(new FileDataSource(f));
221 * @see gr.ebs.gss.server.soap.WSAPIRemote#getFiles(java.lang.Long, java.lang.Long)
223 @WebMethod(operationName="getFiles")
225 public FileHeaderDTO[] getFiles(@WebParam(name="userId") Long userId, @WebParam(name="folderId") Long folderId) throws ObjectNotFoundException, InsufficientPermissionsException {
226 List<FileHeaderDTO> res = api.getFiles(userId, folderId, true);
227 return res.toArray(new FileHeaderDTO[res.size()]);
231 * @see gr.ebs.gss.server.soap.WSAPIRemote#getFolder(java.lang.Long, java.lang.Long)
233 @WebMethod(operationName="getFolder")
235 public FolderDTO getFolder(@WebParam(name="userId") Long userId, @WebParam(name="folderId") Long folderId) throws ObjectNotFoundException, InsufficientPermissionsException {
236 return api.getFolder(userId, folderId);
240 * @see gr.ebs.gss.server.soap.WSAPIRemote#getGroup(java.lang.Long)
242 @WebMethod(operationName="getGroup")
244 public GroupDTO getGroup(@WebParam(name="groupId") Long groupId) throws ObjectNotFoundException {
245 return api.getGroup(groupId);
249 * @see gr.ebs.gss.server.soap.WSAPIRemote#getGroups(java.lang.Long)
251 @WebMethod(operationName="getGroups")
253 public GroupDTO[] getGroups(@WebParam(name="userId") Long userId) throws ObjectNotFoundException {
254 List<GroupDTO> res = api.getGroups(userId);
255 return res.toArray(new GroupDTO[res.size()]);
260 * @see gr.ebs.gss.server.soap.WSAPIRemote#getRootFolder(java.lang.Long)
262 @WebMethod(operationName="getRootFolder")
264 public FolderDTO getRootFolder(@WebParam(name="userId") Long userId) throws ObjectNotFoundException {
265 return api.getRootFolder(userId);
269 * @see gr.ebs.gss.server.soap.WSAPIRemote#getSubfolders(java.lang.Long, java.lang.Long)
271 @WebMethod(operationName="getSubFolders")
273 public FolderDTO[] getSubfolders(@WebParam(name="userId") Long userId, @WebParam(name="folderId") Long folderId) throws ObjectNotFoundException, InsufficientPermissionsException {
274 List<FolderDTO> res = api.getSubfolders(userId, folderId);
275 return res.toArray(new FolderDTO[res.size()]);
281 * @see gr.ebs.gss.server.soap.WSAPIRemote#getUserTags(java.lang.Long)
283 @WebMethod(operationName="getUserTags")
285 public String[] getUserTags(@WebParam(name="userId") Long userId) throws ObjectNotFoundException {
286 Set<String> res = api.getUserTags(userId);
287 return res.toArray(new String[res.size()]);
291 * @see gr.ebs.gss.server.soap.WSAPIRemote#getUsers(java.lang.Long, java.lang.Long)
293 @WebMethod(operationName="getUsers")
295 public UserDTO[] getUsers(@WebParam(name="userId") Long userId, @WebParam(name="groupId") Long groupId) throws ObjectNotFoundException {
296 List<UserDTO> res = api.getUsers(userId, groupId);
297 return res.toArray(new UserDTO[res.size()]);
301 * @see gr.ebs.gss.server.soap.WSAPIRemote#modifyFolder(java.lang.Long, java.lang.Long, java.lang.String)
303 @WebMethod(operationName="modifyFolder")
305 public void modifyFolder(@WebParam(name="userId") Long userId, @WebParam(name="folderId") Long folderId, @WebParam(name="folderName") String folderName) throws InsufficientPermissionsException, ObjectNotFoundException, DuplicateNameException {
306 api.modifyFolder(userId, folderId, folderName);
311 * @see gr.ebs.gss.server.soap.WSAPIRemote#moveFile(java.lang.Long, java.lang.Long, java.lang.Long, java.lang.String)
313 @WebMethod(operationName="moveFile")
315 public void moveFile(@WebParam(name="userId") Long userId, @WebParam(name="fileId") Long fileId, @WebParam(name="destId") Long destId, @WebParam(name="destName") String destName) throws InsufficientPermissionsException, ObjectNotFoundException, DuplicateNameException, GSSIOException, QuotaExceededException {
316 api.moveFile(userId, fileId, destId, destName);
321 * @see gr.ebs.gss.server.soap.WSAPIRemote#moveFileToTrash(java.lang.Long, java.lang.Long)
323 @WebMethod(operationName="moveFileToTrash")
325 public void moveFileToTrash(@WebParam(name="userId") Long userId, @WebParam(name="fileId") Long fileId) throws ObjectNotFoundException, InsufficientPermissionsException {
326 api.moveFileToTrash(userId, fileId);
331 * @see gr.ebs.gss.server.soap.WSAPIRemote#moveFolder(java.lang.Long, java.lang.Long, java.lang.Long, java.lang.String)
333 @WebMethod(operationName="moveFolder")
335 public void moveFolder(@WebParam(name="userId") Long userId, @WebParam(name="folderId") Long folderId, @WebParam(name="destId") Long destId, @WebParam(name="destName") String destName) throws ObjectNotFoundException, DuplicateNameException, InsufficientPermissionsException, GSSIOException, QuotaExceededException {
336 api.moveFolder(userId, folderId, destId, destName);
341 * @see gr.ebs.gss.server.soap.WSAPIRemote#moveFolderToTrash(java.lang.Long, java.lang.Long)
343 @WebMethod(operationName="moveFolderToTrash")
345 public void moveFolderToTrash(@WebParam(name="userId") Long userId, @WebParam(name="folderId") Long folderId) throws ObjectNotFoundException, InsufficientPermissionsException {
346 api.moveFolderToTrash(userId, folderId);
351 * @see gr.ebs.gss.server.soap.WSAPIRemote#removeFileFromTrash(java.lang.Long, java.lang.Long)
353 @WebMethod(operationName="restoreFileFromTrash")
355 public void restoreFileFromTrash(@WebParam(name="userId") Long userId, @WebParam(name="fileId") Long fileId) throws ObjectNotFoundException, InsufficientPermissionsException {
356 api.removeFileFromTrash(userId, fileId);
360 * @see gr.ebs.gss.server.soap.WSAPIRemote#removeFolderFromTrash(java.lang.Long, java.lang.Long)
362 @WebMethod(operationName="restoreFolderFromTrash")
364 public void restoreFolderFromTrash(@WebParam(name="userId") Long userId, @WebParam(name="folderId") Long folderId) throws ObjectNotFoundException, InsufficientPermissionsException {
365 api.removeFolderFromTrash(userId, folderId);
369 * @see gr.ebs.gss.server.soap.WSAPIRemote#updateFile(java.lang.Long, java.lang.Long, java.lang.String, java.lang.String)
371 @WebMethod(operationName="updateFile")
373 public void updateFile(@WebParam(name="userId") Long userId, @WebParam(name="fileId") Long fileId, @WebParam(name="name") String name, @WebParam(name="tagSet") String tagSet) throws ObjectNotFoundException, InsufficientPermissionsException {
374 api.updateFile(userId, fileId, name, tagSet);
378 * @see gr.ebs.gss.server.soap.WSAPIRemote#updateFileContents(java.lang.Long, java.lang.Long, java.lang.String, java.io.InputStream)
380 @WebMethod(operationName="updateFileContents")
381 @XmlMimeType(value = "application/octet-stream")
383 public void updateFileContents(@WebParam(name="userId") Long userId, @WebParam(name="fileId") Long fileId, @WebParam(name="mimeType") String mimeType, @WebParam(name="resourceStream") DataHandler resourceInputStream) throws ObjectNotFoundException, GSSIOException, InsufficientPermissionsException, QuotaExceededException {
384 File uploadedFile = null;
386 uploadedFile = api.uploadFile(resourceInputStream.getInputStream(), userId);
387 } catch (IOException ex) {
388 throw new GSSIOException(ex, false);
390 FileHeaderDTO file = api.updateFileContents(userId, fileId, mimeType, uploadedFile);
391 User user = api.getUser(userId);
392 api.updateAccounting(user, new Date(), file.getFileSize());
396 * @see gr.ebs.gss.server.soap.WSAPIRemote#addUserToGroup(java.lang.Long, java.lang.Long, java.lang.Long)
400 public void addUserToGroup(Long userId, Long groupId, Long userToAddId) throws ObjectNotFoundException, DuplicateNameException, InsufficientPermissionsException {
401 api.addUserToGroup(userId, groupId, userToAddId);
407 * @see gr.ebs.gss.server.soap.WSAPIRemote#findUser(java.lang.String)
411 public UserDTO getUser(String username) {
412 User user = api.findUser(username);
415 return user.getDTO();
419 * @see gr.ebs.gss.server.soap.WSAPIRemote#getFilePermissions(java.lang.Long, java.lang.Long)
423 public Set<PermissionDTO> getFilePermissions(Long userId, Long fileId) throws ObjectNotFoundException, InsufficientPermissionsException {
424 return api.getFilePermissions(userId, fileId);
428 * @see gr.ebs.gss.server.soap.WSAPIRemote#getFolderPermissions(java.lang.Long, java.lang.Long)
432 public Set<PermissionDTO> getFolderPermissions(Long userId, Long folderId) throws ObjectNotFoundException, InsufficientPermissionsException {
433 return api.getFolderPermissions(userId, folderId);
437 * @see gr.ebs.gss.server.soap.WSAPIRemote#getSharedFiles(java.lang.Long)
441 public List<FileHeaderDTO> getSharedFiles(Long userId) throws ObjectNotFoundException {
442 return api.getSharedFilesNotInSharedFolders(userId);
446 * @see gr.ebs.gss.server.soap.WSAPIRemote#getSharedFiles(java.lang.Long, java.lang.Long)
450 public List<FileHeaderDTO> getSharedFilesOfUser(Long ownerId, Long callingUserId) throws ObjectNotFoundException {
451 return api.getSharedFiles(ownerId, callingUserId);
455 * @see gr.ebs.gss.server.soap.WSAPIRemote#getSharedRootFolders(java.lang.Long)
459 public List<FolderDTO> getSharedRootFolders(Long userId) throws ObjectNotFoundException {
460 return api.getSharedRootFolders(userId);
464 * @see gr.ebs.gss.server.soap.WSAPIRemote#getSharedRootFolders(java.lang.Long, java.lang.Long)
468 public List<FolderDTO> getSharedRootFoldersOfUser(Long ownerId, Long callingUserId) throws ObjectNotFoundException {
469 return api.getSharedRootFolders(ownerId, callingUserId);
473 * @see gr.ebs.gss.server.soap.WSAPIRemote#getSharedSubfolders(java.lang.Long, java.lang.Long)
477 public List<FolderDTO> getSharedSubfolders(Long userId, Long folderId) throws ObjectNotFoundException {
478 return api.getSharedSubfolders(userId, folderId);
484 * @see gr.ebs.gss.server.soap.WSAPIRemote#getUsersSharingFoldersForUser(java.lang.Long)
488 public List<UserDTO> getUsersSharingFoldersForUser(Long userId) throws ObjectNotFoundException {
489 return api.getUsersSharingFoldersForUser(userId);
494 * @see gr.ebs.gss.server.soap.WSAPIRemote#removeMemberFromGroup(java.lang.Long, java.lang.Long, java.lang.Long)
498 public void removeMemberFromGroup(Long userId, Long groupId, Long memberId) throws ObjectNotFoundException, InsufficientPermissionsException {
499 api.removeMemberFromGroup(userId, groupId, memberId);
505 * @see gr.ebs.gss.server.soap.WSAPIRemote#setFilePermissions(java.lang.Long, java.lang.Long, java.util.Set)
509 public void setFilePermissions(Long userId, Long fileId, boolean readForAll, Set<PermissionDTO> permissions) throws ObjectNotFoundException, InsufficientPermissionsException {
510 api.setFilePermissions(userId, fileId, readForAll, permissions);
515 * @see gr.ebs.gss.server.soap.WSAPIRemote#setFolderPermissions(java.lang.Long, java.lang.Long, java.util.Set)
519 public void setFolderPermissions(Long userId, Long folderId, Set<PermissionDTO> permissions) throws ObjectNotFoundException, InsufficientPermissionsException {
520 api.setFolderPermissions(userId, folderId, permissions);