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