[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);
     }
 

Reply via email to