InstallerContext.java :  » Installer » AntInstaller » org » tp23 » antinstaller » Java Open Source

Java Open Source » Installer » AntInstaller 
AntInstaller » org » tp23 » antinstaller » InstallerContext.java
/* 
 * Copyright 2005 Paul Hinds
 *
 * 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.tp23.antinstaller;

import java.io.File;
import java.io.IOException;
import java.io.PrintStream;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.Properties;
import java.util.Vector;

import org.apache.tools.ant.BuildListener;
import org.apache.tools.ant.taskdefs.Execute;
import org.tp23.antinstaller.page.Page;
import org.tp23.antinstaller.renderer.AILanguagePack;
import org.tp23.antinstaller.renderer.AIResourceBundle;
import org.tp23.antinstaller.renderer.AntOutputRenderer;
import org.tp23.antinstaller.renderer.MessageRenderer;
import org.tp23.antinstaller.runtime.Logger;
import org.tp23.antinstaller.runtime.LoggingAntOutputRenderer;
import org.tp23.antinstaller.runtime.Runner;
import org.tp23.antinstaller.runtime.exe.AntLauncherFilter;
import org.tp23.antinstaller.runtime.exe.LoadConfigFilter;
/**
 *
 * <p>A single InstallerContext is created by the ExecInstall class and
 * exist for the duration of the Install screens and the runing of
 * the Ant Script. </p>
 * @author Paul Hinds
 * @version $Id: InstallerContext.java,v 1.10 2007/01/28 08:44:41 teknopaul Exp $
 */
public class InstallerContext {

  private static final AILanguagePack langPack = new AILanguagePack();
  /**
   * This is the prefix for environment variables, unlike Ant this is fixed to
   * the common prefix of "env".  If you dont like this complain to the bug reports
   * on sourceforge
   */
  public static final String ENV_PREFIX = "env.";
  /**
   * This is the prefix for Java system property variables.
   * This is fixed to "java."
   */
  public static final String JAVA_PREFIX = "java.";

  private Logger logger = null;
  private Installer installer = null;
  private MessageRenderer messageRenderer = null;
    private AntOutputRenderer antOutputRenderer = null;
    private Runner runner = null;
    private Page currentPage = null;
    private java.io.File fileRoot = null; // ant basedir
    private BuildListener buildListener = null;
    private AntLauncherFilter antRunner = null;
    private String uIOverride = null;
    private String installerConfigFile = LoadConfigFilter.INSTALLER_CONFIG_FILE;
    private String antBuildFile = "build.xml";
    private String configResource;
    private Object userObject;
    /** indicates the GUI version is running */
    private boolean gui;
    
    
    // called after the Ant part has been run
    private boolean installedSucceded = false;
     
  public InstallerContext() {
        // seemingly useless defaults, but generally the logger will be set to a FileLogger
        // this removes the need to have a progress page
        logger = new Logger() {
            public void log(String message) {
            }
            public void log(Throwable exception) {
            }
            public void log(Installer installer, Throwable exception) {
            }
            public void setFileName(String fileName) throws IOException {
            }
            public String getFileName() {
                return null;
            }
            public void close() {
            }
      public void loge(int b) {
      }
      public void loge(String b) {
      }
        };
        antOutputRenderer = new AntOutputRenderer() {
            public PrintStream getOut() {
                return System.out;
            }
            public PrintStream getErr() {
                return System.err;
            }
        };
  }

  public void setInstallSucceded(boolean installedSucceded){
    this.installedSucceded=installedSucceded;
  }
  public boolean isInstallSucceded(){
    return installedSucceded;
  }
  
  public void log(String message){
    if(logger != null) {
            logger.log(message);
        }
  }
  public void log(Throwable message){
    if(logger != null) {
            logger.log(message);
        }
  }
  public void loge(int b) {
    if(logger != null) {
            logger.loge(b);
        }
  }
  public void loge(String b) {
    if(logger != null) {
            logger.loge(b);
        }
  }
    public void log(boolean vebose, Throwable message){
        if(vebose && logger != null) {
            logger.log(message);
        }
    }

  /**
   * Check to see if the system is windoze to be able to return the correct prompted
   * directories.  This method should be IsNotWindows since it assumes anything
   * that is not windows is Unix
   * @return boolean true if not windows in the os.name System Property
   */
  public static boolean isUnix(){
    return System.getProperty("os.name").toLowerCase().indexOf("windows") == -1;
  }

  /**
   * Use the standard Ant way to load the environment variables, this is not all inclusive
   * (but will be come Java 1.5 I imagine)
   * @return Properties
   */
  public static Properties getEnvironment(){
    Properties props = new Properties();
    try {
      Vector osEnv = Execute.getProcEnvironment();
      for (Enumeration e = osEnv.elements(); e.hasMoreElements(); ) {
        String entry = (String) e.nextElement();
        int pos = entry.indexOf('=');
        if (pos != -1) {
          props.put(ENV_PREFIX + entry.substring(0, pos),
                entry.substring(pos + 1));
        }
      }
    }
    catch (Exception ex) {
      // swallow exceptions so this can be loaded statically
      // bit of a bugger if you need the environment on Mac OS 9 but not all apps
      // do so we don't want to die inother situations
      System.out.println("Can't load environment:"+ex.getClass()+","+ex.getMessage());
    }
    Properties javaSysProps = System.getProperties();
    Iterator iter = javaSysProps.keySet().iterator();
    while (iter.hasNext()) {
      Object key = (Object)iter.next();
      props.put(JAVA_PREFIX+key.toString(),javaSysProps.get(key));
    }
    return props;
  }

  // Bean methods
  public Installer getInstaller() {
    return installer;
  }

  public String getMinJavaVersion() {
    return installer.getMinJavaVersion();
  }

  public MessageRenderer getMessageRenderer() {
    return messageRenderer;
  }

  public void setMessageRenderer(MessageRenderer messageRenderer) {
    this.messageRenderer = messageRenderer;
    this.messageRenderer.setInstallerContext(this);
  }
  
    public AntOutputRenderer getAntOutputRenderer() {
    return antOutputRenderer;
    }
    
    public void setAntOutputRenderer(AntOutputRenderer antOutputRenderer) {
      if(installer.isDebug()){
        this.antOutputRenderer = new LoggingAntOutputRenderer(antOutputRenderer.getOut(),
        antOutputRenderer.getErr(), this);
      }
      else {
        this.antOutputRenderer = antOutputRenderer;
      }
    }
    
    public Page getCurrentPage() {
    return currentPage;
    }
    
    public void setCurrentPage(Page currentPage) {
    this.currentPage = currentPage;
    }
  /**
   * in SelfExtractor - the directory the install has extracted to <br/>
   * in Scripted installs - the base directory of the install      <br/>
   * in NonExtractor - the temporary space created for the build   <br/> 
   * @return 
   */
  public File getFileRoot() {
    return fileRoot;
  }

  public void setFileRoot(File fileRoot) {
    this.fileRoot = fileRoot;
  }

  public org.apache.tools.ant.BuildListener getBuildListener() {
    return buildListener;
  }

  public void setBuildListener(org.apache.tools.ant.BuildListener buildListener) {
    this.buildListener = buildListener;
  }

  public AntLauncherFilter getAntRunner() {
    return antRunner;
  }

  public void setAntRunner(AntLauncherFilter antRunner) {
    this.antRunner = antRunner;
  }

  public Logger getLogger() {
    return logger;
  }

  public void setLogger(Logger logger) {
    this.logger = logger;
  }

  public Runner getRunner() {
    return runner;
  }

  public void setRunner(Runner runner) {
    this.runner = runner;
  }

  public void setInstaller(Installer installer) {
    this.installer = installer;
  }

  public String getUIOverride() {
    return uIOverride;
  }

  public void setUIOverride(String override) {
    uIOverride = override;
  }
  
  public boolean isAutoBuild(){
    return uIOverride != null && uIOverride.indexOf("-auto") > -1;
  }

  /**
   * RFE 1569628, the antinstaller config file to use, defaults to antinstall-config.xml
   * @return
   */
  public String getInstallerConfigFile() {
    return installerConfigFile;
  }

  public void setInstallerConfigFile(String installerConfigFile) {
    this.installerConfigFile = installerConfigFile;
  }
  /**
   * RFE 1569628, the build file to use, defaults to build.xml
   * There should never be any path info, that is derived elsewhere
   * @return
   */
  public String getAntBuildFile() {
    return antBuildFile;
  }

  public void setAntBuildFile(String antBuildFile) {
    this.antBuildFile = antBuildFile;
  }

  public String getConfigResource() {
    return configResource;
  }

  public void setConfigResource(String configResource) {
    this.configResource = configResource;
  }

  public boolean isGui() {
    return gui;
  }

  public void setGui(boolean gui) {
    this.gui = gui;
  }
  
    /**
     * Reinitialise the LanguagePack to pick up DefaultLocale Changes
     *
     */
    public static void reInitLocale() {
      // this is a dubious design we need to reInitLocale() in three places
        try {
            AIResourceBundle.reInitLocale();
            AILanguagePack.reInitLocale();
        } catch (Exception e) {
            // ignore, signifies no lang packs installed 
        }
    }

    /**
     * Can be used when embedding the installer screens to hook into the filter chain
     */
  public Object getUserObject() {
    return userObject;
  }

    /**
     * Can be used when embedding the installer screens to hook into the filter chain
     */
  public void setUserObject(Object userObject) {
    this.userObject = userObject;
  }


}



java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.