package org.ovirt.engine.core.bll.hostdeploy; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.List; import java.util.concurrent.Callable; import org.apache.commons.lang.StringUtils; import org.ovirt.otopi.dialog.Event; import org.ovirt.ovirt_host_mgmt.constants.Const; import org.ovirt.ovirt_host_mgmt.constants.PackagesEnv; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class VdsDeployPackagesUnit implements VdsDeployUnit { private static final Logger log = LoggerFactory.getLogger(VdsDeployPackagesUnit.class); private final List<Callable<Boolean>> CUSTOMIZATION_DIALOG = Arrays.asList( new Callable<Boolean>() { public Boolean call() throws Exception { _deploy.getParser().cliEnvironmentSet( PackagesEnv.UPDATE_MODE, _checkOnly ? Const.PACKAGES_UPDATE_MODE_CHECK_UPDATE : Const.PACKAGES_UPDATE_MODE_UPDATE ); return true; }}, new Callable<Boolean>() { public Boolean call() throws Exception { _deploy.getParser().cliEnvironmentSet( PackagesEnv.PACKAGES, _packages ); return true; }} ); // BUG: Arrays.asList() cannot handle single element correctly private final List<Callable<Boolean>> TERMINATION_DIALOG = new ArrayList<Callable<Boolean>>() {{ add( new Callable<Boolean>() { public Boolean call() throws Exception { _packagesInfo = (String[])_deploy.getParser().cliEnvironmentGet( PackagesEnv.PACKAGES_INFO ); if (_packagesInfo.length > 0) { log.info( String.format("Available packages for update: %s", StringUtils.join(_packagesInfo, ",")) ); } return true; }} );}}; private VdsDeployBase _deploy; private boolean _checkOnly; private String[] _packages; private String[] _packagesInfo; public VdsDeployPackagesUnit(Collection<String> packages, boolean checkOnly) { _packages = packages.toArray(new String[0]); _checkOnly = checkOnly; } public Collection<String> getUpdates() { return Arrays.asList(_packagesInfo); } // VdsDeployUnit interface @Override public void setVdsDeploy(VdsDeployBase deploy) { _deploy = deploy; } @Override public void init() { _deploy.addCustomizationDialog(CUSTOMIZATION_DIALOG); _deploy.addTerminationDialog(TERMINATION_DIALOG); } @Override public boolean processEvent(Event.Base bevent) throws IOException { return true; } }