3b5165c7d732abe99d7279deff6a312e85da58fd
[ovsdb.git] / openstack / net-virt-providers / src / main / java / org / opendaylight / ovsdb / openstack / netvirt / providers / openflow13 / PipelineOrchestratorImpl.java
1 /*
2  * Copyright (C) 2014 Red Hat, Inc.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  *
8  * Authors : Dave Tucker, Madhu Venugopal
9  */
10
11 package org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13;
12
13 import java.util.List;
14 import java.util.Map;
15
16 import org.osgi.framework.ServiceReference;
17
18 import com.google.common.collect.Lists;
19 import com.google.common.collect.Maps;
20
21 public class PipelineOrchestratorImpl implements PipelineOrchestrator {
22
23     private List<Service> staticPipeline = Lists.newArrayList(
24                                                                 Service.CLASSIFIER,
25                                                                 Service.ARP_RESPONDER,
26                                                                 Service.INBOUND_NAT,
27                                                                 Service.INGRESS_ACL,
28                                                                 Service.LOAD_BALANCER,
29                                                                 Service.ROUTING,
30                                                                 Service.L2_REWRITE,
31                                                                 Service.L2_FORWARDING,
32                                                                 Service.EGRESS_ACL,
33                                                                 Service.OUTBOUND_NAT
34                                                               );
35     Map<Service, AbstractServiceInstance> serviceRegistry = Maps.newConcurrentMap();
36
37     public PipelineOrchestratorImpl() {
38     }
39
40     public void registerService(final ServiceReference ref, AbstractServiceInstance serviceInstance){
41         Service service = (Service)ref.getProperty(AbstractServiceInstance.SERVICE_PROPERTY);
42         serviceRegistry.put(service, serviceInstance);
43     }
44
45     public void unregisterService(final ServiceReference ref) {
46         serviceRegistry.remove(ref.getProperty(AbstractServiceInstance.SERVICE_PROPERTY));
47     }
48     @Override
49     public Service getNextServiceInPipeline(Service service) {
50         int index = staticPipeline.indexOf(service);
51         if (index >= staticPipeline.size() - 1) return null;
52         return staticPipeline.get(index + 1);
53     }
54
55     @Override
56     public AbstractServiceInstance getServiceInstance(Service service) {
57         if (service == null) return null;
58         return serviceRegistry.get(service);
59     }
60 }