private ScriptRunner(CommandLineWrapper pCommandLineWrapper) {
    
    mCommandLineWrapper = pCommandLineWrapper;
    String lSourceLocation = mCommandLineWrapper.getOption(CommandLineOption.RUN);
    
    //Validate source location is not null
    if(XFUtil.isNull(lSourceLocation)){
      throw new ExFatalError("-" + CommandLineOption.RUN.getArgString() + " argument must be specified");
    } 
    
    File lSourceFile = new File(lSourceLocation);
    if(!lSourceFile.exists()){
      throw new ExFatalError("Failed to locate source file at " + lSourceLocation);
    }
        
    if(lSourceFile.isDirectory()){
      mIsBaseDirectoryTemp = false;
      mBaseDirectory = lSourceFile;
    }
    else {
      mIsBaseDirectoryTemp = true;
      mBaseDirectory = Files.createTempDir();
      try {
        Logger.logInfo("Extracting archive " + lSourceLocation);
        int lFileCount = ArchiveUtil.extractZipToFolder(lSourceFile, mBaseDirectory);
        Logger.logInfo("Extracted " + lFileCount + " files");
      }
      catch (ZipException e) {
        throw new ExInternal("Zip error extracting zip to " + mBaseDirectory.getAbsolutePath(), e);
      }
      catch (IOException e) {
        throw new ExInternal("IO error extracting zip to " + mBaseDirectory.getAbsolutePath(), e);
      }
    }
    
    Logger.logInfo("Base directory is " + mBaseDirectory.getAbsolutePath());    
  }