| /* 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 |
| // ---------------------------------------------------------------------------- |