c5290ad286520032c8e8dee93f146b9f97bf2df8
[onosfw.git] /
1 /*\r
2  * Copyright 2015 Open Networking Laboratory\r
3  *\r
4  * Licensed under the Apache License, Version 2.0 (the "License");\r
5  * you may not use this file except in compliance with the License.\r
6  * You may obtain a copy of the License at\r
7  *\r
8  *     http://www.apache.org/licenses/LICENSE-2.0\r
9  *\r
10  * Unless required by applicable law or agreed to in writing, software\r
11  * distributed under the License is distributed on an "AS IS" BASIS,\r
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
13  * See the License for the specific language governing permissions and\r
14  * limitations under the License.\r
15  */\r
16 package org.onosproject.vtnrsc.tenantnetwork.impl;\r
17 \r
18 import org.apache.felix.scr.annotations.Activate;\r
19 import org.apache.felix.scr.annotations.Component;\r
20 import org.apache.felix.scr.annotations.Deactivate;\r
21 import org.apache.felix.scr.annotations.Reference;\r
22 import org.apache.felix.scr.annotations.ReferenceCardinality;\r
23 import org.apache.felix.scr.annotations.Service;\r
24 import org.onosproject.core.ApplicationId;\r
25 import org.onosproject.core.CoreService;\r
26 import org.onosproject.store.serializers.KryoNamespaces;\r
27 import org.onosproject.store.service.Serializer;\r
28 import org.onosproject.store.service.StorageService;\r
29 import org.onosproject.vtnrsc.DefaultTenantNetwork;\r
30 import org.onosproject.vtnrsc.PhysicalNetwork;\r
31 import org.onosproject.vtnrsc.SegmentationId;\r
32 import org.onosproject.vtnrsc.TenantId;\r
33 import org.onosproject.vtnrsc.TenantNetwork;\r
34 import org.onosproject.vtnrsc.TenantNetworkId;\r
35 import org.onosproject.vtnrsc.tenantnetwork.TenantNetworkService;\r
36 import org.slf4j.Logger;\r
37 \r
38 import java.util.Arrays;\r
39 import java.util.Collections;\r
40 import java.util.Map;\r
41 \r
42 import static com.google.common.base.Preconditions.checkNotNull;\r
43 import static org.slf4j.LoggerFactory.getLogger;\r
44 \r
45 /**\r
46  * Provides implementation of the tenantNetworkService.\r
47  */\r
48 @Component(immediate = true)\r
49 @Service\r
50 public class TenantNetworkManager implements TenantNetworkService {\r
51 \r
52     private static final String NETWORK_ID_NULL = "Network ID cannot be null";\r
53     private static final String NETWORK_NOT_NULL = "Network ID cannot be null";\r
54     private static final String TENANTNETWORK = "vtn-tenant-network-store";\r
55     private static final String VTNRSC_APP = "org.onosproject.vtnrsc";\r
56 \r
57     protected Map<TenantNetworkId, TenantNetwork> networkIdAsKeyStore;\r
58     protected ApplicationId appId;\r
59 \r
60     private final Logger log = getLogger(getClass());\r
61 \r
62     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)\r
63     protected StorageService storageService;\r
64 \r
65     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)\r
66     protected CoreService coreService;\r
67 \r
68 \r
69     @Activate\r
70     public void activate() {\r
71 \r
72         appId = coreService.registerApplication(VTNRSC_APP);\r
73 \r
74         networkIdAsKeyStore = storageService.<TenantNetworkId, TenantNetwork>consistentMapBuilder()\r
75                 .withName(TENANTNETWORK)\r
76                 .withApplicationId(appId)\r
77                 .withPurgeOnUninstall()\r
78                 .withSerializer(Serializer.using(Arrays.asList(KryoNamespaces.API),\r
79                                                  TenantNetworkId.class,\r
80                                                  DefaultTenantNetwork.class,\r
81                                                  TenantNetwork.State.class,\r
82                                                  TenantId.class,\r
83                                                  TenantNetwork.Type.class,\r
84                                                  PhysicalNetwork.class,\r
85                                                  SegmentationId.class))\r
86                 .build().asJavaMap();\r
87 \r
88         log.info("Started");\r
89     }\r
90 \r
91     @Deactivate\r
92     public void deactivate() {\r
93         log.info("Stopped");\r
94     }\r
95 \r
96     @Override\r
97     public boolean exists(TenantNetworkId networkId) {\r
98         checkNotNull(networkId, NETWORK_ID_NULL);\r
99         return networkIdAsKeyStore.containsKey(networkId);\r
100     }\r
101 \r
102     @Override\r
103     public int getNetworkCount() {\r
104         return networkIdAsKeyStore.size();\r
105     }\r
106 \r
107     @Override\r
108     public Iterable<TenantNetwork> getNetworks() {\r
109         return Collections.unmodifiableCollection(networkIdAsKeyStore.values());\r
110     }\r
111 \r
112     @Override\r
113     public TenantNetwork getNetwork(TenantNetworkId networkId) {\r
114         checkNotNull(networkId, NETWORK_ID_NULL);\r
115         return networkIdAsKeyStore.get(networkId);\r
116     }\r
117 \r
118     @Override\r
119     public boolean createNetworks(Iterable<TenantNetwork> networks) {\r
120         checkNotNull(networks, NETWORK_NOT_NULL);\r
121         for (TenantNetwork network : networks) {\r
122             networkIdAsKeyStore.put(network.id(), network);\r
123             if (!networkIdAsKeyStore.containsKey(network.id())) {\r
124                 log.debug("The tenantNetwork is created failed which identifier was {}", network.id()\r
125                         .toString());\r
126                 return false;\r
127             }\r
128         }\r
129         return true;\r
130     }\r
131 \r
132     @Override\r
133     public boolean updateNetworks(Iterable<TenantNetwork> networks) {\r
134         checkNotNull(networks, NETWORK_NOT_NULL);\r
135         for (TenantNetwork network : networks) {\r
136             if (!networkIdAsKeyStore.containsKey(network.id())) {\r
137                 log.debug("The tenantNetwork is not exist whose identifier was {} ",\r
138                           network.id().toString());\r
139                 return false;\r
140             }\r
141 \r
142             networkIdAsKeyStore.put(network.id(), network);\r
143 \r
144             if (!network.equals(networkIdAsKeyStore.get(network.id()))) {\r
145                 log.debug("The tenantNetwork is updated failed whose identifier was {} ",\r
146                           network.id().toString());\r
147                 return false;\r
148             }\r
149 \r
150         }\r
151         return true;\r
152     }\r
153 \r
154     @Override\r
155     public boolean removeNetworks(Iterable<TenantNetworkId> networkIds) {\r
156         checkNotNull(networkIds, NETWORK_NOT_NULL);\r
157         for (TenantNetworkId networkId : networkIds) {\r
158             networkIdAsKeyStore.remove(networkId);\r
159             if (networkIdAsKeyStore.containsKey(networkId)) {\r
160                 log.debug("The tenantNetwork is removed failed whose identifier was {}",\r
161                           networkId.toString());\r
162                 return false;\r
163             }\r
164         }\r
165         return true;\r
166     }\r
167 }\r