You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by mc...@apache.org on 2004/02/23 02:29:06 UTC

cvs commit: avalon/repository/util/src/java/org/apache/avalon/repository/util LoaderUtils.java

mcconnell    2004/02/22 17:29:05

  Modified:    merlin   maven.xml
               merlin/kernel/cli/src/java/org/apache/avalon/merlin/cli
                        Main.java Resources.properties
                        Resources_de.properties Resources_fr.properties
                        Resources_pt.properties
               merlin/platform/tutorials/dynamics/src/java/tutorial
                        DefaultGizmo.java HelloFacility.java
               repository/impl/src/java/org/apache/avalon/repository/impl
                        DefaultFactory.java DefaultRepository.java
                        DefaultRepositoryCriteria.java
               repository/main/src/java/org/apache/avalon/repository/main
                        DefaultInitialContext.java
                        DefaultInitialContextFactory.java
               repository/spi/src/java/org/apache/avalon/repository/provider
                        InitialContext.java InitialContextFactory.java
                        RepositoryCriteria.java
               repository/util/src/java/org/apache/avalon/repository/util
                        LoaderUtils.java
  Log:
  Add an offline policy support to the repository.
  
  Revision  Changes    Path
  1.56      +21 -0     avalon/merlin/maven.xml
  
  Index: maven.xml
  ===================================================================
  RCS file: /home/cvs/avalon/merlin/maven.xml,v
  retrieving revision 1.55
  retrieving revision 1.56
  diff -u -r1.55 -r1.56
  --- maven.xml	22 Feb 2004 19:10:34 -0000	1.55
  +++ maven.xml	23 Feb 2004 01:29:05 -0000	1.56
  @@ -415,6 +415,13 @@
         </fileset>
       </ant:zip>
       <checksum file="${maven.build.dir}/${package.name}.zip"/>
  +    <j:if test="${maven_gpg_exe != null}">
  +      <ant:exec executable="${maven_gpg_exe}">
  +        <ant:arg value="-a"/>
  +        <ant:arg value="-b"/>
  +        <ant:arg value="${maven.build.dir}/${package.name}.zip"/>
  +      </ant:exec>
  +    </j:if>
   
       <ant:tar longfile="gnu" tarfile="${maven.build.dir}/${package.name}.tar">
         <tarfileset dir="${merlin.build.inst.dir}" prefix="merlin"/>
  @@ -430,6 +437,13 @@
         src="${maven.build.dir}/${package.name}.tar"/>
       <ant:delete file="${maven.build.dir}/${package.name}.tar"/>
       <checksum file="${maven.build.dir}/${package.name}.tar.gz"/>
  +    <j:if test="${maven_gpg_exe != null}">
  +      <ant:exec executable="${maven_gpg_exe}">
  +        <ant:arg value="-a"/>
  +        <ant:arg value="-b"/>
  +        <ant:arg value="${maven.build.dir}/${package.name}.tar.gz"/>
  +      </ant:exec>
  +    </j:if>
   
       <ant:echo>Building tutorial kit: ${tutorial.name}</ant:echo>
       <ant:zip zipfile="${maven.build.dir}/${tutorial.name}.zip">
  @@ -444,6 +458,13 @@
         src="${maven.build.dir}/${tutorial.name}.tar"/>
       <ant:delete file="${maven.build.dir}/${tutorial.name}.tar"/>
       <checksum file="${maven.build.dir}/${tutorial.name}.tar.gz"/>
  +    <j:if test="${maven_gpg_exe != null}">
  +      <ant:exec executable="${maven_gpg_exe}">
  +        <ant:arg value="-a"/>
  +        <ant:arg value="-b"/>
  +        <ant:arg value="${maven.build.dir}/${tutorial.name}.tar.gz"/>
  +      </ant:exec>
  +    </j:if>
   
     </goal>
   
  
  
  
  1.19      +7 -9      avalon/merlin/kernel/cli/src/java/org/apache/avalon/merlin/cli/Main.java
  
  Index: Main.java
  ===================================================================
  RCS file: /home/cvs/avalon/merlin/kernel/cli/src/java/org/apache/avalon/merlin/cli/Main.java,v
  retrieving revision 1.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- Main.java	18 Feb 2004 00:22:54 -0000	1.18
  +++ Main.java	23 Feb 2004 01:29:05 -0000	1.19
  @@ -88,6 +88,10 @@
              "help",
              REZ.getString( "cli-help-description" ) );
   
  +        Option offline = new Option(
  +           "offline",
  +           REZ.getString( "cli-offline-description" ) );
  +
           Option version = new Option(
              "version",
              REZ.getString( "cli-version-description" ) );
  @@ -174,6 +178,7 @@
   
           options.addOption( help );
           options.addOption( locale );
  +        options.addOption( offline );
           options.addOption( execute );
           options.addOption( version );
           options.addOption( info );
  @@ -247,15 +252,8 @@
                   InitialContextFactory factory = 
                     new DefaultInitialContextFactory( "merlin", dir );
                   factory.setCacheDirectory( cache );
  +                factory.setOnlineMode( !line.hasOption( "offline" ) );
                   InitialContext context = factory.createInitialContext();
  -
  -                //ClassLoader parent = Main.class.getClassLoader();
  -                //Artifact impl = null; // default
  -                //String[] bootstrap = null; // default
  -                //
  -                //InitialContext context = 
  -                //   new DefaultInitialContext( 
  -                //     dir, parent, impl, cache, bootstrap );
   
                   //
                   // process the commandline and do the real work
  
  
  
  1.6       +2 -0      avalon/merlin/kernel/cli/src/java/org/apache/avalon/merlin/cli/Resources.properties
  
  Index: Resources.properties
  ===================================================================
  RCS file: /home/cvs/avalon/merlin/kernel/cli/src/java/org/apache/avalon/merlin/cli/Resources.properties,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- Resources.properties	2 Feb 2004 00:44:09 -0000	1.5
  +++ Resources.properties	23 Feb 2004 01:29:05 -0000	1.6
  @@ -9,6 +9,8 @@
   
   cli-help-description=Prints this message.
   
  +cli-offline-description=Disable remote connections.
  +
   cli-language-description=A two-letter language code.
   
   cli-execute-description=If present the kernel will initiate shutdown immediately following deployment.
  
  
  
  1.4       +1 -0      avalon/merlin/kernel/cli/src/java/org/apache/avalon/merlin/cli/Resources_de.properties
  
  Index: Resources_de.properties
  ===================================================================
  RCS file: /home/cvs/avalon/merlin/kernel/cli/src/java/org/apache/avalon/merlin/cli/Resources_de.properties,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- Resources_de.properties	16 Jan 2004 16:39:02 -0000	1.3
  +++ Resources_de.properties	23 Feb 2004 01:29:05 -0000	1.4
  @@ -6,6 +6,7 @@
   
   cli-help-description=Gibt diese Meldung aus.
   cli-language-description=Ein Sprachcode aus zwei Buchstaben (ISO-639).
  +cli-offline-description=???
   cli-execute-description=???
   cli-version-description=Gibt die Systemversionsnummer von Merlin aus.
   cli-info-description=???
  
  
  
  1.4       +1 -16     avalon/merlin/kernel/cli/src/java/org/apache/avalon/merlin/cli/Resources_fr.properties
  
  Index: Resources_fr.properties
  ===================================================================
  RCS file: /home/cvs/avalon/merlin/kernel/cli/src/java/org/apache/avalon/merlin/cli/Resources_fr.properties,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- Resources_fr.properties	16 Jan 2004 16:39:02 -0000	1.3
  +++ Resources_fr.properties	23 Feb 2004 01:29:05 -0000	1.4
  @@ -4,35 +4,20 @@
   artifact=artifact?
   
   cli-help-description=Imprime ce message.
  -
   cli-language-description=Un code de pays de deux lettres.
  -
   cli-execute-description=???
  -
  +cli-offline-description=???
   cli-version-description=Imprime le version de systeme de Merlin.
  -
   cli-info-description=???
  -
   cli-install-description=???
  -
   cli-debug-description=Presentation des messages debug pendant la phase d'initialisation.
  -
   cli-audit-description=???.
  -
   cli-implementation-description=???
  -
   cli-home-description=Un chemin relatif ou absolu a un repertoire local de fonctionnement. Si non fourni la valeur par defaut correspondra au repertoire local. Un nom releative de chemin sera parent resolu par le repertoire local.
  -
   cli-context-description=???
  -
   cli-kernel-description=???
  -
   cli-block-description=???
  -
   cli-config-description=???
  -
   cli-system-description=???
  -
   cli-repository-description=???
  -
   cli-description=???
  
  
  
  1.4       +1 -19     avalon/merlin/kernel/cli/src/java/org/apache/avalon/merlin/cli/Resources_pt.properties
  
  Index: Resources_pt.properties
  ===================================================================
  RCS file: /home/cvs/avalon/merlin/kernel/cli/src/java/org/apache/avalon/merlin/cli/Resources_pt.properties,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- Resources_pt.properties	16 Jan 2004 16:39:02 -0000	1.3
  +++ Resources_pt.properties	23 Feb 2004 01:29:05 -0000	1.4
  @@ -1,43 +1,25 @@
   
   url=url
  -
   directory=diret�rio
  -
   file=arquivo
  -
   artifact=artefato
   
   cli-help-description=Imprime esta mensagem.
  -
   cli-language-description=Um codigo de lingua de dois caracteres.
  -
   cli-execute-description=Se presente, o kernel ir� iniciar um shutdown imediatamente ap�s o deployment
  +cli-offline-description=???
   cli-version-description=Imprime informa��es sobre a vers�o.
  -
   cli-info-description=Lista de informa��es sobre o contexto do deployment.
  -
   cli-audit-description=Lista de informa��es sobre o modelization?
  -
   cli-install-description=Instala um bloco (block archive) no reposit�rio local.
  -
   cli-debug-description=Habilita o modo debug.
  -
   cli-implementation-description=Uma especifica��o de artefato que sobrep�e a implementa��o padr�o.
  -
   cli-home-description=Um caminho relativo ou absoluto para um diret�rio de trabalho. Se n�o informado o sistema usar� o diret�rio corrente.
  -
   cli-context-description=O diret�rio raiz pelo qual urn:avalon:home diret�rios s�o resolvidos. Padr�o para ${merlin.dir}/home.
  -
   cli-kernel-description=Nome de um arquivo para um profile alternativo do kernel.
  -
   cli-block-description=Um nome de arquivo relativo ou absoluto para um bloco ou jar (contendo uma defini��o de bloco).
  -
   cli-config-description=O nome de um arquivo que sobrescreve as configura��es dos componentes.
  -
   cli-system-description=Um caminho relativo ou absoluto para uma runtime de reposit�rio de sistema alternativo.
  -
   cli-repository-description=Um caminho relativo ou absoluto para uma runtime de reposit�rio alternativo.
  -
   cli-library-description=Um diret�rio que serve como raiz para as bibliotecas referenciadas.
  -
   cli-description=\nDescri��o: Executa o deployment de um ou varios blocos de componentes. O argumento [block] pode ser tanto um descriptor em forma de arquivo ou um arquivo jar contendo um descriptor. Se nada for especificado Merlin tentar� executar a partir de um arquivo 'block.xml' no diret�rio local.
  
  
  
  1.4       +9 -0      avalon/merlin/platform/tutorials/dynamics/src/java/tutorial/DefaultGizmo.java
  
  Index: DefaultGizmo.java
  ===================================================================
  RCS file: /home/cvs/avalon/merlin/platform/tutorials/dynamics/src/java/tutorial/DefaultGizmo.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- DefaultGizmo.java	22 Feb 2004 17:28:30 -0000	1.3
  +++ DefaultGizmo.java	23 Feb 2004 01:29:05 -0000	1.4
  @@ -52,4 +52,13 @@
           File home = (File) context.get( "urn:avalon:home" );
           m_logger.info( "home: " + home );
       }
  +
  +   //---------------------------------------------------------
  +   // Object
  +   //---------------------------------------------------------
  +
  +   public String toString()
  +   {
  +       return "[gizmo:" + System.identityHashCode( this ) + "]";
  +   }
   }
  
  
  
  1.6       +1 -0      avalon/merlin/platform/tutorials/dynamics/src/java/tutorial/HelloFacility.java
  
  Index: HelloFacility.java
  ===================================================================
  RCS file: /home/cvs/avalon/merlin/platform/tutorials/dynamics/src/java/tutorial/HelloFacility.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- HelloFacility.java	22 Feb 2004 20:52:59 -0000	1.5
  +++ HelloFacility.java	23 Feb 2004 01:29:05 -0000	1.6
  @@ -24,6 +24,7 @@
   public class HelloFacility 
     implements Contextualizable, Executable
   {
  +
      //---------------------------------------------------------
      // immutable state
      //---------------------------------------------------------
  
  
  
  1.6       +32 -22    avalon/repository/impl/src/java/org/apache/avalon/repository/impl/DefaultFactory.java
  
  Index: DefaultFactory.java
  ===================================================================
  RCS file: /home/cvs/avalon/repository/impl/src/java/org/apache/avalon/repository/impl/DefaultFactory.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- DefaultFactory.java	19 Feb 2004 07:37:46 -0000	1.5
  +++ DefaultFactory.java	23 Feb 2004 01:29:05 -0000	1.6
  @@ -15,31 +15,32 @@
    * limitations under the License.
    */
   
  -package org.apache.avalon.repository.impl ;
  +package org.apache.avalon.repository.impl;
   
   
  -import java.io.File ;
  +import java.io.File;
   import java.io.IOException;
   import java.io.InputStream;
   
  -import java.util.Map ;
  -import java.util.ArrayList ;
  -import java.util.Properties ;
  -import java.net.Authenticator ;
  -import java.net.MalformedURLException ;
  -import java.net.URL ;
  -
  -import org.apache.avalon.util.defaults.Defaults ;
  -import org.apache.avalon.util.defaults.DefaultsFinder ;
  -import org.apache.avalon.util.defaults.SimpleDefaultsFinder ;
  -import org.apache.avalon.util.defaults.SystemDefaultsFinder ;
  +import java.util.Map;
  +import java.util.ArrayList;
  +import java.util.Properties;
  +import java.net.Authenticator;
  +import java.net.MalformedURLException;
  +import java.net.URL;
  +
  +import org.apache.avalon.util.defaults.Defaults;
  +import org.apache.avalon.util.defaults.DefaultsFinder;
  +import org.apache.avalon.util.defaults.SimpleDefaultsFinder;
  +import org.apache.avalon.util.defaults.SystemDefaultsFinder;
   
  -import org.apache.avalon.repository.Repository ;
  -import org.apache.avalon.repository.RepositoryException ;
  +import org.apache.avalon.repository.Repository;
  +import org.apache.avalon.repository.RepositoryException;
   import org.apache.avalon.repository.RepositoryRuntimeException;
  -import org.apache.avalon.repository.provider.InitialContext ;
  -import org.apache.avalon.repository.provider.Factory ;
  -import org.apache.avalon.repository.util.RepositoryUtils ;
  +import org.apache.avalon.repository.provider.RepositoryCriteria;
  +import org.apache.avalon.repository.provider.InitialContext;
  +import org.apache.avalon.repository.provider.Factory;
  +import org.apache.avalon.repository.util.RepositoryUtils;
   
   import org.apache.avalon.excalibur.i18n.ResourceManager;
   import org.apache.avalon.excalibur.i18n.Resources;
  @@ -133,18 +134,27 @@
   
           File root = getCache( map );
           String[] hosts = getHosts( map );
  -        return new DefaultRepository( root, hosts );
  +        boolean online = getOnlineMode( map );
  +        return new DefaultRepository( root, hosts, online );
  +    }
  +
  +    private boolean getOnlineMode( Map map )
  +    {
  +        Boolean value = (Boolean) map.get( 
  +            RepositoryCriteria.REPOSITORY_ONLINE_MODE );
  +        if( null != value ) return value.booleanValue();
  +        return true;
       }
   
       private File getCache( Map map )
       {
           return (File) map.get( 
  -            DefaultRepositoryCriteria.REPOSITORY_CACHE_DIR );
  +            RepositoryCriteria.REPOSITORY_CACHE_DIR );
       }
   
       private String[] getHosts( Map map )
       {
           return (String[]) map.get( 
  -            DefaultRepositoryCriteria.REPOSITORY_REMOTE_HOSTS );
  +            RepositoryCriteria.REPOSITORY_REMOTE_HOSTS );
       }
   }
  
  
  
  1.8       +20 -7     avalon/repository/impl/src/java/org/apache/avalon/repository/impl/DefaultRepository.java
  
  Index: DefaultRepository.java
  ===================================================================
  RCS file: /home/cvs/avalon/repository/impl/src/java/org/apache/avalon/repository/impl/DefaultRepository.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- DefaultRepository.java	19 Feb 2004 07:37:46 -0000	1.7
  +++ DefaultRepository.java	23 Feb 2004 01:29:05 -0000	1.8
  @@ -60,17 +60,28 @@
      /**
       * The cache directory.
       */
  -    private File m_cache;
  +    private final File m_cache;
  +
  +    private final LoaderUtils m_loader;
  +
  +    //------------------------------------------------------------------
  +    // mutable state 
  +    //------------------------------------------------------------------
  +
  +   /**
  +    * Sequence of remote hosts.
  +    */
  +    private URL[] m_hosts;
   
      /**
       * Sequence of remote hosts.
       */
  -    private final URL[] m_hosts;
  +    private String[] m_roots;
   
      /**
       * Sequence of remote hosts.
       */
  -    private final String[] m_roots;
  +    private boolean m_online;
       
       //------------------------------------------------------------------
       // constructor 
  @@ -83,7 +94,7 @@
       * @exception NullPointerException if the cache or hosts argument
       * is null
       */
  -    public DefaultRepository( File cache, String[] hosts )
  +    DefaultRepository( File cache, String[] hosts, boolean online )
       {
           if( cache == null ) throw new NullPointerException( "cache" );
           if( hosts == null ) throw new NullPointerException( "hosts" );
  @@ -91,6 +102,8 @@
           m_cache = cache;
           m_roots = RepositoryUtils.getCleanPaths( hosts );
           m_hosts = getHosts( m_roots );
  +        m_online = online;
  +        m_loader = new LoaderUtils( online );
       }
   
       //------------------------------------------------------------------
  @@ -136,7 +149,7 @@
       public URL getResource( Artifact artifact )
           throws RepositoryException
       {
  -        return LoaderUtils.getResource( 
  +        return m_loader.getResource( 
             artifact, m_roots, m_cache, true );
       }
   
  @@ -150,7 +163,7 @@
       private URL getResource( Artifact artifact, String mime )
           throws RepositoryException
       {
  -        return LoaderUtils.getResource( 
  +        return m_loader.getResource( 
             artifact, mime, m_roots, m_cache, true );
       }
           
  
  
  
  1.7       +27 -43    avalon/repository/impl/src/java/org/apache/avalon/repository/impl/DefaultRepositoryCriteria.java
  
  Index: DefaultRepositoryCriteria.java
  ===================================================================
  RCS file: /home/cvs/avalon/repository/impl/src/java/org/apache/avalon/repository/impl/DefaultRepositoryCriteria.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- DefaultRepositoryCriteria.java	20 Feb 2004 22:48:13 -0000	1.6
  +++ DefaultRepositoryCriteria.java	23 Feb 2004 01:29:05 -0000	1.7
  @@ -54,46 +54,24 @@
       //--------------------------------------------------------------
   
      /**
  -    * Repository cache directory parameter descriptor.
  -    */
  -    public static final String REPOSITORY_CACHE_DIR = InitialContext.CACHE_KEY;
  -    private static final Parameter REPOSITORY_CACHE_DIR_PARAM = 
  -      new Parameter( 
  -        REPOSITORY_CACHE_DIR,
  -        File.class,
  -        null );
  -
  -   /**
  -    * Repository proxy password parameter descriptor.
  -    */
  -    public static final String REPOSITORY_REMOTE_HOSTS = InitialContext.HOSTS_KEY;
  -    public static final Parameter REPOSITORY_REMOTE_HOSTS_PARAM = 
  -      new PackedParameter( 
  -        REPOSITORY_REMOTE_HOSTS,
  -        ",",
  -        null );
  -
  -   /**
       * The factory parameters template.
  +    * @return the set of parameters constraining the criteria
       */
  -    public static final Parameter[] PARAMS = new Parameter[]{
  -           REPOSITORY_CACHE_DIR_PARAM,
  -           REPOSITORY_REMOTE_HOSTS_PARAM };
  -
  -   /** 
  -    * The name of the static defaults property resource.
  -    */
  -    public static final String DEFAULTS = "avalon.properties";
  -
  -   /** 
  -    * recognized single keys
  -    */
  -    private static final String [] SINGLE_KEYS = Parameter.getKeys( PARAMS );
  -
  -   /** 
  -    * recognized multivalue keys
  -    */
  -    public static final String [] MULTI_VALUE_KEYS = {};
  +    private static Parameter[] buildParameters( InitialContext context )
  +    {
  +        return new Parameter[]{
  +          new Parameter( 
  +            REPOSITORY_ONLINE_MODE, 
  +            Boolean.class, new Boolean( context.getOnlineMode() ) ),
  +          new Parameter( 
  +            REPOSITORY_CACHE_DIR,
  +            File.class,
  +            context.getInitialCacheDirectory() ),
  +          new PackedParameter( 
  +            REPOSITORY_REMOTE_HOSTS,
  +            ",",
  +            context.getInitialHosts() ) };
  +    }
   
       //--------------------------------------------------------------
       // constructor
  @@ -106,7 +84,7 @@
       public DefaultRepositoryCriteria( InitialContext context ) 
         throws RepositoryException
       {
  -        super( PARAMS );
  +        super( buildParameters( context ) );
   
           //
           // create the consolidated properties
  @@ -120,16 +98,17 @@
               Properties defaults = getDefaultProperties();
               DefaultsBuilder builder = new DefaultsBuilder( key, work );
               Properties properties = 
  -              builder.getConsolidatedProperties( defaults, SINGLE_KEYS );
  +              builder.getConsolidatedProperties( defaults, getKeys() );
   
               //
               // Populate the empty repository criteria using
               // the values from the consilidated defaults.
               //
   
  -            for( int i=0; i<SINGLE_KEYS.length; i++ )
  +            String[] keys = super.getKeys();
  +            for( int i=0; i<keys.length; i++ )
               {
  -                final String propertyKey = SINGLE_KEYS[i];
  +                final String propertyKey = keys[i];
                   final String value = properties.getProperty( propertyKey );
                   if( null != value )
                   {
  @@ -148,6 +127,11 @@
       //--------------------------------------------------------------
       // RepositoryCriteria
       //--------------------------------------------------------------
  +
  +    public void setOnlineMode( boolean mode )
  +    {
  +        put( REPOSITORY_ONLINE_MODE, new Boolean( mode ) );
  +    }
   
       public void setCacheDirectory( File cache )
       {
  
  
  
  1.22      +37 -14    avalon/repository/main/src/java/org/apache/avalon/repository/main/DefaultInitialContext.java
  
  Index: DefaultInitialContext.java
  ===================================================================
  RCS file: /home/cvs/avalon/repository/main/src/java/org/apache/avalon/repository/main/DefaultInitialContext.java,v
  retrieving revision 1.21
  retrieving revision 1.22
  diff -u -r1.21 -r1.22
  --- DefaultInitialContext.java	19 Feb 2004 07:37:46 -0000	1.21
  +++ DefaultInitialContext.java	23 Feb 2004 01:29:05 -0000	1.22
  @@ -103,17 +103,31 @@
       private final File m_cache;
   
      /**
  -    * The initial remote host names.
  -    */
  -    private final String[] m_hosts;
  -
  -   /**
       * The base working directory.
       */
       private final File m_base;
   
  +   /**
  +    * System repository established by the intial context.
  +    */
       private final Repository m_repository;
   
  +    private final LoaderUtils m_loader;
  +
  +    // ------------------------------------------------------------------------
  +    // mutable state
  +    // ------------------------------------------------------------------------
  +
  +   /**
  +    * The online connection policy.
  +    */
  +    private boolean m_online;
  +
  +   /**
  +    * The initial remote host names.
  +    */
  +    private String[] m_hosts;
  +
       // ------------------------------------------------------------------------
       // constructors
       // ------------------------------------------------------------------------
  @@ -131,7 +145,7 @@
       DefaultInitialContext( 
         String key, ClassLoader parent, Artifact artifact, File base, File cache, 
         String proxyHost, int proxyPort, String proxyUsername, String proxyPassword, 
  -      String[] hosts ) 
  +      String[] hosts, boolean online ) 
         throws RepositoryException
       {
           if( null == key ) throw new NullPointerException( "key" ); 
  @@ -144,8 +158,11 @@
           m_key = key;
           m_base = base;
           m_cache = cache;
  +        m_online = online;
           m_hosts = hosts;
   
  +        m_loader = new LoaderUtils( m_online );
  +
           setupProxy( proxyHost, proxyPort, proxyUsername, proxyPassword );
   
           Attributes attributes = loadAttributes( m_cache, m_hosts, artifact );
  @@ -171,11 +188,11 @@
           URL[] urls = new URL[ n + 1];
           for( int i=0; i<n; i++ )
           {
  -            urls[i] = LoaderUtils.getResource( 
  +            urls[i] = m_loader.getResource( 
                 dependencies[i], m_hosts, m_cache, true );
           }
   
  -        urls[ n ] = LoaderUtils.getResource( 
  +        urls[ n ] = m_loader.getResource( 
               artifact, m_hosts, m_cache, true );
   
           //
  @@ -196,6 +213,7 @@
                 (RepositoryCriteria) m_factory.createDefaultCriteria();
               criteria.setCacheDirectory( m_cache );
               criteria.setHosts( m_hosts );
  +            criteria.setOnlineMode( online );
               m_repository = (Repository) m_factory.create( criteria );
           }
           catch( Throwable e )
  @@ -233,14 +251,19 @@
       // InitialContext
       // ------------------------------------------------------------------------
   
  -    public String getProperty( final String key )
  +    public Repository getRepository()
       {
  -        return null;
  +        return m_repository;
       }
   
  -    public Repository getRepository()
  +   /**
  +    * Get the online mode of the repository.
  +    *
  +    * @return the online mode
  +    */
  +    public boolean getOnlineMode()
       {
  -        return m_repository;
  +        return m_online;
       }
   
       /**
  @@ -331,7 +354,7 @@
           {
               File temp = File.createTempFile( "avalon-", "-bar" );
               temp.delete();
  -            LoaderUtils.getResource( url.toString(), temp, true );
  +            m_loader.getResource( url.toString(), temp, true );
               temp.deleteOnExit();
               StringBuffer buffer = new StringBuffer();
               Manifest manifest = expand( temp.toURL(), buffer );
  
  
  
  1.6       +24 -3     avalon/repository/main/src/java/org/apache/avalon/repository/main/DefaultInitialContextFactory.java
  
  Index: DefaultInitialContextFactory.java
  ===================================================================
  RCS file: /home/cvs/avalon/repository/main/src/java/org/apache/avalon/repository/main/DefaultInitialContextFactory.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- DefaultInitialContextFactory.java	19 Feb 2004 12:25:29 -0000	1.5
  +++ DefaultInitialContextFactory.java	23 Feb 2004 01:29:05 -0000	1.6
  @@ -54,7 +54,6 @@
   import org.apache.avalon.repository.provider.InitialContext;
   import org.apache.avalon.repository.provider.InitialContextFactory;
   import org.apache.avalon.repository.provider.Builder;
  -import org.apache.avalon.repository.util.LoaderUtils;
   import org.apache.avalon.repository.util.RepositoryUtils;
   
   import org.apache.avalon.util.env.Env;
  @@ -126,6 +125,8 @@
   
       private String m_proxyPassword;
   
  +    private boolean m_online;
  +
       // ------------------------------------------------------------------------
       // constructor
       // ------------------------------------------------------------------------
  @@ -234,6 +235,18 @@
       // ------------------------------------------------------------------------
   
      /**
  +    * Set the online mode of the repository. The default policy is to 
  +    * to enable online access to remote repositories.  Setting the onLine
  +    * mode to false disables remote repository access.   
  +    *
  +    * @param policy the connected policy
  +    */
  +    public void setOnlineMode( boolean policy )
  +    {
  +        m_online = policy;
  +    }
  +
  +   /**
       * Set the parent classloader.  If not defined, the default 
       * classloader is the classloader holding this class. 
       *
  @@ -347,7 +360,8 @@
                 getProxyPort(),
                 getProxyUsername(),
                 getProxyPassword(),
  -              getHosts() );
  +              getHosts(),
  +              getOnlineMode() );
           }
           catch( Throwable e )
           {
  @@ -357,6 +371,13 @@
           }
       }
   
  +   /**
  +    * Return the application key.
  +    */
  +    public boolean getOnlineMode()
  +    {
  +        return m_online;
  +    }
   
      /**
       * Return the application key.
  
  
  
  1.11      +12 -16    avalon/repository/spi/src/java/org/apache/avalon/repository/provider/InitialContext.java
  
  Index: InitialContext.java
  ===================================================================
  RCS file: /home/cvs/avalon/repository/spi/src/java/org/apache/avalon/repository/provider/InitialContext.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- InitialContext.java	19 Feb 2004 07:37:47 -0000	1.10
  +++ InitialContext.java	23 Feb 2004 01:29:05 -0000	1.11
  @@ -41,6 +41,11 @@
       String IMPLEMENTATION_KEY = "avalon.repository.implementation";
   
      /**
  +    * The property key used declare the online connection policy.
  +    */
  +    String ONLINE_KEY = "avalon.repository.online";
  +
  +   /**
       * The property key used when resolving the default cache directory.
       */
       String CACHE_KEY = "avalon.repository.cache";
  @@ -68,21 +73,12 @@
       */
       String getApplicationKey();
   
  -   /**
  -    * <p>Get the value of a property. If the property value does not 
  -    * exists a null value will be returned.  Property value resolution
  -    * shall take into account the following ordered property sources
  -    * (resolved relative to the application key):</p>
  -    * <ul>
  -    * <li>system properties</li>
  -    * <li>working directory properties</li>
  -    * <li>user properties</li>
  -    * <li>application properties</li>
  -    * </ul>
  -    *
  -    * @return the property value
  -    */
  -    String getProperty( String key );
  +    /**
  +     * Return the online mode.
  +     * 
  +     * @return the online mode
  +     */
  +    boolean getOnlineMode();
   
       /**
        * Return cache root directory.
  
  
  
  1.3       +11 -1     avalon/repository/spi/src/java/org/apache/avalon/repository/provider/InitialContextFactory.java
  
  Index: InitialContextFactory.java
  ===================================================================
  RCS file: /home/cvs/avalon/repository/spi/src/java/org/apache/avalon/repository/provider/InitialContextFactory.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- InitialContextFactory.java	19 Feb 2004 07:37:47 -0000	1.2
  +++ InitialContextFactory.java	23 Feb 2004 01:29:05 -0000	1.3
  @@ -43,9 +43,19 @@
       */
       String[] KEYS = 
         new String[]{
  +        InitialContext.ONLINE_KEY,
           InitialContext.IMPLEMENTATION_KEY,
           InitialContext.CACHE_KEY,
           InitialContext.HOSTS_KEY };
  +
  +   /**
  +    * Set the online mode of the repository. The default policy is to 
  +    * to enable online access to remote repositories.  Setting the onLine
  +    * mode to false disables remote repository access.   
  +    *
  +    * @param policy the online connected policy
  +    */
  +    void setOnlineMode( boolean policy );
   
      /**
       * Set the parent classloader.
  
  
  
  1.3       +28 -6     avalon/repository/spi/src/java/org/apache/avalon/repository/provider/RepositoryCriteria.java
  
  Index: RepositoryCriteria.java
  ===================================================================
  RCS file: /home/cvs/avalon/repository/spi/src/java/org/apache/avalon/repository/provider/RepositoryCriteria.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- RepositoryCriteria.java	19 Feb 2004 07:37:47 -0000	1.2
  +++ RepositoryCriteria.java	23 Feb 2004 01:29:05 -0000	1.3
  @@ -30,16 +30,38 @@
   public interface RepositoryCriteria extends Map
   {
      /**
  +    * Online mode.
  +    */
  +    String REPOSITORY_ONLINE_MODE = InitialContext.ONLINE_KEY;
  +
  +   /**
  +    * Repository cache directory parameter descriptor.
  +    */
  +    String REPOSITORY_CACHE_DIR = InitialContext.CACHE_KEY;
  +
  +   /**
  +    * Repository proxy password parameter descriptor.
  +    */
  +    String REPOSITORY_REMOTE_HOSTS = InitialContext.HOSTS_KEY;
  +
  +   /**
       * An array of property keys that are used to locate default
       * values.
  -    * 
  -    * @see InitialContext#CACHE_KEY
  -    * @see InitialContext#HOSTS_KEY
       */
       String[] KEYS = 
         new String[]{
  -        InitialContext.CACHE_KEY,
  -        InitialContext.HOSTS_KEY };
  +        REPOSITORY_ONLINE_MODE,
  +        REPOSITORY_CACHE_DIR,
  +        REPOSITORY_REMOTE_HOSTS };
  +
  +   /**
  +    * Set the online mode of the repository. The default policy is to 
  +    * to enable online access to remote repositories.  Setting the on-line
  +    * mode to false disables remote repository access.   
  +    *
  +    * @param policy the online connected policy
  +    */
  +    void setOnlineMode( boolean policy );
   
      /**
       * The cache directory is the directory into which resources 
  
  
  
  1.4       +76 -13    avalon/repository/util/src/java/org/apache/avalon/repository/util/LoaderUtils.java
  
  Index: LoaderUtils.java
  ===================================================================
  RCS file: /home/cvs/avalon/repository/util/src/java/org/apache/avalon/repository/util/LoaderUtils.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- LoaderUtils.java	24 Jan 2004 23:20:06 -0000	1.3
  +++ LoaderUtils.java	23 Feb 2004 01:29:05 -0000	1.4
  @@ -53,6 +53,13 @@
    */
   public class LoaderUtils
   {
  +     private boolean m_online;
  +
  +     public LoaderUtils( boolean online )
  +     {
  +         m_online = online;
  +     }
  +
       /**
        * Attempts to download and cache a remote artifact trying a set of remote
        * repositories.  The operation is not fail fast and so it keeps trying if
  @@ -65,14 +72,32 @@
        *      <code>destinationFile</code> against the remote <code>source</code>
        * @return URL a url referencing the local resource
        */
  -    public static URL getResource( Artifact artifact, 
  +    public URL getResource( Artifact artifact, 
           String [] repositories, File root, boolean timestamping ) 
           throws RepositoryException
       {
           Exception cause = null;
   
           File destination = new File( root, artifact.getPath() );
  -        
  +
  +        if( !m_online )
  +        {
  +            if( destination.exists() )
  +            {
  +                return getURL( destination );
  +            }
  +            else
  +            {
  +                final String error = 
  +                  "Artifact [" + artifact + "] does not exist in local cache (repository offline).";
  +                throw new RepositoryException( error );
  +            }
  +        }
  +
  +        //
  +        // continue with remote repository evaluation
  +        //
  + 
           for ( int i = 0; i < repositories.length; i++ )
           {
               try
  @@ -113,7 +138,7 @@
        *      <code>destinationFile</code> against the remote <code>source</code>
        * @return URL a url referencing the local resource
        */
  -    public static URL getResource( Artifact artifact, String mime,
  +    public URL getResource( Artifact artifact, String mime,
           String [] repositories, File root, boolean timestamping ) 
           throws RepositoryException
       {
  @@ -133,6 +158,26 @@
   
           File destination = new File( root, artifact.getPath() + "." + mime );
           
  +        if( !m_online )
  +        {
  +            if( destination.exists() )
  +            {
  +                return getURL( destination );
  +            }
  +            else
  +            {
  +                final String error = 
  +                  "Artifact ["
  +                  + artifact.getPath() + "." + mime 
  +                  + "] does not exist in local cache (repository offline).";
  +                throw new RepositoryException( error );
  +            }
  +        }
  +
  +        //
  +        // evaluate remote repositories
  +        //
  +
           for ( int i = 0; i < repositories.length; i++ )
           {
               try
  @@ -159,8 +204,6 @@
           }
           throw new RepositoryException( buffer.toString(), cause );
       }
  -
  -
       
       /**
        * Retrieve a remote file. 
  @@ -171,7 +214,7 @@
        *      <code>destinationFile</code> against the remote <code>source</code>
        * @return URL a url referencing the local resource
        */
  -    public static URL getResource( 
  +    public URL getResource( 
         String url, File destination, boolean timestamping ) 
         throws Exception
       {
  @@ -201,7 +244,7 @@
                       //
                       // set the remote tamestamp here because the pricision
                       // for a file last modification date is higher then the 
  -                    // connection last mosification date
  +                    // connection last modification date
                       //
   
                       remoteTimestamp = sourceFile.lastModified();
  @@ -213,9 +256,25 @@
               }
           }
   
  -        if( destination.exists() && !isSnapshot( destination ) )
  +        if( !m_online )
  +        {
  +             if( destination.exists() )
  +             {
  +                 return getURL( destination );
  +             }
  +             else
  +             {
  +                 final String error =
  +                   "Cannot retrieve url [" + url + "] while disconnected.";
  +                 throw new RepositoryException( error );
  +             }
  +        }
  +        else
           {
  -            return getURL( destination );
  +            if( destination.exists() && !isSnapshot( destination ) )
  +            {
  +                return getURL( destination );
  +            }
           }
   
           //
  @@ -337,6 +396,7 @@
   
           // An atomic operation and no risk of a corrupted
           // artifact content.
  +
           tempFile.renameTo( destination );
           
           // if (and only if) the use file time option is set, then the
  @@ -382,8 +442,10 @@
           }
       }
       
  -    private static void copyStream( InputStream src, OutputStream dest, boolean closeStreams, String title  )
  -        throws IOException
  +    private static void copyStream( 
  +      InputStream src, OutputStream dest, boolean closeStreams, 
  +      String title  )
  +      throws IOException
       {
           boolean progress = title != null;
           byte[] buffer = new byte[100 * 1024] ;
  @@ -398,7 +460,8 @@
                   if( progress )
                       System.out.print( "." ) ;
               }
  -        } finally
  +        } 
  +        finally
           {
               if( closeStreams )
               {
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: cvs-unsubscribe@avalon.apache.org
For additional commands, e-mail: cvs-help@avalon.apache.org