/** * Copyright (C) 2012 - 2014 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.util.HashMap; import java.util.ResourceBundle; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.MagicNames; import org.apache.tools.ant.Task; import org.eclim.installer.step.EclipseInfo; import org.eclim.installer.step.FeatureProvider; import org.formic.Installer; import org.formic.wizard.step.shared.Feature; /** * Task to handle unattended installs. * * Gathers info otherwise obtained from the gui installer. * * @author Eric Van Dewoestine */ public class UnattendedInstallTask extends Task { public void execute() throws BuildException { boolean uninstall = false; if (Installer.getProject() == null){ Installer.setProject(getProject()); // hack to deal w/ unattended install bypassing the formic installer task if (Installer.getResourceBundle() == null){ Installer.setResourceBundle(ResourceBundle.getBundle("resources.install")); } String targets = getProject().getProperty(MagicNames.PROJECT_INVOKED_TARGETS); uninstall = "uninstall".equals(targets); }else{ uninstall = Installer.isUninstall(); } EclipseInfo info = (EclipseInfo) Installer.getContext().getValue("eclipse.info"); if (info == null){ try{ log("Installing eclim installer feature (may take a few moments)."); if (EclipseInfo.installInstallerPlugin()){ log("Analyzing installed features..."); info = EclipseInfo.gatherEclipseInfo(); log("Finished analyzing your eclipse installation."); Installer.getContext().setValue("eclipse.info", info); } }catch(Exception e){ throw new BuildException(e); } if (!uninstall){ // determine features to enable FeatureProvider provider = new FeatureProvider(); Feature[] features = provider.getFeatures(); HashMap<String,Feature> featureMap = new HashMap<String,Feature>(); for(Feature feature : features){ featureMap.put(feature.getKey(), feature); } log("Eclim features to be installed:"); for(Feature feature : features){ boolean enabled = feature.isEnabled(); if (enabled){ enabled = dependenciesEnabled(feature, featureMap); } Installer.getContext().setValue("featureList." + feature.getKey(), enabled); if (enabled){ log(" " + feature.getKey()); } } } } } private boolean dependenciesEnabled( Feature feature, HashMap<String,Feature> featureMap) { boolean enabled = true; String[] dependencies = feature.getDependencies(); if (dependencies != null){ for(String dep : dependencies){ Feature dependency = featureMap.get(dep); if(!dependency.isEnabled() || !dependenciesEnabled(dependency, featureMap)){ enabled = false; break; } } } return enabled; } }