]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/osgi/ArchiveWrapper.java
Work on index policies.
[gpl/argeo-slc.git] / runtime / org.argeo.slc.repo / src / main / java / org / argeo / slc / repo / osgi / ArchiveWrapper.java
index 8d1cee58d4859750b4cd51fb408d7d6b2cd189ba..0adfe883f6d95ee7036dfa138c7d6da73d3061a9 100644 (file)
@@ -2,9 +2,9 @@ package org.argeo.slc.repo.osgi;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
-import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -21,9 +21,11 @@ import org.apache.commons.io.IOUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.argeo.jcr.JcrUtils;
+import org.argeo.slc.ModuleSet;
 import org.argeo.slc.NameVersion;
 import org.argeo.slc.SlcException;
 import org.argeo.slc.aether.ArtifactIdComparator;
+import org.argeo.slc.build.Distribution;
 import org.argeo.slc.repo.OsgiFactory;
 import org.argeo.slc.repo.RepoUtils;
 import org.sonatype.aether.artifact.Artifact;
@@ -36,15 +38,14 @@ import org.springframework.util.PathMatcher;
  * the jars, or import them directly if they are already OSGi bundles and don't
  * need further modification.
  */
-public class ArchiveWrapper implements Runnable {
+public class ArchiveWrapper implements Runnable, ModuleSet, Distribution {
        private final static Log log = LogFactory.getLog(ArchiveWrapper.class);
 
        private OsgiFactory osgiFactory;
        private String version;
-       
+
        private String uri;
-       private List<String> fallbackUris = new ArrayList<String>();
-       
+
        // jars to wrap as OSGi bundles
        private Map<String, BndWrapper> wrappers = new HashMap<String, BndWrapper>();
 
@@ -67,6 +68,14 @@ public class ArchiveWrapper implements Runnable {
 
        }
 
+       public String getDistributionId() {
+               return uri;
+       }
+
+       public Iterator<? extends NameVersion> nameVersions() {
+               return wrappers.values().iterator();
+       }
+
        public void run() {
                if (mavenGroupIndexes && (version == null))
                        throw new SlcException(
@@ -100,6 +109,24 @@ public class ArchiveWrapper implements Runnable {
                                                        sourceJarBytes, wrapper);
                                        addArtifactToIndex(binaries, wrapper.getGroupId(), artifact);
                                } else {
+                                       for (String wrapperKey : wrappers.keySet())
+                                               if (pathMatcher.match(wrapperKey, name)) {
+                                                       // first matched is taken
+                                                       BndWrapper wrapper = (BndWrapper) wrappers
+                                                                       .get(wrapperKey);
+                                                       // we must copy since the stream is closed by BND
+                                                       byte[] sourceJarBytes = IOUtils.toByteArray(zin);
+                                                       Artifact artifact = wrapZipEntry(javaSession,
+                                                                       zentry, sourceJarBytes, wrapper);
+                                                       addArtifactToIndex(binaries, wrapper.getGroupId(),
+                                                                       artifact);
+                                                       continue entries;
+                                               } else {
+                                                       if (log.isTraceEnabled())
+                                                               log.trace(name + " not matched by "
+                                                                               + wrapperKey);
+                                               }
+
                                        for (String exclude : excludes)
                                                if (pathMatcher.match(exclude, name))
                                                        continue entries;