Ignore:
Timestamp:
02/17/14 17:19:07 (10 years ago)
Author:
olhsha
Message:

refactoring verbose server output.

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  
    2323import eu.dasish.annotation.schema.NotebookInfoList;
    2424import eu.dasish.annotation.schema.ObjectFactory;
     25import eu.dasish.annotation.schema.Permission;
    2526import eu.dasish.annotation.schema.ReferenceList;
    2627import java.io.IOException;
     
    6768    @Context
    6869    protected Providers providers;
    69     private final Logger logger = LoggerFactory.getLogger(AnnotationResource.class);
    7070    private final Logger loggerServer = LoggerFactory.getLogger(HttpServletResponse.class);
     71    private final VerboseOutput verboseOutput = new VerboseOutput(httpServletResponse, loggerServer);
    7172
    7273    public NotebookResource() {
    7374    }
    7475
     76    // changed w.r.t.the spec, query parameter persmission is added
    7577    @GET
    7678    @Produces(MediaType.APPLICATION_XML)
     
    7880    @Transactional(readOnly = true)
    7981    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) {
    8886            if (permissionMode.equalsIgnoreCase("reader") || permissionMode.equalsIgnoreCase("writer") || permissionMode.equalsIgnoreCase("owner")) {
    89                 NotebookInfoList notebookInfos = dbIntegrityService.getNotebooks(userID, permissionMode);
     87                NotebookInfoList notebookInfos = dbIntegrityService.getNotebooks(principalID, permissionMode);
    9088                return new ObjectFactory().createNotebookInfoList(notebookInfos);
    9189            } 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());
    10196    }
    10297
     
    107102    public JAXBElement<ReferenceList> getOwnedNotebooks() throws IOException {
    108103
    109         URI baseURI = uriInfo.getBaseUri();
    110         String baseURIstr = baseURI.toString();
    111         dbIntegrityService.setServiceURI(baseURIstr);
     104        dbIntegrityService.setServiceURI(uriInfo.getBaseUri().toString());
    112105
    113106        String remoteUser = httpServletRequest.getRemoteUser();
     
    117110            return new ObjectFactory().createReferenceList(references);
    118111        } 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) {
    138128            Number notebookID = dbIntegrityService.getNotebookInternalIdentifier(UUID.fromString(externalIdentifier));
    139129            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());
    152207    }
    153208}
Note: See TracChangeset for help on using the changeset viewer.