SplashScreenPage.java

package org.ferris.tweial.console.splash;

import java.util.Enumeration;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.log4j.Logger;
import org.ferris.tweial.console.application.ApplicationDirectory;
import org.ferris.tweial.console.io.Console;
import org.ferris.tweial.console.text.i18n.LocalizedString;
import org.ferris.tweial.console.text.i18n.LocalizedStringBuilder;
import org.ferris.tweial.console.text.i18n.LocalizedStringKey;
import org.ferris.tweial.console.text.i18n.LocalizedStringList;
import org.ferris.tweial.console.text.i18n.qualifier.Welcome;
import org.ferris.tweial.console.util.version.Version;
import org.ferris.tweial.console.view.page.AbstractPage;

public class SplashScreenPage extends AbstractPage {

    @Inject
    protected Logger log;

    @Inject
    protected Console console;

    @Inject
    protected ApplicationDirectory applicationDirectory;

    @Inject
    protected Version version;

    @Inject
    @LocalizedStringKey("SplashScreenPage.Properties")
    protected LocalizedStringList applicationProperties;

    @Inject
    @Welcome
    @LocalizedStringBuilder({
        @LocalizedStringKey(buildId = "message", value = "SplashScreenPage.Message"),
        @LocalizedStringKey(buildId = "width", value = "SplashScreenPage.Width"),
        @LocalizedStringKey(buildId = "bullet", value = "SplashScreenPage.Bullet")
    })
    protected LocalizedString welcome;

    @PostConstruct
    protected void postConstruct() {
        replaceUser(applicationProperties);
        replaceJava(applicationProperties);
        replaceLoggers(applicationProperties);
        replaceTweial(applicationProperties);
    }

    protected void replaceUser(LocalizedStringList properties) {
        properties.replace("t{user.name}", System.getProperty("user.name"));
        properties.replace("t{user.home}", System.getProperty("user.home"));
        properties.replace("t{user.directory}", System.getProperty("user.dir"));
    }

    protected void replaceJava(LocalizedStringList properties) {
        properties.replace("t{java.home}", System.getProperty("java.home"));
        properties.replace("t{java.vendor}", System.getProperty("java.vendor"));
        properties.replace("t{java.version}", System.getProperty("java.version"));
    }

    protected void replaceLoggers(LocalizedStringList properties) {
        StringBuilder sp = new StringBuilder();

        @SuppressWarnings("rawtypes")
        Enumeration appenders
                = Logger.getRootLogger().getAllAppenders();

        for (int i = 1; appenders.hasMoreElements(); i++) {
            Object o = appenders.nextElement();
            if (i > 1) {
                sp.append("\n");
            }
            sp.append(String.format("#%d\n%s", i, ToStringBuilder.reflectionToString(o)));
        }

        properties.replace("t{logger.appenders}", sp.toString());
    }

    protected void replaceTweial(LocalizedStringList properties) {
        {
            properties.replace("t{tweial.title}", version.getImplementationTitle());
            properties.replace("t{tweial.vender}", version.getImplementationVendor());
            properties.replace("t{tweial.version}", version.getImplementationVersion());
            properties.replace("t{tweial.directory}", applicationDirectory.getAbsolutePath());
        }
    }

    public void view() {
        log.info("view()");
        log.info(applicationProperties.toString());
        console.p(applicationProperties);
        console.p(welcome);
    }
}