Author: jbonofre Date: Thu Aug 18 07:47:12 2011 New Revision: 1159070 URL: http://svn.apache.org/viewvc?rev=1159070&view=rev Log: Use Resource relative URI (from the repository one)
Modified: karaf/sandbox/jbonofre/cave/trunk/server/backend/filesystem/src/main/java/org/apache/karaf/cave/server/backend/impl/CaveRepositoryImpl.java Modified: karaf/sandbox/jbonofre/cave/trunk/server/backend/filesystem/src/main/java/org/apache/karaf/cave/server/backend/impl/CaveRepositoryImpl.java URL: http://svn.apache.org/viewvc/karaf/sandbox/jbonofre/cave/trunk/server/backend/filesystem/src/main/java/org/apache/karaf/cave/server/backend/impl/CaveRepositoryImpl.java?rev=1159070&r1=1159069&r2=1159070&view=diff ============================================================================== --- karaf/sandbox/jbonofre/cave/trunk/server/backend/filesystem/src/main/java/org/apache/karaf/cave/server/backend/impl/CaveRepositoryImpl.java (original) +++ karaf/sandbox/jbonofre/cave/trunk/server/backend/filesystem/src/main/java/org/apache/karaf/cave/server/backend/impl/CaveRepositoryImpl.java Thu Aug 18 07:47:12 2011 @@ -19,6 +19,7 @@ package org.apache.karaf.cave.server.bac import org.apache.felix.bundlerepository.Resource; import org.apache.felix.bundlerepository.impl.DataModelHelperImpl; import org.apache.felix.bundlerepository.impl.RepositoryImpl; +import org.apache.felix.bundlerepository.impl.ResourceImpl; import org.apache.karaf.cave.server.backend.api.CaveRepository; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -103,8 +104,9 @@ public class CaveRepositoryImpl implemen * @param resource the resource to add. * @throws Exception in case of failure. */ - private void addResource(Resource resource) throws Exception { + private void addResource(ResourceImpl resource) throws Exception { if (resource != null) { + this.useResourceRelativeUri(resource); obrRepository.addResource(resource); obrRepository.setLastModified(System.currentTimeMillis()); } @@ -131,7 +133,7 @@ public class CaveRepositoryImpl implemen fos.flush(); fos.close(); // update the repository.xml - Resource resource = new DataModelHelperImpl().createResource(temp.toURI().toURL()); + ResourceImpl resource = (ResourceImpl) new DataModelHelperImpl().createResource(temp.toURI().toURL()); if (resource == null) { temp.delete(); LOGGER.warn("The {} artifact source is not a valid OSGi bundle", url); @@ -139,7 +141,7 @@ public class CaveRepositoryImpl implemen } File destination = new File(location, resource.getSymbolicName() + "-" + resource.getVersion() + ".jar"); temp.renameTo(destination); - resource = new DataModelHelperImpl().createResource(destination.toURI().toURL()); + resource = (ResourceImpl) new DataModelHelperImpl().createResource(destination.toURI().toURL()); this.addResource(resource); this.generateRepositoryXml(); } @@ -179,7 +181,7 @@ public class CaveRepositoryImpl implemen } else { // populate the repository try { - Resource resource = new DataModelHelperImpl().createResource(entry.toURI().toURL()); + ResourceImpl resource = (ResourceImpl) new DataModelHelperImpl().createResource(entry.toURI().toURL()); this.addResource(resource); } catch (IllegalArgumentException e) { LOGGER.warn(e.getMessage()); @@ -188,6 +190,23 @@ public class CaveRepositoryImpl implemen } /** + * Convert the Resource absolute URI to an URI relative to the repository one. + * @param resource the Resource to manipulate. + * @throws Exception in cave of URI convertion failure. + */ + private void useResourceRelativeUri(ResourceImpl resource) throws Exception { + String resourceURI = resource.getURI(); + String repositoryURI = location.toURI().toString(); + LOGGER.debug("Converting resource URI " + resourceURI + " relatively to repository URI " + repositoryURI); + if (resourceURI.startsWith(repositoryURI)) { + resourceURI = resourceURI.substring(repositoryURI.length()); + LOGGER.debug("Resource URI converted to " + resourceURI); + resource.put(Resource.URI, resourceURI); + } + + } + + /** * Get the File object of the OBR repository.xml file. * * @return the File corresponding to the OBR repository.xml.