Ignore:
Timestamp:
08/13/14 16:55:59 (10 years ago)
Author:
olhsha@mpi.nl
Message:

Fixed issued arising after testing on localhost tomcat (completed)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • ComponentRegistry/trunk/ComponentRegistry/src/main/java/clarin/cmdi/componentregistry/persistence/impl/ComponentDaoImpl.java

    r5549 r5552  
    2525 * Base DAO which can be extended to serve {@link ComponentDescription}s and
    2626 * {@link ProfileDescription}s
    27  * 
     27 *
    2828 * @author Twan Goosen <twan.goosen@mpi.nl>
    2929 * @author George.Georgovassilis@mpi.nl
    3030 */
    31 
    3231@Repository
    3332public class ComponentDaoImpl implements ComponentDao {
     
    3534    @Autowired
    3635    private JpaComponentDao jpaComponentDao;
    37 
    3836    @Autowired
    3937    private CommentsDao commentsDao;
    40 
    4138    @Autowired
    4239    private UserDao userDao;
    43 
    4440    private final static Logger LOG = LoggerFactory
    45             .getLogger(ComponentDaoImpl.class);
     41            .getLogger(ComponentDaoImpl.class);
    4642
    4743    /**
     
    4945     * thus making sure that only those properties are updated and not other
    5046     * ones.
    51      * 
     47     *
    5248     * @param from
    5349     * @param to
    5450     */
    5551    protected void copyPersistentProperties(BaseDescription from, BaseDescription to) {
    56         to.setName(from.getName());
    57         to.setDescription(from.getDescription());
    58         to.setRegistrationDate(from.getRegistrationDate());
    59         to.setCreatorName(from.getCreatorName());
    60         to.setDomainName(from.getDomainName());
    61         to.setGroupName(from.getGroupName());
    62         to.setHref(from.getHref());
     52        to.setName(from.getName());
     53        to.setDescription(from.getDescription());
     54        to.setRegistrationDate(from.getRegistrationDate());
     55        to.setCreatorName(from.getCreatorName());
     56        to.setDomainName(from.getDomainName());
     57        to.setGroupName(from.getGroupName());
     58        to.setHref(from.getHref());
    6359    }
    6460
    6561    protected String getTableName() {
    66         return "persistentcomponents";
    67     };
     62        return "persistentcomponents";
     63    }
     64
     65    ;
    6866
    6967    private boolean compare(String s, Number n) {
    70         return ("" + s).equals("" + n);
     68        return ("" + s).equals("" + n);
    7169    }
    7270
    7371    private String toString(Number n) {
    74         if (n == null)
    75             return null;
    76         return n.toString();
     72        if (n == null) {
     73            return null;
     74        }
     75        return n.toString();
    7776    }
    7877
    7978    private BaseDescription castDown(BaseDescription c) {
    80         // JPA will save only BaseComponent instances, not derived classes
    81         if (c instanceof ComponentDescription
    82                 || c instanceof ProfileDescription) {
    83             BaseDescription copy = new BaseDescription();
    84             ComponentUtils.copyPropertiesFrom(c, copy);
    85             return copy;
    86         }
    87         return c;
     79        // JPA will save only BaseComponent instances, not derived classes
     80        if (c instanceof ComponentDescription
     81                || c instanceof ProfileDescription) {
     82            BaseDescription copy = new BaseDescription();
     83            ComponentUtils.copyPropertiesFrom(c, copy);
     84            return copy;
     85        }
     86        return c;
    8887    }
    8988
     
    9291     * property) with the number of comments for that component and load
    9392     * {@link BaseDescription#getContent()}
    94      * 
     93     *
    9594     * @param baseDescription
    9695     */
    9796    private void augment(BaseDescription baseDescription) {
    98         if (baseDescription == null)
    99             return;
    100         int count = (int) commentsDao.findCommentCountForComponent(baseDescription
    101                 .getId());
    102         baseDescription.setCommentsCount(count);
    103         baseDescription.setContent(jpaComponentDao.findContentByComponentId(baseDescription
    104                 .getId()));
    105     }
    106 
    107 /**
     97        if (baseDescription == null) {
     98            return;
     99        }
     100        int count = (int) commentsDao.findCommentCountForComponent(baseDescription
     101                .getId());
     102        baseDescription.setCommentsCount(count);
     103        baseDescription.setContent(jpaComponentDao.findContentByComponentId(baseDescription
     104                .getId()));
     105    }
     106
     107    /**
    108108     * Update {@link BaseDescription#getCommentsCount()
     109     *
    109110     * @param baseDescription
    110111     */
    111112    private List<BaseDescription> augment(List<BaseDescription> baseDescription) {
    112         if (baseDescription.isEmpty()) {
    113             return baseDescription;
    114         }
    115         Map<String, BaseDescription> map = new HashMap<String, BaseDescription>();
    116         List<String> idlist = new ArrayList<String>();
    117         for (BaseDescription c:baseDescription) {
    118             idlist.add(c.getId());
    119             map.put(c.getId(), c);
    120         }
    121         List<Object[]> tuples = commentsDao
    122                 .findCommentCountForComponents(idlist);
    123         for (Object[] tuple : tuples) {
    124             String id = tuple[0].toString();
    125             int count = Integer.parseInt(tuple[1].toString());
    126             map.get(id).setCommentsCount(count);
    127         }
    128         return baseDescription;
    129     }
    130 
    131     /**
    132      *
    133      * @param cmdId
    134      *            CMD id
     113        if (baseDescription.isEmpty()) {
     114            return baseDescription;
     115        }
     116        Map<String, BaseDescription> map = new HashMap<String, BaseDescription>();
     117        List<String> idlist = new ArrayList<String>();
     118        for (BaseDescription c : baseDescription) {
     119            if (c != null) {
     120                idlist.add(c.getId());
     121                map.put(c.getId(), c);
     122            }
     123        }
     124        List<Object[]> tuples = commentsDao
     125                .findCommentCountForComponents(idlist);
     126        for (Object[] tuple : tuples) {
     127            String id = tuple[0].toString();
     128            int count = Integer.parseInt(tuple[1].toString());
     129            map.get(id).setCommentsCount(count);
     130        }
     131        return baseDescription;
     132    }
     133
     134    /**
     135     *
     136     * @param cmdId CMD id
    135137     * @return Whether the specified item is in the public space
    136138     */
    137139    @Override
    138140    public boolean isPublic(String cmdId) {
    139         BaseDescription baseDescription = jpaComponentDao.findByComponentId(cmdId);
    140         return baseDescription != null && baseDescription.isPublic();
    141     }
    142 
    143     /**
    144      *
    145      * @param cmdId
    146      *            CMD id
    147      * @param userId
    148      *            User db id of workspace owner
     141        BaseDescription baseDescription = jpaComponentDao.findByComponentId(cmdId);
     142        return baseDescription != null && baseDescription.isPublic();
     143    }
     144
     145    /**
     146     *
     147     * @param cmdId CMD id
     148     * @param userId User db id of workspace owner
    149149     * @return Whether the specified item is in the specified user's workspace
    150150     */
    151151    @Override
    152152    public boolean isInUserSpace(String cmdId, Number userId) {
    153         BaseDescription baseDescription = jpaComponentDao.findByComponentId(cmdId);
    154         boolean b = baseDescription != null && !baseDescription.isPublic()
    155                 && compare(baseDescription.getUserId(), userId);
    156         return b;
    157     }
    158 
    159     /**
    160      *
    161      * @param cmdId
    162      *            CMD id
    163      * @param userId
    164      *            User db id of workspace owner, null for public registry
     153        BaseDescription baseDescription = jpaComponentDao.findByComponentId(cmdId);
     154        boolean b = baseDescription != null && !baseDescription.isPublic()
     155                && compare(baseDescription.getUserId(), userId);
     156        return b;
     157    }
     158
     159    /**
     160     *
     161     * @param cmdId CMD id
     162     * @param userId User db id of workspace owner, null for public registry
    165163     * @return Whether the specified item is in the specified workspace (user or
    166      *         public)
     164     * public)
    167165     */
    168166//    @Override
     
    174172//      }
    175173//    }
    176 
    177     /**
    178      *
    179      * @param cmdId
    180      *            Profile or component Id (not primary key)
     174    /**
     175     *
     176     * @param cmdId Profile or component Id (not primary key)
    181177     * @return String value of XML content for profile or component
    182178     */
    183179    @Override
    184180    public String getContent(boolean isDeleted, String cmdId) {
    185         return jpaComponentDao.findContentByComponentId(cmdId, isDeleted);
    186     }
    187 
    188     /**
    189      * @param description
    190      *            Description to insert
    191      * @param content
    192      *            Content to insert and refer to from description
     181        return jpaComponentDao.findContentByComponentId(cmdId, isDeleted);
     182    }
     183
     184    /**
     185     * @param description Description to insert
     186     * @param content Content to insert and refer to from description
    193187     * @return Id of newly inserted description
    194188     */
    195189    @Override
    196190    public Number insertDescription(BaseDescription description, String content,
    197             boolean isPublic, Number userId) {
    198 
    199         if (description.getId() != null
    200                 && jpaComponentDao.findByComponentId(description.getId()) != null) {
    201             throw new IllegalArgumentException("Component "
    202                     + description.getId() + " already in DB");
    203         }
    204         if (content == null)
    205             content = "";
    206         BaseDescription copy = castDown(description);
    207         copy.setContent(content);
    208         copy.setPublic(isPublic);
    209         copy.setUserId(toString(userId));
     191            boolean isPublic, Number userId) {
     192
     193        if (description.getId() != null
     194                && jpaComponentDao.findByComponentId(description.getId()) != null) {
     195            throw new IllegalArgumentException("Component "
     196                    + description.getId() + " already in DB");
     197        }
     198        if (content == null) {
     199            content = "";
     200        }
     201        BaseDescription copy = castDown(description);
     202        copy.setContent(content);
     203        copy.setPublic(isPublic);
     204        copy.setUserId(toString(userId));
    210205        copy.setCreatorName(description.getCreatorName());
    211         copy = jpaComponentDao.saveAndFlush(copy);
    212         jpaComponentDao.updateContent(copy.getId(), content);
    213         return copy.getDbId();
     206        copy = jpaComponentDao.saveAndFlush(copy);
     207        jpaComponentDao.updateContent(copy.getId(), content);
     208        return copy.getDbId();
    214209    }
    215210
    216211    /**
    217212     * Updates a description by database id
    218      *
    219      * @param id
    220      *            Id (key) of description record
    221      * @param description
    222      *            New values for description (leave null to not change)
    223      * @param content
    224      *            New content for description (leave null to not change)
     213     *
     214     * @param id Id (key) of description record
     215     * @param description New values for description (leave null to not change)
     216     * @param content New content for description (leave null to not change)
    225217     */
    226218    @Override
    227219    public void updateDescription(Number id, BaseDescription description,
    228             String content) {
    229         if (content == null)
    230             content = "";
    231         if (description != null) {
    232             // Update description
    233             BaseDescription copy = jpaComponentDao.findByComponentId(description
    234                     .getId());
    235             copyPersistentProperties(description, copy);
    236             jpaComponentDao.saveAndFlush(copy);
    237             jpaComponentDao.updateContent(copy.getId(), content);
    238         }
    239 
    240         if (content != null) {
    241             BaseDescription copy = jpaComponentDao.findOne(id.longValue());
    242             copy.setContent(content);
    243             jpaComponentDao.saveAndFlush(copy);
    244             jpaComponentDao.updateContent(copy.getId(), content);
    245         }
     220            String content) {
     221        if (content == null) {
     222            content = "";
     223        }
     224        if (description != null) {
     225            // Update description
     226            BaseDescription copy = jpaComponentDao.findByComponentId(description
     227                    .getId());
     228            copyPersistentProperties(description, copy);
     229            jpaComponentDao.saveAndFlush(copy);
     230            jpaComponentDao.updateContent(copy.getId(), content);
     231        }
     232
     233        if (content != null) {
     234            BaseDescription copy = jpaComponentDao.findOne(id.longValue());
     235            copy.setContent(content);
     236            jpaComponentDao.saveAndFlush(copy);
     237            jpaComponentDao.updateContent(copy.getId(), content);
     238        }
    246239    }
    247240
    248241    /**
    249242     * Retrieves description by it's primary key Id
    250      *
    251      * @param id
    252      *            Description key
     243     *
     244     * @param id Description key
    253245     * @return The description, if it exists; null otherwise
    254246     */
    255247    @Override
    256248    public BaseDescription getById(Number id) {
    257         BaseDescription baseDescription = jpaComponentDao.findOne(id.longValue());
    258         if (baseDescription != null && !baseDescription.isDeleted()) {
    259             augment(baseDescription);
    260             return baseDescription;
    261         }
    262         return null;
     249        BaseDescription baseDescription = jpaComponentDao.findOne(id.longValue());
     250        if (baseDescription != null && !baseDescription.isDeleted()) {
     251            augment(baseDescription);
     252            return baseDescription;
     253        }
     254        return null;
    263255    }
    264256
    265257    /**
    266258     * Get by ComponentId / ProfileId, whether in userspace or public
    267      *
    268      * @param id
    269      *            Full component id
     259     *
     260     * @param id Full component id
    270261     * @return The description, if it exists; null otherwise
    271262     */
    272263    @Override
    273264    public BaseDescription getByCmdId(String id) {
    274         BaseDescription baseDescription = jpaComponentDao.findByComponentId(id);
    275         if (baseDescription != null && !baseDescription.isDeleted()) {
    276             augment(baseDescription);
    277             return baseDescription;
    278         }
    279         return null;
    280     }
    281 
    282  
    283     /**
    284      *
    285      * @param cmdId
    286      *            CMD Id of description
     265        BaseDescription baseDescription = jpaComponentDao.findByComponentId(id);
     266        if (baseDescription != null && !baseDescription.isDeleted()) {
     267            augment(baseDescription);
     268            return baseDescription;
     269        }
     270        return null;
     271    }
     272
     273    /**
     274     *
     275     * @param cmdId CMD Id of description
    287276     * @return Database id for description record
    288277     */
    289278    @Override
    290279    public Number getDbId(String cmdId) {
    291         Number id = null;
    292         BaseDescription c = jpaComponentDao.findByComponentId(cmdId);
    293         if (c != null)
    294             id = c.getDbId();
    295         return id;
    296     }
    297 
    298     /**
    299      *
     280        Number id = null;
     281        BaseDescription c = jpaComponentDao.findByComponentId(cmdId);
     282        if (c != null) {
     283            id = c.getDbId();
     284        }
     285        return id;
     286    }
     287
     288    /**
     289     *
    300290     * @return All descriptions in the public space. Won't include xml content
    301      *         and comments count.
     291     * and comments count.
    302292     */
    303293    @Override
    304294    public List<BaseDescription> getPublicDescriptions() {
    305         return augment(jpaComponentDao.findPublicItems());
     295        return augment(jpaComponentDao.findPublicItems());
    306296    }
    307297
    308298    /**
    309299     * @return List of deleted descriptions in user space or in public when
    310      *         userId=null. Won't include xml content and comments count.
     300     * userId=null. Won't include xml content and comments count.
    311301     * @param userId
    312302     */
    313303    @Override
    314304    public List<BaseDescription> getDeletedDescriptions(Number userId) {
    315         List<BaseDescription> list = null;
    316         if (userId != null) {
    317             list = jpaComponentDao.findDeletedItemsForUser(userId.longValue());
    318         } else {
    319             list = jpaComponentDao.findPublicDeletedItems();
    320         }
    321         list = augment(list);
    322         return list;
    323     }
    324 
    325     /**
    326      * 
     305        List<BaseDescription> list = null;
     306        if (userId != null) {
     307            list = jpaComponentDao.findDeletedItemsForUser(userId.longValue());
     308        } else {
     309            list = jpaComponentDao.findPublicDeletedItems();
     310        }
     311        list = augment(list);
     312        return list;
     313    }
     314
     315    /**
     316     *
    327317     * @return All the user's descriptions not in the public space .Won't
    328      *         include xml content and comments count.
     318     * include xml content and comments count.
    329319     */
    330320    @Override
    331321    public List<BaseDescription> getPrivateBaseDescriptions(Number userId, String prefix) {
    332         return augment(jpaComponentDao.findItemsForUserThatAreNotInGroups(userId.longValue(),prefix + "%"));
    333         //return augment(jpaComponentDao.findNotPublishedUserItems(userId.longValue(),prefix + "%"));
    334     }
    335 
    336    
     322        return augment(jpaComponentDao.findItemsForUserThatAreNotInGroups(userId.longValue(), prefix + "%"));
     323        //return augment(jpaComponentDao.findNotPublishedUserItems(userId.longValue(),prefix + "%"));
     324    }
     325
    337326    @Override
    338327    public void setDeleted(BaseDescription desc, boolean isDeleted) {
    339         BaseDescription copy = jpaComponentDao.findByComponentId(desc.getId());
    340         copy.setDeleted(isDeleted);
    341         jpaComponentDao.saveAndFlush(copy);
     328        BaseDescription copy = jpaComponentDao.findByComponentId(desc.getId());
     329        copy.setDeleted(isDeleted);
     330        jpaComponentDao.saveAndFlush(copy);
    342331    }
    343332
    344333    @Override
    345334    public void setPublished(Number id, boolean published) {
    346         BaseDescription copy = jpaComponentDao.findOne(id.longValue());
    347         copy.setPublic(published);
    348         jpaComponentDao.saveAndFlush(copy);
    349     }
    350 
    351     /**
    352      *
    353      * @param id
    354      *            Id of description record
     335        BaseDescription copy = jpaComponentDao.findOne(id.longValue());
     336        copy.setPublic(published);
     337        jpaComponentDao.saveAndFlush(copy);
     338    }
     339
     340    /**
     341     *
     342     * @param id Id of description record
    355343     * @return Principal name of description's owner, if any. Otherwise, null.
    356344     */
    357345    @Override
    358346    public String getOwnerPrincipalName(Number id) {
    359         BaseDescription baseDescription = getById(id);
    360         if (baseDescription == null)
    361             return null;
    362 
    363         long userId = baseDescription.getDbUserId();
    364         RegistryUser user = userDao.findOne(userId);
    365         if (user == null)
    366             return null;
    367 
    368         return user.getPrincipalName();
     347        BaseDescription baseDescription = getById(id);
     348        if (baseDescription == null) {
     349            return null;
     350        }
     351
     352        long userId = baseDescription.getDbUserId();
     353        RegistryUser user = userDao.findOne(userId);
     354        if (user == null) {
     355            return null;
     356        }
     357
     358        return user.getPrincipalName();
    369359    }
    370360
    371361    @Override
    372362    public List<BaseDescription> getPublicBaseDescriptions(String prefix) {
    373         return augment(jpaComponentDao.findPublishedItems(prefix + "%"));
    374     }
    375 
    376    
     363        return augment(jpaComponentDao.findPublishedItems(prefix + "%"));
     364    }
     365
    377366    @Override
    378367    public List<String> getAllNonDeletedProfileIds() {
    379         return jpaComponentDao.findNonDeletedItemIds(ProfileDescription.PROFILE_PREFIX+"%");
     368        return jpaComponentDao.findNonDeletedItemIds(ProfileDescription.PROFILE_PREFIX + "%");
    380369    }
    381370
    382371    @Override
    383372    public List<String> getAllNonDeletedComponentIds() {
    384         return jpaComponentDao.findNonDeletedItemIds(ComponentDescription.COMPONENT_PREFIX+"%");
    385     }
    386    
     373        return jpaComponentDao.findNonDeletedItemIds(ComponentDescription.COMPONENT_PREFIX + "%");
     374    }
     375
    387376    @Override
    388377    public List<BaseDescription> getAllNonDeletedDescriptions() {
    389         return jpaComponentDao.findNonDeletedDescriptions();
    390     }
    391    
     378        return jpaComponentDao.findNonDeletedDescriptions();
     379    }
     380
    392381    // Olha was here
    393382    @Override
    394383    public List<String> getAllItemIdsInGroup(String prefix, Long groupId) {
    395384        // we are ineterested only in non-published components in the group
    396         return jpaComponentDao.findAllItemIdsInGroup(false, prefix + "%", groupId);
    397     }
    398    
    399    
     385        return jpaComponentDao.findAllItemIdsInGroup(false, prefix + "%", groupId);
     386    }
    400387}
Note: See TracChangeset for help on using the changeset viewer.