Package br.com.objectos.rio.core

Source Code of br.com.objectos.rio.core.Install

/*
* 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();
  }

}
TOP

Related Classes of br.com.objectos.rio.core.Install

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.