/*! ******************************************************************************
*
* Pentaho Data Integration
*
* Copyright (C) 2002-2013 by Pentaho : http://www.pentaho.com
*
*******************************************************************************
*
* 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.pentaho.di.core.variables;
import java.util.Map;
import org.pentaho.di.core.exception.KettleValueException;
import org.pentaho.di.core.row.RowMetaInterface;
/**
* Interface to implement variable sensitive objects.
*
* @author Sven Boden
*/
public interface VariableSpace {
/**
* Initialize variable space using the defaults, copy over the variables from the parent (using copyVariablesFrom()),
* after this the "injected" variables should be inserted (injectVariables()).
*
* The parent is set as parent variable space.
*
* @param parent
* the parent to start from, or null if root.
*/
void initializeVariablesFrom( VariableSpace parent );
/**
* Copy the variables from another space, without initializing with the defaults. This does not affect any parent
* relationship.
*
* @param space
* the space to copy the variables from.
*/
void copyVariablesFrom( VariableSpace space );
/**
* Share a variable space from another variable space. This means that the object should take over the space used as
* argument.
*
* @param space
* Variable space to be shared.
*/
void shareVariablesWith( VariableSpace space );
/**
* Get the parent of the variable space.
*
* @return the parent.
*/
VariableSpace getParentVariableSpace();
/**
* Set the parent variable space
*
* @param parent
* The parent variable space to set
*/
void setParentVariableSpace( VariableSpace parent );
/**
* Sets a variable in the Kettle Variables list.
*
* @param variableName
* The name of the variable to set
* @param variableValue
* The value of the variable to set. If the variableValue is null, the variable is cleared from the list.
*/
void setVariable( String variableName, String variableValue );
/**
* Get the value of a variable with a default in case the variable is not found.
*
* @param variableName
* The name of the variable
* @param defaultValue
* The default value in case the variable could not be found
* @return the String value of a variable
*/
String getVariable( String variableName, String defaultValue );
/**
* Get the value of a variable.
*
* @param variableName
* The name of the variable
* @return the String value of a variable or null in case the variable could not be found.
*/
String getVariable( String variableName );
/**
* This method returns a boolean for the new variable check boxes. If the variable name is not set or the variable
* name is not specified, this method simply returns the default value. If not, it convert the variable value to a
* boolean. "Y", "YES" and "TRUE" all convert to true. (case insensitive)
*
* @see also static method ValueMeta.convertStringToBoolean()
*
* @param variableName
* The variable to look up.
* @param defaultValue
* The default value to return.
* @return
*/
boolean getBooleanValueOfVariable( String variableName, boolean defaultValue );
/**
* List the variables (not the values) that are currently in the variable space.
*
* @return Array of String variable names.
*/
String[] listVariables();
/**
* Substitute the string using the current variable space.
*
* @param aString
* The string to substitute.
*
* @return The substituted string.
*/
String environmentSubstitute( String aString );
/**
* Replaces environment variables in an array of strings.
*
* See also: environmentSubstitute(String string)
*
* @param string
* The array of strings that wants its variables to be replaced.
* @return the array with the environment variables replaced.
*/
public String[] environmentSubstitute( String[] string );
/**
* Inject variables. The behaviour should be that the properties object will be stored and at the time the
* VariableSpace is initialized (or upon calling this method if the space is already initialized). After injecting the
* link of the properties object should be removed.
*
* @param prop
* Properties object containing key-value pairs.
*/
void injectVariables( Map<String, String> prop );
/**
* Substitutes field values in <code>aString</code>. Field values are of the form "?{<field name>}". The values are
* retrieved from the specified row. Please note that the getString() method is used to convert to a String, for all
* values in the row.
*
* @param aString
* the string on which to apply the substitution.
* @param rowMeta
* The row metadata to use.
* @param rowData
* The row data to use
*
* @return the string with the substitution applied.
* @throws KettleValueException
* In case there is a String conversion error
*/
public String fieldSubstitute( String aString, RowMetaInterface rowMeta, Object[] rowData ) throws KettleValueException;
}