package jp.co.worksap.workspace.packagemanagement;
import java.io.IOException;
import jp.co.worksap.workspace.packagemanagement.chocolatey.Chocolatey;
import lombok.extern.slf4j.Slf4j;
/**
* <p>Facade to choose Package Management tools</p>
* @author Kengo TODA (toda_k@worksap.co.jp)
*/
@Slf4j public class PackageManagementFacade {
public void install(Iterable<Package> targetPackages) {
PackageManager manager;
try {
manager = createPackageManagerChain();
log.trace("start installing packages");
for (Package targetPackage : targetPackages) {
log.trace("installing {}...", targetPackage);
manager.install(targetPackage);
log.trace("installed {}", targetPackage);
}
log.trace("finish installing packages");
} catch (IOException e) {
throw new IllegalStateException("fail to install package", e);
}
}
private PackageManager createPackageManagerChain() throws IOException {
PackageManager manager = new AlertingPackageManager();
if (isOnWindows()) {
manager = new Chocolatey(manager);
} else {
throw new UnsupportedOperationException("Only Windows is supported");
}
return manager;
}
private boolean isOnWindows() {
String operatingSystem = System.getProperty("os.name");
return operatingSystem.startsWith("Windows");
}
}