blob: 82bf4cb8fbd6776f3077f9ed155aa6860b6227d4 [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.pear.tools;
import java.io.File;
import java.io.PrintWriter;
import java.io.Serializable;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import java.util.StringTokenizer;
import org.apache.uima.pear.util.FileUtil;
/**
* The <code>InstallationDescriptor</code> class encapsulates all elements and parameters included
* in the XML Installation Descriptor file.
*
* @see org.apache.uima.pear.tools.InstallationDescriptorHandler
*/
public class InstallationDescriptor implements Serializable {
private static final long serialVersionUID = 4884186903126810934L;
/**
* The <code>ActionInfo</code> class defines 'installation action' attributes.
*
*/
public static class ActionInfo implements Serializable {
private static final long serialVersionUID = -3459024334454685063L;
/*
* Action IDs
*/
public static final String FIND_AND_REPLACE_PATH_ACT = "find_and_replace_path";
public static final String SET_ENV_VARIABLE_ACT = "set_env_variable";
/**
* Constructor that takes 'action' name as an argument.
*
* @param name
* The given action name.
*/
public ActionInfo(String name) {
_name = name;
}
protected ActionInfo(ActionInfo anAction) {
_name = anAction.getName();
params = (Properties) anAction.params.clone();
}
public String getName() {
return _name;
}
// private attributes
private String _name;
// public attributes
public Properties params = new Properties();
}
/**
* The <code>ArgInfo</code> class defines attributes of a service command argument.
*
*/
public static class ArgInfo {
// public attributes
public String value;
public String comments;
}
/**
* The <code>ServiceInfo</code> class defines attributes of a 'service' component.
*
*/
public static class ServiceInfo {
// private attributes
private ArrayList _args = new ArrayList(); // array of ArgInfo objects
// public attributes
public String command;
public String workingDirPath;
public synchronized void addArg(ArgInfo arg) {
_args.add(arg);
}
/**
* @return <code>Collection</code> of ArgInfo objects.
*/
public Collection getArgs() {
return _args;
}
}
/**
* The <code>ComponentInfo</code> class defines UIMA component attributes.
*
*/
public static class ComponentInfo implements Serializable {
private static final long serialVersionUID = 3269238133625161794L;
/**
* Constructor that takes component ID as an argument.
*
* @param id
* The given component ID.
*/
public ComponentInfo(String id) {
_id = id;
}
/**
* @return The specified component ID.
*/
public String getId() {
return _id;
}
// private attributes
private String _id;
// public attributes
public String name = null;
public String descFilePath = null;
public String rootDirPath = null;
public String deploymentType = InstallationDescriptorHandler.STANDARD_TAG;
public ServiceInfo serviceInfo = null;
public Hashtable networkParams = null;
public String collIteratorDescFilePath = null;
public String casInitializerDescFilePath = null;
public String casConsumerDescFilePath = null;
public Properties props = new Properties();
}
/*
* Miscellaneous public constants
*/
public static final String PROPERTY_DELIMITER = "\n";
public static final String VNS_SPECS = "VNS_SPECS";
public static final String VNS_HOST = "VNS_HOST";
public static final String VNS_PORT = "VNS_PORT";
// Attributes
private File _insdFile = null;
private Properties _osSpecs = new Properties();
private Properties _toolkitsSpecs = new Properties();
private Properties _frameworkSpecs = new Properties();
private ComponentInfo _mainComponent = null;
private Hashtable _delegateComponents = new Hashtable();
private ArrayList _installationActions = new ArrayList();
/**
* Adds a property specified by given name and value to a given <code>Properties</code> object.
* If the given object already contains a property with the given name, adds a new value to this
* property using PROPERTY_DELIMITER as the delimiter, unless the existing property value list
* already contains the given new value.
*
* @param props
* The given <code>Properties</code> object to be modified.
* @param name
* The given property name.
* @param value
* The given new value of the property.
* @return The modified <code>Properties</code> object.
*/
protected static Properties addProperty(Properties props, String name, String value) {
String curValue = props.getProperty(name);
if (curValue == null) // set new property value
props.setProperty(name, value.trim());
else {
// check that specified value does not appear in the old list
boolean alreadyThere = false;
StringTokenizer curValueList = new StringTokenizer(curValue, PROPERTY_DELIMITER);
while (curValueList.hasMoreTokens()) {
String token = curValueList.nextToken().trim();
if (token.equalsIgnoreCase(value.trim())) {
alreadyThere = true;
break;
}
}
if (!alreadyThere) {
// add new value to the list
String newValue = curValue + PROPERTY_DELIMITER + value.trim();
props.setProperty(name, newValue);
}
}
return props;
}
/**
* Deletes a property specified by given name and value from a given <code>Properties</code>
* object. If the given object contains one or more PROPERTY_DELIMITER separated values under the
* given property name, removes the value that is equal to the specified value. If no values
* remain under the given name, removes the property associated with the specified name from the
* given object.
*
* @param props
* The given <code>Properties</code> object to be modified.
* @param name
* The given property name.
* @param value
* The given new value of the property.
* @return The modified <code>Properties</code> object.
*/
protected static Properties deleteProperty(Properties props, String name, String value) {
String curValue = props.getProperty(name);
if (curValue != null) {
StringBuffer newBuffer = new StringBuffer();
StringTokenizer curValueList = new StringTokenizer(curValue, PROPERTY_DELIMITER);
while (curValueList.hasMoreTokens()) {
String token = curValueList.nextToken().trim();
if (token.length() > 0 && !token.equals(value)) {
if (newBuffer.length() > 0)
newBuffer.append(PROPERTY_DELIMITER);
newBuffer.append(token);
}
}
if (newBuffer.length() > 0)
props.setProperty(name, newBuffer.toString());
else
props.remove(name);
}
return props;
}
/**
* Constructs a relative path of a given component object, based on its absolute path.
*
* @param absolutePath
* The given absolute path of the object.
* @param component
* The given component instance.
* @return The relative path of the given component object.
*/
protected static String getRelativePathForComponentObject(String absolutePath,
ComponentInfo component) {
String path = absolutePath;
if (component.rootDirPath != null && path != null) {
File rootDir = new File(component.rootDirPath);
path = FileUtil.getRelativePath(rootDir, path);
}
return path;
}
/**
* Default constructor.
*/
public InstallationDescriptor() {
}
/**
* Constructor that takes a given original InsD file as an argument.
*
* @param insdFile
* The given original InsD file.
*/
public InstallationDescriptor(File insdFile) {
_insdFile = insdFile;
}
/**
* Creates and adds a delegate component specification to the list (for aggregate component).
*
* @param id
* The given delegate component ID.
* @param name
* The given delegate component name.
*/
public synchronized void addDelegateComponent(String id, String name) {
String dlgId = id.trim();
if (_delegateComponents.get(dlgId) == null) {
ComponentInfo compInfo = new ComponentInfo(dlgId);
compInfo.name = name.trim();
_delegateComponents.put(dlgId, compInfo);
}
}
/**
* Adds a specification defined by given name and value to the set of Framework specifications. If
* the Framework specifications already contain the given name, adds a new value using
* PROPERTY_DELIMITER as the delimiter.
*
* @param specName
* The given specification name.
* @param specValue
* The given specification value.
*/
public synchronized void addFrameworkSpec(String specName, String specValue) {
addProperty(_frameworkSpecs, specName, specValue);
}
/**
* Adds a specified 'installation action' to the list.
*
* @param action
* The specified 'installation action' object.
*/
public synchronized void addInstallationAction(ActionInfo action) {
if (_mainComponent != null && action.params != null) {
// duplicate action object to modify the values
ActionInfo mAction = new ActionInfo(action);
// during PEAR installation:
// a) substitute $main_root and $comp_id$root in action fields
// b) substitute standard path separator (';') with OS dependent
// in FILE_TAG, REPLACE_WITH_TAG and VAR_VALUE_TAG values
Enumeration keys = mAction.params.keys();
while (keys.hasMoreElements()) {
String key = (String) keys.nextElement();
String value = mAction.params.getProperty(key);
if (key.equals(InstallationDescriptorHandler.FILE_TAG)
|| key.equals(InstallationDescriptorHandler.REPLACE_WITH_TAG)
|| key.equals(InstallationDescriptorHandler.VAR_VALUE_TAG)) {
if (_mainComponent.rootDirPath != null) {
// substitute '$main_root' macros
value = InstallationProcessor.substituteMainRootInString(value,
_mainComponent.rootDirPath);
mAction.params.setProperty(key, value);
}
Iterator dlgEntries = getDelegateComponents().entrySet().iterator();
while (dlgEntries.hasNext()) {
Map.Entry dlgEntry = (Map.Entry) dlgEntries.next();
ComponentInfo dlgInfo = (ComponentInfo) dlgEntry.getValue();
if (dlgInfo.rootDirPath != null) {
// substitute '$dlg_comp_id$root' macros
value = InstallationProcessor.substituteCompIdRootInString(value, dlgInfo.getId(),
dlgInfo.rootDirPath);
mAction.params.setProperty(key, value);
}
}
// replace '\' with '/'
value = mAction.params.getProperty(key);
mAction.params.setProperty(key, value.replace('\\', '/'));
if (_mainComponent.rootDirPath != null) {
// replace all ';' with OS-dependent separator
// in VAR_VALUE_TAG value
if (key.equals(InstallationDescriptorHandler.VAR_VALUE_TAG)) {
value = mAction.params.getProperty(key);
value = value.replace(';', File.pathSeparatorChar);
mAction.params.setProperty(key, value);
}
}
}
}
_installationActions.add(mAction);
} else
_installationActions.add(action);
}
/**
* Adds a specification defined by given name and value to the set of OS specifications. If the OS
* specifications already contain the given name, adds a new value using PROPERTY_DELIMITER as the
* delimiter.
*
* @param specName
* The given specification name.
* @param specValue
* The given specification value.
*/
public synchronized void addOSSpec(String specName, String specValue) {
addProperty(_osSpecs, specName, specValue);
}
/**
* Adds a specification defined by given name and value to the set of Toolkits specifications. If
* the Toolkits specifications already contain the given name, adds a new value using
* PROPERTY_DELIMITER as the delimiter.
*
* @param specName
* The given specification name.
* @param specValue
* The given specification value.
*/
public synchronized void addToolkitsSpec(String specName, String specValue) {
addProperty(_toolkitsSpecs, specName, specValue);
}
/**
* Removes all specified delegate components.
*/
public synchronized void clearDelegateComponents() {
_delegateComponents.clear();
}
/**
* Removes all Framework specifications.
*/
public synchronized void clearFrameworkSpecs() {
_frameworkSpecs.clear();
}
/**
* Removes all specified installation actions.
*/
public synchronized void clearInstallationActions() {
_installationActions.clear();
}
/**
* Removes all OS specifications.
*/
public synchronized void clearOSSpecs() {
_osSpecs.clear();
}
/**
* Removes all Toolkits specifications.
*/
public synchronized void clearToolkitsSpecs() {
_toolkitsSpecs.clear();
}
/**
* Removes a specified delegate component associated with a given component ID.
*
* @param id
* The given delegate component ID to be removed.
*/
public synchronized void deleteDelegateComponent(String id) {
_delegateComponents.remove(id);
}
/**
* Removes a specification defined by given name and value from the set of Framework
* specifications.
*
* @param specName
* The given specification name.
* @param specValue
* The given specification value.
*/
public synchronized void deleteFrameworkSpec(String specName, String specValue) {
deleteProperty(_frameworkSpecs, specName, specValue);
}
/**
* Removes all installation actions associated with a given action name (FIND_AND_REPLACE_PATH_ACT
* or SET_ENV_VARIABLE_ACT).
*
* @param actionName
* The given action name.
*/
public synchronized void deleteInstallationActions(String actionName) {
Iterator actionList = _installationActions.iterator();
while (actionList.hasNext()) {
ActionInfo action = (ActionInfo) actionList.next();
if (action.getName().equals(actionName)) {
_installationActions.remove(action);
actionList = _installationActions.iterator();
}
}
}
/**
* Removes a specification defined by given name and value from the set of OS specifications.
*
* @param specName
* The given specification name.
* @param specValue
* The given specification value.
*/
public synchronized void deleteOSSpec(String specName, String specValue) {
deleteProperty(_osSpecs, specName, specValue);
}
/**
* Removes a specification defined by given name and value from the set of Toolkits
* specifications.
*
* @param specName
* The given specification name.
* @param specValue
* The given specification value.
*/
public synchronized void deleteToolkitsSpec(String specName, String specValue) {
deleteProperty(_toolkitsSpecs, specName, specValue);
}
/**
* @return The list of the <code>ComponentInfo</code> objects that encapsulate specifications of
* the registered delegate components (for aggregate component).
*/
public Hashtable getDelegateComponents() {
return _delegateComponents;
}
/**
* @return The specifications of the UIMA framework - (key, value) pairs. Value may contain one
* string or a list of strings, separated by PROPERTY_DELIMITER.
*/
public Properties getFrameworkSpecs() {
return _frameworkSpecs;
}
/**
* @return The list of the <code>ActionInfo</code> objects that encapsulate specifications of
* all requested installation actions.
*/
public Collection getInstallationActions() {
return _installationActions;
}
/**
* Returns the list of specified <code>ActionInfo</code> objects that have a given action name.
*
* @param actionName
* The given action name.
*
* @return The list of the <code>ActionInfo</code> objects that have the given action name.
*/
public Collection getInstallationActions(String actionName) {
ArrayList selActions = new ArrayList();
Iterator allActions = getInstallationActions().iterator();
while (allActions.hasNext()) {
ActionInfo actInfo = (ActionInfo) allActions.next();
if (actInfo.getName().equals(actionName))
selActions.add(actInfo);
}
return selActions;
}
/**
* @return The InsD file associated with this object.
*/
public synchronized File getInstallationDescriptorFile() {
return _insdFile;
}
/**
* @return Absolute path to the specified CAS Consumer descriptor for the main (submitted)
* component, or <code>null</code>, if the main component was not specified.
*/
public String getMainCasConsumerDesc() {
return getMainCasConsumerDesc(false);
}
/**
* Returns absolute or relative path to the specified CAS Consumer descriptor for the main
* (submitted) component, or <code>null</code>, if the main component was not specified. If the
* relative path is requested, returns the path relative to the main component root dir.
*
* @param relativePath
* If <code>true</code>, returns relative path, otherwise returns absolute path.
* @return Absolute or relative path to the specified CAS Consumer descriptor for the main
* (submitted) component, or <code>null</code>, if the main component was not
* specified.
*/
public synchronized String getMainCasConsumerDesc(boolean relativePath) {
if (_mainComponent != null)
return relativePath ? getRelativePathForComponentObject(
_mainComponent.casConsumerDescFilePath, _mainComponent)
: _mainComponent.casConsumerDescFilePath;
return null;
}
/**
* @return Absolute path to the specified CAS Initializer descriptor for the main (submitted)
* component, or <code>null</code> if the main component was not specified.
*/
public String getMainCasInitializerDesc() {
return getMainCasInitializerDesc(false);
}
/**
* Returns absolute or relative path to the specified CAS Initializer descriptor for the main
* (submitted) component, or <code>null</code>, if the main component was not specified. If the
* relative path is requested, returns the path relative to the main component root dir.
*
* @param relativePath
* If <code>true</code>, returns relative path, otherwise returns absolute path.
* @return Absolute or relative path to the specified CAS Initializer descriptor for the main
* (submitted) component, or <code>null</code>, if the main component was not
* specified.
*/
public synchronized String getMainCasInitializerDesc(boolean relativePath) {
if (_mainComponent != null)
return relativePath ? getRelativePathForComponentObject(
_mainComponent.casInitializerDescFilePath, _mainComponent)
: _mainComponent.casInitializerDescFilePath;
return null;
}
/**
* @return Absolute path to the specified Collection Iterator descriptor for the main (submitted)
* component, or <code>null</code> if the main component was not specified.
*/
public String getMainCollIteratorDesc() {
return getMainCollIteratorDesc(false);
}
/**
* Returns absolute or relative path to the specified Collection Iterator descriptor for the main
* (submitted) component, or <code>null</code>, if the main component was not specified. If the
* relative path is requested, returns the path relative to the main component root dir.
*
* @param relativePath
* If <code>true</code>, returns relative path, otherwise returns absolute path.
* @return Absolute or relative path to the specified Collection Iterator descriptor for the main
* (submitted) component, or <code>null</code>, if the main component was not
* specified.
*/
public synchronized String getMainCollIteratorDesc(boolean relativePath) {
if (_mainComponent != null)
return relativePath ? getRelativePathForComponentObject(
_mainComponent.collIteratorDescFilePath, _mainComponent)
: _mainComponent.collIteratorDescFilePath;
return null;
}
/**
* @return The specified main component deployment type, or default deployment type (<code>standard</code>),
* if no deployment type specified.
*/
public synchronized String getMainComponentDeployment() {
return (_mainComponent != null) ? _mainComponent.deploymentType : null;
}
/**
* @return Absolute path to the specified XML AE descriptor for the main (submitted) component, or
* <code>null</code> if the main component was not specified.
*/
public String getMainComponentDesc() {
return getMainComponentDesc(false);
}
/**
* Returns absolute or relative path to the specified XML AE descriptor for the main (submitted)
* component, or <code>null</code>, if the main component was not specified. If the relative
* path is requested, returns the path relative to the main component root dir.
*
* @param relativePath
* If <code>true</code>, returns relative path, otherwise returns absolute path.
* @return Absolute or relative path to the specified XML AE descriptor for the main (submitted)
* component, or <code>null</code>, if the main component was not specified.
*/
public synchronized String getMainComponentDesc(boolean relativePath) {
if (_mainComponent != null) {
if (_mainComponent.descFilePath != null && _mainComponent.descFilePath.length() > 0) {
if (_mainComponent.descFilePath.charAt(0) == '$') {
if (relativePath) {
int relPathIndex = _mainComponent.descFilePath.indexOf('/') + 1;
return _mainComponent.descFilePath.substring(relPathIndex);
} else
return _mainComponent.descFilePath;
} else {
return relativePath ? getRelativePathForComponentObject(_mainComponent.descFilePath,
_mainComponent) : _mainComponent.descFilePath;
}
} else
return _mainComponent.descFilePath;
}
return null;
}
/**
* @return The specified ID for the main (submitted) component, or <code>null</code> if the main
* component was not specified.
*/
public synchronized String getMainComponentId() {
return (_mainComponent != null) ? _mainComponent.getId() : null;
}
/**
* @return The specified name for the main (submitted) component, or <code>null</code> if the
* main component was not specified.
*/
public synchronized String getMainComponentName() {
return (_mainComponent != null) ? _mainComponent.name : null;
}
/**
* @param paramName
* The given network component parameter name.
* @return The specifications of the given network component parameter.
*/
public synchronized Properties getMainComponentNetworkParam(String paramName) {
return (_mainComponent != null && _mainComponent.networkParams != null) ? (Properties) _mainComponent.networkParams
.get(paramName)
: null;
}
/**
* @return The <code>Set</code> of the network component parameter names.
*/
public synchronized Set getMainComponentNetworkParamNames() {
return (_mainComponent != null && _mainComponent.networkParams != null) ? _mainComponent.networkParams
.keySet()
: null;
}
/**
* @return The specified additional properties of the main (submitted) component, or
* <code>null</code> if the main component was not specified.
*/
public synchronized Properties getMainComponentProps() {
return (_mainComponent != null) ? _mainComponent.props : null;
}
/**
* @return The specified root directory path for the main (submitted) component, or
* <code>null</code> if the main component was not specified.
*/
public synchronized String getMainComponentRoot() {
return (_mainComponent != null) ? _mainComponent.rootDirPath : null;
}
/**
* @return Main component service specifications, if specified.
*/
public synchronized ServiceInfo getMainComponentService() {
return (_mainComponent != null) ? _mainComponent.serviceInfo : null;
}
/**
* @return The specified attributes of the OS environment - (name, value) pairs. Value may contain
* one string or a list of strings, separated by PROPERTY_DELIMITER.
*/
public Properties getOSSpecs() {
return _osSpecs;
}
/**
* @return The specified attributes of the standard system toolkits - (name, value) pairs. Value
* may contain one string or a list of strings, separated by PROPERTY_DELIMITER.
*/
public Properties getToolkitsSpecs() {
return _toolkitsSpecs;
}
/**
* Assignes a given installation descriptor file to this object. This method does not perform
* parsing of the file.
*
* @param insdFile
* The given installation descriptor file.
*/
public synchronized void setInstallationDescriptorFile(File insdFile) {
_insdFile = insdFile;
}
/**
* Sets a given descriptor file path to a given delegate component.
*
* @param id
* The given delegate component ID.
* @param descFilePath
* The given descriptor file path.
*/
public synchronized void setDelegateComponentDesc(String id, String descFilePath) {
String dlgId = id.trim();
ComponentInfo dCompInfo = (ComponentInfo) _delegateComponents.get(dlgId);
if (dCompInfo != null) {
if (dCompInfo.rootDirPath == null) // set relative path
dCompInfo.descFilePath = descFilePath.trim().replace('\\', '/');
else {
// substitute '$dlg_comp_id$root' macros
dCompInfo.descFilePath = InstallationProcessor.substituteCompIdRootInString(
dCompInfo.descFilePath, dlgId, dCompInfo.rootDirPath);
}
}
}
/**
* Assignes a given name to a given delegate component.
*
* @param id
* The given delegate component ID.
* @param name
* The given delegate component name.
*/
public synchronized void setDelegateComponentName(String id, String name) {
String dlgId = id.trim();
ComponentInfo dCompInfo = (ComponentInfo) _delegateComponents.get(dlgId);
if (dCompInfo != null)
dCompInfo.name = name.trim();
}
/**
* Assignes a given property to a given delegate component.
*
* @param id
* The given delegate component ID.
* @param propName
* The given property name.
* @param propValue
* The given property value.
*/
public synchronized void setDelegateComponentProperty(String id, String propName, String propValue) {
String dlgId = id.trim();
ComponentInfo dCompInfo = (ComponentInfo) _delegateComponents.get(dlgId);
if (dCompInfo != null) {
if (dCompInfo.props == null)
dCompInfo.props = new Properties();
dCompInfo.props.setProperty(propName, propValue.trim());
}
}
/**
* Sets a given directory path as the root path for a given delegate component.
*
* @param id
* The given delegate component ID.
* @param rootDirPath
* The given root directory path.
*/
public synchronized void setDelegateComponentRoot(String id, String rootDirPath) {
String dlgId = id.trim();
ComponentInfo dCompInfo = (ComponentInfo) _delegateComponents.get(dlgId);
if (dCompInfo != null) {
dCompInfo.rootDirPath = rootDirPath.trim().replace('\\', '/');
// substitute $dlg_comp_id$root macros in the
// delegate descriptor path
if (dCompInfo.descFilePath != null) {
dCompInfo.descFilePath = InstallationProcessor.substituteCompIdRootInString(
dCompInfo.descFilePath, dlgId, dCompInfo.rootDirPath);
}
}
// substitute $dlg_comp_id$root macros in apropriate
// action fields
Iterator list = getInstallationActions().iterator();
while (list.hasNext()) {
ActionInfo action = (ActionInfo) list.next();
Enumeration keys = action.params.keys();
while (keys.hasMoreElements()) {
String key = (String) keys.nextElement();
String value = action.params.getProperty(key);
if (key.equals(InstallationDescriptorHandler.FILE_TAG)
|| key.equals(InstallationDescriptorHandler.REPLACE_WITH_TAG)
|| key.equals(InstallationDescriptorHandler.VAR_VALUE_TAG)) {
value = InstallationProcessor.substituteCompIdRootInString(value, dlgId,
dCompInfo.rootDirPath);
action.params.setProperty(key, value);
}
}
}
}
/**
* Sets a given main CAS consumer descriptor file.
*
* @param descFilePath
* The given CAS consumer descriptor file path.
*/
public synchronized void setMainCasConsumerDesc(String descFilePath) {
if (_mainComponent != null) {
if (_mainComponent.rootDirPath == null) // set relative path
_mainComponent.casConsumerDescFilePath = descFilePath.trim().replace('\\', '/');
else { // substitute $main_root macros in descriptor path
_mainComponent.casConsumerDescFilePath = InstallationProcessor.substituteMainRootInString(
descFilePath, _mainComponent.rootDirPath);
}
}
}
/**
* Sets a given main CAS initializer descriptor file.
*
* @param descFilePath
* The given CAS initializer descriptor file path.
*/
public synchronized void setMainCasInitializerDesc(String descFilePath) {
if (_mainComponent != null) {
if (_mainComponent.rootDirPath == null) // set relative path
_mainComponent.casInitializerDescFilePath = descFilePath.trim().replace('\\', '/');
else { // substitute $main_root macros in descriptor path
_mainComponent.casInitializerDescFilePath = InstallationProcessor
.substituteMainRootInString(descFilePath, _mainComponent.rootDirPath);
}
}
}
/**
* Sets a given main Collection iterator descriptor file.
*
* @param descFilePath
* The given Collection iterator descriptor file path.
*/
public synchronized void setMainCollIteratorDesc(String descFilePath) {
if (_mainComponent != null) {
if (_mainComponent.rootDirPath == null) // set relative path
_mainComponent.collIteratorDescFilePath = descFilePath.trim().replace('\\', '/');
else { // substitute $main_root macros in descriptor path
_mainComponent.collIteratorDescFilePath = InstallationProcessor.substituteMainRootInString(
descFilePath, _mainComponent.rootDirPath);
}
}
}
/**
* Sets a given main component using a given component ID. This method creates a new main
* component instance, overriding all previously set attributes of the main component.
*
* @param id
* The given main component ID.
*/
public synchronized void setMainComponent(String id) {
setMainComponent(id, "");
}
/**
* Sets a given main component using given component ID and name. This method creates a new main
* component instance, overriding all previously set attributes of the main component.
*
* @param id
* The given main component ID.
* @param name
* The given main component name.
*/
public synchronized void setMainComponent(String id, String name) {
_mainComponent = new ComponentInfo(id);
setMainComponentName(name);
}
/**
* Sets a given main component deployment type: <code>standard</code>, <code>service</code>
* or <code>network</code>.
*
* @param deplType
* The specified deployment type.
*/
public synchronized void setMainComponentDeployment(String deplType) {
if (_mainComponent != null)
_mainComponent.deploymentType = deplType;
}
/**
* Sets a given main component descriptor file.
*
* @param descFilePath
* The given main component descriptor file path.
*/
public synchronized void setMainComponentDesc(String descFilePath) {
if (_mainComponent != null) {
if (_mainComponent.rootDirPath == null) // set relative path
_mainComponent.descFilePath = descFilePath.trim().replace('\\', '/');
else { // substitute $main_root macros in descriptor path
_mainComponent.descFilePath = InstallationProcessor.substituteMainRootInString(
descFilePath, _mainComponent.rootDirPath);
}
}
}
/**
* Replaces existing main component ID with a given new ID.
*
* @param id
* The given new ID of the main component.
*/
public synchronized void setMainComponentId(String id) {
if (_mainComponent != null)
_mainComponent._id = id.trim();
}
/**
* Sets a given main component name.
*
* @param name
* The given main component name.
*/
public synchronized void setMainComponentName(String name) {
if (_mainComponent != null) {
_mainComponent.name = name.trim();
}
}
/**
* Sets a specifications of a given network component parameter.
*
* @param paramName
* The given network component parameter name.
* @param paramSpecs
* The specifications of the given network component parameter.
*/
public synchronized void setMainComponentNetworkParam(String paramName, Properties paramSpecs) {
if (_mainComponent != null) {
if (_mainComponent.networkParams == null)
_mainComponent.networkParams = new Hashtable();
_mainComponent.networkParams.put(paramName, paramSpecs);
}
}
/**
* Sets a given main component property.
*
* @param propNname
* The given property name.
* @param propValue
* The given property value.
*/
public synchronized void setMainComponentProperty(String propNname, String propValue) {
if (_mainComponent != null) {
if (_mainComponent.props == null)
_mainComponent.props = new Properties();
_mainComponent.props.setProperty(propNname, propValue.trim());
}
}
/**
* Sets a given main component root directory.
*
* @param rootDirPath
* The given main component root directory path.
*/
public synchronized void setMainComponentRoot(String rootDirPath) {
if (_mainComponent != null) {
_mainComponent.rootDirPath = rootDirPath.trim().replace('\\', '/');
// substitute $main_root macros in all specs of descriptor files
if (_mainComponent.descFilePath != null)
_mainComponent.descFilePath = InstallationProcessor.substituteMainRootInString(
_mainComponent.descFilePath, _mainComponent.rootDirPath);
if (_mainComponent.collIteratorDescFilePath != null)
_mainComponent.collIteratorDescFilePath = InstallationProcessor.substituteMainRootInString(
_mainComponent.collIteratorDescFilePath, _mainComponent.rootDirPath);
if (_mainComponent.casInitializerDescFilePath != null)
_mainComponent.casInitializerDescFilePath = InstallationProcessor
.substituteMainRootInString(_mainComponent.casInitializerDescFilePath,
_mainComponent.rootDirPath);
if (_mainComponent.casConsumerDescFilePath != null)
_mainComponent.casConsumerDescFilePath = InstallationProcessor.substituteMainRootInString(
_mainComponent.casConsumerDescFilePath, _mainComponent.rootDirPath);
// substitute $main_root macros in all specs of actions
Iterator list = getInstallationActions().iterator();
while (list.hasNext()) {
ActionInfo action = (ActionInfo) list.next();
Enumeration keys = action.params.keys();
while (keys.hasMoreElements()) {
String key = (String) keys.nextElement();
String value = action.params.getProperty(key);
if (key.equals(InstallationDescriptorHandler.FILE_TAG)
|| key.equals(InstallationDescriptorHandler.REPLACE_WITH_TAG)
|| key.equals(InstallationDescriptorHandler.VAR_VALUE_TAG)) {
value = InstallationProcessor.substituteMainRootInString(value,
_mainComponent.rootDirPath);
action.params.setProperty(key, value);
}
}
}
}
}
/**
* Sets a given main component service specifications. The service specifications are valid only
* for <code>service</code> deployment type.
*
* @param serviceInfo
* The given main component service specifications.
*/
public synchronized void setMainComponentService(ServiceInfo serviceInfo) {
if (_mainComponent != null)
_mainComponent.serviceInfo = serviceInfo;
}
/**
* @return String representation of the InsD object.
* @see java.lang.Object#toString()
*/
public String toString() {
StringWriter sWriter = new StringWriter();
PrintWriter oWriter = null;
try {
oWriter = new PrintWriter(sWriter);
InstallationDescriptorHandler.printInstallationDescriptor(this, oWriter);
oWriter.flush();
} catch (Exception exc) {
} finally {
if (oWriter != null) {
try {
oWriter.close();
} catch (Exception e) {
}
}
}
return sWriter.toString();
}
/**
* Replaces existing main component ID with a given new ID.
*
* @param id
* The given new ID of the main component.
* @deprecated Use setMainComponentId() method instead.
*/
public synchronized void updateMainComponentId(String id) {
setMainComponentId(id);
}
}