All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.activiti.app.service.editor.ServiceParameters Maven / Gradle / Ivy

There is a newer version: 6.0.0
Show newest version
/* 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.
 */
package org.activiti.app.service.editor;

import java.util.Arrays;
import java.util.Collections;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.lang3.StringUtils;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ObjectNode;

/**
 * Wrapper around parameters that should be passed trough to the delegated service call.
 * 
 * @author Frederik Heremans
 *
 */
public class ServiceParameters {
 
	protected Map parameters;
	protected Set validParameterNames;
	
	public ServiceParameters() {
		parameters = new HashMap();
  }
	
	public void addParameter(String name, Object value) {
		parameters.put(name, value);
	}
	
	/**
	 * Adds a parameter and marks is as valid.
	 */
	public void addValidParameter(String name, Object value) {
		parameters.put(name, value);
		validParameterNames.add(name);
	}
	
	public Object getParameter(String name) {
		return parameters.get(name);
	}
	
	public boolean isParameterSet(String name) {
		return parameters.containsKey(name);
	}
	
	public void addValidParameterNames(String[] validParameters) {
		if(validParameterNames == null) {
			validParameterNames = new HashSet();
		}
		this.validParameterNames.addAll(Arrays.asList(validParameters));
	}
	
	/**
	 * @return all valid parameters which are set in this instance. If no {@link #addValidParameterNames(String[])} has been
	 * called, ALL parameters will be returned.
	 */
	public Map getValidParameterMap() {
		if(validParameterNames == null) {
			// All parameters are valid, no need to filter
			return Collections.unmodifiableMap(parameters);
		} else {
			// Only return valid parameters
			Map result = new HashMap();
			for(Entry parameter : parameters.entrySet()) {
				if(validParameterNames.contains(parameter.getKey())) {
					result.put(parameter.getKey(), parameter.getValue());
				}
			}
			return result;
		}
	}

	/**
	 * Creates a new {@link ServiceParameters} instance based on all non-empty query-parameters
	 * in the given request.
	 */
	public static ServiceParameters fromHttpRequest(HttpServletRequest request) {
		ServiceParameters parameters = new ServiceParameters();
		
		String value = null;
		String name = null;
		Enumeration params = request.getParameterNames();
		while(params.hasMoreElements()) {
			name = params.nextElement();
			value = request.getParameter(name);
			
			if(value != null && StringUtils.isNotEmpty(value)) {
				parameters.addParameter(name, value);
			}
		}
	  return parameters;
  }
	
	/**
	 * Creates a new {@link ServiceParameters} instance based on all properties in the given
	 * object node. Only numbers, text and boolean values are added, nested object structures
	 * are ignored.
	 */
	public static ServiceParameters fromObjectNode(ObjectNode node) {
		ServiceParameters parameters = new ServiceParameters();
		
		Iterator ir = node.fieldNames();
		String name = null;
		JsonNode value = null; 
		while(ir.hasNext()) {
			name = ir.next();
			value = node.get(name);
			
			// Depending on the type, extract the raw value object
			if(value != null) {
				if(value.isNumber()) {
					parameters.addParameter(name, value.numberValue());
				} else if(value.isBoolean()) {
					parameters.addParameter(name, value.booleanValue());
				} else if(value.isTextual()) {
					parameters.addParameter(name, value.textValue());
				}
			}
		}
	  return parameters;
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy