blob: 732d753cae8d51089ca15752f76df850e971a711 [file] [log] [blame]
Brian O'Connor66630c82014-10-02 21:08:19 -07001package org.onlab.onos.store.trivial.impl;
2
tom85258ee2014-10-07 00:10:02 -07003import com.google.common.collect.ImmutableSet;
Brian O'Connor66630c82014-10-02 21:08:19 -07004import org.apache.felix.scr.annotations.Activate;
5import org.apache.felix.scr.annotations.Component;
6import org.apache.felix.scr.annotations.Deactivate;
7import org.apache.felix.scr.annotations.Service;
8import org.onlab.onos.net.intent.InstallableIntent;
9import org.onlab.onos.net.intent.Intent;
10import org.onlab.onos.net.intent.IntentEvent;
11import org.onlab.onos.net.intent.IntentId;
12import org.onlab.onos.net.intent.IntentState;
13import org.onlab.onos.net.intent.IntentStore;
14import org.onlab.onos.net.intent.IntentStoreDelegate;
15import org.onlab.onos.store.AbstractStore;
16import org.slf4j.Logger;
17
tom85258ee2014-10-07 00:10:02 -070018import java.util.HashMap;
19import java.util.List;
20import java.util.Map;
21
22import static org.onlab.onos.net.intent.IntentState.*;
23import static org.slf4j.LoggerFactory.getLogger;
Brian O'Connor66630c82014-10-02 21:08:19 -070024
25@Component(immediate = true)
26@Service
27public class SimpleIntentStore
tom85258ee2014-10-07 00:10:02 -070028 extends AbstractStore<IntentEvent, IntentStoreDelegate>
29 implements IntentStore {
Brian O'Connor66630c82014-10-02 21:08:19 -070030
31 private final Logger log = getLogger(getClass());
32 private final Map<IntentId, Intent> intents = new HashMap<>();
33 private final Map<IntentId, IntentState> states = new HashMap<>();
34 private final Map<IntentId, List<InstallableIntent>> installable = new HashMap<>();
35
36 @Activate
37 public void activate() {
38 log.info("Started");
39 }
40
41 @Deactivate
42 public void deactivate() {
43 log.info("Stopped");
44 }
45
46 @Override
47 public IntentEvent createIntent(Intent intent) {
tom85258ee2014-10-07 00:10:02 -070048 intents.put(intent.id(), intent);
Brian O'Connor66630c82014-10-02 21:08:19 -070049 return this.setState(intent, IntentState.SUBMITTED);
50 }
51
52 @Override
53 public IntentEvent removeIntent(IntentId intentId) {
54 Intent intent = intents.remove(intentId);
55 installable.remove(intentId);
tom85258ee2014-10-07 00:10:02 -070056 IntentEvent event = this.setState(intent, WITHDRAWN);
Brian O'Connor66630c82014-10-02 21:08:19 -070057 states.remove(intentId);
58 return event;
59 }
60
61 @Override
62 public long getIntentCount() {
63 return intents.size();
64 }
65
66 @Override
67 public Iterable<Intent> getIntents() {
68 return ImmutableSet.copyOf(intents.values());
69 }
70
71 @Override
72 public Intent getIntent(IntentId intentId) {
73 return intents.get(intentId);
74 }
75
76 @Override
77 public IntentState getIntentState(IntentId id) {
78 return states.get(id);
79 }
80
Brian O'Connor66630c82014-10-02 21:08:19 -070081 @Override
tom85258ee2014-10-07 00:10:02 -070082 public IntentEvent setState(Intent intent, IntentState state) {
83 IntentId id = intent.id();
84 states.put(id, state);
85 IntentEvent.Type type = (state == SUBMITTED ? IntentEvent.Type.SUBMITTED :
86 (state == INSTALLED ? IntentEvent.Type.INSTALLED :
87 (state == FAILED ? IntentEvent.Type.FAILED :
88 state == WITHDRAWN ? IntentEvent.Type.WITHDRAWN :
89 null)));
90 return type == null ? null : new IntentEvent(type, intent);
Brian O'Connor66630c82014-10-02 21:08:19 -070091 }
92
93 @Override
tom85258ee2014-10-07 00:10:02 -070094 public void addInstallableIntents(IntentId intentId, List<InstallableIntent> result) {
Brian O'Connor66630c82014-10-02 21:08:19 -070095 installable.put(intentId, result);
Brian O'Connor66630c82014-10-02 21:08:19 -070096 }
97
98 @Override
99 public List<InstallableIntent> getInstallableIntents(IntentId intentId) {
100 return installable.get(intentId);
101 }
102
103 @Override
104 public void removeInstalledIntents(IntentId intentId) {
105 installable.remove(intentId);
106 }
107
108}