blob: f90f320a8c08d82ff3b927c937b8fe066d935938 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.apache.uima.resource;
import org.apache.uima.resource.metadata.ConfigurationParameterDeclarations;
import org.apache.uima.resource.metadata.ConfigurationParameterSettings;
import org.apache.uima.resource.metadata.ResourceMetaData;
/**
* Manages the configuration parameters of all components within a possibly aggregate
* {@link org.apache.uima.resource.Resource}. Note that the <code>ConfigurationManager</code>
* needs to make use of the {@link Session} object in order to store configuration settings that are
* specific to a particular client session.
*
*
*/
public interface ConfigurationManager {
/**
* Creates and sets up a new configuration parameter context. This method is called during the
* initialization of each Resource that uses this Configuration Manager. Validation will be
* performed on the configuration parameters declared in this context; if an error is found an
* exception will be thrown.
*
* @param aContextName
* the name of the context in which the configuration parameter is being accessed. This
* corresponds to the path through the aggregate resource, e.g /subAE1/annotator1.
* @param aResourceMetaData
* metadata object containing the configuration parameter declarations and settings.
*
* @throws ResourceConfigurationException
* if the configuration settings are invalid
*/
public void createContext(String aContextName, ResourceMetaData aResourceMetaData)
throws ResourceConfigurationException;
/**
* Sets the current <code>Session</code>. The Configuration Manager uses the
* <code>Session</code> object to store changes to configuration settings made by calling the
* <code>setConfigParameterValue</code> methods. This ensures that in a multi-client deployment
* those settings only apply to the same client that set them.
* <p>
* Code that uses this class must be sure to call <code>setSession</code> before using the other
* methods (except <code>createContext</code>) on this class.
*
* @param aSession
* the session object used to store configuration parameter overrides made by a
* particular client.
*/
public void setSession(Session aSession);
/**
* Retrieves the value for a configuration parameter.
*
* @param aQualifiedName
* the fully-qualified configuration parameter name. This is of the form
* <code>ContextName + / + ParameterName</code>.
*
* @return the value of the parameter with the given name. The caller is expected to know the data
* type of the parameter. If the parameter does not exist,<code>null</code> is
* returned.
*/
public Object getConfigParameterValue(String aQualifiedName);
/**
* Retrieves the value for a configuration parameter in a group.
*
* @param aQualifiedParamName
* the fully-qualified configuration parameter name. This is of the form
* <code>ContextName + / + ParameterName</code>.
*
* @return the value of the parameter with the given name. The caller is expected to know the data
* type of the parameter. If the parameter does not exist,<code>null</code> is
* returned.
*/
public Object getConfigParameterValue(String aQualifiedParamName, String aGroupName);
/**
* Sets the value of a configuration parameter. This only works for a parameter that is not
* defined in any group. Note that there is no guarantee that the change will take effect until
* {@link #reconfigure(String)} is called.
*
* @param aQualifiedParamName
* the fully-qualified configuration parameter name. This is of the form
* <code>ContextName + / + ParameterName</code>.
* @param aValue
* the value to assign to the parameter
*/
public void setConfigParameterValue(String aQualifiedParamName, Object aValue);
/**
* Sets the value of a configuration parameter in a group. Note that there is no guarantee that
* the change will take effect until {@link #reconfigure(String)} is called.
*
* @param aQualifiedParamName
* the fully-qualified configuration parameter name. This is of the form
* <code>ContextName + / + ParameterName</code>.
* @param aGroupName
* the name of a configuration group. If this parameter is
* <code>null<code>, this method will have the same effet as
* {@link #setConfigParameterValue(String,Object) setParameterValue(String,Object)}.
* @param aValue the value to assign to the parameter
*/
public void setConfigParameterValue(String aQualifiedParamName, String aGroupName, Object aValue);
/**
* Completes the reconfiguration of parameters within the specified context. Also validates the
* parameter settings.
*
* @param aContextName
* the name of the context being reconfigured
*
* @throws ResourceConfigurationException
* if the new configuration is invalid
*/
public void reconfigure(String aContextName) throws ResourceConfigurationException;
/**
* Gets the ConfigurationParameterDeclarations for the given context.
*
* @param aContextName
* the name for which to get the parameter declarations
*
* @return parameter declarations for the context
*/
public ConfigurationParameterDeclarations getConfigParameterDeclarations(String aContextName);
/**
* Gets an object containing the current settings for all configuration parameters within the
* given context.
*
* @param aContextName
* name of context for which to retrieve parameter settings
*
* @return an object containing the current configuration parameter settings
*/
public ConfigurationParameterSettings getCurrentConfigParameterSettings(String aContextName);
}