Merge "Remove raw references to Map in XSQL"
[controller.git] / opendaylight / config / config-manager / src / main / java / org / opendaylight / controller / config / manager / impl / jmx / ServiceReferenceRegistrator.java
1 /*
2  * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
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 package org.opendaylight.controller.config.manager.impl.jmx;
9
10 import javax.management.InstanceAlreadyExistsException;
11 import javax.management.ObjectName;
12 import org.opendaylight.controller.config.api.jmx.ObjectNameUtil;
13 import org.opendaylight.controller.config.manager.impl.jmx.InternalJMXRegistrator.InternalJMXRegistration;
14
15 public interface ServiceReferenceRegistrator extends AutoCloseable {
16
17     public String getNullableTransactionName();
18
19     ServiceReferenceJMXRegistration registerMBean(ServiceReferenceMXBeanImpl object,
20                                                           ObjectName on) throws InstanceAlreadyExistsException;
21
22     @Override
23     void close();
24
25     public static class ServiceReferenceJMXRegistration implements AutoCloseable {
26         private final InternalJMXRegistration registration;
27
28         ServiceReferenceJMXRegistration(InternalJMXRegistration registration) {
29             this.registration = registration;
30         }
31
32         @Override
33         public void close() {
34             registration.close();
35         }
36     }
37
38     public static interface ServiceReferenceTransactionRegistratorFactory {
39         public ServiceReferenceRegistrator create();
40     }
41
42     public static class ServiceReferenceRegistratorImpl implements ServiceReferenceRegistrator {
43         private final InternalJMXRegistrator currentJMXRegistrator;
44         private final String nullableTransactionName;
45
46         public ServiceReferenceRegistratorImpl(NestableJMXRegistrator parentRegistrator, String nullableTransactionName){
47             currentJMXRegistrator = parentRegistrator.createChild();
48             this.nullableTransactionName = nullableTransactionName;
49         }
50
51         public String getNullableTransactionName() {
52             return nullableTransactionName;
53         }
54
55
56         public ServiceReferenceJMXRegistration registerMBean(ServiceReferenceMXBeanImpl object,
57                                                              ObjectName on) throws InstanceAlreadyExistsException {
58             String actualTransactionName = ObjectNameUtil.getTransactionName(on);
59             boolean broken = false;
60             broken |= (nullableTransactionName == null) != (actualTransactionName == null);
61             broken |= (nullableTransactionName != null) && nullableTransactionName.equals(actualTransactionName) == false;
62             if (broken) {
63                 throw new IllegalArgumentException("Transaction name mismatch between expected "
64                         + nullableTransactionName + ", got " + actualTransactionName + " in " + on);
65             }
66             if (ObjectNameUtil.isServiceReference(on) == false) {
67                 throw new IllegalArgumentException("Invalid type of " + on);
68             }
69             return new ServiceReferenceJMXRegistration(currentJMXRegistrator.registerMBean(object, on));
70         }
71
72
73         @Override
74         public void close() {
75             currentJMXRegistrator.close();
76         }
77         public static interface ServiceReferenceTransactionRegistratorFactory {
78             public ServiceReferenceRegistrator create();
79         }
80     }
81
82
83     public static class ServiceReferenceTransactionRegistratorFactoryImpl implements ServiceReferenceTransactionRegistratorFactory {
84         private final NestableJMXRegistrator parentRegistrator;
85         private final String nullableTransactionName;
86
87         public ServiceReferenceTransactionRegistratorFactoryImpl(TransactionModuleJMXRegistrator parentRegistrator,
88                                                              String nullableTransactionName) {
89             this.parentRegistrator = parentRegistrator;
90             this.nullableTransactionName = nullableTransactionName;
91         }
92
93         public ServiceReferenceTransactionRegistratorFactoryImpl(BaseJMXRegistrator baseJMXRegistrator) {
94             this.parentRegistrator = baseJMXRegistrator;
95             this.nullableTransactionName = null;
96         }
97
98         public ServiceReferenceRegistrator create() {
99             return new ServiceReferenceRegistratorImpl(parentRegistrator, nullableTransactionName);
100         }
101     }
102 }