fix: FELIX-1608: non-existent OBR repository is fatal
added optional attribute to supress fatal error.
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@816243 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/sigil/common/obr/src/org/apache/felix/sigil/obr/OBRRepositoryProvider.java b/sigil/common/obr/src/org/apache/felix/sigil/obr/OBRRepositoryProvider.java
index 193c258..006c25f 100644
--- a/sigil/common/obr/src/org/apache/felix/sigil/obr/OBRRepositoryProvider.java
+++ b/sigil/common/obr/src/org/apache/felix/sigil/obr/OBRRepositoryProvider.java
@@ -19,9 +19,8 @@
package org.apache.felix.sigil.obr;
-
import java.io.File;
-import java.net.MalformedURLException;
+import java.io.IOException;
import java.net.URL;
import java.util.Properties;
import java.util.concurrent.TimeUnit;
@@ -32,30 +31,42 @@
import org.apache.felix.sigil.repository.IRepositoryProvider;
import org.apache.felix.sigil.repository.RepositoryException;
-
public class OBRRepositoryProvider implements IRepositoryProvider
{
- public IBundleRepository createRepository( String id, Properties preferences ) throws RepositoryException
+ public IBundleRepository createRepository(String id, Properties preferences)
+ throws RepositoryException
{
+ String urlStr = preferences.getProperty("url");
+ if (urlStr == null)
+ throw new RepositoryException("url is not specified.");
+
try
{
- URL repositoryURL = new URL( preferences.getProperty( "url" ) );
- File indexCache = new File( preferences.getProperty( "index" ) );
- File localCache = new File( preferences.getProperty( "cache" ) );
+ URL testURL = new URL(urlStr);
+ if (testURL.openConnection().getLastModified() == 0)
+ throw new RepositoryException("Failed to connect to repository: "
+ + urlStr);
+
+ URL repositoryURL = new URL(urlStr);
+ File indexCache = new File(preferences.getProperty("index"));
+ File localCache = new File(preferences.getProperty("cache"));
// TODO create user configurable updatePeriod
- long updatePeriod = TimeUnit.MILLISECONDS.convert( 60 * 60 * 24 * 7, TimeUnit.SECONDS );
- if ( preferences.getProperty( "inmemory" ) == null )
+ long updatePeriod = TimeUnit.MILLISECONDS.convert(60 * 60 * 24 * 7,
+ TimeUnit.SECONDS);
+ if (preferences.getProperty("inmemory") == null)
{
- return new NonCachingOBRBundleRepository( id, repositoryURL, indexCache, localCache, updatePeriod );
+ return new NonCachingOBRBundleRepository(id, repositoryURL, indexCache,
+ localCache, updatePeriod);
}
else
{
- return new CachingOBRBundleRepository( id, repositoryURL, indexCache, localCache, updatePeriod );
+ return new CachingOBRBundleRepository(id, repositoryURL, indexCache,
+ localCache, updatePeriod);
}
}
- catch ( MalformedURLException e )
+ catch (IOException e)
{
- throw new RepositoryException( "Invalid repository url", e );
+ throw new RepositoryException("Invalid repository url", e);
}
}
}
diff --git a/sigil/ivy/resolver/src/org/apache/felix/sigil/ivy/BldRepositoryManager.java b/sigil/ivy/resolver/src/org/apache/felix/sigil/ivy/BldRepositoryManager.java
index 9bd8599..55dffb9 100644
--- a/sigil/ivy/resolver/src/org/apache/felix/sigil/ivy/BldRepositoryManager.java
+++ b/sigil/ivy/resolver/src/org/apache/felix/sigil/ivy/BldRepositoryManager.java
@@ -19,7 +19,6 @@
package org.apache.felix.sigil.ivy;
-
import java.io.File;
import java.util.HashMap;
import java.util.Map;
@@ -30,72 +29,78 @@
import org.apache.felix.sigil.repository.IBundleRepository;
import org.apache.felix.sigil.repository.IRepositoryProvider;
-
public class BldRepositoryManager extends AbstractRepositoryManager
{
private static Map<String, String> aliases = new HashMap<String, String>();
static
{
- aliases.put( "filesystem", "org.apache.felix.sigil.core.repository.FileSystemRepositoryProvider" );
- aliases.put( "obr", "org.apache.felix.sigil.obr.OBRRepositoryProvider" );
- aliases.put( "project", "org.apache.felix.sigil.ivy.ProjectRepositoryProvider" );
- aliases.put( "system", "org.apache.felix.sigil.core.repository.SystemRepositoryProvider" );
+ aliases.put("filesystem",
+ "org.apache.felix.sigil.core.repository.FileSystemRepositoryProvider");
+ aliases.put("obr", "org.apache.felix.sigil.obr.OBRRepositoryProvider");
+ aliases.put("project", "org.apache.felix.sigil.ivy.ProjectRepositoryProvider");
+ aliases.put("system",
+ "org.apache.felix.sigil.core.repository.SystemRepositoryProvider");
};
private Map<String, Properties> repos;
-
- public BldRepositoryManager( Map<String, Properties> repos )
+ public BldRepositoryManager(Map<String, Properties> repos)
{
this.repos = repos;
}
-
@Override
protected void loadRepositories()
{
- for ( String name : repos.keySet() )
+ for (String name : repos.keySet())
{
- Properties repo = repos.get( name );
+ Properties repo = repos.get(name);
+ String optStr = repo.getProperty("optional", "false");
+ boolean optional = Boolean.parseBoolean(optStr.trim());
- String alias = repo.getProperty( IRepositoryConfig.REPOSITORY_PROVIDER );
- if ( alias == null )
+ String alias = repo.getProperty(IRepositoryConfig.REPOSITORY_PROVIDER);
+ if (alias == null)
{
- Log.error( "provider not specified for repository: " + name );
+ Log.error("provider not specified for repository: " + name);
continue;
}
- String provider = ( aliases.containsKey( alias ) ? aliases.get( alias ) : alias );
+ String provider = (aliases.containsKey(alias) ? aliases.get(alias) : alias);
- if ( alias.equals( "obr" ) )
+ if (alias.equals("obr"))
{
// cache is directory where synchronized bundles are stored;
// not needed in ivy.
- repo.setProperty( "cache", "/no-cache" );
+ repo.setProperty("cache", "/no-cache");
- if ( !repo.containsKey( "index" ) )
+ if (!repo.containsKey("index"))
{
// index is created as copy of url
- File indexFile = new File( System.getProperty( "java.io.tmpdir" ), "obr-index-" + name );
+ File indexFile = new File(System.getProperty("java.io.tmpdir"),
+ "obr-index-" + name);
indexFile.deleteOnExit();
- repo.setProperty( "index", indexFile.getAbsolutePath() );
+ repo.setProperty("index", indexFile.getAbsolutePath());
}
}
- int level = Integer.parseInt( repo.getProperty( IRepositoryConfig.REPOSITORY_LEVEL,
- IBundleRepository.NORMAL_PRIORITY + "" ) );
+ int level = Integer.parseInt(repo.getProperty(
+ IRepositoryConfig.REPOSITORY_LEVEL, IBundleRepository.NORMAL_PRIORITY
+ + ""));
try
{
- IRepositoryProvider instance = ( IRepositoryProvider ) ( Class.forName( provider ).newInstance() );
- IBundleRepository repository = instance.createRepository( name, repo );
- addRepository( repository, level );
- Log.verbose( "added repository: " + repository );
+ IRepositoryProvider instance = (IRepositoryProvider) (Class.forName(provider).newInstance());
+ IBundleRepository repository = instance.createRepository(name, repo);
+ addRepository(repository, level);
+ Log.verbose("added repository: " + repository);
}
- catch ( Exception e )
+ catch (Exception e)
{
- throw new Error( "createRepository() failed: " + repo + " : " + e, e );
+ String msg = "failed to create repository: " + repo + " : " + e;
+ if (!optional)
+ throw new Error(msg, e);
+ System.err.println("WARNING: " + msg);
}
}
}