package org.jolokia.client.request; /* * Copyright 2009-2013 Roland Huss * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import java.util.*; import javax.management.MalformedObjectNameException; import javax.management.ObjectName; import org.json.simple.JSONArray; import org.json.simple.JSONObject; /** * A execute request for executing a JMX operation * * @author roland * @since May 18, 2010 */ public class J4pExecRequest extends AbtractJ4pMBeanRequest { // Operation to execute private String operation; // Operation arguments private List<Object> arguments; /** * New client request for executing a JMX operation * * @param pMBeanName name of the MBean to execute the request on * @param pOperation operation to execute * @param pArgs any arguments to pass (which must match the JMX operation's declared signature) */ public J4pExecRequest(ObjectName pMBeanName,String pOperation,Object ... pArgs) { this(null,pMBeanName,pOperation,pArgs); } /** * New client request for executing a JMX operation * * @param pTargetConfig proxy target configuration or <code>null</code> if no proxy should be used * @param pMBeanName name of the MBean to execute the request on * @param pOperation operation to execute * @param pArgs any arguments to pass (which must match the JMX operation's declared signature) */ public J4pExecRequest(J4pTargetConfig pTargetConfig,ObjectName pMBeanName,String pOperation,Object ... pArgs) { super(J4pType.EXEC, pMBeanName, pTargetConfig); operation = pOperation; if (pArgs == null) { // That's the case when a single, null argument is given (which is the only // case that pArgs can be null) arguments = new ArrayList<Object>(); arguments.add(null); } else { arguments = Arrays.asList(pArgs); } } /** * New client request for executing a JMX operation * * @param pMBeanName name of the MBean to execute the request on * @param pOperation operation to execute * @param pArgs any arguments to pass (which must match the JMX operation's declared signature) * * @throws MalformedObjectNameException if the given name is not an {@link ObjectName} */ public J4pExecRequest(String pMBeanName, String pOperation,Object ... pArgs) throws MalformedObjectNameException { this(null,pMBeanName,pOperation,pArgs); } /** * New client request for executing a JMX operation * * @param pTargetConfig proxy target configuration or <code>null</code> if no proxy should be used * @param pMBeanName name of the MBean to execute the request on * @param pOperation operation to execute * @param pArgs any arguments to pass (which must match the JMX operation's declared signature) * * @throws MalformedObjectNameException if the given name is not an {@link ObjectName} */ public J4pExecRequest(J4pTargetConfig pTargetConfig,String pMBeanName, String pOperation,Object ... pArgs) throws MalformedObjectNameException { this(pTargetConfig,new ObjectName(pMBeanName),pOperation,pArgs); } /** * Name of the operation to execute * * @return operation name */ public String getOperation() { return operation; } /** * List of arguments used for executing * * @return list of arguments or empty list if no argument are used */ public List<Object> getArguments() { return arguments; } /** {@inheritDoc} */ @Override J4pExecResponse createResponse(JSONObject pResponse) { return new J4pExecResponse(this,pResponse); } /** {@inheritDoc} */ @Override List<String> getRequestParts() { List<String> ret = super.getRequestParts(); ret.add(operation); if (arguments.size() > 0) { for (int i = 0; i < arguments.size(); i++) { ret.add(serializeArgumentToRequestPart(arguments.get(i))); } } return ret; } /** {@inheritDoc} */ @Override JSONObject toJson() { JSONObject ret = super.toJson(); ret.put("operation",operation); if (arguments.size() > 0) { JSONArray args = new JSONArray(); for (Object arg : arguments) { args.add(serializeArgumentToJson(arg)); } ret.put("arguments",args); } return ret; } }