blob: 12e62e2636d72767796d6bf208eb7ac87bbda7ac [file] [log] [blame]
Brian O'Connor66630c82014-10-02 21:08:19 -07001package org.onlab.onos.store.trivial.impl;
2
Thomas Vachuskac96058a2014-10-20 23:00:16 -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;
Brian O'Connor66630c82014-10-02 21:08:19 -07008import org.onlab.onos.net.intent.Intent;
9import org.onlab.onos.net.intent.IntentEvent;
10import org.onlab.onos.net.intent.IntentId;
11import org.onlab.onos.net.intent.IntentState;
12import org.onlab.onos.net.intent.IntentStore;
13import org.onlab.onos.net.intent.IntentStoreDelegate;
14import org.onlab.onos.store.AbstractStore;
15import org.slf4j.Logger;
16
Thomas Vachuskac96058a2014-10-20 23:00:16 -070017import java.util.List;
18import java.util.Map;
19import java.util.concurrent.ConcurrentHashMap;
20
21import static org.onlab.onos.net.intent.IntentState.*;
22import static org.slf4j.LoggerFactory.getLogger;
Brian O'Connor66630c82014-10-02 21:08:19 -070023
24@Component(immediate = true)
25@Service
26public class SimpleIntentStore
tom85258ee2014-10-07 00:10:02 -070027 extends AbstractStore<IntentEvent, IntentStoreDelegate>
28 implements IntentStore {
Brian O'Connor66630c82014-10-02 21:08:19 -070029
30 private final Logger log = getLogger(getClass());
Jonathan Hart11096402014-10-20 17:31:49 -070031 private final Map<IntentId, Intent> intents = new ConcurrentHashMap<>();
32 private final Map<IntentId, IntentState> states = new ConcurrentHashMap<>();
Thomas Vachuskac96058a2014-10-20 23:00:16 -070033 private final Map<IntentId, List<Intent>> installable =
Jonathan Hart11096402014-10-20 17:31:49 -070034 new ConcurrentHashMap<>();
Brian O'Connor66630c82014-10-02 21:08:19 -070035
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);
Pavlin Radoslavov2ca9cf22014-10-22 10:39:40 -070085 IntentEvent.Type type = null;
86
87 switch (state) {
88 case SUBMITTED:
89 type = IntentEvent.Type.SUBMITTED;
90 break;
91 case INSTALLED:
92 type = IntentEvent.Type.INSTALLED;
93 break;
94 case FAILED:
95 type = IntentEvent.Type.FAILED;
96 break;
97 case WITHDRAWN:
98 type = IntentEvent.Type.WITHDRAWN;
99 break;
100 default:
101 break;
102 }
103 if (type == null) {
104 return null;
105 }
106 return new IntentEvent(type, intent);
Brian O'Connor66630c82014-10-02 21:08:19 -0700107 }
108
109 @Override
Thomas Vachuskac96058a2014-10-20 23:00:16 -0700110 public void addInstallableIntents(IntentId intentId, List<Intent> result) {
Brian O'Connor66630c82014-10-02 21:08:19 -0700111 installable.put(intentId, result);
Brian O'Connor66630c82014-10-02 21:08:19 -0700112 }
113
114 @Override
Thomas Vachuskac96058a2014-10-20 23:00:16 -0700115 public List<Intent> getInstallableIntents(IntentId intentId) {
Brian O'Connor66630c82014-10-02 21:08:19 -0700116 return installable.get(intentId);
117 }
118
119 @Override
120 public void removeInstalledIntents(IntentId intentId) {
121 installable.remove(intentId);
122 }
123
124}