/*
* Copyright 2001-2008 Geert Bevin (gbevin[remove] at uwyn dot com)
* Licensed under the Apache License, Version 2.0 (the "License")
* $Id: VirtualParameters.java 3918 2008-04-14 17:35:35Z gbevin $
*/
package com.uwyn.rife.database;
import java.util.HashMap;
import java.util.Map;
import com.uwyn.rife.database.queries.Query;
import com.uwyn.rife.database.queries.QueryParameters;
/**
* Internal class to handle virtual parameters of a
* <code>DbPreparedStatement</code>.
*
* @author Geert Bevin (gbevin[remove] at uwyn dot com)
* @version $Revision: 3918 $
* @since 1.0
*/
public class VirtualParameters
{
private QueryParameters mParameters = null;
private Map<Integer, Integer> mIndexMapping = null;
private Map<Integer, Object> mValues = null;
private VirtualParametersHandler mHandler = null;
/**
* Creates a new <code>VirtualParameters</code> instance.
*
* @param parameters the actual parameters that are virtual.
* @param handler the <code>VirtualParametersHandler</code> that will
* be used by the {@link #callHandler(DbPreparedStatement)} method.
* @since 1.0
*/
public VirtualParameters(QueryParameters parameters, VirtualParametersHandler handler)
{
if (null == parameters) throw new IllegalArgumentException("parameters can't be null.");
if (null == handler) throw new IllegalArgumentException("handler can't be null.");
mParameters = parameters;
mHandler = handler;
}
/**
* Calls the registered <code>VirtualParametersHandler</code>. This is
* typically called when all virtual parameters have been defined in a
* prepared statement and the statement is ready to be executed.
*
* @param statement the prepared statement that has all the virtual
* parameters defined.
* @since 1.0
*/
public void callHandler(DbPreparedStatement statement)
{
mHandler.handleValues(statement);
}
void setup(Query query)
{
mIndexMapping = query.getParameters().getVirtualIndexMapping(mParameters);
}
Object getValue(int index)
{
if (null == mValues)
{
return null;
}
return mValues.get(index);
}
boolean hasValue(int index)
{
if (null == mValues)
{
return false;
}
return mValues.containsKey(index);
}
boolean hasParameter(int index)
{
if (null == mIndexMapping)
{
return false;
}
return mIndexMapping.containsKey(index);
}
int getRealIndex(int index)
{
if (null == mIndexMapping)
{
return -1;
}
return mIndexMapping.get(index);
}
void putValue(int index, Object value)
{
if (null == mValues)
{
mValues = new HashMap<Integer, Object>();
}
mValues.put(index, value);
}
}