Package org.eclim.installer.ant

Source Code of org.eclim.installer.ant.UninstallIUTask

/**
* Copyright (C) 2005 - 2012  Eric Van Dewoestine
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/
package org.eclim.installer.ant;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;

import org.apache.commons.io.IOUtils;

import org.apache.commons.lang.StringUtils;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Task;

import org.apache.tools.ant.taskdefs.Move;

import org.eclim.installer.step.EclipseInfo;

import org.eclim.installer.step.command.Command;
import org.eclim.installer.step.command.OutputHandler;
import org.eclim.installer.step.command.UninstallCommand;

import org.formic.Installer;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
* Ant task to remove an eclipse install unit.
*
* @author Eric Van Dewoestine
*/
public class UninstallIUTask
  extends Task
  implements OutputHandler
{
  private static final Logger logger =
    LoggerFactory.getLogger(UninstallIUTask.class);

  private String repository;
  private String iu;
  private boolean failonerror = true;

  /**
   * Executes this task.
   */
  public void execute()
    throws BuildException
  {
    if (iu == null){
      throw new BuildException("Attribute 'iu' must be set.");
    }

    EclipseInfo info = (EclipseInfo)
      Installer.getContext().getValue("eclipse.info");

    // remove temp formic repositories (update sites)
    // FIXME: not working correctly. See org.eclim.installer.eclipse.Application
    /*if (iu.equals("org.eclim.installer")){
      runCommand(
          new Command(this, new String[]{"-removeRepos"}),
          "removing temp repositories");
    }*/

    // uninstall the feature
    runCommand(new UninstallCommand(
        this, repository, iu, "org.eclipse.equinox.p2.director"),
        "uninstalling " + iu);

    // http://wiki.eclipse.org/Equinox/p2/FAQ
    // run p2 gc to fully remove feature artifacts
    runCommand(new Command(
        this,
        new String[]{"-profile", info.getProfileName()},
        "org.eclipse.equinox.p2.garbagecollector.application"),
        "invoking p2 gc");

    // FIXME: hack since the -removeRepos method isn't working.
    if (iu.equals("org.eclim.installer")){
      String prefs =
        info.getLocalPath() +
        "/p2/org.eclipse.equinox.p2.engine/profileRegistry/" +
        info.getProfileName() +
        ".profile/.data/.settings/org.eclipse.equinox.p2.metadata.repository.prefs";
      logger.info("Removing temp repositories from p2 prefs: " + prefs);
      File prefFile = new File(prefs);
      File prefFileNew = new File(prefs + ".tmp");
      if (!prefFile.exists()){
        logger.warn("P2 repository prefs file doesn't exist.");
      }else{
        BufferedReader in = null;
        BufferedWriter out = null;
        try{
          in = new BufferedReader(new FileReader(prefFile));
          out = new BufferedWriter(new FileWriter(prefFileNew));
          String line = null;
          while((line = in.readLine()) != null){
            if (line.indexOf("formic_") != -1){
              continue;
            }
            out.write(line);
            out.newLine();
          }
          IOUtils.closeQuietly(in);
          IOUtils.closeQuietly(out);

          Move move = new Move();
          move.setTaskName("move");
          move.setProject(getProject());
          move.setFile(prefFileNew);
          move.setTofile(prefFile);
          move.setFailOnError(false);
          move.setForce(true);
          move.setOverwrite(true);
          move.execute();
        }catch(Exception e){
          logger.error("Error removing temp repositories.", e);
        }finally{
          IOUtils.closeQuietly(in);
          IOUtils.closeQuietly(out);
        }
      }
    }
  }

  private void runCommand(Command command, String message)
  {
    log(StringUtils.capitalize(message) + "...");
    try{
      command.start();
      command.join();
      if(command.getReturnCode() != 0){
        logger.warn(
            "error: " + command.getErrorMessage() +
            " out: " + command.getResult());
        if (failonerror){
          throw new BuildException(
              "error: " + command.getErrorMessage() +
              " out: " + command.getResult());
        }
      }
    }catch(Exception e){
      if (failonerror){
        throw new BuildException(e);
      }else{
        logger.error("Error " + message, e);
        return;
      }
    }finally{
      if (command != null){
        command.destroy();
      }
    }
  }

  public void process(String line)
  {
    logger.info(line);
  }

  public void setRepository(String repository)
  {
    this.repository = repository;
  }

  public void setIU(String iu)
  {
    this.iu = iu;
  }

  public void setFailonerror(boolean failonerror)
  {
    this.failonerror = failonerror;
  }
}
TOP

Related Classes of org.eclim.installer.ant.UninstallIUTask

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.