/* Copyright (C) 2004 Vladimir Roubtsov. All rights reserved. * * This program and the accompanying materials are made available under * the terms of the Common Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/cpl-v10.html * * $Id: Processor.java,v 1.1.2.1 2004/07/16 23:32:03 vlad_r Exp $ */ package com.vladium.emma; import java.util.Properties; import com.vladium.logging.Logger; import com.vladium.util.IProperties; import com.vladium.util.asserts.$assert; // ---------------------------------------------------------------------------- /** * @author Vlad Roubtsov, (C) 2004 */ public abstract class Processor { // public: ................................................................ public synchronized void run () { validateState (); // load tool properties: final IProperties toolProperties; { final IProperties appProperties = EMMAProperties.getAppProperties (); toolProperties = IProperties.Factory.combine (m_propertyOverrides, appProperties); } if ($assert.ENABLED) $assert.ASSERT (toolProperties != null, "toolProperties is null"); // can be empty, though final Logger current = Logger.getLogger (); final Logger log = AppLoggers.create (m_appName, toolProperties, current); if (log.atTRACE1 ()) { log.trace1 ("run", "complete tool properties:"); toolProperties.list (log.getWriter ()); } try { Logger.push (log); m_log = log; _run (toolProperties); } finally { if (m_log != null) { Logger.pop (m_log); m_log = null; } } } public synchronized final void setAppName (final String appName) { m_appName = appName; } /** * * @param overrides [may be null (unsets the previous overrides)] */ public synchronized final void setPropertyOverrides (final Properties overrides) { m_propertyOverrides = EMMAProperties.wrap (overrides); } /** * * @param overrides [may be null (unsets the previous overrides)] */ public synchronized final void setPropertyOverrides (final IProperties overrides) { m_propertyOverrides = overrides; } // protected: ............................................................. protected Processor () { // not publicly instantiable } protected abstract void _run (IProperties toolProperties); protected void validateState () { // no Processor state needs validation // [m_appName allowed to be null] // [m_propertyOverrides allowed to be null] } protected String m_appName; // used as logging prefix, can be null protected IProperties m_propertyOverrides; // user override; can be null/empty for run() protected Logger m_log; // not null only within run() // package: ............................................................... // private: ............................................................... } // end of class // ----------------------------------------------------------------------------