package org.jolokia.request; /* * Copyright 2009-2011 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 org.jolokia.config.ProcessingParameters; /** * Base class for so called <em>request creators</em>, which are used for creating * {@link JmxRequest}s of a specific type. These creators are used by the {@link JmxRequestFactory} for * creating a request after its type has be determined. * * Each specific request provides a static method <code>newCreator</code> which returns a factory * object for requests of this type. * * @author roland * @since 15.09.11 */ abstract class RequestCreator<R extends JmxRequest> { /** * Create a GET request. * * @param pStack parsed and splitted GET url * @param pParams optional query parameters * @return the created request object * @throws MalformedObjectNameException if an object name could not be created */ abstract R create(Stack<String> pStack, ProcessingParameters pParams) throws MalformedObjectNameException; /** * Process a POST request * * @param requestMap JSON representation of the request * @param pParams optional query parameters * @return the created request object * @throws MalformedObjectNameException if an object name could not be created */ abstract R create(Map<String, ?> requestMap, ProcessingParameters pParams) throws MalformedObjectNameException; /** * Extract extra arguments from the remaining element on the stack. * * @param pElements stack from where to extract extra elements * @return the remaining elements as list (but never null). */ protected List<String> prepareExtraArgs(Stack<String> pElements) { if (pElements == null || pElements.size() == 0) { return null; } List<String> ret = new ArrayList<String>(); while (!pElements.isEmpty()) { String element = pElements.pop(); ret.add("*".equals(element) ? null : element); } return ret; } /** * Return the top level element of the the given stack or <code>null</code> if the stack * is empty * * @param stack stack to examine * @return null or top element */ protected String popOrNull(Stack<String> stack) { if (stack != null && !stack.isEmpty()) { return stack.pop(); } else { return null; } } }