Changeset 215


Ignore:
Timestamp:
03/04/10 12:11:07 (14 years ago)
Author:
oschonef
Message:
  • improve error handling
  • improve error messages and reporting
Location:
VirtualCollectionRegistry/trunk/VirtualCollectionRegistry/src/main/java/eu/clarin/cmdi/virtualcollectionregistry
Files:
2 added
2 deleted
14 edited

Legend:

Unmodified
Added
Removed
  • VirtualCollectionRegistry/trunk/VirtualCollectionRegistry/src/main/java/eu/clarin/cmdi/virtualcollectionregistry/VirtualCollectionNotFoundException.java

    r146 r215  
    44                VirtualCollectionRegistryException {
    55        private static final long serialVersionUID = 1L;
    6        
     6
    77        public VirtualCollectionNotFoundException(long id) {
    8                 super("virtual collection with id " + id + " not found");
     8                super("virtual collection with id " + id + " was not found");
    99        }
    1010
  • VirtualCollectionRegistry/trunk/VirtualCollectionRegistry/src/main/java/eu/clarin/cmdi/virtualcollectionregistry/VirtualCollectionRegistry.java

    r213 r215  
    2121import eu.clarin.cmdi.virtualcollectionregistry.model.VirtualCollectionValidator;
    2222import eu.clarin.cmdi.virtualcollectionregistry.query.ParsedQuery;
     23import eu.clarin.cmdi.virtualcollectionregistry.query.QueryException;
    2324
    2425public class VirtualCollectionRegistry {
     
    4647                logger.fine("initialize ...");
    4748                if (config == null) {
    48                         throw new IllegalArgumentException("config may not be null");
     49                        throw new NullPointerException("config == null");
    4950                }
    5051                for (String key : config.keySet()) {
     
    7374                        VirtualCollection vc) throws VirtualCollectionRegistryException {
    7475                if (principal == null) {
    75                         throw new IllegalArgumentException("principal == null");
     76                        throw new NullPointerException("principal == null");
    7677                }
    7778                if (vc == null) {
    78                         throw new IllegalArgumentException("vc == null");
     79                        throw new NullPointerException("vc == null");
    7980                }
    8081
     
    119120                        return vc.getId();
    120121                } catch (Exception e) {
    121                         logger.log(Level.SEVERE, "create", e);
    122                         throw new VirtualCollectionRegistryException("create", e);
    123                 }
    124         }
    125 
    126         public long updateVirtualCollection(Principal principal, long id, VirtualCollection vc)
    127                         throws VirtualCollectionRegistryException {
     122                        logger.log(Level.SEVERE,
     123                                           "error while creating virtual collection", e);
     124                        throw new VirtualCollectionRegistryException(
     125                                        "error while creating virtual collection", e);
     126                }
     127        }
     128
     129        public long updateVirtualCollection(Principal principal, long id,
     130                        VirtualCollection vc) throws VirtualCollectionRegistryException {
    128131                if (principal == null) {
    129                         throw new IllegalArgumentException("principal == null");
     132                        throw new NullPointerException("principal == null");
    130133                }
    131134                if (id <= 0) {
     
    133136                }
    134137                if (vc == null) {
    135                         throw new IllegalArgumentException("vc == null");
     138                        throw new NullPointerException("vc == null");
    136139                }
    137140               
     
    149152                        if (!c.getOwner().equalsPrincipal(principal)) {
    150153                                throw new VirtualCollectionRegistryPermissionException(
    151                                                 "permission denied for user " + principal.getName());
     154                                                "permission denied for user \"" +
     155                                                principal.getName() + "\"");
    152156                        }
    153157                        c.updateFrom(vc);
     
    179183                        throw e;
    180184                } catch (Exception e) {
    181                         logger.log(Level.SEVERE, "update", e);
    182                         throw new VirtualCollectionRegistryException("update", e);
     185                        logger.log(Level.SEVERE,
     186                       "error while updating virtual collection", e);
     187                        throw new VirtualCollectionRegistryException(
     188                                        "error while updating virtual collection", e);
    183189                }
    184190        }
     
    187193                        throws VirtualCollectionRegistryException {
    188194                if (principal == null) {
    189                         throw new IllegalArgumentException("principal == null");
     195                        throw new NullPointerException("principal == null");
    190196                }
    191197                if (id <= 0) {
     
    202208                        if (!vc.getOwner().equalsPrincipal(principal)) {
    203209                                throw new VirtualCollectionRegistryPermissionException(
    204                                                 "permission denied for user " + principal.getName());
     210                                                "permission denied for user \"" +
     211                                                principal.getName() + "\"");
    205212                        }
    206213                        em.remove(vc);
     
    210217                        throw e;
    211218                } catch (Exception e) {
    212                         logger.log(Level.SEVERE, "delete", e);
    213                         throw new VirtualCollectionRegistryException("delete", e);
     219                        logger.log(Level.SEVERE,
     220                                           "error while deleting virtual collection", e);
     221                        throw new VirtualCollectionRegistryException(
     222                                        "error while deleting virtual collection", e);
    214223                }
    215224        }
     
    234243                        throw e;
    235244                } catch (Exception e) {
    236                         logger.log(Level.SEVERE, "get", e);
    237                         throw new VirtualCollectionRegistryException("get", e);
     245                        logger.log(Level.SEVERE,
     246                                           "error while retrieving virtual collection", e);
     247                        throw new VirtualCollectionRegistryException(
     248                                        "error while retrieving virtual collection", e);
    238249                }
    239250        }
     
    251262                        em.getTransaction().commit();
    252263                        if (md == null) {
    253                                 throw new VirtualCollectionNotFoundException(id);
     264                                throw new VirtualCollectionMetadataNotFoundException(id);
    254265                        }
    255266                        return md;
     
    257268                        throw e;
    258269                } catch (Exception e) {
    259                         throw new VirtualCollectionRegistryException("get metadata", e);
     270                        logger.log(Level.SEVERE,
     271                                           "error while retrieving metadata resource", e);
     272                        throw new VirtualCollectionRegistryException(
     273                                        "error while retrieving metadata resource", e);
    260274                }
    261275                       
     
    297311                        }
    298312                        return new VirtualCollectionList(results, offset, (int) totalCount);
    299                 } catch (Exception e) {
    300                         logger.log(Level.SEVERE, "list", e);
    301                         throw new VirtualCollectionRegistryException("list", e);
     313                } catch (QueryException e) {
     314                        throw new VirtualCollectionRegistryUsageException(
     315                                "query invalid", e);
     316                } catch (Exception e) {
     317                        logger.log(Level.SEVERE,
     318                                           "error while enumerating virtual collections", e);
     319                        throw new VirtualCollectionRegistryException(
     320                                        "error while enumerating virtual collections", e);
    302321                } finally {
    303322                        em.getTransaction().commit();
     
    309328                        throws VirtualCollectionRegistryException {
    310329                if (principal == null) {
    311                         throw new IllegalArgumentException("principal == null");
     330                        throw new NullPointerException("principal == null");
    312331                }
    313332                EntityManager em = DataStore.instance().getEntityManager();
     
    318337                        User user = fetchUser(em, principal);
    319338                        if (user == null) {
    320                                 throw new VirtualCollectionRegistryException("user does not exist");
     339                                throw new VirtualCollectionRegistryPermissionException("user " +
     340                                                principal.getName() + " does not exist");
    321341                        }
    322342
     
    351371                        }
    352372                        return new VirtualCollectionList(results, offset, (int) totalCount);
     373                } catch (QueryException e) {
     374                        throw new VirtualCollectionRegistryUsageException(
     375                                "query invalid", e);
    353376                } catch (VirtualCollectionRegistryException e) {
    354377                        throw e;
    355378                } catch (Exception e) {
    356                         logger.log(Level.SEVERE, "list", e);
    357                         throw new VirtualCollectionRegistryException("list", e);
     379                        logger.log(Level.SEVERE,
     380                                           "error while enumerating virtual collections", e);
     381                        throw new VirtualCollectionRegistryException(
     382                                        "error while enumerating virtual collections", e);
    358383                } finally {
    359384                        em.getTransaction().commit();
  • VirtualCollectionRegistry/trunk/VirtualCollectionRegistry/src/main/java/eu/clarin/cmdi/virtualcollectionregistry/VirtualCollectionRegistryException.java

    r146 r215  
    55
    66        public VirtualCollectionRegistryException(String msg) {
    7                 super(msg);
     7                this(msg, null);
    88        }
    99       
  • VirtualCollectionRegistry/trunk/VirtualCollectionRegistry/src/main/java/eu/clarin/cmdi/virtualcollectionregistry/VirtualCollectionRegistryMarshaller.java

    r188 r215  
    7272                        VirtualCollection vc) throws IOException {
    7373                if (output == null) {
    74                         throw new IllegalArgumentException("output == null");
     74                        throw new NullPointerException("output == null");
    7575                }
    7676                try {
     
    9494                        String encoding) throws IOException {
    9595                if (input == null) {
    96                         throw new IllegalArgumentException("input == null");
     96                        throw new NullPointerException("input == null");
    9797                }
    9898                try {
     
    149149                        ClarinVirtualCollection vc) throws IOException {
    150150                if (output == null) {
    151                         throw new IllegalArgumentException("output == null");
     151                        throw new NullPointerException("output == null");
    152152                }
    153153                try {
     
    170170                        throws Exception {
    171171                if (format == null) {
    172                         throw new IllegalArgumentException("format == null");
     172                        throw new NullPointerException("format == null");
    173173                }
    174174                switch (format) {
     
    178178                        return jsonWriterFactory.createXMLStreamWriter(output, ENCODING);
    179179                default:
    180                         // this should never happen
    181                         throw new InternalError("bad writer format " + format);
     180                        // should never happen
     181                        throw new IllegalArgumentException("output format " + format
     182                                        + " is not supported");
    182183                } // switch
    183184        }
     
    186187                        String encoding) throws Exception {
    187188                if (format == null) {
    188                         throw new IllegalArgumentException("format == null");
     189                        throw new NullPointerException("format == null");
    189190                }
    190191                if (encoding == null) {
    191                         throw new IllegalArgumentException("encoding == null");
     192                        throw new NullPointerException("encoding == null");
    192193                }
    193194
     
    201202                        break;
    202203                default:
    203                         // this should never happen
    204                         throw new InternalError("bad reader format " + format);
     204                        // should never happen
     205                        throw new IllegalArgumentException("input format " + format
     206                                        + " is not supported");
    205207                } // switch
    206208
  • VirtualCollectionRegistry/trunk/VirtualCollectionRegistry/src/main/java/eu/clarin/cmdi/virtualcollectionregistry/model/ResourceMetadata.java

    r211 r215  
    5151        public void setName(String name) {
    5252                if (name == null) {
    53                         throw new IllegalArgumentException("name == null");
     53                        throw new NullPointerException("name == null");
    5454                }
    5555                this.name = name;
     
    8181        public void setRef(String ref) {
    8282                if (ref == null) {
    83                         throw new IllegalArgumentException("ref == null");
     83                        throw new NullPointerException("ref == null");
    8484                }
    8585                this.ref = ref;
     
    9393        public void setPid(String pid) {
    9494                if (pid == null) {
    95                         throw new IllegalArgumentException("pid == null");
     95                        throw new NullPointerException("pid == null");
    9696                }
    97                 this.pid = pid;
     97                this.pid = pid.trim();
    9898        }
    9999       
  • VirtualCollectionRegistry/trunk/VirtualCollectionRegistry/src/main/java/eu/clarin/cmdi/virtualcollectionregistry/model/ResourceProxy.java

    r211 r215  
    4242        public void setType(ResourceType type) {
    4343                if (type == null) {
    44                         throw new IllegalArgumentException("type == null");
     44                        throw new NullPointerException("type == null");
    4545                }
    4646                this.type = type;
     
    5454        public void setRef(String ref) {
    5555                if (ref == null) {
    56                         throw new IllegalArgumentException("ref == null");
     56                        throw new NullPointerException("ref == null");
    5757                }
    5858                this.ref = ref;
  • VirtualCollectionRegistry/trunk/VirtualCollectionRegistry/src/main/java/eu/clarin/cmdi/virtualcollectionregistry/model/User.java

    r191 r215  
    5252        public void setName(String name) {
    5353                if (name == null) {
    54                         throw new IllegalArgumentException("name == null");
     54                        throw new NullPointerException("name == null");
     55                }
     56                name = name.trim();
     57                if (name.isEmpty()) {
     58                        throw new IllegalArgumentException("empty name is not allowed");
    5559                }
    5660                this.name = name;
    5761        }
    58        
     62
    5963        public String getName() {
    6064                return name;
     
    6771        public boolean equals(Object o) {
    6872                if (o == null) {
    69                         throw new IllegalArgumentException("o == null");
     73                        throw new NullPointerException("o == null");
    7074                }
    7175                if (o instanceof User) {
     
    7882        public boolean equalsPrincipal(Principal principal) {
    7983                if (principal == null) {
    80                         throw new IllegalArgumentException("principal == null");
     84                        throw new NullPointerException("principal == null");
    8185                }
    8286                return name.equals(principal.getName());
  • VirtualCollectionRegistry/trunk/VirtualCollectionRegistry/src/main/java/eu/clarin/cmdi/virtualcollectionregistry/model/VirtualCollection.java

    r191 r215  
    147147        public void setOwner(User owner) {
    148148                if (owner == null) {
    149                         throw new IllegalArgumentException("owner == null");
     149                        throw new NullPointerException("owner == null");
    150150                }
    151151                this.owner = owner;
     
    158158        public void setPid(String pid) {
    159159                if (name == null) {
    160                         throw new IllegalArgumentException("name == null");
     160                        throw new NullPointerException("name == null");
     161                }
     162                pid = pid.trim();
     163                if (pid.length() < 1) {
     164                        throw new IllegalArgumentException("empty pid is not allowed");
    161165                }
    162166                this.pid = pid;
     
    169173        public void setName(String name) {
    170174                if (name == null) {
    171                         throw new IllegalArgumentException("name == null");
     175                        throw new NullPointerException("name == null");
    172176                }
    173177                this.name = name;
     
    188192        public void setCreationDate(Date creationDate) {
    189193                if (creationDate == null) {
    190                         throw new IllegalArgumentException("creationDate == null");
     194                        throw new NullPointerException("creationDate == null");
    191195                }
    192196                this.creationDate = creationDate;
     
    199203        public void setVisibility(Visibility visibility) {
    200204                if (visibility == null) {
    201                         throw new IllegalArgumentException("visibility == null");
     205                        throw new NullPointerException("visibility == null");
    202206                }
    203207                this.visibility = visibility;
     
    210214        public void setType(Type style) {
    211215                if (style == null) {
    212                         throw new IllegalArgumentException("style == null");
     216                        throw new NullPointerException("style == null");
    213217                }
    214218                this.type = style;
     
    245249        public void setModifiedDate(Date modifiedDate) {
    246250                if (modifiedDate == null) {
    247                         throw new IllegalArgumentException("modifiedDate == null");
     251                        throw new NullPointerException("modifiedDate == null");
    248252                }
    249253                this.modifedDate = modifiedDate;
  • VirtualCollectionRegistry/trunk/VirtualCollectionRegistry/src/main/java/eu/clarin/cmdi/virtualcollectionregistry/model/VirtualCollectionValidator.java

    r146 r215  
    22
    33import java.util.HashMap;
     4
     5import eu.clarin.cmdi.virtualcollectionregistry.VirtualCollectionRegistryException;
     6import eu.clarin.cmdi.virtualcollectionregistry.VirtualCollectionRegistryUsageException;
    47
    58public class VirtualCollectionValidator {
     
    912                new HashMap<String, Resource>();
    1013       
    11         public void validate(VirtualCollection vc) {
     14        public void validate(VirtualCollection vc)
     15                        throws VirtualCollectionRegistryException {
     16                if ((vc.getName() == null) || vc.getName().trim().isEmpty()) {
     17                        throw new VirtualCollectionRegistryUsageException(
     18                                        "collection has an empty name");
     19                }
    1220                for (Resource resource : vc.getResources()) {
    1321                        int signature = resource.getSignature();
    1422                        if (uniqueResources.containsKey(signature)) {
    15                                 throw new IllegalArgumentException("collection contains non-unique resources");
     23                                throw new VirtualCollectionRegistryUsageException(
     24                                                "collection contains non-unique resources");
    1625                        }
    1726                        uniqueResources.put(signature, resource);
    1827                        String ref = resource.getRef();
    1928                        if ((ref == null) || ref.trim().isEmpty()) {
    20                                 throw new IllegalArgumentException("collection contains resource with empty ResourceRef");
     29                                throw new VirtualCollectionRegistryUsageException(
     30                                                "collection contains resource with empty ResourceRef");
    2131                        }
    2232                        if (uniqueResourceRefs.containsKey(ref)) {
    23                                 throw new IllegalArgumentException("collection contains non-unique ResourceRefs");
     33                                throw new VirtualCollectionRegistryUsageException(
     34                                                "collection contains non-unique ResourceRefs");
    2435                        }
    2536                        uniqueResourceRefs.put(ref, resource);
  • VirtualCollectionRegistry/trunk/VirtualCollectionRegistry/src/main/java/eu/clarin/cmdi/virtualcollectionregistry/query/QueryException.java

    r213 r215  
    44        private static final long serialVersionUID = 1L;
    55
    6         public QueryException(String msg, Throwable t) {
    7                 super(msg, t);
    8         }
    9 
    106        public QueryException(String msg) {
    117                this(msg, null);
    128        }
    139
     10        public QueryException(String msg, Throwable cause) {
     11                super(msg, cause);
     12        }
     13
    1414} // class QueryException
  • VirtualCollectionRegistry/trunk/VirtualCollectionRegistry/src/main/java/eu/clarin/cmdi/virtualcollectionregistry/rest/IllegalArgumentExceptionMapper.java

    r171 r215  
    1414                response.setIsSuccess(false);
    1515                response.setInfo(e.getMessage());
    16                 return Response.status(Response.Status.BAD_REQUEST)
    17                         .entity(e.getMessage()).type(MediaType.APPLICATION_XML).entity(response).build();
     16                return Response
     17                                .status(Response.Status.BAD_REQUEST)
     18                                .type(MediaType.APPLICATION_XML)
     19                                .entity(response)
     20                                .build();
    1821        }
    19        
     22
    2023} // class IllegalArgumentExceptionMapper
  • VirtualCollectionRegistry/trunk/VirtualCollectionRegistry/src/main/java/eu/clarin/cmdi/virtualcollectionregistry/rest/RestResponse.java

    r146 r215  
    4949       
    5050        public void setError(List<String> errors) {
    51                 this.errors = errors;
     51                if ((errors != null) && !errors.isEmpty()) {
     52                        this.errors = errors;
     53                }
    5254        }
    5355
  • VirtualCollectionRegistry/trunk/VirtualCollectionRegistry/src/main/java/eu/clarin/cmdi/virtualcollectionregistry/rest/VirtualCollectionRegistryExceptionMapper.java

    r171 r215  
    66import javax.ws.rs.core.MediaType;
    77import javax.ws.rs.core.Response;
     8import javax.ws.rs.core.Response.Status;
    89import javax.ws.rs.ext.ExceptionMapper;
    910import javax.ws.rs.ext.Provider;
     11import javax.xml.stream.XMLStreamException;
    1012
    1113import org.xml.sax.SAXParseException;
    1214
     15import eu.clarin.cmdi.virtualcollectionregistry.VirtualCollectionMetadataNotFoundException;
     16import eu.clarin.cmdi.virtualcollectionregistry.VirtualCollectionNotFoundException;
    1317import eu.clarin.cmdi.virtualcollectionregistry.VirtualCollectionRegistryException;
     18import eu.clarin.cmdi.virtualcollectionregistry.VirtualCollectionRegistryPermissionException;
     19import eu.clarin.cmdi.virtualcollectionregistry.VirtualCollectionRegistryUsageException;
    1420
    1521@Provider
     
    1824
    1925        public Response toResponse(VirtualCollectionRegistryException e) {
     26                Status       status = null;
     27                List<String> errors = null;
     28                if (e instanceof VirtualCollectionRegistryUsageException) {
     29                        status = Status.BAD_REQUEST;
     30                        errors = getErrors(e.getCause());
     31                } else if (e instanceof VirtualCollectionRegistryPermissionException) {
     32                        status = Status.FORBIDDEN;
     33                } else if (e instanceof VirtualCollectionNotFoundException) {
     34                        status = Status.NOT_FOUND;
     35                } else if (e instanceof VirtualCollectionMetadataNotFoundException) {
     36                        status = Status.NOT_FOUND;
     37                } else {
     38                        if (hasCause(e.getCause(), XMLStreamException.class)) {
     39                                status = Status.BAD_REQUEST;
     40                        } else {
     41                                status = Status.INTERNAL_SERVER_ERROR;
     42                        }
     43                        errors = getErrors(e.getCause());
     44                }
    2045                RestResponse response = new RestResponse();
    2146                response.setIsSuccess(false);
    22                 response.setInfo("an error occured: " + e.getMessage());
    23                 response.setError(getErrors(e.getCause()));
    24                 return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
    25                         .entity(e.getMessage()).type(MediaType.APPLICATION_XML).entity(response).build();
     47                response.setInfo(e.getMessage());
     48                if (errors != null) {
     49                        response.setError(errors);
     50                }
     51                return Response
     52                                .status(status)
     53                                .type(MediaType.APPLICATION_XML)
     54                                .entity(response)
     55                                .build();
    2656        }
    2757
     
    4171        }
    4272
     73        private static boolean hasCause(Throwable t, Class<?> clazz) {
     74                while (t != null) {
     75                        if (clazz.isInstance(t)) {
     76                                return true;
     77                        }
     78                        t = t.getCause();
     79                }
     80                return false;
     81        }
     82
    4383} // class VirtualCollectionRegistryExceptionMapper
  • VirtualCollectionRegistry/trunk/VirtualCollectionRegistry/src/main/java/eu/clarin/cmdi/virtualcollectionregistry/rest/VirtualCollectionRegistryRestService.java

    r213 r215  
    5858                Principal principal = security.getUserPrincipal();
    5959                if (principal == null) {
    60                         throw new IllegalArgumentException("princial == null");
     60                        throw new NullPointerException("princial == null");
    6161                }
    6262                try {
     
    103103                Principal principal = security.getUserPrincipal();
    104104                if (principal == null) {
    105                         throw new IllegalArgumentException("princial == null");
     105                        throw new NullPointerException("princial == null");
    106106                }
    107107                registry.updateVirtualCollection(principal, id, vc);
     
    120120                Principal principal = security.getUserPrincipal();
    121121                if (principal == null) {
    122                         throw new IllegalArgumentException("princial == null");
     122                        throw new NullPointerException("princial == null");
    123123                }
    124124                registry.deleteVirtualCollection(principal, id);
     
    163163                Principal principal = security.getUserPrincipal();
    164164                if (principal == null) {
    165                         throw new IllegalArgumentException("princial == null");
     165                        throw new NullPointerException("princial == null");
    166166                }
    167167                final VirtualCollectionList vcs =
Note: See TracChangeset for help on using the changeset viewer.