Changeset 4529 for DASISH/t5.6/backend/annotator-backend/trunk/annotator-backend/src/main/java/eu/dasish/annotation/backend/rest/NotebookResource.java
- Timestamp:
- 02/17/14 17:19:07 (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
DASISH/t5.6/backend/annotator-backend/trunk/annotator-backend/src/main/java/eu/dasish/annotation/backend/rest/NotebookResource.java
r4523 r4529 23 23 import eu.dasish.annotation.schema.NotebookInfoList; 24 24 import eu.dasish.annotation.schema.ObjectFactory; 25 import eu.dasish.annotation.schema.Permission; 25 26 import eu.dasish.annotation.schema.ReferenceList; 26 27 import java.io.IOException; … … 67 68 @Context 68 69 protected Providers providers; 69 private final Logger logger = LoggerFactory.getLogger(AnnotationResource.class);70 70 private final Logger loggerServer = LoggerFactory.getLogger(HttpServletResponse.class); 71 private final VerboseOutput verboseOutput = new VerboseOutput(httpServletResponse, loggerServer); 71 72 72 73 public NotebookResource() { 73 74 } 74 75 76 // changed w.r.t.the spec, query parameter persmission is added 75 77 @GET 76 78 @Produces(MediaType.APPLICATION_XML) … … 78 80 @Transactional(readOnly = true) 79 81 public JAXBElement<NotebookInfoList> getNotebookInfos(@QueryParam("permission") String permissionMode) throws IOException { 80 81 URI baseURI = uriInfo.getBaseUri(); 82 String baseURIstr = baseURI.toString(); 83 dbIntegrityService.setServiceURI(baseURIstr); 84 85 String remoteUser = httpServletRequest.getRemoteUser(); 86 final Number userID = dbIntegrityService.getUserInternalIDFromRemoteID(remoteUser); 87 if (userID != null) { 82 dbIntegrityService.setServiceURI(uriInfo.getBaseUri().toString()); 83 String remoteUser = httpServletRequest.getRemoteUser(); 84 final Number principalID = dbIntegrityService.getUserInternalIDFromRemoteID(remoteUser); 85 if (principalID != null) { 88 86 if (permissionMode.equalsIgnoreCase("reader") || permissionMode.equalsIgnoreCase("writer") || permissionMode.equalsIgnoreCase("owner")) { 89 NotebookInfoList notebookInfos = dbIntegrityService.getNotebooks( userID, permissionMode);87 NotebookInfoList notebookInfos = dbIntegrityService.getNotebooks(principalID, permissionMode); 90 88 return new ObjectFactory().createNotebookInfoList(notebookInfos); 91 89 } else { 92 loggerServer.debug(httpServletResponse.SC_BAD_REQUEST + ": '" + permissionMode + "' is an invalid permission value, which must be either owner, or reader, or writer."); 93 httpServletResponse.sendError(httpServletResponse.SC_BAD_REQUEST, permissionMode + "' is an invalid permission value, which must be either owner, or reader, or writer."); 94 return null; 95 } 96 } else { 97 loggerServer.debug(httpServletResponse.SC_NOT_FOUND + ": the logged-in user is not found in the database"); 98 httpServletResponse.sendError(HttpServletResponse.SC_NOT_FOUND, "The logged-in user is not found in the database"); 99 return null; 100 } 90 verboseOutput.sendFailureMessage(VerboseOutput.INVALID_PERMISSION_MODE(permissionMode), httpServletResponse.SC_BAD_REQUEST); 91 } 92 } else { 93 verboseOutput.sendFailureMessage(VerboseOutput.REMOTE_PRINCIPAL_NOT_FOUND, httpServletResponse.SC_NOT_FOUND); 94 } 95 return (new ObjectFactory()).createNotebookInfoList(new NotebookInfoList()); 101 96 } 102 97 … … 107 102 public JAXBElement<ReferenceList> getOwnedNotebooks() throws IOException { 108 103 109 URI baseURI = uriInfo.getBaseUri(); 110 String baseURIstr = baseURI.toString(); 111 dbIntegrityService.setServiceURI(baseURIstr); 104 dbIntegrityService.setServiceURI(uriInfo.getBaseUri().toString()); 112 105 113 106 String remoteUser = httpServletRequest.getRemoteUser(); … … 117 110 return new ObjectFactory().createReferenceList(references); 118 111 } else { 119 loggerServer.debug(httpServletResponse.SC_NOT_FOUND + ": the logged-in user is not found in the database"); 120 httpServletResponse.sendError(HttpServletResponse.SC_NOT_FOUND, "The logged-in user is not found in the database"); 121 return null; 122 } 123 } 124 125 @GET 126 @Produces(MediaType.APPLICATION_XML) 127 @Path("{notebookid: " + BackendConstants.regExpIdentifier + "}/targets") 128 @Transactional(readOnly = true) 129 public JAXBElement<Notebook> getNotebook(@PathParam("notebookid") String externalIdentifier) throws IOException { 130 131 URI baseURI = uriInfo.getBaseUri(); 132 String baseURIstr = baseURI.toString(); 133 dbIntegrityService.setServiceURI(baseURIstr); 134 135 String remoteUser = httpServletRequest.getRemoteUser(); 136 final Number userID = dbIntegrityService.getUserInternalIDFromRemoteID(remoteUser); 137 if (userID != null) { 112 verboseOutput.sendFailureMessage(VerboseOutput.REMOTE_PRINCIPAL_NOT_FOUND, httpServletResponse.SC_NOT_FOUND); 113 } 114 return new ObjectFactory().createReferenceList(new ReferenceList()); 115 } 116 117 @GET 118 @Produces(MediaType.APPLICATION_XML) 119 @Path("{notebookid: " + BackendConstants.regExpIdentifier + "}/{permission}") 120 @Transactional(readOnly = true) 121 public JAXBElement<ReferenceList> getPrincipals(@PathParam("notebookid") String externalIdentifier, @PathParam("permission") String permissionMode) throws IOException { 122 123 dbIntegrityService.setServiceURI(uriInfo.getBaseUri().toString()); 124 125 String remoteUser = httpServletRequest.getRemoteUser(); 126 final Number principalID = dbIntegrityService.getUserInternalIDFromRemoteID(remoteUser); 127 if (principalID != null) { 138 128 Number notebookID = dbIntegrityService.getNotebookInternalIdentifier(UUID.fromString(externalIdentifier)); 139 129 if (notebookID != null) { 140 Notebook notebook = dbIntegrityService.getNotebook(notebookID); 141 return new ObjectFactory().createNotebook(notebook); 142 } else { 143 loggerServer.debug(HttpServletResponse.SC_NOT_FOUND + ": The notebook with the given id " + externalIdentifier + " is not found in the database"); 144 httpServletResponse.sendError(HttpServletResponse.SC_NOT_FOUND, "The notebook with the given id " + externalIdentifier + " is not found in the database"); 145 return null; 146 } 147 } else { 148 loggerServer.debug(httpServletResponse.SC_NOT_FOUND + ": the logged-in user is not found in the database"); 149 httpServletResponse.sendError(HttpServletResponse.SC_NOT_FOUND, "The logged-in user is not found in the database"); 150 return null; 151 } 130 if (dbIntegrityService.hasAccess(notebookID, principalID, Permission.fromValue("reader"))) { 131 ReferenceList principals = dbIntegrityService.getPrincipals(notebookID, permissionMode); 132 return new ObjectFactory().createReferenceList(principals); 133 } else { 134 verboseOutput.sendFailureMessage(VerboseOutput.FORBIDDEN_NOTEBOOK_READING(externalIdentifier), HttpServletResponse.SC_FORBIDDEN); 135 } 136 } else { 137 verboseOutput.sendFailureMessage(VerboseOutput.NOTEBOOK_NOT_FOUND(externalIdentifier), HttpServletResponse.SC_NOT_FOUND); 138 } 139 } else { 140 verboseOutput.sendFailureMessage(VerboseOutput.REMOTE_PRINCIPAL_NOT_FOUND, HttpServletResponse.SC_NOT_FOUND); 141 } 142 143 return new ObjectFactory().createReferenceList(new ReferenceList()); 144 } 145 146 // Notebook and NotebookInfo (metadata) schemata may be changed 147 // 1) we do not have information "private notebook" directly in the xml, but we have readers and writers in the schema 148 //so if both are empty then we see that it is private for the owner 149 // or shall we change the scheme? for notebooks 150 // 2) d we need to include the reference list of annotations in teh metadata of the notebook 151 @GET 152 @Produces(MediaType.APPLICATION_XML) 153 @Path("{notebookid: " + BackendConstants.regExpIdentifier + "}/metadata") 154 @Transactional(readOnly = true) 155 public JAXBElement<Notebook> getNotebook(@PathParam("notebookid") String externalIdentifier) throws IOException { 156 dbIntegrityService.setServiceURI(uriInfo.getBaseUri().toString()); 157 String remoteUser = httpServletRequest.getRemoteUser(); 158 final Number principalID = dbIntegrityService.getUserInternalIDFromRemoteID(remoteUser); 159 if (principalID != null) { 160 Number notebookID = dbIntegrityService.getNotebookInternalIdentifier(UUID.fromString(externalIdentifier)); 161 if (notebookID != null) { 162 if (dbIntegrityService.hasAccess(notebookID, principalID, Permission.fromValue("reader"))) { 163 Notebook notebook = dbIntegrityService.getNotebook(notebookID); 164 return new ObjectFactory().createNotebook(notebook); 165 } else { 166 verboseOutput.sendFailureMessage(VerboseOutput.FORBIDDEN_NOTEBOOK_READING(externalIdentifier), HttpServletResponse.SC_FORBIDDEN); 167 } 168 } else { 169 verboseOutput.sendFailureMessage(VerboseOutput.NOTEBOOK_NOT_FOUND(externalIdentifier), HttpServletResponse.SC_NOT_FOUND); 170 } 171 } else { 172 verboseOutput.sendFailureMessage(VerboseOutput.REMOTE_PRINCIPAL_NOT_FOUND, HttpServletResponse.SC_NOT_FOUND); 173 } 174 return new ObjectFactory().createNotebook(new Notebook()); 175 } 176 177 @GET 178 @Produces(MediaType.APPLICATION_XML) 179 @Path("{notebookid: " + BackendConstants.regExpIdentifier + "}") 180 @Transactional(readOnly = true) 181 public JAXBElement<ReferenceList> getNotebookAnnotations(@PathParam("notebookid") String externalIdentifier, 182 @QueryParam("maximumAnnotations") int maximumAnnotations, 183 @QueryParam("startAnnotation") int startAnnotations, 184 @QueryParam("orderBy") String orderBy, 185 @QueryParam("descending") boolean desc) throws IOException { 186 187 dbIntegrityService.setServiceURI(uriInfo.getBaseUri().toString()); 188 189 String remoteUser = httpServletRequest.getRemoteUser(); 190 final Number principalID = dbIntegrityService.getUserInternalIDFromRemoteID(remoteUser); 191 if (principalID != null) { 192 Number notebookID = dbIntegrityService.getNotebookInternalIdentifier(UUID.fromString(externalIdentifier)); 193 if (notebookID != null) { 194 if (dbIntegrityService.hasAccess(notebookID, principalID, Permission.fromValue("reader"))) { 195 ReferenceList annotations = dbIntegrityService.getAnnotationsForNotebook(notebookID, startAnnotations, maximumAnnotations, orderBy, desc); 196 return new ObjectFactory().createReferenceList(annotations); 197 } else { 198 verboseOutput.sendFailureMessage(VerboseOutput.FORBIDDEN_NOTEBOOK_READING(externalIdentifier), HttpServletResponse.SC_FORBIDDEN); 199 } 200 } else { 201 verboseOutput.sendFailureMessage(VerboseOutput.NOTEBOOK_NOT_FOUND(externalIdentifier), HttpServletResponse.SC_NOT_FOUND); 202 } 203 } else { 204 verboseOutput.sendFailureMessage(VerboseOutput.REMOTE_PRINCIPAL_NOT_FOUND, HttpServletResponse.SC_NOT_FOUND); 205 } 206 return new ObjectFactory().createReferenceList(new ReferenceList()); 152 207 } 153 208 }
Note: See TracChangeset
for help on using the changeset viewer.