⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tracerfactory.java

📁 JavaPOS的最新版本!这是源代码!零售业的请看!
💻 JAVA
字号:
package jpos.util.tracing;

///////////////////////////////////////////////////////////////////////////////
//
// This software is provided "AS IS".  The JavaPOS working group (including
// each of the Corporate members, contributors and individuals)  MAKES NO
// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
// any damages suffered as a result of using, modifying or distributing this
// software or its derivatives. Permission to use, copy, modify, and distribute
// the software and its documentation for any purpose is hereby granted. 
//
// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
// is an OSS Apache-like license.  The complete license is located at:
//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
//
///////////////////////////////////////////////////////////////////////////////

import java.io.File;
import java.io.IOException;
import java.io.PrintStream;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;

import jpos.util.*;

/**
 * This is a singleton factory used to create Tracer objects and access the
 * global tracer.  This implementation has the following semantics:
 * <ol>
 * <li>Its a Singleton class but can be subclassed if necessary</li>
 * <li>It caches the default no-named Tracer.  This is the global Tracer</li>
 * <li>
 * It caches the Tracer objects according to name and any access for the 
 * same named Tracer will return the same Tracer object
 * </li>
 * </ol>
 * @see com.ibm.jutil.tracing.Tracer#getInstance
 * @author E. Michael Maximilien
 * @since 2.1.0
 */
public class TracerFactory extends Object
{
    //-------------------------------------------------------------------------
    // Ctor
    //

    /** Make ctor protected to avoid construction (this is a Singleton class) */
    protected TracerFactory() {}

    //-------------------------------------------------------------------------
    // Public class methods
    //

    /** @return the sole instance of this class (creating it if necessary) */
    public static TracerFactory getInstance()
    {
        if( instance == null )
        {
            instance = new TracerFactory();
            instance.init();
        }

        return instance;
    }
    
    //-------------------------------------------------------------------------
    // Public methods
    //
    
    /** 
     * Sets the File that all subsequently created Tracer objects will print to
     * if these Tracer objects are turned on.  Successfully calling this method
     * overrides the current setting for TracerOutput to files
     * @throws java.io.IOException if a PrintStream could not be created from File
     */
    public void setOutputFile( File file ) throws IOException
    {
    	//<todo/>
    }
    
    /** 
     * @return the global no named Tracer object -- creates it if necessary
     * Its state is determined by the jutil.properties value
     */
    public Tracer createGlobalTracer() { return globalTracer; }

    /** 
     * @return the global no named Tracer object -- creates it if necessary
     * Its state is determined by the jutil.properties value
     * @param b the boolean parameter for the initial state of the tracer
     */
    public Tracer createGlobalTracer( boolean b ) 
    { 
    	globalTracer.setOn( b );
    	return globalTracer;
    }

    /** 
     * @return creates (if necessary) and return the Tracer with named specified
     * Its state is determined by the jutil.properties value
     * @param name the Tracer name
     */
    public Tracer createTracer( String name ) 
    { 
    	if( tracerMap.containsKey( name ) )
    		return (Tracer)tracerMap.get( name );
    		
    	Tracer tracer = new Tracer( name );
    	
    	if( namedTracerState.containsKey( name ) )
    		tracer.setOn( ( (Boolean)namedTracerState.get( name ) ).booleanValue() );
    	else
    		tracer.setOn( false );
    		
		if( turnOnAllNamedTracers ) tracer.setOn( true );
    	
    	tracerMap.put( name, tracer );
    	
    	return tracer;
    }

    /** 
     * @return creates (if necessary) and return the Tracer with named specified
     * Its state is determined by the jutil.properties value
     * @param name the Tracer name
     * @param b the boolean parameter for the initial state of the tracer
     */
    public Tracer createTracer( String name, boolean b ) 
    { 
    	Tracer tracer = createTracer( name );
    	tracer.setOn( b );
    	
    	return tracer;
    }

    //-------------------------------------------------------------------------
    // Protected methods
    //
    
    /** 
     * Finalizes this Tracer by closing the TracerOutput.  This is useful
     * if the TracerOutput is printing to a file.  This method would then
     * close that file
     * @throws java.lang.Thowable any exception occuring while finalizing
     */
    protected void finalize()
    {
    	if( printStream != null ) printStream.close();
    }
     
    //-------------------------------------------------------------------------
    // Private methods
    //
    
    /**
     * @return true if the propertyValue passed is valid and is equals (ignoring
     * case) to TRUE or YES
     * @param propValue the property value to check
     */
    private boolean isPropertyTrue( String propValue )
    {
    	if( propValue == null ) return false;
    	
        if( propValue.
            equalsIgnoreCase( JposProperties.TRACING_ON_PROP_VALUE ) ||
            propValue.
            equalsIgnoreCase( JposProperties.TRACING_TRUE_PROP_VALUE ) )
			return true;
			
		return false;
    }

    /** Intialize the current instance using the DefaultProperties class */
    private void init()
    {
        JposProperties props = new DefaultProperties();
        props.loadJposProperties();
        
		initGlobalTracer( props );
		initTurnedOnTracers( props );
		initNamedTracers( props );
		initTracerOutput();
    }

	/**
	 * Initializes the state of the globalTracer -not named
	 * @param props the JposProperties instance
	 */
	private void initGlobalTracer( JposProperties props )
	{
        if( !props.isPropertyDefined( TRACING_PROP_NAME ) )
            globalTracer.setOn( false );
        else
        {
            String tracingPropValue = 
                   props.getPropertyString( TRACING_PROP_NAME );

            if( isPropertyTrue( tracingPropValue ) )
                globalTracer.setOn( true );
        }
	}

	/**
	 * Sets to on all named tracers listed in the value of the... 
	 * TurnOnNamedTracers property
	 * @param props the JposProperties instance
	 */
	private void initTurnedOnTracers( JposProperties props )
	{
		if( props.isPropertyDefined( TURN_ON_ALL_NAMED_TRACERS_PROP_NAME ) )
		{
			String turnOnAllNamedTracersValue = props.
			getPropertyString( TURN_ON_ALL_NAMED_TRACERS_PROP_NAME );
			
			if( isPropertyTrue( turnOnAllNamedTracersValue ) )
				turnOnAllNamedTracers = true;
			else
				turnOnAllNamedTracers = false;
		}
		else		
		if( props.isPropertyDefined( TURN_ON_NAMED_TRACERS_PROP_NAME ) )
		{			
			List turnOnNamedTracersList = 
			     props.getStringListProperty( TURN_ON_NAMED_TRACERS_PROP_NAME );
			
			for( int i = 0; i < turnOnNamedTracersList.size(); ++i )
			{
				String tracerName = turnOnNamedTracersList.get( i ).toString();
                namedTracerState.put( tracerName, Boolean.TRUE );
			}			
		}
	}

	/**
	 * Initializes the state of all named Tracer objects
	 * @param props the JposProperties instance
	 */
	private void initNamedTracers( JposProperties props )
	{
		Enumeration propNames = props.getPropertyNames();
		
		while( propNames.hasMoreElements() )
		{
			String propName = (String)propNames.nextElement();
						
			if( propName.startsWith( TRACER_PROP_NAME ) )
			{
				String name = propName.
				              substring( ( TRACER_PROP_NAME + "." ).length(),
				                         propName.length() );
				
				if( props.isPropertyDefined( propName ) )
				{
					String propValue = (String)props.
					                   getPropertyString( propName );
					
		            if( propValue.equalsIgnoreCase( JposProperties.
		                                            TRACING_ON_PROP_VALUE ) ||
                		propValue.equalsIgnoreCase( JposProperties.
                		                            TRACING_TRUE_PROP_VALUE ) )
		                namedTracerState.put( name, Boolean.TRUE );
		            else
		            	namedTracerState.put( name, Boolean.FALSE );
				}
			}
		}
	}

	/**
	 * Initializes whether TracerOutput will be to a file or System.err and
	 * if to a file its location and name.  By default TracerOutput is to
	 * System.err for all tracers that are turned on
	 */
	private void initTracerOutput()
	{
		//<todo/>
	}
    
    //-------------------------------------------------------------------------
    // Private instance variables
    //
    
    private HashMap tracerMap = new HashMap();
    private HashMap namedTracerState = new HashMap();

	private Tracer globalTracer = Tracer.getInstance();

	private PrintStream printStream = null;
	
	private boolean turnOnAllNamedTracers = false;

    //-------------------------------------------------------------------------
    // Private class variables
    //

    private static TracerFactory instance = null;

    //-------------------------------------------------------------------------
    // Class constants
    //
    
    public static final String TRACING_PROP_NAME = "jpos.tracing";
    
    public static final String TRACER_PROP_NAME = 
                                 "jpos.util.tracing.Tracer";
                               
    public static final String TURN_ON_NAMED_TRACERS_PROP_NAME = 
                                 "jpos.util.tracing.TurnOnNamedTracers";

    public static final String TURN_ON_ALL_NAMED_TRACERS_PROP_NAME = 
                                 "jpos.util.tracing.TurnOnAllNamedTracers";
                               
    public static final String TRACER_OUTPUT_TO_FILE_PROP_NAME =
    						     "jpos.util.tracing.TracerOutputToFile";

	public static final String TRACER_OUTPUT_FILE_NAME_PROP_NAME =
							     "jpos.util.tracing.TracerOutputFileName";
	
	public static final String TRACER_OUTPUT_FILE_LOCATION =
							     "jpos.util.tracing.TracerOutputFileLocation";
							   
	public static final String USER_HOME_LOCATION_VALUE = "<user.home>";					
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -