/*
  * Set up the platform binary download and get it ready to run the tests.
  * This method is not intended to be called by clients, it will be called
  * automatically when the clients use a ReconcilerTestSuite. If the executable isn't
  * found on the file-system after the call, then we fail.
  */
 public void initialize() throws Exception {
   initialized = false;
   File file = getPlatformZip();
   output = getUniqueFolder();
   toRemove.add(output);
   // for now we will exec to un-tar archives to keep the executable bits
   if (file.getName().toLowerCase().endsWith(".zip")) {
     try {
       FileUtils.unzipFile(file, output);
     } catch (IOException e) {
       fail("0.99", e);
     }
   } else {
     untar("1.0", file);
   }
   File exe = new File(output, getExeFolder() + "eclipse.exe");
   if (!exe.exists()) {
     exe = new File(output, getExeFolder() + "eclipse");
     if (!exe.exists())
       fail(
           "Executable file: "
               + exe.getAbsolutePath()
               + "(or .exe) not found after extracting: "
               + file.getAbsolutePath()
               + " to: "
               + output);
   }
   initialized = true;
 }
  @SuppressWarnings("restriction")
  public IStatus getRawArtifact(
      IArtifactDescriptor descriptor, OutputStream destination, IProgressMonitor monitor) {
    // TODO consolidate this logic with getArtifactFile
    GAV gav = getGAV(descriptor);
    String classifier = RepositoryLayoutHelper.getClassifier(descriptor.getProperties());
    String extension = RepositoryLayoutHelper.getExtension(descriptor.getProperties());

    if ("packed".equals(descriptor.getProperty(IArtifactDescriptor.FORMAT))) {
      classifier = "pack200";
      extension = "jar.pack.gz";
    }

    try {
      InputStream source = contentLocator.getContents(gav, classifier, extension);

      // copy to destination and close source
      FileUtils.copyStream(source, true, destination, false);
    } catch (IOException e) {
      return new Status(
          IStatus.ERROR,
          Activator.ID,
          "I/O exception while reading artifact "
              + gav.toExternalForm()
              + ":"
              + classifier
              + ":"
              + extension,
          e);
    }
    return Status.OK_STATUS;
  }
 /*
  * Copy the bundle with the given id to the specified location. (location
  * is parent directory)
  */
 public void copyBundle(String bundlename, File source, File destination) throws IOException {
   if (destination == null) destination = output;
   destination = new File(destination, "eclipse/plugins");
   if (source == null) {
     Bundle bundle = TestActivator.getBundle(bundlename);
     if (bundle == null) {
       throw new IOException("Could not find: " + bundlename);
     }
     String location = bundle.getLocation();
     if (location.startsWith("reference:")) location = location.substring("reference:".length());
     source = new File(FileLocator.toFileURL(new URL(location)).getFile());
   }
   destination = new File(destination, source.getName());
   if (destination.exists()) return;
   FileUtils.copy(source, destination, new File(""), false);
   // if the target of the copy doesn't exist, then signal an error
   assertTrue("Unable to copy " + source + " to " + destination, destination.exists());
 }