/*
* RioInstall.java criado em 05/01/2014
*
* Propriedade de Objectos Fábrica de Software LTDA.
* Reprodução parcial ou total proibida.
*/
package br.com.objectos.rio.core;
import br.com.objectos.rio.AbstractRioCommand;
import br.com.objectos.rio.HttpServer;
import br.com.objectos.rio.RioDirs;
import br.com.objectos.way.base.io.Directory;
import br.com.objectos.way.etc.Etcs;
import com.google.inject.Inject;
/**
* @author marcio.endo@objectos.com.br (Marcio Endo)
*/
class Install extends AbstractRioCommand<InstallOptions> implements InstallCommand {
private final RioDirs dirs;
private final Etcs etcs;
@Inject
public Install(RioDirs dirs, Etcs etcs) {
this.dirs = dirs;
this.etcs = etcs;
}
@Override
protected String getCommandName() {
return "install";
}
@Override
protected InstallOptions newOptions() {
return new InstallOptions();
}
@Override
public void toDir(Directory dir) {
initMessages();
InstallOptions options = newOptions();
options.local = true;
options.target = dir.getAbsolutePath();
executeCommand(options);
}
@Override
protected void executeCommand(InstallOptions options) {
Directory userVar = dirs.userVar();
Directory rioVar = userVar.dirAt("rio");
Directory targetDir = options.targetDir();
if (options.prepare) {
prepare(options);
}
if (options.local) {
prepare(options);
local(rioVar, targetDir);
}
if (options.workstations) {
workstations(rioVar, targetDir);
}
if (options.cleanup) {
cleanUp(rioVar);
}
}
private void prepare(InstallOptions options) {
HttpServer fileServer = options.fileServer();
infoAction("dirs");
info("Preparing directories.");
Directory userVar = dirs.userVar();
Directory rioVar = userVar.dirAt("rio");
rioVar.deleteContents();
rioVar.dirAt("usr/bin");
rioVar.dirAt("usr/lib64/rio");
infoAction("download");
info("Downloading and staging required files.");
download(fileServer).to(rioVar)
.map("rio/rio", "usr/bin/rio")
.map("rio/rio.jar", "usr/lib64/rio/rio.jar")
.exec();
infoAction("chown");
info("Changing ownerships.");
chown(rioVar)
.file("usr").to("root.root").recursively()
.exec();
infoAction("chmod");
info("Changing modes.");
chmod(rioVar)
.file("usr/bin/rio").to(755)
.exec();
}
private void local(Directory rioVar, Directory targetDir) {
infoAction("local");
info("Moving to final location.");
install(rioVar).to(targetDir);
}
private void workstations(Directory rioVar, Directory targetDir) {
infoAction("workstations");
info("Installing at workstations.");
Workstations workstations = etcs.read(Workstations.class);
workstations.remoteInstall(rioVar).to(targetDir);
}
private void cleanUp(Directory rioVar) {
infoAction("clean");
info("Cleaning up.");
rioVar.deleteContents();
}
}