/**
* Copyright (c) Istituto Nazionale di Fisica Nucleare (INFN). 2006-2016
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.glite.security.voms.admin.persistence.dao.hibernate;
import java.util.List;
import org.glite.security.voms.admin.persistence.dao.generic.AUPDAO;
import org.glite.security.voms.admin.persistence.dao.generic.AUPVersionDAO;
import org.glite.security.voms.admin.persistence.dao.generic.AuditDAO;
import org.glite.security.voms.admin.persistence.dao.generic.AuditSearchDAO;
import org.glite.security.voms.admin.persistence.dao.generic.DAOFactory;
import org.glite.security.voms.admin.persistence.dao.generic.GroupDAO;
import org.glite.security.voms.admin.persistence.dao.generic.GroupManagerDAO;
import org.glite.security.voms.admin.persistence.dao.generic.NotificationDAO;
import org.glite.security.voms.admin.persistence.dao.generic.PeriodicNotificationsDAO;
import org.glite.security.voms.admin.persistence.dao.generic.RequestDAO;
import org.glite.security.voms.admin.persistence.dao.generic.RequesterInfoDAO;
import org.glite.security.voms.admin.persistence.dao.generic.TaskDAO;
import org.glite.security.voms.admin.persistence.dao.generic.TaskLockDAO;
import org.glite.security.voms.admin.persistence.dao.generic.TaskLogRecordDAO;
import org.glite.security.voms.admin.persistence.dao.generic.TaskTypeDAO;
import org.glite.security.voms.admin.persistence.dao.generic.UserDAO;
import org.glite.security.voms.admin.persistence.model.AUPVersion;
import org.glite.security.voms.admin.persistence.model.VOMSGroup;
import org.glite.security.voms.admin.persistence.model.VOMSUser;
import org.glite.security.voms.admin.persistence.model.audit.AuditEvent;
import org.glite.security.voms.admin.persistence.model.request.RequesterInfo;
import org.glite.security.voms.admin.persistence.model.task.LogRecord;
import org.glite.security.voms.admin.persistence.model.task.Task;
import org.glite.security.voms.admin.persistence.model.task.TaskType;
import org.hibernate.criterion.Restrictions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Returns Hibernate-specific instances of DAOs.
* <p/>
* If for a particular DAO there is no additional non-CRUD functionality, we use
* a nested static class to implement the interface in a generic way. This
* allows clean refactoring later on, should the interface implement business
* data access methods at some later time. Then, we would externalize the
* implementation into its own first-level class.
*
* @author Christian Bauer
* @author Andrea Ceccanti
*/
public class HibernateDAOFactory extends DAOFactory {
// Inline concrete DAO implementations with no business-related data access
// methods.
// If we use public static nested classes, we can centralize all of them in
// one source file.
public static class AuditDAOHibernate
extends GenericHibernateDAO<AuditEvent, Long> implements AuditDAO {
}
public static class AUPVersionDAOHibernate
extends GenericHibernateDAO<AUPVersion, Long> implements AUPVersionDAO {
}
public static class GroupDAOHibernate
extends NamedEntityHibernateDAO<VOMSGroup, Long> implements GroupDAO {
}
public static class UserDAOHibernate
extends NamedEntityHibernateDAO<VOMSUser, Long> implements UserDAO {
}
public static class RequesterInfoDAOHibernate extends
GenericHibernateDAO<RequesterInfo, Long> implements RequesterInfoDAO {
}
public static class TaskLogRecordDAOHibernate
extends GenericHibernateDAO<LogRecord, Long> implements TaskLogRecordDAO {
public void deleteForTask(Task t) {
}
public List<LogRecord> findForTask(Task t) {
LogRecord lr = new LogRecord();
lr.setTask(t);
return findByCriteria(Restrictions.eq("task", t));
}
}
public static class TaskTypeDAOHibernate
extends NamedEntityHibernateDAO<TaskType, Long> implements TaskTypeDAO {
}
private static Logger LOG = LoggerFactory
.getLogger(HibernateDAOFactory.class);
@Override
public AUPDAO getAUPDAO() {
return new AUPDAOHibernate();
}
@Override
public AUPVersionDAO getAUPVersionDAO() {
return new AUPVersionDAOHibernate();
}
@Override
public GroupDAO getGroupDAO() {
return new GroupDAOHibernate();
}
@Override
public RequestDAO getRequestDAO() {
return new RequestDAOHibernate();
}
@Override
public RequesterInfoDAO getRequesterInfoDAO() {
return new RequesterInfoDAOHibernate();
}
@Override
public TaskDAO getTaskDAO() {
return new TaskDAOHibernate();
}
public TaskLogRecordDAO getTaskLogRecordDAO() {
return new TaskLogRecordDAOHibernate();
}
@Override
public TaskTypeDAO getTaskTypeDAO() {
return new TaskTypeDAOHibernate();
}
public UserDAO getUserDAO() {
return new UserDAOHibernate();
}
public PeriodicNotificationsDAO getPeriodicNotificationsDAO() {
return new PeriodicNotificationDAOHibernate();
}
@Override
public GroupManagerDAO getGroupManagerDAO() {
return new GroupManagerDAOHibernate();
}
@Override
public NotificationDAO getNotificationDAO() {
return new NotificationDAOHibernate();
}
public AuditDAO getAuditDAO() {
return new AuditDAOHibernate();
}
@Override
public AuditSearchDAO getAuditSearchDAO() {
return new AuditSearchDAOHibernate();
}
@Override
public TaskLockDAO getTaskLockDAO() {
return new TaskLockDAOHibernate();
}
}