/** * The contents of this file are subject to the license and copyright * detailed in the LICENSE and NOTICE files at the root of the source * tree and available online at * * http://www.dspace.org/license/ */ package org.dspace.importer.external.datamodel; import org.apache.commons.collections.map.MultiValueMap; import java.util.Collection; /** Represents a query to a source. Subclasses may enforce stricter typing or more verbose setting of parameters. * @author Roeland Dillen (roeland at atmire dot com) */ public class Query { private MultiValueMap parameters = new MultiValueMap(); /** * Retrieve the parameters set to this Query object * * @return the {@link org.apache.commons.collections.map.MultiValueMap} set to this object */ public MultiValueMap getParameters() { return parameters; } /** * In the parameters variable, adds the value to the collection associated with the specified key. * <p> * Unlike a normal <code>Map</code> the previous value is not replaced. * Instead the new value is added to the collection stored against the key. * * @param key the key to store against * @param value the value to add to the collection at the key */ public void addParameter(String key, Object value) { parameters.put(key, value); } /** * In the parameters variable, adds the value to the collection associated with the specified key. * <p> * Unlike {@link #addParameter(String, Object)} the previous value is overridden. * First, any existing values are removed, then the new value is added to the collection at the specified key * * @param key the key to store against * @param value the value to add to the collection at the key */ protected void addSingletonParameter(String key, Object value) { parameters.remove(key); parameters.put(key, value); } /** * Retrieve a parameter as a certain given class * @param <T> the type of parameter returned. * @param key the key to retrieve the parameter from * @param clazz the type to retrieve. (If no parameter with that class is found, a <tt>null</tt> value is returned.) * @return the selected parameter, or null. */ public <T> T getParameterAsClass(String key, Class<T> clazz) { Collection c=parameters.getCollection(key); if (c==null || c.isEmpty()) { return null; } else { Object o = c.iterator().next(); if (clazz.isAssignableFrom(o.getClass())) { return (T) o; } else { return null; } } } /** * Gets the collection mapped to the specified key. * This method is a convenience method to typecast the result of <code>get(key)</code>. * * @param key the key used to retrieve the collection * @return the collection mapped to the key, null if no mapping */ public Collection getParameter(String key) { return parameters.getCollection(key); } /** * Set the parameters of this query object based on a given {@link org.apache.commons.collections.map.MultiValueMap} * @param parameters a {@link org.apache.commons.collections.map.MultiValueMap} to set to this Query object */ public void setParameters(MultiValueMap parameters) { this.parameters = parameters; } }