[KARAF-3712] Fix resource lookup Project: http://git-wip-us.apache.org/repos/asf/karaf-cave/repo Commit: http://git-wip-us.apache.org/repos/asf/karaf-cave/commit/847a47f9 Tree: http://git-wip-us.apache.org/repos/asf/karaf-cave/tree/847a47f9 Diff: http://git-wip-us.apache.org/repos/asf/karaf-cave/diff/847a47f9
Branch: refs/heads/master Commit: 847a47f9c7f0a607aab0e7dee68282b4d97acac9 Parents: 450f551 Author: Guillaume Nodet <[email protected]> Authored: Mon May 4 11:41:27 2015 +0200 Committer: Guillaume Nodet <[email protected]> Committed: Mon May 4 11:48:51 2015 +0200 ---------------------------------------------------------------------- .../cave/server/storage/CaveRepositoryImpl.java | 41 +++++++++++++------- .../cave/server/storage/OsgiRepository.java | 23 +++++------ .../server/storage/CaveRepositoryImplTest.java | 3 ++ 3 files changed, 43 insertions(+), 24 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/karaf-cave/blob/847a47f9/server/storage/src/main/java/org/apache/karaf/cave/server/storage/CaveRepositoryImpl.java ---------------------------------------------------------------------- diff --git a/server/storage/src/main/java/org/apache/karaf/cave/server/storage/CaveRepositoryImpl.java b/server/storage/src/main/java/org/apache/karaf/cave/server/storage/CaveRepositoryImpl.java index 9230dea..d13c263 100644 --- a/server/storage/src/main/java/org/apache/karaf/cave/server/storage/CaveRepositoryImpl.java +++ b/server/storage/src/main/java/org/apache/karaf/cave/server/storage/CaveRepositoryImpl.java @@ -21,6 +21,7 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStreamWriter; +import java.net.MalformedURLException; import java.net.URL; import java.util.HashMap; import java.util.Map; @@ -72,7 +73,9 @@ public class CaveRepositoryImpl extends CaveRepository { this.createRepositoryDirectory(); if (scan) { - this.scan(); + scan(); + } else if (!getRepositoryXmlFile().exists()) { + generateRepositoryXml(); } } @@ -91,8 +94,7 @@ public class CaveRepositoryImpl extends CaveRepository { LOGGER.debug("Cave repository {} location has been created.", this.getName()); LOGGER.debug(locationFile.getAbsolutePath()); } - repository = new OsgiRepository(); - repository.setName(this.getName()); + repository = new OsgiRepository(getRepositoryXmlFile().toURI().toString(), getName()); } /** @@ -159,10 +161,9 @@ public class CaveRepositoryImpl extends CaveRepository { * @throws Exception in case of scan failure. */ public void scan() throws Exception { - repository = new OsgiRepository(); - repository.setName(this.getName()); - this.scan(new File(this.getLocation())); - this.generateRepositoryXml(); + repository = new OsgiRepository(getRepositoryXml().toString(), getName()); + scan(new File(getLocation())); + generateRepositoryXml(); } /** @@ -174,8 +175,10 @@ public class CaveRepositoryImpl extends CaveRepository { private void scan(File entry) throws Exception { if (entry.isDirectory()) { File[] children = entry.listFiles(); - for (int i = 0; i < children.length; i++) { - scan(children[i]); + if (children != null) { + for (int i = 0; i < children.length; i++) { + scan(children[i]); + } } } else { // populate the repository @@ -454,7 +457,7 @@ public class CaveRepositoryImpl extends CaveRepository { if (update) { resource = createResource(destination.toURI().toURL()); LOGGER.debug("Update OBR metadata with {}-{}", ResolverUtil.getSymbolicName(resource), ResolverUtil.getVersion(resource)); - this.addResource(resource); + addResource(resource); } } } @@ -511,9 +514,21 @@ public class CaveRepositoryImpl extends CaveRepository { } public URL getResourceByUri(String uri) { - // construct the file starting from the repository URI - // TODO - throw new RuntimeException("Not implemented yet"); + try { + for (Resource resource : repository.getResources()) { + for (Capability cap : resource.getCapabilities(null)) { + if (CONTENT_NAMESPACE.equals(cap.getNamespace())) { + Object url = cap.getAttributes().get(CAPABILITY_URL_ATTRIBUTE); + if (uri.equals(url)) { + return new File(getLocation(), uri).toURI().toURL(); + } + } + } + } + return null; + } catch (MalformedURLException e) { + throw new IllegalStateException(e); + } } /** http://git-wip-us.apache.org/repos/asf/karaf-cave/blob/847a47f9/server/storage/src/main/java/org/apache/karaf/cave/server/storage/OsgiRepository.java ---------------------------------------------------------------------- diff --git a/server/storage/src/main/java/org/apache/karaf/cave/server/storage/OsgiRepository.java b/server/storage/src/main/java/org/apache/karaf/cave/server/storage/OsgiRepository.java index 4407086..5d7f54d 100644 --- a/server/storage/src/main/java/org/apache/karaf/cave/server/storage/OsgiRepository.java +++ b/server/storage/src/main/java/org/apache/karaf/cave/server/storage/OsgiRepository.java @@ -13,10 +13,10 @@ public class OsgiRepository extends XmlRepository { StaxParser.XmlRepository repository; - public OsgiRepository() { - this(UUID.randomUUID().toString()); + public OsgiRepository(String url, String name) { + this(url); repository = new StaxParser.XmlRepository(); - String url = getUrl(); + repository.name = name; getLoaders().put(url, new XmlLoader(url, repository)); } @@ -25,27 +25,28 @@ public class OsgiRepository extends XmlRepository { } public void addResource(Resource resource) { + load(); repository.resources.add(resource); super.addResource(resource); } - public String getName() { - return repository.name; - } - - public void setName(String name) { - repository.name = name; - } - public long getIncrement() { + load(); return repository.increment; } public void setIncrement(long increment) { + load(); repository.increment = increment; } public void writeRepository(OutputStreamWriter writer) throws XMLStreamException { StaxParser.write(repository, writer); } + + private void load() { + // Force repository load + getResources(); + } + } http://git-wip-us.apache.org/repos/asf/karaf-cave/blob/847a47f9/server/storage/src/test/java/org/apache/karaf/cave/server/storage/CaveRepositoryImplTest.java ---------------------------------------------------------------------- diff --git a/server/storage/src/test/java/org/apache/karaf/cave/server/storage/CaveRepositoryImplTest.java b/server/storage/src/test/java/org/apache/karaf/cave/server/storage/CaveRepositoryImplTest.java index e5f496e..3eddf26 100644 --- a/server/storage/src/test/java/org/apache/karaf/cave/server/storage/CaveRepositoryImplTest.java +++ b/server/storage/src/test/java/org/apache/karaf/cave/server/storage/CaveRepositoryImplTest.java @@ -16,6 +16,7 @@ */ package org.apache.karaf.cave.server.storage; +import org.apache.commons.io.FileUtils; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -24,6 +25,7 @@ import org.junit.runners.JUnit4; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; +import java.io.File; import java.net.URL; /** @@ -36,6 +38,7 @@ public class CaveRepositoryImplTest { @Before public void setUp() throws Exception { + FileUtils.deleteDirectory(new File("target/test-repository")); repository = new CaveRepositoryImpl("test", "target/test-repository", false); }
