Changeset 283


Ignore:
Timestamp:
03/25/10 10:39:14 (14 years ago)
Author:
oschonef
Message:
  • just return empty list, if user has not registered any virtual collections yet
File:
1 edited

Legend:

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

    r278 r283  
    340340                EntityManager em = datastore.getEntityManager();
    341341                try {
    342                         em.getTransaction().begin();
    343 
    344                         // fetch user
     342                        List<VirtualCollection> results = null;
     343                        long totalCount                 = 0;
     344
     345                        em.getTransaction().begin();
     346
     347                        /*
     348                         *  fetch user. if user is not found, he has not yet registered
     349                         *  any virtual collections, so just return an empty list
     350                         */
    345351                        User user = fetchUser(em, principal);
    346                         if (user == null) {
    347                                 throw new VirtualCollectionRegistryPermissionException("user " +
    348                                                 principal.getName() + " does not exist");
    349                         }
    350 
    351                         // setup queries
    352                         TypedQuery<Long>              cq = null;
    353                         TypedQuery<VirtualCollection>  q = null;
    354                         if (query != null) {
    355                                 ParsedQuery parsedQuery = ParsedQuery.parseQuery(em, query);
    356                                 cq = parsedQuery.getCountQuery(user);
    357                                 q = parsedQuery.getQuery(user);
    358                         } else {
    359                                 cq = em.createNamedQuery("VirtualCollection.countByOwner", Long.class);
    360                                 cq.setParameter("owner", user);
    361                                 q = em.createNamedQuery("VirtualCollection.findByOwner",
    362                                                 VirtualCollection.class);
    363                                 q.setParameter("owner", user);
    364                         }
    365 
    366                         // commence query ...
    367                         List<VirtualCollection> results = null;
    368                         long totalCount = cq.getSingleResult();
    369 
    370                         // optimization; don't query, if we won't get any results
    371                         if (totalCount > 0) {
    372                                 if (offset > 0) {
    373                                         q.setFirstResult(offset);
     352                        if (user != null) {
     353                                // setup queries
     354                                TypedQuery<Long>              cq = null;
     355                                TypedQuery<VirtualCollection>  q = null;
     356                                if (query != null) {
     357                                        ParsedQuery parsedQuery = ParsedQuery.parseQuery(em, query);
     358                                        cq = parsedQuery.getCountQuery(user);
     359                                        q = parsedQuery.getQuery(user);
     360                                } else {
     361                                        cq = em.createNamedQuery("VirtualCollection.countByOwner",
     362                                                                                         Long.class);
     363                                        cq.setParameter("owner", user);
     364                                        q = em.createNamedQuery("VirtualCollection.findByOwner",
     365                                                        VirtualCollection.class);
     366                                        q.setParameter("owner", user);
    374367                                }
    375                                 if (count > 0) {
    376                                         q.setMaxResults(count);
     368       
     369                                // commence query ...
     370                                totalCount = cq.getSingleResult();
     371       
     372                                // optimization; don't query, if we won't get any results
     373                                if (totalCount > 0) {
     374                                        if (offset > 0) {
     375                                                q.setFirstResult(offset);
     376                                        }
     377                                        if (count > 0) {
     378                                                q.setMaxResults(count);
     379                                        }
     380                                        results = q.getResultList();
    377381                                }
    378                                 results = q.getResultList();
    379382                        }
    380383                        return new VirtualCollectionList(results, offset, (int) totalCount);
     
    382385                        throw new VirtualCollectionRegistryUsageException(
    383386                                "query invalid", e);
    384                 } catch (VirtualCollectionRegistryException e) {
    385                         throw e;
    386387                } catch (Exception e) {
    387388                        logger.error("error while enumerating virtual collections", e);
Note: See TracChangeset for help on using the changeset viewer.