Project

General

Profile

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

    
3
import java.util.ArrayList;
4
import java.util.Collection;
5
import java.util.HashMap;
6
import java.util.Map;
7

    
8
/**
9
 * 
10
 * dummy implementation of the resource state subscription DAO layer, using an in-memory map.
11
 * 
12
 * @author marko
13
 * 
14
 */
15
public class MemoryResourceStateSubscriptionDAOImpl implements ResourceStateSubscriptionDAO {
16

    
17
	/**
18
	 * by id.
19
	 */
20
	private Map<String, ResourceStateSubscription> byId = new HashMap<String, ResourceStateSubscription>();
21

    
22
	/**
23
	 * groups subscriptions with the same prefix and type.
24
	 */
25
	private Map<String, Collection<ResourceStateSubscription>> byPrefixAndType = new HashMap<String, Collection<ResourceStateSubscription>>();
26

    
27
	/**
28
	 * {@inheritDoc}
29
	 * 
30
	 * @see eu.dnetlib.enabling.is.sn.resourcestate.ResourceStateSubscriptionDAO#listSubscriptions(java.lang.String,
31
	 *      java.lang.String, java.lang.String)
32
	 */
33
	@Override
34
	public Collection<ResourceStateSubscription> listSubscriptions(final String prefix, final String resourceType, final String resourceId) {
35
		return orDefault(getByPrefixAndType().get(prefix + "/" + resourceType + "/" + resourceId));
36
	}
37

    
38
	/**
39
	 * {@inheritDoc}
40
	 * 
41
	 * @see eu.dnetlib.enabling.is.sn.SubscriptionDAO#addSubscription(java.lang.Object)
42
	 */
43
	@Override
44
	public void addSubscription(final ResourceStateSubscription subscription) {
45
		getById().put(subscription.getSubscriptionId(), subscription);
46

    
47
		final String key = subscription.getPrefix() + "/" + subscription.getType() + "/" + subscription.getResourceId();
48
		final Collection<ResourceStateSubscription> prefTypeList = getByPrefixAndType().get(key);
49
		if (prefTypeList == null)
50
			getByPrefixAndType().put(key, new ArrayList<ResourceStateSubscription>());
51
		getByPrefixAndType().get(key).add(subscription);
52

    
53
	}
54

    
55
	/**
56
	 * {@inheritDoc}
57
	 * 
58
	 * @see eu.dnetlib.enabling.is.sn.SubscriptionDAO#getSubscription(java.lang.String)
59
	 */
60
	@Override
61
	public ResourceStateSubscription getSubscription(final String subscriptionId) {
62
		return getById().get(subscriptionId);
63
	}
64

    
65
	/**
66
	 * {@inheritDoc}
67
	 * 
68
	 * @see eu.dnetlib.enabling.is.sn.SubscriptionDAO#listSubscriptions()
69
	 */
70
	@Override
71
	public Collection<ResourceStateSubscription> listSubscriptions() {
72
		return orDefault(getById().values());
73
	}
74

    
75
	/**
76
	 * {@inheritDoc}
77
	 * 
78
	 * @see eu.dnetlib.enabling.is.sn.SubscriptionDAO#listSubscriptions(java.lang.String)
79
	 */
80
	@Override
81
	public Collection<ResourceStateSubscription> listSubscriptions(final String prefix) {
82
		return listSubscriptions(prefix, "*", "*");
83
	}
84

    
85
	/**
86
	 * {@inheritDoc}
87
	 * 
88
	 * @see eu.dnetlib.enabling.is.sn.SubscriptionDAO#removeSubscription(java.lang.String)
89
	 */
90
	@Override
91
	public boolean removeSubscription(final String subscriptionId) {
92
		final ResourceStateSubscription subscription = getSubscription(subscriptionId);
93
		if (subscription == null)
94
			return false;
95
		final String key = subscription.getPrefix() + "/" + subscription.getType() + "/" + subscription.getResourceId();
96
		
97
		final Collection<ResourceStateSubscription> prefTypeList = getByPrefixAndType().get(key);
98
		prefTypeList.remove(subscription);
99
		
100
		getById().remove(subscriptionId);
101
		return true;
102
	}
103

    
104
	/**
105
	 * inner helper method. returns an empty collection instead of a null.
106
	 * 
107
	 * @param collection
108
	 *            some collection
109
	 * @return input collection or empty collection
110
	 */
111
	private Collection<ResourceStateSubscription> orDefault(final Collection<ResourceStateSubscription> collection) {
112
		if (collection == null)
113
			return new ArrayList<ResourceStateSubscription>();
114
		return collection;
115
	}
116

    
117
	public Map<String, ResourceStateSubscription> getById() {
118
		return byId;
119
	}
120

    
121
	public void setById(final Map<String, ResourceStateSubscription> byId) {
122
		this.byId = byId;
123
	}
124

    
125
	public Map<String, Collection<ResourceStateSubscription>> getByPrefixAndType() {
126
		return byPrefixAndType;
127
	}
128

    
129
	public void setByPrefixAndType(final Map<String, Collection<ResourceStateSubscription>> byPrefixAndType) {
130
		this.byPrefixAndType = byPrefixAndType;
131
	}
132
}
(3-3/9)