f29f0e03ac89e9561aaeb17afd21e90e40bafab6
[controller.git] / opendaylight / config / config-util / src / main / java / org / opendaylight / controller / config / util / jolokia / ConfigRegistryJolokiaClient.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.util.jolokia;
9
10 import java.util.List;
11 import java.util.Set;
12
13 import javax.management.ObjectName;
14
15 import org.jolokia.client.request.J4pExecRequest;
16 import org.jolokia.client.request.J4pReadRequest;
17 import org.jolokia.client.request.J4pResponse;
18 import org.json.simple.JSONArray;
19 import org.json.simple.JSONObject;
20 import org.opendaylight.controller.config.api.ConflictingVersionException;
21 import org.opendaylight.controller.config.api.ValidationException;
22 import org.opendaylight.controller.config.api.jmx.CommitStatus;
23 import org.opendaylight.controller.config.api.jmx.ConfigRegistryMXBean;
24 import org.opendaylight.controller.config.api.jmx.ObjectNameUtil;
25 import org.opendaylight.controller.config.util.ConfigRegistryClient;
26
27 public class ConfigRegistryJolokiaClient extends ListableJolokiaClient
28         implements ConfigRegistryClient {
29
30     public ConfigRegistryJolokiaClient(String url) {
31         super(url, ConfigRegistryMXBean.OBJECT_NAME);
32     }
33
34     @Override
35     public ConfigTransactionJolokiaClient createTransaction() {
36         // create transaction
37         J4pExecRequest execReq = new J4pExecRequest(objectName, "beginConfig");
38         J4pResponse<J4pExecRequest> resp = execute(execReq);
39         ObjectName transactionControllerON = extractObjectName(resp);
40         return getConfigTransactionClient(transactionControllerON);
41     }
42
43     @Override
44     public ConfigTransactionJolokiaClient getConfigTransactionClient(
45             String transactionName) {
46         ObjectName objectName = ObjectNameUtil
47                 .createTransactionControllerON(transactionName);
48         return getConfigTransactionClient(objectName);
49     }
50
51     @Override
52     public ConfigTransactionJolokiaClient getConfigTransactionClient(
53             ObjectName objectName) {
54         return new ConfigTransactionJolokiaClient(url, objectName, this);
55     }
56
57     @Override
58     public CommitStatus commitConfig(ObjectName transactionControllerON)
59             throws ConflictingVersionException, ValidationException {
60         J4pExecRequest execReq = new J4pExecRequest(objectName, "commitConfig",
61                 transactionControllerON);
62         JSONObject jsonObject;
63         jsonObject = execute(execReq).getValue();
64         JSONArray newInstancesArray = (JSONArray) jsonObject
65                 .get("newInstances");
66         List<ObjectName> newInstances = jsonArrayToObjectNames(newInstancesArray);
67         JSONArray reusedInstancesArray = (JSONArray) jsonObject
68                 .get("reusedInstances");
69         List<ObjectName> reusedInstances = jsonArrayToObjectNames(reusedInstancesArray);
70         JSONArray recreatedInstancesArray = (JSONArray) jsonObject
71                 .get("recreatedInstances");
72         List<ObjectName> recreatedInstances = jsonArrayToObjectNames(recreatedInstancesArray);
73         return new CommitStatus(newInstances, reusedInstances,
74                 recreatedInstances);
75     }
76
77     public Object getAttribute(ObjectName configBeanTransactionON, String key) {
78         J4pReadRequest req = new J4pReadRequest(configBeanTransactionON, key);
79         return execute(req).getValue();
80     }
81
82     public ObjectName getAttributeON(ObjectName configBeanTransactionON,
83             String key) {
84         JSONObject jsonAttrib = (JSONObject) getAttribute(
85                 configBeanTransactionON, key);
86         return extractObjectName(jsonAttrib);
87     }
88
89     // proxy around ConfigTransactionManagerMXBean
90
91     @Override
92     public ObjectName beginConfig() {
93         ConfigTransactionJolokiaClient result = createTransaction();
94         return result.getTransactionON();
95     }
96
97     @Override
98     public List<ObjectName> getOpenConfigs() {
99         J4pReadRequest req = new J4pReadRequest(objectName, "OpenConfigs");
100         JSONArray jsonArray = execute(req).getValue();
101         return jsonArrayToObjectNames(jsonArray);
102     }
103
104     @Override
105     public long getVersion() {
106         J4pReadRequest req = new J4pReadRequest(objectName, "Version");
107         return (Long) execute(req).getValue();
108     }
109
110     @Override
111     public boolean isHealthy() {
112         J4pReadRequest req = new J4pReadRequest(objectName, "Healthy");
113         return (Boolean) execute(req).getValue();
114     }
115
116     @Override
117     public Set<ObjectName> lookupRuntimeBeans() {
118         return lookupSomething("lookupRuntimeBeans()", new Object[0]);
119     }
120
121     @Override
122     public Set<ObjectName> lookupRuntimeBeans(String moduleName,
123             String instanceName) {
124         return lookupSomething(
125                 "lookupRuntimeBeans(java.lang.String,java.lang.String)",
126                 new Object[] { moduleName, instanceName });
127     }
128
129     @Override
130     public Object invokeMethod(ObjectName on, String name, Object[] params,
131             String[] signature) {
132         throw new UnsupportedOperationException();
133     }
134
135     @Override
136     public Object getAttributeCurrentValue(ObjectName on, String attributeName) {
137         throw new UnsupportedOperationException();
138     }
139 }