You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by al...@apache.org on 2006/12/20 17:21:52 UTC
svn commit: r489131 -
/incubator/uima/uimaj/trunk/uimaj-tools/src/main/java/org/apache/uima/tools/pear/merger/PMControllerHelper.java
Author: alally
Date: Wed Dec 20 08:21:52 2006
New Revision: 489131
URL: http://svn.apache.org/viewvc?view=rev&rev=489131
Log:
Applied patch from Lev Kozakov
UIMA-133: https://issues.apache.org/jira/browse/UIMA-133
Modified:
incubator/uima/uimaj/trunk/uimaj-tools/src/main/java/org/apache/uima/tools/pear/merger/PMControllerHelper.java
Modified: incubator/uima/uimaj/trunk/uimaj-tools/src/main/java/org/apache/uima/tools/pear/merger/PMControllerHelper.java
URL: http://svn.apache.org/viewvc/incubator/uima/uimaj/trunk/uimaj-tools/src/main/java/org/apache/uima/tools/pear/merger/PMControllerHelper.java?view=diff&rev=489131&r1=489130&r2=489131
==============================================================================
--- incubator/uima/uimaj/trunk/uimaj-tools/src/main/java/org/apache/uima/tools/pear/merger/PMControllerHelper.java (original)
+++ incubator/uima/uimaj/trunk/uimaj-tools/src/main/java/org/apache/uima/tools/pear/merger/PMControllerHelper.java Wed Dec 20 08:21:52 2006
@@ -1,229 +1,233 @@
-/*
- * 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.tools.pear.merger;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Collection;
-import java.util.Iterator;
-
-import org.apache.uima.pear.tools.InstallationDescriptor;
-import org.apache.uima.pear.tools.InstallationDescriptorHandler;
-import org.apache.uima.pear.tools.InstallationProcessor;
-import org.apache.uima.pear.tools.PackageBrowser;
-import org.apache.uima.pear.util.FileUtil;
-
-/**
- * The <code>PMControllerHelper</code> class implements utility methods that are utilized by the
- * <code>{@link PMController}</code> class.
- */
-
-public class PMControllerHelper {
- // Macros
- static final String MAIN_ROOT = "$main_root";
-
- static final String MAIN_ROOT_REGEX = "\\$main_root";
-
- /**
- * Creates a 'set_env_variable' action object based on given environment variable name and value.
- *
- * @param envVarName
- * The given environment variable name.
- * @param envVarValue
- * The given environment variable value.
- * @return The <code>InstallationDescriptor.ActionInfo</code> object, containing the
- * 'set_env_variable' action.
- */
- private static InstallationDescriptor.ActionInfo createEnvAction(String envVarName,
- String envVarValue) {
- InstallationDescriptor.ActionInfo action = new InstallationDescriptor.ActionInfo(
- InstallationDescriptor.ActionInfo.SET_ENV_VARIABLE_ACT);
- action.params.setProperty(InstallationDescriptorHandler.VAR_NAME_TAG, envVarName);
- action.params.setProperty(InstallationDescriptorHandler.VAR_VALUE_TAG, envVarValue);
- return action;
- }
-
- /**
- * Creates a 'find_and_replace_path' action object based on given file path and 'macro' path,
- * which is used as both the search string and the replacement string.
- *
- * @param filePath
- * The given file path, that specifies the target file for this action.
- * @param macroPath
- * The given 'macro' path that is used as both the search string and the replacement
- * string (e.g. $main_root).
- * @return The <code>InstallationDescriptor.ActionInfo</code> object, containing the
- * 'find_and_replace_path' action.
- */
- private static InstallationDescriptor.ActionInfo createFileAction(String filePath,
- String macroPath) {
- InstallationDescriptor.ActionInfo action = new InstallationDescriptor.ActionInfo(
- InstallationDescriptor.ActionInfo.FIND_AND_REPLACE_PATH_ACT);
- action.params.setProperty(InstallationDescriptorHandler.FILE_TAG, filePath);
- action.params.setProperty(InstallationDescriptorHandler.FIND_STRING_TAG, macroPath);
- action.params.setProperty(InstallationDescriptorHandler.REPLACE_WITH_TAG, macroPath);
- return action;
- }
-
- /**
- * Creates and saves installation descriptor for the merged PEAR, based on given output root
- * directory, output aggregate component descriptor file, output aggregate component name (ID),
- * array of delegate (input) installation descriptors and array of output delegate root
- * directories. Returns <code>InstallationDescriptor</code> object for the merged PEAR.
- *
- * @param rootDir
- * The given output root directory.
- * @param aggDescFile
- * The given output aggregate component descriptor file.
- * @param aggCompName
- * The given output aggregate component name (ID).
- * @param dlgInstDescs
- * The given array of delegate (input) installation descriptors.
- * @param dlgRootDirs
- * The given array of output delegate root directories.
- * @return The <code>InstallationDescriptor</code> object for the merged PEAR.
- * @throws IOException
- * If an I/O exception occurred.
- */
- static InstallationDescriptor generateMergedInstallationDescriptor(File rootDir,
- String aggCompName, File aggDescFile, InstallationDescriptor[] dlgInstDescs,
- File[] dlgRootDirs) throws IOException {
- // create aggregate installation descriptor
- File aggInsdFile = new File(rootDir, PackageBrowser.INSTALLATION_DESCRIPTOR_FILE);
- InstallationDescriptor aggInsdObject = new InstallationDescriptor(aggInsdFile);
- aggInsdObject.setMainComponent(aggCompName);
- // 1st step: set aggregate component descriptor
- String aggDescPath = MAIN_ROOT + "/"
- + FileUtil.getRelativePath(rootDir, aggDescFile.getAbsolutePath());
- aggInsdObject.setMainComponentDesc(aggDescPath);
- // 2nd step: collect installation actions from delegates
- for (int i = 0; i < dlgInstDescs.length; i++) {
- InstallationDescriptor dlgInsdObject = dlgInstDescs[i];
- // add implicit installation actions
- File dlgRootDir = dlgRootDirs[i];
- String adjMainRoot = MAIN_ROOT + "/" + dlgRootDir.getName();
- StringBuffer cpBuffer = new StringBuffer();
- // add JAR files in delegate lib dir to CLASSPATH
- File dlgLibDir = new File(dlgRootDir, PackageBrowser.LIBRARY_DIR);
- if (dlgLibDir.isDirectory()) {
- // get list of JAR files
- File[] jarFiles = dlgLibDir.listFiles(new FileUtil.ExtFilenameFilter(".jar"));
- // build CLASSPATH buffer
- for (int n = 0; n < jarFiles.length; n++) {
- cpBuffer.setLength(0);
- if (cpBuffer.length() > 0)
- cpBuffer.append(File.pathSeparatorChar);
- cpBuffer.append(adjMainRoot + "/"
- + FileUtil.getRelativePath(dlgRootDir, jarFiles[n].getAbsolutePath()));
- }
- // add 'set_env_variable' action
- if (cpBuffer.length() > 0)
- aggInsdObject.addInstallationAction(createEnvAction("CLASSPATH", cpBuffer.toString()));
- }
- // add delegate bin dir to CLASSPATH and PATH
- File dlgBinDir = new File(dlgRootDir, PackageBrowser.BINARY_DIR);
- if (dlgBinDir.isDirectory()) {
- String adjBinDirPath = adjMainRoot + "/"
- + FileUtil.getRelativePath(dlgRootDir, dlgBinDir.getAbsolutePath());
- aggInsdObject.addInstallationAction(createEnvAction("CLASSPATH", adjBinDirPath));
- aggInsdObject.addInstallationAction(createEnvAction("PATH", adjBinDirPath));
- }
- // add explicit installation actions
- Collection dlgInstActs = dlgInsdObject.getInstallationActions();
- Iterator list = dlgInstActs.iterator();
- while (list.hasNext())
- aggInsdObject.addInstallationAction((InstallationDescriptor.ActionInfo) list.next());
- }
- // save aggregate installation descriptor file
- InstallationDescriptorHandler.saveInstallationDescriptor(aggInsdObject, aggInsdFile);
- return aggInsdObject;
- }
-
- /**
- * Processes all delegate installation descriptors, component descriptors and configuration files,
- * adjusting 'macros' for a given delegate root directory. Returns the delegate installation
- * descriptor with adjusted 'macros'.
- *
- * @param rootDir
- * The given delegate root directory.
- * @return The elegate installation descriptor with adjusted 'macros'.
- * @throws IOException
- * If an I/O exception occurred.
- */
- static InstallationDescriptor processDescriptors(File rootDir) throws IOException {
- // build adjusted string for $main_root replacement
- String adjMainRoot = MAIN_ROOT + "/" + rootDir.getName();
- // 1st: process installation descriptor file
- File insdFile = new File(rootDir, InstallationProcessor.INSD_FILE_PATH);
- FileUtil.replaceStringInFile(insdFile, MAIN_ROOT_REGEX, adjMainRoot);
- // load installation descriptor
- InstallationDescriptorHandler insdHandler = new InstallationDescriptorHandler();
- try {
- insdHandler.parse(insdFile);
- } catch (Exception e) {
- throw new IOException(e.toString());
- }
- InstallationDescriptor insdObject = insdHandler.getInstallationDescriptor();
- // add installation descriptor file to 'find_and_replace_path' actions
- insdObject.addInstallationAction(createFileAction(adjMainRoot + "/"
- + InstallationProcessor.INSD_FILE_PATH, MAIN_ROOT));
- // 2nd: process files under 'desc' folder, if exists
- processFiles(rootDir, PackageBrowser.DESCRIPTORS_DIR, insdObject);
- // 3rd: process files under 'conf' folder, if exists
- processFiles(rootDir, PackageBrowser.CONFIGURATION_DIR, insdObject);
- return insdObject;
- }
-
- /**
- * Processes all files in a given target directory, adjusting 'macros' for a given delegate root
- * directory. Adds appropriate 'find_and_replace_path' actions to a specified delegate
- * installation descriptor.
- *
- * @param rootDir
- * The given delegate root directory.
- * @param targetDirName
- * The name of the given target directory in the delegate root directory.
- * @param insdObject
- * The given delegate installation descriptor.
- * @throws IOException
- * If an I/O exception occurred.
- */
- static void processFiles(File rootDir, String targetDirName, InstallationDescriptor insdObject)
- throws IOException {
- // build adjusted string for $main_root replacement
- String adjMainRoot = MAIN_ROOT + "/" + rootDir.getName();
- // build list of files in target dir, including sub-dirs
- File targetDir = new File(rootDir, targetDirName);
- if (!targetDir.isDirectory())
- return;
- Iterator fileList = FileUtil.createFileList(targetDir, true).iterator();
- while (fileList.hasNext()) {
- File file = (File) fileList.next();
- // adjust $main_root in this file
- int counter = FileUtil.replaceStringInFile(file, MAIN_ROOT_REGEX, adjMainRoot);
- if (counter > 0) {
- // add this file to 'find_and_replace_path' actions
- String relFilePath = FileUtil.getRelativePath(rootDir, file.getAbsolutePath());
- insdObject.addInstallationAction(createFileAction(adjMainRoot + "/" + relFilePath,
- MAIN_ROOT));
- }
- }
- }
-}
+/*
+ * 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.tools.pear.merger;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.apache.uima.pear.tools.InstallationDescriptor;
+import org.apache.uima.pear.tools.InstallationDescriptorHandler;
+import org.apache.uima.pear.tools.InstallationProcessor;
+import org.apache.uima.pear.tools.PackageBrowser;
+import org.apache.uima.pear.util.FileUtil;
+
+/**
+ * The <code>PMControllerHelper</code> class implements utility methods that are utilized by the
+ * <code>{@link PMController}</code> class.
+ */
+
+public class PMControllerHelper {
+ // Macros
+ static final String MAIN_ROOT = "$main_root";
+
+ static final String MAIN_ROOT_REGEX = "\\$main_root";
+
+ static final String STANDARD_PATH_SEPARATOR = ";";
+
+ static final char STANDARD_PATH_SEPARATOR_CHAR = ';';
+
+ /**
+ * Creates a 'set_env_variable' action object based on given environment variable name and value.
+ *
+ * @param envVarName
+ * The given environment variable name.
+ * @param envVarValue
+ * The given environment variable value.
+ * @return The <code>InstallationDescriptor.ActionInfo</code> object, containing the
+ * 'set_env_variable' action.
+ */
+ private static InstallationDescriptor.ActionInfo createEnvAction(String envVarName,
+ String envVarValue) {
+ InstallationDescriptor.ActionInfo action = new InstallationDescriptor.ActionInfo(
+ InstallationDescriptor.ActionInfo.SET_ENV_VARIABLE_ACT);
+ action.params.setProperty(InstallationDescriptorHandler.VAR_NAME_TAG, envVarName);
+ action.params.setProperty(InstallationDescriptorHandler.VAR_VALUE_TAG, envVarValue);
+ return action;
+ }
+
+ /**
+ * Creates a 'find_and_replace_path' action object based on given file path and 'macro' path,
+ * which is used as both the search string and the replacement string.
+ *
+ * @param filePath
+ * The given file path, that specifies the target file for this action.
+ * @param macroPath
+ * The given 'macro' path that is used as both the search string and the replacement
+ * string (e.g. $main_root).
+ * @return The <code>InstallationDescriptor.ActionInfo</code> object, containing the
+ * 'find_and_replace_path' action.
+ */
+ private static InstallationDescriptor.ActionInfo createFileAction(String filePath,
+ String macroPath) {
+ InstallationDescriptor.ActionInfo action = new InstallationDescriptor.ActionInfo(
+ InstallationDescriptor.ActionInfo.FIND_AND_REPLACE_PATH_ACT);
+ action.params.setProperty(InstallationDescriptorHandler.FILE_TAG, filePath);
+ action.params.setProperty(InstallationDescriptorHandler.FIND_STRING_TAG, macroPath);
+ action.params.setProperty(InstallationDescriptorHandler.REPLACE_WITH_TAG, macroPath);
+ return action;
+ }
+
+ /**
+ * Creates and saves installation descriptor for the merged PEAR, based on given output root
+ * directory, output aggregate component descriptor file, output aggregate component name (ID),
+ * array of delegate (input) installation descriptors and array of output delegate root
+ * directories. Returns <code>InstallationDescriptor</code> object for the merged PEAR.
+ *
+ * @param rootDir
+ * The given output root directory.
+ * @param aggDescFile
+ * The given output aggregate component descriptor file.
+ * @param aggCompName
+ * The given output aggregate component name (ID).
+ * @param dlgInstDescs
+ * The given array of delegate (input) installation descriptors.
+ * @param dlgRootDirs
+ * The given array of output delegate root directories.
+ * @return The <code>InstallationDescriptor</code> object for the merged PEAR.
+ * @throws IOException
+ * If an I/O exception occurred.
+ */
+ static InstallationDescriptor generateMergedInstallationDescriptor(File rootDir,
+ String aggCompName, File aggDescFile, InstallationDescriptor[] dlgInstDescs,
+ File[] dlgRootDirs) throws IOException {
+ // create aggregate installation descriptor
+ File aggInsdFile = new File(rootDir, PackageBrowser.INSTALLATION_DESCRIPTOR_FILE);
+ InstallationDescriptor aggInsdObject = new InstallationDescriptor(aggInsdFile);
+ aggInsdObject.setMainComponent(aggCompName);
+ // 1st step: set aggregate component descriptor
+ String aggDescPath = MAIN_ROOT + "/"
+ + FileUtil.getRelativePath(rootDir, aggDescFile.getAbsolutePath());
+ aggInsdObject.setMainComponentDesc(aggDescPath);
+ // 2nd step: collect installation actions from delegates
+ for (int i = 0; i < dlgInstDescs.length; i++) {
+ InstallationDescriptor dlgInsdObject = dlgInstDescs[i];
+ // add implicit installation actions
+ File dlgRootDir = dlgRootDirs[i];
+ String adjMainRoot = MAIN_ROOT + "/" + dlgRootDir.getName();
+ StringBuffer cpBuffer = new StringBuffer();
+ // add JAR files in delegate lib dir to CLASSPATH
+ File dlgLibDir = new File(dlgRootDir, PackageBrowser.LIBRARY_DIR);
+ if (dlgLibDir.isDirectory()) {
+ // get list of JAR files
+ File[] jarFiles = dlgLibDir.listFiles(new FileUtil.ExtFilenameFilter(".jar"));
+ // build delegate CLASSPATH buffer
+ cpBuffer.setLength(0);
+ for (int n = 0; n < jarFiles.length; n++) {
+ if (cpBuffer.length() > 0)
+ cpBuffer.append(STANDARD_PATH_SEPARATOR_CHAR);
+ cpBuffer.append(adjMainRoot + "/"
+ + FileUtil.getRelativePath(dlgRootDir, jarFiles[n].getAbsolutePath()));
+ }
+ // add 'set_env_variable' action
+ if (cpBuffer.length() > 0)
+ aggInsdObject.addInstallationAction(createEnvAction("CLASSPATH", cpBuffer.toString()));
+ }
+ // add delegate bin dir to CLASSPATH and PATH
+ File dlgBinDir = new File(dlgRootDir, PackageBrowser.BINARY_DIR);
+ if (dlgBinDir.isDirectory()) {
+ String adjBinDirPath = adjMainRoot + "/"
+ + FileUtil.getRelativePath(dlgRootDir, dlgBinDir.getAbsolutePath());
+ aggInsdObject.addInstallationAction(createEnvAction("CLASSPATH", adjBinDirPath));
+ aggInsdObject.addInstallationAction(createEnvAction("PATH", adjBinDirPath));
+ }
+ // add explicit installation actions
+ Collection dlgInstActs = dlgInsdObject.getInstallationActions();
+ Iterator list = dlgInstActs.iterator();
+ while (list.hasNext())
+ aggInsdObject.addInstallationAction((InstallationDescriptor.ActionInfo) list.next());
+ }
+ // save aggregate installation descriptor file
+ InstallationDescriptorHandler.saveInstallationDescriptor(aggInsdObject, aggInsdFile);
+ return aggInsdObject;
+ }
+
+ /**
+ * Processes all delegate installation descriptors, component descriptors and configuration files,
+ * adjusting 'macros' for a given delegate root directory. Returns the delegate installation
+ * descriptor with adjusted 'macros'.
+ *
+ * @param rootDir
+ * The given delegate root directory.
+ * @return The elegate installation descriptor with adjusted 'macros'.
+ * @throws IOException
+ * If an I/O exception occurred.
+ */
+ static InstallationDescriptor processDescriptors(File rootDir) throws IOException {
+ // build adjusted string for $main_root replacement
+ String adjMainRoot = MAIN_ROOT + "/" + rootDir.getName();
+ // 1st: process installation descriptor file
+ File insdFile = new File(rootDir, InstallationProcessor.INSD_FILE_PATH);
+ FileUtil.replaceStringInFile(insdFile, MAIN_ROOT_REGEX, adjMainRoot);
+ // load installation descriptor
+ InstallationDescriptorHandler insdHandler = new InstallationDescriptorHandler();
+ try {
+ insdHandler.parse(insdFile);
+ } catch (Exception e) {
+ throw new IOException(e.toString());
+ }
+ InstallationDescriptor insdObject = insdHandler.getInstallationDescriptor();
+ // add installation descriptor file to 'find_and_replace_path' actions
+ insdObject.addInstallationAction(createFileAction(adjMainRoot + "/"
+ + InstallationProcessor.INSD_FILE_PATH, MAIN_ROOT));
+ // 2nd: process files under 'desc' folder, if exists
+ processFiles(rootDir, PackageBrowser.DESCRIPTORS_DIR, insdObject);
+ // 3rd: process files under 'conf' folder, if exists
+ processFiles(rootDir, PackageBrowser.CONFIGURATION_DIR, insdObject);
+ return insdObject;
+ }
+
+ /**
+ * Processes all files in a given target directory, adjusting 'macros' for a given delegate root
+ * directory. Adds appropriate 'find_and_replace_path' actions to a specified delegate
+ * installation descriptor.
+ *
+ * @param rootDir
+ * The given delegate root directory.
+ * @param targetDirName
+ * The name of the given target directory in the delegate root directory.
+ * @param insdObject
+ * The given delegate installation descriptor.
+ * @throws IOException
+ * If an I/O exception occurred.
+ */
+ static void processFiles(File rootDir, String targetDirName, InstallationDescriptor insdObject)
+ throws IOException {
+ // build adjusted string for $main_root replacement
+ String adjMainRoot = MAIN_ROOT + "/" + rootDir.getName();
+ // build list of files in target dir, including sub-dirs
+ File targetDir = new File(rootDir, targetDirName);
+ if (!targetDir.isDirectory())
+ return;
+ Iterator fileList = FileUtil.createFileList(targetDir, true).iterator();
+ while (fileList.hasNext()) {
+ File file = (File) fileList.next();
+ // adjust $main_root in this file
+ int counter = FileUtil.replaceStringInFile(file, MAIN_ROOT_REGEX, adjMainRoot);
+ if (counter > 0) {
+ // add this file to 'find_and_replace_path' actions
+ String relFilePath = FileUtil.getRelativePath(rootDir, file.getAbsolutePath());
+ insdObject.addInstallationAction(createFileAction(adjMainRoot + "/" + relFilePath,
+ MAIN_ROOT));
+ }
+ }
+ }
+}