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;
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;
* 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>();
}
+ public String getDistributionId() {
+ return uri;
+ }
+
+ public Iterator<? extends NameVersion> nameVersions() {
+ return wrappers.values().iterator();
+ }
+
public void run() {
if (mavenGroupIndexes && (version == null))
throw new SlcException(
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;