package org.jboss.resteasy.test.spring.deployment.resource;


import org.jboss.logging.Logger;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.web.context.ConfigurableWebApplicationContext;

public class ContextRefreshTrigger implements ApplicationContextAware, InitializingBean {

    private static Logger logger = Logger.getLogger(ContextRefreshTrigger.class);
    private static ConfigurableWebApplicationContext context;
    private static int counter;
    private static boolean ok = true;

    public ContextRefreshTrigger() {
        logger.info(this);
    }

    @Override
    public void setApplicationContext(final ApplicationContext applicationContext) throws BeansException {
        context = (ConfigurableWebApplicationContext) applicationContext;
        logger.info(this + ".setApplicationContext(): " + context);
    }

    @Override
    public void afterPropertiesSet() throws BeansException {
        if (counter++ > 0) {
            return;
        }
        logger.info(this + ".afterPropertiesSet()");
        try {
            context.refresh();
        } catch (Exception e) {
            // Actually, the exception (before the fix) didn't make it to here.  It was
            // stored in the servlet context.
            ok = false;
            logger.info("Caught exception: " + e.getMessage());
        }
    }

    public static ConfigurableWebApplicationContext getApplicationContext() {
        return context;
    }

    public static boolean isOK() {
        return ok;
    }
}
