/* * (c) Rob Gordon 2005 */ package org.oddjob.monitor.model; import java.util.ArrayList; import java.util.List; import org.oddjob.OJConstants; import org.oddjob.Oddjob; import org.oddjob.arooa.ArooaSession; import org.oddjob.logging.ConsoleArchiver; import org.oddjob.logging.LogArchiver; import org.oddjob.logging.cache.LocalConsoleArchiver; import org.oddjob.logging.log4j.Log4jArchiver; import org.oddjob.monitor.actions.ExplorerAction; import org.oddjob.monitor.actions.ResourceActionProvider; import org.oddjob.monitor.context.ContextInitialiser; import org.oddjob.monitor.context.ExplorerContext; import org.oddjob.util.ThreadManager; /** * Data model for an explorer session. * * @author Rob Gordon */ public class ExplorerModelImpl implements ExplorerModel { // private static final Logger logger = Logger.getLogger(ExplorerModel.class); /** The root node of the model. */ private Oddjob oddjob; /** Log Format */ private String logFormat; /** Thread manager actions should use. */ private ThreadManager threadManager; /** The logArchiver */ private Log4jArchiver logArchiver; /** The console archiver. */ private LocalConsoleArchiver consoleArchiver; private final ContextInitialiser[] contextInitialisers; private final ExplorerAction[] explorerActions; /** * Constructor. * * @param session The session used to load the actions. */ public ExplorerModelImpl(ArooaSession session) { explorerActions = new ResourceActionProvider(session ).getExplorerActions(); List<ContextInitialiser> initialisers = new ArrayList<ContextInitialiser>(); initialisers.add(new LogContextInialiser(this)); initialisers.add(new ConfigContextInialiser(this)); for (ExplorerAction action: explorerActions) { if (action instanceof ContextInitialiser) { initialisers.add((ContextInitialiser) action); } } contextInitialisers = initialisers.toArray( new ContextInitialiser[initialisers.size()]); } /** * Set the model root node. This must be done before the model * is used. * * @param rootNode The root node. */ public void setOddjob(Oddjob rootNode) { this.oddjob = rootNode; logArchiver = new Log4jArchiver(rootNode, logFormat == null ? OJConstants.DEFAULT_LOG_FORMAT : logFormat); consoleArchiver = new LocalConsoleArchiver(); } /** * Get the root node for this model. * * @return The root node. */ public Oddjob getOddjob() { return oddjob; } /** * Set the ThreadManager child actions should use. * * @param threadManager The ThreadManager. */ public void setThreadManager(ThreadManager threadManager) { this.threadManager = threadManager; } /** * Get an available ThreadManager. * * @return A ThreadManager. */ public ThreadManager getThreadManager() { return threadManager; } /** * Destroy this model. * */ public void destroy() { logArchiver.onDestroy(); consoleArchiver.onDestroy(); } /** * Getter for log format. * * @return The log format. */ public String getLogFormat() { return logFormat; } /** * The log format. * * @param logFormat The log format. */ public void setLogFormat(String logFormat) { this.logFormat = logFormat; } /** * Get the log archiver. This archiver is the top level archiver * created for the root node. * <p> * For the archiver for a particular node use the {@link ExplorerContext} * archiver. * * @return A LogArchiver. */ public LogArchiver getLogArchiver() { return logArchiver; } /** * Get the console archiver. This archiver is the top level archiver * created for the root node. * <p> * For the archiver for a particular node use the {@link ExplorerContext} * archiver. * * @return A ConsoelArchiver. */ public ConsoleArchiver getConsoleArchiver() { return consoleArchiver; } public ContextInitialiser[] getContextInitialisers() { return contextInitialisers; } public ExplorerAction[] getExplorerActions() { return explorerActions; } }