1f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project/* Copyright (C) 2004 Vladimir Roubtsov. All rights reserved.
2f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project *
3f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * This program and the accompanying materials are made available under
4f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * the terms of the Common Public License v1.0 which accompanies this distribution,
5f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * and is available at http://www.eclipse.org/legal/cpl-v10.html
6f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project *
7f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * $Id: Processor.java,v 1.1.2.1 2004/07/16 23:32:03 vlad_r Exp $
8f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project */
9f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectpackage com.vladium.emma;
10f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
11f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectimport java.util.Properties;
12f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
13f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectimport com.vladium.logging.Logger;
14f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectimport com.vladium.util.IProperties;
15f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectimport com.vladium.util.asserts.$assert;
16f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
17f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project// ----------------------------------------------------------------------------
18f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project/**
19f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * @author Vlad Roubtsov, (C) 2004
20f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project */
21f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectpublic
22f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectabstract class Processor
23f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project{
24f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    // public: ................................................................
25f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
26f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
27f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    public synchronized void run ()
28f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    {
29f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        validateState ();
30f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
31f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        // load tool properties:
32f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        final IProperties toolProperties;
33f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        {
34f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            final IProperties appProperties = EMMAProperties.getAppProperties ();
35f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
36f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            toolProperties = IProperties.Factory.combine (m_propertyOverrides, appProperties);
37f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        }
38f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        if ($assert.ENABLED) $assert.ASSERT (toolProperties != null, "toolProperties is null"); // can be empty, though
39f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
40f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        final Logger current = Logger.getLogger ();
41f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        final Logger log = AppLoggers.create (m_appName, toolProperties, current);
42f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
43f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        if (log.atTRACE1 ())
44f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        {
45f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            log.trace1 ("run", "complete tool properties:");
46f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            toolProperties.list (log.getWriter ());
47f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        }
48f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
49f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        try
50f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        {
51f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            Logger.push (log);
52f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            m_log = log;
53f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
54f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            _run (toolProperties);
55f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        }
56f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        finally
57f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        {
58f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            if (m_log != null)
59f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            {
60f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                Logger.pop (m_log);
61f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                m_log = null;
62f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            }
63f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        }
64f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    }
65f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
66f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
67f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    public synchronized final void setAppName (final String appName)
68f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    {
69f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        m_appName = appName;
70f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    }
71f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
72f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    /**
73f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project     *
74f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project     * @param overrides [may be null (unsets the previous overrides)]
75f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project     */
76f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    public synchronized final void setPropertyOverrides (final Properties overrides)
77f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    {
78f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        m_propertyOverrides = EMMAProperties.wrap (overrides);
79f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    }
80f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
81f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    /**
82f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project     *
83f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project     * @param overrides [may be null (unsets the previous overrides)]
84f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project     */
85f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    public synchronized final void setPropertyOverrides (final IProperties overrides)
86f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    {
87f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        m_propertyOverrides = overrides;
88f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    }
89f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
90f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    // protected: .............................................................
91f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
92f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
93f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    protected Processor ()
94f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    {
95f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        // not publicly instantiable
96f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    }
97f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
98f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    protected abstract void _run (IProperties toolProperties);
99f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
100f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
101f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    protected void validateState ()
102f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    {
103f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        // no Processor state needs validation
104f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
105f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        // [m_appName allowed to be null]
106f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        // [m_propertyOverrides allowed to be null]
107f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    }
108f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
109f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
110f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    protected String m_appName; // used as logging prefix, can be null
111f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    protected IProperties m_propertyOverrides; // user override; can be null/empty for run()
112f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    protected Logger m_log; // not null only within run()
113f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
114f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    // package: ...............................................................
115f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
116f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    // private: ...............................................................
117f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
118f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project} // end of class
119f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project// ----------------------------------------------------------------------------