///////////////////////////////////////////////////////////////////////////// // // Project ProjectForge Community Edition // www.projectforge.org // // Copyright (C) 2001-2014 Kai Reinhard (k.reinhard@micromata.de) // // ProjectForge is dual-licensed. // // This community edition is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License as published // by the Free Software Foundation; version 3 of the License. // // This community edition is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General // Public License for more details. // // You should have received a copy of the GNU General Public License along // with this program; if not, see http://www.gnu.org/licenses/. // ///////////////////////////////////////////////////////////////////////////// package org.projectforge.plugins.skillmatrix; import java.util.Collection; import java.util.List; import org.apache.commons.collections.CollectionUtils; import org.hibernate.criterion.Order; import org.hibernate.criterion.Restrictions; import org.projectforge.core.BaseDao; import org.projectforge.core.BaseSearchFilter; import org.projectforge.core.QueryFilter; import org.projectforge.user.GroupDO; import org.projectforge.user.UserRightId; import org.projectforge.web.user.GroupsProvider; /** * This is the base data access object class. Most functionality such as access checking, select, insert, update, save, delete etc. is implemented by the super class. * @author Werner Feder (werner.feder@t-online.de) */ public class TrainingDao extends BaseDao<TrainingDO> { public static final String UNIQUE_PLUGIN_ID = "PLUGIN_SKILL_MATRIX_TRAINING"; public static final String I18N_KEY_SKILL_PREFIX = "plugins.skillmatrix.training"; public static final UserRightId USER_RIGHT_ID = new UserRightId(UNIQUE_PLUGIN_ID, "plugin20", I18N_KEY_SKILL_PREFIX); private static final String[] ADDITIONAL_SEARCH_FIELDS = new String[] { "skill.title" }; private SkillDao skillDao; public TrainingDao() { super(TrainingDO.class); userRightId = USER_RIGHT_ID; } @Override protected String[] getAdditionalSearchFields() { return ADDITIONAL_SEARCH_FIELDS; } @Override public TrainingDO newInstance() { return new TrainingDO(); } public TrainingDao setSkillDao(final SkillDao skillDao) { this.skillDao = skillDao; return this; } public SkillDao getSkillDao() { return skillDao; } /** * @param skill * @param skillId If null, then skill will be set to null; * @see BaseDao#getOrLoad(Integer) */ public TrainingDO setSkill(final TrainingDO training, final Integer skillId) { final SkillDO skill = skillDao.getOrLoad(skillId); training.setSkill(skill); return training; } @SuppressWarnings("unchecked") public TrainingDO getTraining(final String title) { if (title == null) { return null; } final List<TrainingDO> list = getHibernateTemplate().find("from TrainingDO u where u.title = ?", title); if (CollectionUtils.isEmpty(list) == true) { return null; } return list.get(0); } /** * Please note: Only the string group.fullAccessGroupIds will be modified (but not be saved)! * @param training * @param fullAccessGroups */ public void setFullAccessGroups(final TrainingDO training, final Collection<GroupDO> fullAccessGroups) { training.setFullAccessGroupIds(new GroupsProvider().getGroupIds(fullAccessGroups)); } public Collection<GroupDO> getSortedFullAccessGroups(final TrainingDO training) { return new GroupsProvider().getSortedGroups(training.getFullAccessGroupIds()); } /** * Please note: Only the string group.readonlyAccessGroupIds will be modified (but not be saved)! * @param training * @param readonlyAccessGroups */ public void setReadOnlyAccessGroups(final TrainingDO training, final Collection<GroupDO> readonlyAccessGroups) { training.setReadOnlyAccessGroupIds(new GroupsProvider().getGroupIds(readonlyAccessGroups)); } public Collection<GroupDO> getSortedReadOnlyAccessGroups(final TrainingDO training) { return new GroupsProvider().getSortedGroups(training.getReadOnlyAccessGroupIds()); } @Override public List<TrainingDO> getList(final BaseSearchFilter filter) { final TrainingFilter myFilter; if (filter instanceof TrainingFilter) { myFilter = (TrainingFilter) filter; } else { myFilter = new TrainingFilter(filter); } final QueryFilter queryFilter = new QueryFilter(myFilter); final String searchString = myFilter.getSearchString(); if (myFilter.getSkillId() != null) { final SkillDO skill = new SkillDO(); skill.setId(myFilter.getSkillId()); queryFilter.add(Restrictions.eq("skill", skill)); } if (myFilter.getTrainingId() != null) { queryFilter.add(Restrictions.eq("id", myFilter.getTrainingId())); } queryFilter.addOrder(Order.desc("created")); final List<TrainingDO> list = getList(queryFilter); myFilter.setSearchString(searchString); // Restore search string. return list; } }