Main.java

package org.ferris.riviera.console.main;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import javax.enterprise.event.Event;
import javax.enterprise.inject.se.SeContainer;
import javax.enterprise.inject.se.SeContainerInitializer;
import javax.inject.Inject;
import org.apache.log4j.Logger;
import org.ferris.riviera.console.connection.ConnectionValidationEvent;
import org.ferris.riviera.console.execute.ExecuteEvent;
import org.ferris.riviera.console.exit.ExitEvent;
import org.ferris.riviera.console.exit.qualifier.Normal;
import org.ferris.riviera.console.history.HistoryFinderEvent;
import org.ferris.riviera.console.jar.JarEntryFinderEvent;
import org.ferris.riviera.console.jar.JarEntryValidationEvent;
import org.ferris.riviera.console.jar.JarFinderEvent;
import org.ferris.riviera.console.table.TableFinderEvent;
import org.ferris.riviera.console.welcome.WelcomeEvent;

/**
 * Entry point for the application...this is where it all starts.
 *
 * @author Michael Remijan mjremijan@yahoo.com @mjremijan
 */
public class Main {

    public static void main(String[] args) {
//        CDI<Object> cdi = CDI.getCDIProvider().initialize();
//        Main main
//                = cdi.select(Main.class).get();
//        main.main(Arrays.asList(args));
        SeContainer container
            = SeContainerInitializer.newInstance().initialize();
        Main main
            = container.select(Main.class).get();
        main.main(Arrays.asList(args));
    }

    @Inject
    protected Logger log;

    @Inject
    protected Event<MainEvent> mainEvent;

    @Inject
    protected Event<WelcomeEvent> welcomeEvent;

    @Inject
    protected Event<ConnectionValidationEvent> connectionValidationEvent;

    @Inject
    protected Event<TableFinderEvent> tableFinderEvent;

    @Inject
    protected Event<HistoryFinderEvent> historyFinderEvent;

    @Inject
    protected Event<JarFinderEvent> jarFinderEvent;

    @Inject
    protected Event<JarEntryFinderEvent> jarEntryFinderEvent;

    @Inject
    protected Event<JarEntryValidationEvent> jarEntryValidationEvent;

    @Inject
    protected Event<ExecuteEvent> executeEvent;

    @Inject
    @Normal
    protected Event<ExitEvent> exitEvent;

    protected void main(List<String> args) {
        log.info("Riviera application has started");

        log.info("Firing MainEvent");
        mainEvent.fire(new MainEvent());

        log.info("Firing WelcomeEvent");
        welcomeEvent.fire(new WelcomeEvent());

        log.info("Firing ConnectionValidationEvent");
        connectionValidationEvent.fire(new ConnectionValidationEvent());

        log.info("Firing TableFinderEvent");
        tableFinderEvent.fire(new TableFinderEvent());

        log.info("Firing HistoryFinderEvent");
        HistoryFinderEvent hfe = new HistoryFinderEvent();
        historyFinderEvent.fire(hfe);

        log.info("Firing JarFinderEvent");
        JarFinderEvent jfe = new JarFinderEvent();
        jarFinderEvent.fire(jfe);

        log.info("Firing JarEntryFinderEvent");
        JarEntryFinderEvent jefe = new JarEntryFinderEvent(
              jfe.getJarFile()
            , hfe.getHistory().stream().map(h -> h.toVersionString()).collect(Collectors.toList())
        );
        jarEntryFinderEvent.fire(jefe);

        log.info("Firing JarEntryValidationEvent");
        JarEntryValidationEvent jeve = new JarEntryValidationEvent(
            jefe.getJarEntries()
        );
        jarEntryValidationEvent.fire(jeve);

        log.info("Firing ExecuteEvent");
        ExecuteEvent ee = new ExecuteEvent(jfe.getJarFile(), jefe.getJarEntries());
        executeEvent.fire(ee);

        log.info("Firing normal ExitEvent");
        exitEvent.fire(new ExitEvent());
    }
}