/*
* This program is free software; you can redistribute it and/or modify it under the
* terms of the GNU General Public License, version 2 as published by the Free Software
* Foundation.
*
* You should have received a copy of the GNU General Public License along with this
* program; if not, you can obtain a copy at http://www.gnu.org/licenses/gpl-2.0.html
* or from the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
*
*
* Copyright 2005 - 2008 Pentaho Corporation. All rights reserved.
*
* @created Jun 22, 2005
* @author James Dixon
*
*/
package org.pentaho.platform.engine.core.solution;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import org.pentaho.platform.api.engine.IParameterProvider;
import org.pentaho.platform.util.web.HttpUtil;
public class SimpleParameterProvider extends BaseParameterProvider implements IParameterProvider {
private Map<String,Object> parameters;
protected static final String ADDITIONAL_PARAMS = "_PENTAHO_ADDITIONAL_PARAMS_";//$NON-NLS-1$
public SimpleParameterProvider() {
this(null);
}
@Override
protected String getValue(final String name) {
Object obj = parameters.get(name);
if (obj instanceof Object[][]) {
// the string of this is meaningless
obj = null;
} else if (obj instanceof Object[]) {
// the string of this is meaningless
obj = null;
}
return (obj == null) ? null : String.valueOf(obj);
}
@Override
public Object getParameter(final String name) {
return parameters.get(name);
}
// TODO sbarkdull, may want to tweak this ctor to make a copy of the map,
// otherwise the caller will have a reference to this class's internal
// data, destroying encapsulation/data hiding
@SuppressWarnings({"unchecked"})
public SimpleParameterProvider(Map parameters) {
if (parameters == null) {
parameters = new HashMap<String,Object>();
}
this.parameters = parameters;
}
public void setParameter(final String name, final String value) {
parameters.put(name, value);
}
public void setParameter(final String name, final long value) {
parameters.put(name, new Long(value));
}
public void setParameter(final String name, final Date value) {
parameters.put(name, value);
}
public void setParameter(final String name, final Object value) {
parameters.put(name, value);
}
@SuppressWarnings({"unchecked"})
public void setParameters(final Map newParameters) {
if (newParameters != null) {
parameters.putAll(newParameters);
}
}
/*
* (non-Javadoc)
*
* @see org.pentaho.newcode.IParameterProvider#getParameterNames()
*/
public Iterator getParameterNames() {
// TODO turn the key set iterator into an enumeration
return parameters.keySet().iterator();
}
/**
* Converts single value arrays to String parameters
*
*/
public void copyAndConvertParameters(final Map paramMap) {
for (Iterator it = paramMap.entrySet().iterator(); it.hasNext();) {
Map.Entry entry = (Map.Entry) it.next();
Object value = entry.getValue();
if (value != null) {
if ((value instanceof Object[]) && (((Object[]) value).length == 1)) {
setParameter((String) entry.getKey(), String.valueOf(((Object[]) value)[0]));
} else {
setParameter((String) entry.getKey(), value);
}
}
}
}
/**
* Looks for ADDITIONAL_PARAMS in the paramMap, if it finds a parameter by that
* name, it assumes that it is a query string, it parses the query string,
* and adds the components of the query string to this class's parameter map.
*
* @param paramMap
*/
public void copyAndConvertAdditionalParameters(final Map paramMap) {
String strAdditionalParams = (String) paramMap.get(SimpleParameterProvider.ADDITIONAL_PARAMS);
if (strAdditionalParams != null) {
int idx = strAdditionalParams.indexOf("?"); //$NON-NLS-1$
if (idx > 0) {
strAdditionalParams = strAdditionalParams.substring(idx + 1);
}
Map additionalParms = HttpUtil.parseQueryString(strAdditionalParams);
copyAndConvertParameters(additionalParms);
}
}
}