Project

General

Profile

1
package eu.dnetlib.enabling.is.sn.resourcestate.hib;
2

    
3
import java.util.Collection;
4
import java.util.List;
5
import java.util.stream.Collectors;
6

    
7
import org.apache.commons.lang.StringUtils;
8
import org.apache.commons.logging.Log;
9
import org.apache.commons.logging.LogFactory;
10
import org.hibernate.Criteria;
11
import org.hibernate.SessionFactory;
12
import org.hibernate.criterion.Example;
13
import org.springframework.beans.factory.annotation.Required;
14
import org.springframework.cache.annotation.CacheEvict;
15
import org.springframework.cache.annotation.Cacheable;
16
import org.springframework.transaction.annotation.Transactional;
17

    
18
import com.google.common.base.Function;
19
import com.google.common.collect.Collections2;
20

    
21
import eu.dnetlib.enabling.is.sn.resourcestate.ResourceStateSubscription;
22
import eu.dnetlib.enabling.is.sn.resourcestate.ResourceStateSubscriptionDAO;
23

    
24
/**
25
 * Hibernate storage for resource state subscriptions.
26
 * 
27
 * @author marko
28
 * 
29
 */
30
public class HibernateResourceStateSubscriptionDAOImpl implements ResourceStateSubscriptionDAO {
31

    
32
	private static final Log log = LogFactory.getLog(HibernateResourceStateSubscriptionDAOImpl.class);
33

    
34
	private SessionFactory sessionFactory;
35

    
36
	private Collection<ResourceStateSubscription> transformToSubscription(final List<Object> inputList) {
37
		return inputList.stream()
38
				.map(o -> (ResourceStateSubscription) o)
39
				.collect(Collectors.toList());
40
	}
41

    
42
	/**
43
	 * {@inheritDoc}
44
	 * 
45
	 * @see eu.dnetlib.enabling.is.sn.resourcestate.ResourceStateSubscriptionDAO#listSubscriptions(java.lang.String, java.lang.String,
46
	 *      java.lang.String)
47
	 */
48
	@Override
49
	@Transactional(readOnly = true)
50
	public Collection<ResourceStateSubscription> listSubscriptions(final String prefix, final String resourceType, final String resourceId) {
51

    
52
		final ResourceStateSubscription exampleEntity = new ResourceStateSubscription();
53
		exampleEntity.setPrefix(prefix);
54
		exampleEntity.setType(resourceType);
55
		exampleEntity.setResourceId(resourceId);
56

    
57
		return transformToSubscription(queryByCriteria(exampleEntity));
58
	}
59

    
60
	/**
61
	 * {@inheritDoc}
62
	 * 
63
	 * @see eu.dnetlib.enabling.is.sn.SubscriptionDAO#addSubscription(java.lang.Object)
64
	 */
65
	@Override
66
	@Transactional
67
	public void addSubscription(final ResourceStateSubscription subscription) {
68

    
69
		log.debug("evict cached subscriptions");
70

    
71
		getSessionFactory().getCurrentSession().save(subscription);
72
	}
73

    
74
	/**
75
	 * {@inheritDoc}
76
	 * 
77
	 * @see eu.dnetlib.enabling.is.sn.SubscriptionDAO#getSubscription(java.lang.String)
78
	 */
79
	@Override
80
	@Transactional(readOnly = true)
81
	public ResourceStateSubscription getSubscription(final String subscriptionId) {
82
		return (ResourceStateSubscription) getSessionFactory().getCurrentSession().get(ResourceStateSubscription.class, subscriptionId);
83
	}
84

    
85
	/**
86
	 * {@inheritDoc}
87
	 * 
88
	 * @see eu.dnetlib.enabling.is.sn.SubscriptionDAO#listSubscriptions()
89
	 */
90
	@Override
91
	@SuppressWarnings("unchecked")
92
	@Transactional(readOnly = true)
93
	public Collection<ResourceStateSubscription> listSubscriptions() {
94
		return getSessionFactory().getCurrentSession().createQuery("from subscriptions").list();
95
	}
96

    
97
	/**
98
	 * {@inheritDoc}
99
	 * 
100
	 * @see eu.dnetlib.enabling.is.sn.SubscriptionDAO#listSubscriptions(java.lang.String)
101
	 */
102
	@Override
103
	@Transactional(readOnly = true)
104
	public Collection<ResourceStateSubscription> listSubscriptions(final String prefix) {
105
		final ResourceStateSubscription exampleEntity = new ResourceStateSubscription();
106
		exampleEntity.setPrefix(prefix);
107

    
108
		return transformToSubscription(queryByCriteria(exampleEntity));
109
	}
110

    
111
	/**
112
	 * {@inheritDoc}
113
	 * 
114
	 * @see eu.dnetlib.enabling.is.sn.SubscriptionDAO#removeSubscription(java.lang.String)
115
	 */
116
	@Override
117
	@Transactional
118
	public boolean removeSubscription(final String subscriptionId) {
119
		if (StringUtils.isBlank(subscriptionId)) return false;
120

    
121
		final ResourceStateSubscription entity = getSubscription(subscriptionId);
122

    
123
		if (entity == null) return false;
124

    
125
		getSessionFactory().getCurrentSession().delete(entity);
126
		return true;
127
	}
128

    
129
	@SuppressWarnings("unchecked")
130
	private List<Object> queryByCriteria(final ResourceStateSubscription exampleEntity) {
131
		Criteria criteria = getSessionFactory().getCurrentSession().createCriteria(ResourceStateSubscription.class).add(Example.create(exampleEntity));
132
		return criteria.list();
133
	}
134

    
135
	public SessionFactory getSessionFactory() {
136
		return sessionFactory;
137
	}
138

    
139
	@Required
140
	public void setSessionFactory(SessionFactory sessionFactory) {
141
		this.sessionFactory = sessionFactory;
142
	}
143
}
(2-2/2)