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