blob: c7f656acb129464ee4bcc6aa960691f5beffecc9 [file] [log] [blame]
Brian O'Connor66630c82014-10-02 21:08:19 -07001package org.onlab.onos.store.trivial.impl;
2
Jonathan Hart11096402014-10-20 17:31:49 -07003import static org.onlab.onos.net.intent.IntentState.FAILED;
4import static org.onlab.onos.net.intent.IntentState.INSTALLED;
5import static org.onlab.onos.net.intent.IntentState.SUBMITTED;
6import static org.onlab.onos.net.intent.IntentState.WITHDRAWN;
7import static org.slf4j.LoggerFactory.getLogger;
8
9import java.util.List;
10import java.util.Map;
11import java.util.concurrent.ConcurrentHashMap;
12
Brian O'Connor66630c82014-10-02 21:08:19 -070013import org.apache.felix.scr.annotations.Activate;
14import org.apache.felix.scr.annotations.Component;
15import org.apache.felix.scr.annotations.Deactivate;
16import org.apache.felix.scr.annotations.Service;
17import org.onlab.onos.net.intent.InstallableIntent;
18import org.onlab.onos.net.intent.Intent;
19import org.onlab.onos.net.intent.IntentEvent;
20import org.onlab.onos.net.intent.IntentId;
21import org.onlab.onos.net.intent.IntentState;
22import org.onlab.onos.net.intent.IntentStore;
23import org.onlab.onos.net.intent.IntentStoreDelegate;
24import org.onlab.onos.store.AbstractStore;
25import org.slf4j.Logger;
26
Jonathan Hart11096402014-10-20 17:31:49 -070027import com.google.common.collect.ImmutableSet;
Brian O'Connor66630c82014-10-02 21:08:19 -070028
29@Component(immediate = true)
30@Service
31public class SimpleIntentStore
tom85258ee2014-10-07 00:10:02 -070032 extends AbstractStore<IntentEvent, IntentStoreDelegate>
33 implements IntentStore {
Brian O'Connor66630c82014-10-02 21:08:19 -070034
35 private final Logger log = getLogger(getClass());
Jonathan Hart11096402014-10-20 17:31:49 -070036 private final Map<IntentId, Intent> intents = new ConcurrentHashMap<>();
37 private final Map<IntentId, IntentState> states = new ConcurrentHashMap<>();
38 private final Map<IntentId, List<InstallableIntent>> installable =
39 new ConcurrentHashMap<>();
Brian O'Connor66630c82014-10-02 21:08:19 -070040
41 @Activate
42 public void activate() {
43 log.info("Started");
44 }
45
46 @Deactivate
47 public void deactivate() {
48 log.info("Stopped");
49 }
50
51 @Override
52 public IntentEvent createIntent(Intent intent) {
tom85258ee2014-10-07 00:10:02 -070053 intents.put(intent.id(), intent);
Brian O'Connor66630c82014-10-02 21:08:19 -070054 return this.setState(intent, IntentState.SUBMITTED);
55 }
56
57 @Override
58 public IntentEvent removeIntent(IntentId intentId) {
59 Intent intent = intents.remove(intentId);
60 installable.remove(intentId);
tom85258ee2014-10-07 00:10:02 -070061 IntentEvent event = this.setState(intent, WITHDRAWN);
Brian O'Connor66630c82014-10-02 21:08:19 -070062 states.remove(intentId);
63 return event;
64 }
65
66 @Override
67 public long getIntentCount() {
68 return intents.size();
69 }
70
71 @Override
72 public Iterable<Intent> getIntents() {
73 return ImmutableSet.copyOf(intents.values());
74 }
75
76 @Override
77 public Intent getIntent(IntentId intentId) {
78 return intents.get(intentId);
79 }
80
81 @Override
82 public IntentState getIntentState(IntentId id) {
83 return states.get(id);
84 }
85
Brian O'Connor66630c82014-10-02 21:08:19 -070086 @Override
tom85258ee2014-10-07 00:10:02 -070087 public IntentEvent setState(Intent intent, IntentState state) {
88 IntentId id = intent.id();
89 states.put(id, state);
90 IntentEvent.Type type = (state == SUBMITTED ? IntentEvent.Type.SUBMITTED :
91 (state == INSTALLED ? IntentEvent.Type.INSTALLED :
92 (state == FAILED ? IntentEvent.Type.FAILED :
93 state == WITHDRAWN ? IntentEvent.Type.WITHDRAWN :
94 null)));
95 return type == null ? null : new IntentEvent(type, intent);
Brian O'Connor66630c82014-10-02 21:08:19 -070096 }
97
98 @Override
tom85258ee2014-10-07 00:10:02 -070099 public void addInstallableIntents(IntentId intentId, List<InstallableIntent> result) {
Brian O'Connor66630c82014-10-02 21:08:19 -0700100 installable.put(intentId, result);
Brian O'Connor66630c82014-10-02 21:08:19 -0700101 }
102
103 @Override
104 public List<InstallableIntent> getInstallableIntents(IntentId intentId) {
105 return installable.get(intentId);
106 }
107
108 @Override
109 public void removeInstalledIntents(IntentId intentId) {
110 installable.remove(intentId);
111 }
112
113}