001: /*
002: * Copyright 2007 Paul Hinds
003: *
004: * Licensed under the Apache License, Version 2.0 (the "License");
005: * you may not use this file except in compliance with the License.
006: * You may obtain a copy of the License at
007: *
008: * http://www.apache.org/licenses/LICENSE-2.0
009: *
010: * Unless required by applicable law or agreed to in writing, software
011: * distributed under the License is distributed on an "AS IS" BASIS,
012: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013: * See the License for the specific language governing permissions and
014: * limitations under the License.
015: */
016: package org.tp23.antinstaller.runtime.exe;
017:
018: import java.io.File;
019: import java.util.Properties;
020:
021: import org.tp23.antinstaller.InstallException;
022: import org.tp23.antinstaller.InstallerContext;
023: import org.tp23.antinstaller.runtime.ExecInstall;
024: import org.tp23.antinstaller.runtime.exe.FilterChain;
025: import org.tp23.antinstaller.runtime.exe.FilterFactory;
026:
027: /**
028: * Used for embedding AI screens and functionality for a generic
029: * properties editor UI.
030: *
031: * @author Paul Hinds
032: * @version $Id: NonExtractor.java,v 1.4 2006/12/15 21:16:39 teknopaul Exp $
033: */
034: public class EmbeddableConfig {
035:
036: /** used by AntProjectFilter */
037: public static String ANTINSTALLER_JAR_PROPERTY = "antinstaller.jar";
038: public static String CUSTOM_CONFIG_RESOURCE = "/org/tp23/antinstaller/runtime/exe/embeddable.custom.fconfig";
039: public static String PROPERTIES_CONFIG_RESOURCE = "/org/tp23/antinstaller/runtime/exe/embeddable.props.fconfig";
040:
041: public EmbeddableConfig() {
042:
043: }
044:
045: /**
046: * Run method, this will run AI as if it were launched by the user but the properties files
047: * will not be written out, the properties file passed as an argument will be updated
048: * @param File installRoot needed by AI for logging and Ants basedir
049: * @param Properties props, your applications properties.
050: * @return The InstallerContexst used during the build (N.B. this is not a thread safe object)
051: */
052: public InstallerContext init(File installRoot, Properties props) {
053: try {
054: FilterChain chain = FilterFactory
055: .factory(PROPERTIES_CONFIG_RESOURCE);
056: ExecInstall installExec = new ExecInstall(chain); // InstallerContext created
057: installExec.setExitOnError(false);
058: //installExec.parseArgs(args, false);
059:
060: //create temporary space for the build to be removed on exit
061: //File temp = extractor.makeTempDir();
062: //installExec.setTempRoot(temp); // ensure shutdown hook is not added
063: installExec.setInstallRoot(installRoot);
064: installExec.getInstallerContext().setUserObject(props);
065: installExec.exec();
066: return installExec.getInstallerContext();
067: } catch (InstallException e) {
068: System.out.println("Can't load filter chain: "
069: + PROPERTIES_CONFIG_RESOURCE);
070: e.printStackTrace();
071: return null;
072: }
073: }
074:
075: /**
076: * Run method, you should provide custom implementations for the LoadPropertiesFilter and PropertiesPrinterFilter
077: * and specify them in the /org/tp23/antinstaller/runtime/exe/embedable.custom.fconfig file
078: * of accept the default of ./antinstall.properties
079: * @return The InstallerContexst used during the build (N.B. this is not a thread safe object)
080: */
081: public InstallerContext init(File installRoot) {
082: try {
083: FilterChain chain = FilterFactory
084: .factory(CUSTOM_CONFIG_RESOURCE);
085: ExecInstall installExec = new ExecInstall(chain); // InstallerContext created
086: installExec.setExitOnError(false);
087: //installExec.parseArgs(args, false);
088:
089: //create temporary space for the build to be removed on exit
090: //File temp = extractor.makeTempDir();
091: //installExec.setTempRoot(temp); // ensure shutdown hook is not added
092: installExec.setInstallRoot(installRoot);
093: installExec.exec();
094: return installExec.getInstallerContext();
095: } catch (InstallException e) {
096: System.out.println("Can't load filter chain: "
097: + CUSTOM_CONFIG_RESOURCE);
098: e.printStackTrace();
099: return null;
100: }
101: }
102: }
|