Package org.jolokia.client.request

Source Code of org.jolokia.client.request.J4pReadRequest

package org.jolokia.client.request;

/*
*  Copyright 2009-2010 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 read request to get one or more attributes from
* one or more MBeans within a single request.
*
* @author roland
* @since Apr 24, 2010
*/
public class J4pReadRequest extends AbtractJ4pMBeanRequest {

    // Name of attribute to request
    private List<String> attributes;

    // Path for extracting return value
    private String path;

    /**
     * Create a READ request to request one or more attributes
     * from the remote j4p agent
     *
     * @param pObjectName Name of the MBean to request, which can be a pattern in
     *                    which case the given attributes are looked at all MBeans matched
     *                    by this pattern. If an attribute does not fit to a matched MBean it is
     *                    ignored.
     * @param pAttribute one or more attributes to request.
     */
    public J4pReadRequest(ObjectName pObjectName,String ... pAttribute) {
        super(J4pType.READ, pObjectName);
        attributes = Arrays.asList(pAttribute);
    }


    /**
     * Create a READ request to request one or more attributes
     * from the remote j4p agent
     *
     * @param pObjectName object name as sting which gets converted to a {@link javax.management.ObjectName}}
     * @param pAttribute one or more attributes to request.
     * @throws javax.management.MalformedObjectNameException when argument is not a valid object name
     */
    public J4pReadRequest(String pObjectName,String ... pAttribute) throws MalformedObjectNameException {
        this(new ObjectName(pObjectName),pAttribute);
    }


    /**
     * Get all attributes of this request
     *
     * @return attributes
     */
    public Collection<String> getAttributes() {
        return attributes;
    }

    /**
     * If this request is for a single attribute, this attribute is returned
     * by this getter.
     * @return single attribute
     * @throws IllegalArgumentException if no or more than one attribute are used when this request was
     *         constructed.
     */
    public String getAttribute() {
        if (attributes == null || !hasSingleAttribute()) {
            throw new IllegalArgumentException("More than one attribute given for this request");
        }
        return attributes.get(0);
    }

    @Override
    List<String> getRequestParts() {
        if (hasSingleAttribute()) {
            List<String> ret = super.getRequestParts();
            ret.add(getAttribute());
            addPath(ret,path);
            return ret;
        } else {
            // A GET request cant be used for multiple attribute fetching.
            return null;
        }
    }

    @Override
    JSONObject toJson() {
        JSONObject ret = super.toJson();
        if (hasSingleAttribute()) {
            ret.put("attribute",attributes.get(0));
        } else {
            JSONArray attrs = new JSONArray();
            attrs.addAll(attributes);
            ret.put("attribute",attrs);
        }
        if (path != null) {
            ret.put("path",path);
        }
        return ret;
    }

    @Override
    J4pReadResponse createResponse(JSONObject pResponse) {
        return new J4pReadResponse(this,pResponse);
    }

    public boolean hasSingleAttribute() {
        return attributes != null && attributes.size() == 1;
    }

    /**
     * Get the path for extracting parts of the return value
     * @return path used for extracting
     */
    public String getPath() {
        return path;
    }

    /**
     * Set the path for diving into the return value
     *
     * @param pPath path to set
     */
    public void setPath(String pPath) {
        path = pPath;
    }


}
TOP

Related Classes of org.jolokia.client.request.J4pReadRequest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.