Project

General

Profile

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

    
3
import java.util.Collection;
4
import java.util.List;
5

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

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

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

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

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

    
33
	private SessionFactory sessionFactory;
34

    
35
	private Collection<ResourceStateSubscription> transformToSubscription(final List<Object> inputList) {
36
		return Collections2.transform(inputList, new Function<Object, ResourceStateSubscription>() {
37

    
38
			@Override
39
			public ResourceStateSubscription apply(final Object input) {
40

    
41
				return (ResourceStateSubscription) input;
42
			}
43

    
44
		});
45
	}
46

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

    
57
		final ResourceStateSubscription exampleEntity = new ResourceStateSubscription();
58
		exampleEntity.setPrefix(prefix);
59
		exampleEntity.setType(resourceType);
60
		exampleEntity.setResourceId(resourceId);
61

    
62
		return transformToSubscription(queryByCriteria(exampleEntity));
63
	}
64

    
65
	/**
66
	 * {@inheritDoc}
67
	 * 
68
	 * @see eu.dnetlib.enabling.is.sn.SubscriptionDAO#addSubscription(java.lang.Object)
69
	 */
70
	@Override
71
	@Transactional
72
	public void addSubscription(final ResourceStateSubscription subscription) {
73

    
74
		log.debug("evict cached subscriptions");
75

    
76
		getSessionFactory().getCurrentSession().save(subscription);
77
	}
78

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

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

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

    
113
		return transformToSubscription(queryByCriteria(exampleEntity));
114
	}
115

    
116
	/**
117
	 * {@inheritDoc}
118
	 * 
119
	 * @see eu.dnetlib.enabling.is.sn.SubscriptionDAO#removeSubscription(java.lang.String)
120
	 */
121
	@Override
122
	@Transactional
123
	public boolean removeSubscription(final String subscriptionId) {
124
		if (StringUtils.isBlank(subscriptionId)) return false;
125

    
126
		final ResourceStateSubscription entity = getSubscription(subscriptionId);
127

    
128
		if (entity == null) return false;
129

    
130
		getSessionFactory().getCurrentSession().delete(entity);
131
		return true;
132
	}
133

    
134
	@SuppressWarnings("unchecked")
135
	private List<Object> queryByCriteria(final ResourceStateSubscription exampleEntity) {
136
		Criteria criteria = getSessionFactory().getCurrentSession().createCriteria(ResourceStateSubscription.class).add(Example.create(exampleEntity));
137
		return criteria.list();
138
	}
139

    
140
	public SessionFactory getSessionFactory() {
141
		return sessionFactory;
142
	}
143

    
144
	@Required
145
	public void setSessionFactory(SessionFactory sessionFactory) {
146
		this.sessionFactory = sessionFactory;
147
	}
148
}
(2-2/2)