donaldp     2002/07/13 19:27:16

  Modified:    src/java/org/apache/avalon/phoenix/components/application
                        BlockResourceProvider.java DefaultBlockContext.java
                        ListenerResourceProvider.java
               src/java/org/apache/avalon/phoenix/components/deployer
                        DefaultDeployer.java
               src/java/org/apache/avalon/phoenix/components/kernel
                        DefaultApplicationContext.java DefaultKernel.java
                        SarEntry.java
               src/java/org/apache/avalon/phoenix/components/logger
                        DefaultLogManager.java SimpleLogKitManager.java
               src/java/org/apache/avalon/phoenix/components/manager
                        NoopSystemManager.java
               src/java/org/apache/avalon/phoenix/interfaces
                        ApplicationContext.java Kernel.java LogManager.java
  Log:
  Made LogManager independent of LogKit, Updated SimpleLogkitManager to reflect this.
  
  Could someone update 1.1 version of logging?
  
  Revision  Changes    Path
  1.2       +2 -3      
jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/components/application/BlockResourceProvider.java
  
  Index: BlockResourceProvider.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/components/application/BlockResourceProvider.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- BlockResourceProvider.java        18 Jun 2002 03:51:44 -0000      1.1
  +++ BlockResourceProvider.java        14 Jul 2002 02:27:16 -0000      1.2
  @@ -16,7 +16,6 @@
   import org.apache.avalon.framework.configuration.ConfigurationException;
   import org.apache.avalon.framework.context.Context;
   import org.apache.avalon.framework.logger.AbstractLogEnabled;
  -import org.apache.avalon.framework.logger.LogKitLogger;
   import org.apache.avalon.framework.logger.Logger;
   import org.apache.avalon.framework.parameters.Parameters;
   import org.apache.avalon.framework.service.DefaultServiceManager;
  @@ -98,7 +97,7 @@
       {
           final BlockMetaData metaData = getMetaDataFor( entry );
           final String name = metaData.getName();
  -        return new LogKitLogger( m_context.getLogger( name ) );
  +        return m_context.getLogger( name );
       }
   
       /**
  
  
  
  1.15      +5 -6      
jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/components/application/DefaultBlockContext.java
  
  Index: DefaultBlockContext.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/components/application/DefaultBlockContext.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- DefaultBlockContext.java  15 May 2002 12:05:30 -0000      1.14
  +++ DefaultBlockContext.java  14 Jul 2002 02:27:16 -0000      1.15
  @@ -9,7 +9,6 @@
   
   import java.io.File;
   import org.apache.avalon.framework.context.ContextException;
  -import org.apache.avalon.framework.logger.LogKitLogger;
   import org.apache.avalon.framework.logger.Logger;
   import org.apache.avalon.phoenix.BlockContext;
   import org.apache.avalon.phoenix.interfaces.ApplicationContext;
  @@ -24,18 +23,18 @@
       implements BlockContext
   {
       private String m_name;
  -    private ApplicationContext m_frame;
  +    private ApplicationContext m_applicationContext;
   
       protected DefaultBlockContext( final String name, final ApplicationContext 
frame )
       {
           m_name = name;
  -        m_frame = frame;
  +        m_applicationContext = frame;
       }
   
       public Object get( Object key )
           throws ContextException
       {
  -        final SarMetaData metaData = m_frame.getMetaData();
  +        final SarMetaData metaData = m_applicationContext.getMetaData();
           if( BlockContext.APP_NAME.equals( key ) )
           {
               return metaData.getName();
  @@ -61,7 +60,7 @@
        */
       public File getBaseDirectory()
       {
  -        return m_frame.getMetaData().getHomeDirectory();
  +        return m_applicationContext.getMetaData().getHomeDirectory();
       }
   
       /**
  @@ -81,6 +80,6 @@
        */
       public Logger getLogger( final String name )
       {
  -        return new LogKitLogger( m_frame.getLogger( getName() ).getChildLogger( 
name ) );
  +        return m_applicationContext.getLogger( getName() ).getChildLogger( name );
       }
   }
  
  
  
  1.2       +2 -3      
jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/components/application/ListenerResourceProvider.java
  
  Index: ListenerResourceProvider.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/components/application/ListenerResourceProvider.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- ListenerResourceProvider.java     18 Jun 2002 03:51:44 -0000      1.1
  +++ ListenerResourceProvider.java     14 Jul 2002 02:27:16 -0000      1.2
  @@ -14,7 +14,6 @@
   import org.apache.avalon.framework.configuration.ConfigurationException;
   import org.apache.avalon.framework.context.Context;
   import org.apache.avalon.framework.logger.AbstractLogEnabled;
  -import org.apache.avalon.framework.logger.LogKitLogger;
   import org.apache.avalon.framework.logger.Logger;
   import org.apache.avalon.framework.parameters.Parameters;
   import org.apache.avalon.framework.service.ServiceManager;
  @@ -80,7 +79,7 @@
       {
           final BlockListenerMetaData metaData = getMetaData( entry );
           final String name = metaData.getName();
  -        return new LogKitLogger( m_context.getLogger( name ) );
  +        return m_context.getLogger( name );
       }
   
       public Context createContext( Object entry )
  
  
  
  1.45      +3 -2      
jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/components/deployer/DefaultDeployer.java
  
  Index: DefaultDeployer.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/components/deployer/DefaultDeployer.java,v
  retrieving revision 1.44
  retrieving revision 1.45
  diff -u -r1.44 -r1.45
  --- DefaultDeployer.java      14 Jul 2002 01:34:55 -0000      1.44
  +++ DefaultDeployer.java      14 Jul 2002 02:27:16 -0000      1.45
  @@ -21,6 +21,7 @@
   import org.apache.avalon.framework.configuration.Configuration;
   import org.apache.avalon.framework.configuration.ConfigurationException;
   import org.apache.avalon.framework.logger.AbstractLogEnabled;
  +import org.apache.avalon.framework.logger.Logger;
   import org.apache.avalon.framework.parameters.ParameterException;
   import org.apache.avalon.framework.parameters.Parameterizable;
   import org.apache.avalon.framework.parameters.Parameters;
  @@ -297,11 +298,11 @@
               setupConfiguration( metaData, config.getChildren() );
   
               final Configuration logs = environment.getChild( "logs" );
  -            final Hierarchy hierarchy =
  +            final Logger logger =
                   m_logManager.createHierarchy( metaData, logs, classLoader );
   
               //Finally add application to kernel
  -            m_kernel.addApplication( metaData, classLoader, hierarchy, environment 
);
  +            m_kernel.addApplication( metaData, classLoader, logger, environment );
   
               m_installations.put( metaData.getName(), installation );
   
  
  
  
  1.23      +4 -5      
jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/components/kernel/DefaultApplicationContext.java
  
  Index: DefaultApplicationContext.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/components/kernel/DefaultApplicationContext.java,v
  retrieving revision 1.22
  retrieving revision 1.23
  diff -u -r1.22 -r1.23
  --- DefaultApplicationContext.java    14 Jul 2002 01:34:11 -0000      1.22
  +++ DefaultApplicationContext.java    14 Jul 2002 02:27:16 -0000      1.23
  @@ -12,6 +12,7 @@
   import org.apache.avalon.framework.configuration.Configuration;
   import org.apache.avalon.framework.configuration.ConfigurationException;
   import org.apache.avalon.framework.logger.AbstractLogEnabled;
  +import org.apache.avalon.framework.logger.Logger;
   import org.apache.avalon.framework.service.ServiceException;
   import org.apache.avalon.framework.service.ServiceManager;
   import org.apache.avalon.framework.service.Serviceable;
  @@ -26,8 +27,6 @@
   import org.apache.avalon.excalibur.i18n.ResourceManager;
   import org.apache.excalibur.threadcontext.ThreadContext;
   import org.apache.excalibur.threadcontext.impl.DefaultThreadContextPolicy;
  -import org.apache.log.Hierarchy;
  -import org.apache.log.Logger;
   
   /**
    * Manage the "frame" in which Applications operate.
  @@ -43,7 +42,7 @@
           ResourceManager.getPackageResources( DefaultApplicationContext.class );
   
       //Log Hierarchy for application
  -    private final Hierarchy m_hierarchy;
  +    private final Logger m_hierarchy;
   
       ///ClassLoader for application
       private final ClassLoader m_classLoader;
  @@ -65,7 +64,7 @@
   
       protected DefaultApplicationContext( final SarMetaData metaData,
                                            final ClassLoader classLoader,
  -                                         final Hierarchy hierarchy )
  +                                         final Logger hierarchy )
       {
           m_metaData = metaData;
           m_classLoader = classLoader;
  @@ -123,7 +122,7 @@
        */
       public Logger getLogger( final String category )
       {
  -        return m_hierarchy.getLoggerFor( category );
  +        return m_hierarchy.getChildLogger( category );
       }
   
       /**
  
  
  
  1.72      +3 -3      
jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/components/kernel/DefaultKernel.java
  
  Index: DefaultKernel.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/components/kernel/DefaultKernel.java,v
  retrieving revision 1.71
  retrieving revision 1.72
  diff -u -r1.71 -r1.72
  --- DefaultKernel.java        13 Jul 2002 10:15:12 -0000      1.71
  +++ DefaultKernel.java        14 Jul 2002 02:27:16 -0000      1.72
  @@ -193,13 +193,13 @@
   
       public void addApplication( final SarMetaData metaData,
                                   final ClassLoader classLoader,
  -                                final Hierarchy hierarchy,
  +                                final Logger logger,
                                   final Configuration server )
           throws Exception
       {
           final String name = metaData.getName();
           final SarEntry entry =
  -            new SarEntry( metaData, classLoader, hierarchy, server );
  +            new SarEntry( metaData, classLoader, logger, server );
           m_entries.put( name, entry );
   
           try
  @@ -223,7 +223,7 @@
           final DefaultApplicationContext context =
               new DefaultApplicationContext( metaData,
                                              entry.getClassLoader(),
  -                                           entry.getHierarchy() );
  +                                           entry.getLogger() );
   
           ContainerUtil.enableLogging( context, createContextLogger( name ) );
           ContainerUtil.service( context, createServiceManager() );
  
  
  
  1.9       +6 -6      
jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/components/kernel/SarEntry.java
  
  Index: SarEntry.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/components/kernel/SarEntry.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- SarEntry.java     11 Dec 2001 10:13:34 -0000      1.8
  +++ SarEntry.java     14 Jul 2002 02:27:16 -0000      1.9
  @@ -8,9 +8,9 @@
   package org.apache.avalon.phoenix.components.kernel;
   
   import org.apache.avalon.framework.configuration.Configuration;
  +import org.apache.avalon.framework.logger.Logger;
   import org.apache.avalon.phoenix.interfaces.Application;
   import org.apache.avalon.phoenix.metadata.SarMetaData;
  -import org.apache.log.Hierarchy;
   
   /**
    * This is the structure describing each server application before it is loaded.
  @@ -23,16 +23,16 @@
       private Configuration m_configuration;
       private ClassLoader m_classLoader;
       private Application m_application;
  -    private Hierarchy m_hierarchy;
  +    private Logger m_logger;
   
       protected SarEntry( final SarMetaData metaData,
                           final ClassLoader classLoader,
  -                        final Hierarchy hierarchy,
  +                        final Logger logger,
                           final Configuration configuration )
       {
           m_metaData = metaData;
           m_classLoader = classLoader;
  -        m_hierarchy = hierarchy;
  +        m_logger = logger;
           m_configuration = configuration;
       }
   
  @@ -51,9 +51,9 @@
           return m_metaData;
       }
   
  -    public Hierarchy getHierarchy()
  +    public Logger getLogger()
       {
  -        return m_hierarchy;
  +        return m_logger;
       }
   
       public ClassLoader getClassLoader()
  
  
  
  1.15      +10 -8     
jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/components/logger/DefaultLogManager.java
  
  Index: DefaultLogManager.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/components/logger/DefaultLogManager.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- DefaultLogManager.java    21 May 2002 10:11:03 -0000      1.14
  +++ DefaultLogManager.java    14 Jul 2002 02:27:16 -0000      1.15
  @@ -13,10 +13,11 @@
   import org.apache.avalon.framework.configuration.Configuration;
   import org.apache.avalon.framework.context.DefaultContext;
   import org.apache.avalon.framework.logger.AbstractLogEnabled;
  +import org.apache.avalon.framework.logger.LogKitLogger;
  +import org.apache.avalon.framework.logger.Logger;
   import org.apache.avalon.phoenix.BlockContext;
   import org.apache.avalon.phoenix.interfaces.LogManager;
   import org.apache.avalon.phoenix.metadata.SarMetaData;
  -import org.apache.log.Hierarchy;
   
   /**
    * Interface that is used to manage Log objects for a Sar.
  @@ -40,10 +41,10 @@
        * @throws Exception if unable to create Loggers
        * @todo pass classLoader down into LogKitManager and
        *       use that to try to load targets.
  -    */
  -    public Hierarchy createHierarchy( final SarMetaData metaData,
  -                                      final Configuration logs,
  -                                      final ClassLoader classLoader )
  +     */
  +    public Logger createHierarchy( final SarMetaData metaData,
  +                                   final Configuration logs,
  +                                   final ClassLoader classLoader )
           throws Exception
       {
           final DefaultContext context = new DefaultContext();
  @@ -66,7 +67,7 @@
               setupLogger( manager );
               manager.contextualize( context );
               manager.configure( logs );
  -            return manager.getHierarchy();
  +            return manager.getDefaultLogger();
           }
           else if( version.equals( "1.1" ) )
           {
  @@ -75,11 +76,12 @@
               setupLogger( manager );
               manager.contextualize( context );
               manager.configure( logs );
  -            return manager.getHierarchy();
  +            return new LogKitLogger( manager.getHierarchy().getLoggerFor( "" ) );
           }
           else
           {
  -            throw new IllegalArgumentException( "Unknown log version specification" 
);
  +            final String message = "Unknown log version specification";
  +            throw new IllegalArgumentException( message );
           }
       }
   }
  
  
  
  1.12      +20 -13    
jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/components/logger/SimpleLogKitManager.java
  
  Index: SimpleLogKitManager.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/components/logger/SimpleLogKitManager.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- SimpleLogKitManager.java  20 May 2002 10:23:34 -0000      1.11
  +++ SimpleLogKitManager.java  14 Jul 2002 02:27:16 -0000      1.12
  @@ -12,7 +12,7 @@
   import java.util.HashMap;
   import org.apache.avalon.excalibur.i18n.ResourceManager;
   import org.apache.avalon.excalibur.i18n.Resources;
  -import org.apache.avalon.excalibur.logger.LogKitManager;
  +import org.apache.avalon.excalibur.logger.LoggerManager;
   import org.apache.avalon.framework.configuration.Configurable;
   import org.apache.avalon.framework.configuration.Configuration;
   import org.apache.avalon.framework.configuration.ConfigurationException;
  @@ -21,6 +21,7 @@
   import org.apache.avalon.framework.context.Contextualizable;
   import org.apache.avalon.framework.logger.AbstractLogEnabled;
   import org.apache.avalon.framework.logger.AvalonFormatter;
  +import org.apache.avalon.framework.logger.LogKitLogger;
   import org.apache.log.Hierarchy;
   import org.apache.log.LogTarget;
   import org.apache.log.Logger;
  @@ -36,7 +37,7 @@
    */
   public class SimpleLogKitManager
       extends AbstractLogEnabled
  -    implements LogKitManager, Contextualizable, Configurable
  +    implements LoggerManager, Contextualizable, Configurable
   {
       private static final Resources REZ =
           ResourceManager.getPackageResources( SimpleLogKitManager.class );
  @@ -49,7 +50,11 @@
       private File m_baseDirectory;
   
       ///Hierarchy of Application logging
  -    private Hierarchy m_logHierarchy = new Hierarchy();
  +
  +    private final Hierarchy m_hierarchy = new Hierarchy();
  +    private final Logger m_logkitLogger = m_hierarchy.getLoggerFor( "" );
  +    private org.apache.avalon.framework.logger.Logger m_logger =
  +        new LogKitLogger( m_logkitLogger );
   
       public void contextualize( final Context context )
           throws ContextException
  @@ -66,9 +71,15 @@
           configureCategories( categories, targetSet );
       }
   
  -    public Hierarchy getHierarchy()
  +    public org.apache.avalon.framework.logger.Logger
  +        getLoggerForCategory( final String categoryName )
  +    {
  +        return m_logger.getChildLogger( categoryName );
  +    }
  +
  +    public org.apache.avalon.framework.logger.Logger getDefaultLogger()
       {
  -        return m_logHierarchy;
  +        return m_logger;
       }
   
       /**
  @@ -136,7 +147,8 @@
               final String target = category.getAttribute( "target" );
               final String priorityName = category.getAttribute( "priority" );
   
  -            final Logger logger = getLogger( name );
  +            final Logger logger =
  +                m_logkitLogger.getChildLogger( name );
   
               final LogTarget logTarget = (LogTarget)targets.get( target );
               if( null == target )
  @@ -161,8 +173,8 @@
   
               if( name.equals( "" ) )
               {
  -                m_logHierarchy.setDefaultPriority( priority );
  -                m_logHierarchy.setDefaultLogTarget( logTarget );
  +                m_hierarchy.setDefaultPriority( priority );
  +                m_hierarchy.setDefaultLogTarget( logTarget );
               }
               else
               {
  @@ -170,10 +182,5 @@
                   logger.setLogTargets( new LogTarget[]{logTarget} );
               }
           }
  -    }
  -
  -    public Logger getLogger( final String category )
  -    {
  -        return m_logHierarchy.getLoggerFor( category );
       }
   }
  
  
  
  1.4       +0 -5      
jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/components/manager/NoopSystemManager.java
  
  Index: NoopSystemManager.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/components/manager/NoopSystemManager.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- NoopSystemManager.java    11 Dec 2001 10:13:34 -0000      1.3
  +++ NoopSystemManager.java    14 Jul 2002 02:27:16 -0000      1.4
  @@ -17,11 +17,6 @@
   public class NoopSystemManager
       extends AbstractSystemManager
   {
  -    public void initialize()
  -        throws Exception
  -    {
  -    }
  -
       public void start()
       {
       }
  
  
  
  1.13      +1 -1      
jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/interfaces/ApplicationContext.java
  
  Index: ApplicationContext.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/interfaces/ApplicationContext.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- ApplicationContext.java   28 Jun 2002 05:28:38 -0000      1.12
  +++ ApplicationContext.java   14 Jul 2002 02:27:16 -0000      1.13
  @@ -9,9 +9,9 @@
   
   import org.apache.avalon.framework.configuration.Configuration;
   import org.apache.avalon.framework.configuration.ConfigurationException;
  +import org.apache.avalon.framework.logger.Logger;
   import org.apache.avalon.phoenix.metadata.SarMetaData;
   import org.apache.excalibur.threadcontext.ThreadContext;
  -import org.apache.log.Logger;
   
   /**
    * Manage the "context" in which Applications operate.
  
  
  
  1.11      +2 -3      
jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/interfaces/Kernel.java
  
  Index: Kernel.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/interfaces/Kernel.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- Kernel.java       10 May 2002 13:10:07 -0000      1.10
  +++ Kernel.java       14 Jul 2002 02:27:16 -0000      1.11
  @@ -8,11 +8,10 @@
   package org.apache.avalon.phoenix.interfaces;
   
   import org.apache.avalon.framework.configuration.Configuration;
  +import org.apache.avalon.framework.logger.Logger;
   import org.apache.avalon.phoenix.metadata.SarMetaData;
  -import org.apache.log.Hierarchy;
   
   /**
  - *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Peter Donald</a>
    */
   public interface Kernel
  @@ -21,7 +20,7 @@
   
       void addApplication( SarMetaData metaData,
                            ClassLoader classLoader,
  -                         Hierarchy hierarchy,
  +                         Logger hierarchy,
                            Configuration server )
           throws Exception;
   
  
  
  
  1.9       +4 -4      
jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/interfaces/LogManager.java
  
  Index: LogManager.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/interfaces/LogManager.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- LogManager.java   19 May 2002 13:24:14 -0000      1.8
  +++ LogManager.java   14 Jul 2002 02:27:16 -0000      1.9
  @@ -8,8 +8,8 @@
   package org.apache.avalon.phoenix.interfaces;
   
   import org.apache.avalon.framework.configuration.Configuration;
  +import org.apache.avalon.framework.logger.Logger;
   import org.apache.avalon.phoenix.metadata.SarMetaData;
  -import org.apache.log.Hierarchy;
   
   /**
    * Interface that is used to manage Log objects for a Sar.
  @@ -29,8 +29,8 @@
        * @return the configured Logger hierarchy
        * @throws Exception if an error occurs
        */
  -    Hierarchy createHierarchy( SarMetaData metaData,
  -                               Configuration logs,
  -                               ClassLoader classLoader )
  +    Logger createHierarchy( SarMetaData metaData,
  +                            Configuration logs,
  +                            ClassLoader classLoader )
           throws Exception;
   }
  
  
  

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to