From: Mathieu Baudier Date: Wed, 5 Mar 2014 13:39:11 +0000 (+0000) Subject: Move RpmIndexer to repo X-Git-Tag: argeo-slc-2.1.7~225 X-Git-Url: http://git.argeo.org/?a=commitdiff_plain;h=180e64a5924f51c2396221d2d13f53c183aca7d7;hp=ae1a80773493b1834a30702daa9d0b4c6ec5fc57;p=gpl%2Fargeo-slc.git Move RpmIndexer to repo git-svn-id: https://svn.argeo.org/slc/trunk@6873 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- diff --git a/modules/org.argeo.slc.server.repo/META-INF/spring/services.xml b/modules/org.argeo.slc.server.repo/META-INF/spring/services.xml index 308000254..490bf9059 100644 --- a/modules/org.argeo.slc.server.repo/META-INF/spring/services.xml +++ b/modules/org.argeo.slc.server.repo/META-INF/spring/services.xml @@ -49,7 +49,7 @@ - + diff --git a/runtime/org.argeo.slc.repo/pom.xml b/runtime/org.argeo.slc.repo/pom.xml index 4613768d9..6dd5a7ccb 100644 --- a/runtime/org.argeo.slc.repo/pom.xml +++ b/runtime/org.argeo.slc.repo/pom.xml @@ -78,5 +78,10 @@ provided + + + org.argeo.tp + org.redline_rpm + \ No newline at end of file diff --git a/runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/RpmIndexer.java b/runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/RpmIndexer.java new file mode 100644 index 000000000..a91081d17 --- /dev/null +++ b/runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/RpmIndexer.java @@ -0,0 +1,104 @@ +package org.argeo.slc.repo; + +import static org.freecompany.redline.header.Header.HeaderTag.HEADERIMMUTABLE; +import static org.freecompany.redline.header.Signature.SignatureTag.SIGNATURES; + +import java.io.InputStream; +import java.nio.ByteBuffer; +import java.nio.channels.Channels; + +import javax.jcr.Node; +import javax.jcr.Property; + +import org.apache.commons.io.FilenameUtils; +import org.argeo.slc.SlcException; +import org.argeo.slc.jcr.SlcNames; +import org.argeo.slc.jcr.SlcTypes; +import org.freecompany.redline.ChannelWrapper.Key; +import org.freecompany.redline.ReadableChannelWrapper; +import org.freecompany.redline.header.AbstractHeader; +import org.freecompany.redline.header.Format; +import org.freecompany.redline.header.Header; + +/** Indexes an RPM file. */ +public class RpmIndexer implements NodeIndexer, SlcNames { + + @Override + public Boolean support(String path) { + return FilenameUtils.getExtension(path).equals("rpm"); + } + + @Override + public void index(Node node) { + try { + InputStream in = node.getNode(Node.JCR_CONTENT) + .getProperty(Property.JCR_DATA).getBinary().getStream(); + ReadableChannelWrapper channel = new ReadableChannelWrapper( + Channels.newChannel(in)); + Format format = readRpmInfo(channel); + + node.addMixin(SlcTypes.SLC_RPM); + node.setProperty(SLC_NAME, readTag(format, Header.HeaderTag.NAME)); + String rpmVersion = readTag(format, Header.HeaderTag.VERSION); + String rpmRelease = readTag(format, Header.HeaderTag.RELEASE); + node.setProperty(SLC_RPM_VERSION, rpmVersion); + node.setProperty(SLC_RPM_RELEASE, rpmRelease); + node.setProperty(SLC_VERSION, rpmVersion + "-" + rpmRelease); + + String arch = readTag(format, Header.HeaderTag.ARCH); + if (arch != null) + node.setProperty(SLC_RPM_ARCH, arch); + + String archiveSize = readTag(format, Header.HeaderTag.ARCHIVESIZE); + if (archiveSize != null) + node.setProperty(SLC_RPM_ARCHIVE_SIZE, + Long.parseLong(archiveSize)); + + node.getSession().save(); + } catch (Exception e) { + throw new SlcException("Cannot index " + node, e); + } + + } + + @SuppressWarnings("unused") + public Format readRpmInfo(ReadableChannelWrapper channel) throws Exception { + Format format = new Format(); + + Key lead = channel.start(); + format.getLead().read(channel); + // System.out.println( "Lead ended at '" + in.finish( lead) + "'."); + + Key signature = channel.start(); + int count = format.getSignature().read(channel); + int expected = ByteBuffer + .wrap((byte[]) format.getSignature().getEntry(SIGNATURES) + .getValues(), 8, 4).getInt() + / -16; + // System.out.println( "Signature ended at '" + in.finish( signature) + + // "' and contained '" + count + "' headers (expected '" + expected + + // "')."); + + Key header = channel.start(); + count = format.getHeader().read(channel); + expected = ByteBuffer.wrap( + (byte[]) format.getHeader().getEntry(HEADERIMMUTABLE) + .getValues(), 8, 4).getInt() + / -16; + // System.out.println( "Header ended at '" + in.finish( header) + + // " and contained '" + count + "' headers (expected '" + expected + + // "')."); + + return format; + } + + private String readTag(Format format, Header.HeaderTag tag) { + AbstractHeader.Entry entry = format.getHeader().getEntry(tag); + if (entry == null) + return null; + if (entry.getValues() == null) + return null; + Object[] values = (Object[]) entry.getValues(); + return values[0].toString().trim(); + } +} diff --git a/runtime/org.argeo.slc.rpmfactory/pom.xml b/runtime/org.argeo.slc.rpmfactory/pom.xml index dce9866d5..c6013609d 100644 --- a/runtime/org.argeo.slc.rpmfactory/pom.xml +++ b/runtime/org.argeo.slc.rpmfactory/pom.xml @@ -52,10 +52,5 @@ org.argeo.tp slf4j.org.apache.commons.logging - - org.argeo.tp - org.redline_rpm - - \ No newline at end of file diff --git a/runtime/org.argeo.slc.rpmfactory/src/main/java/org/argeo/slc/rpmfactory/core/RpmFactoryImpl.java b/runtime/org.argeo.slc.rpmfactory/src/main/java/org/argeo/slc/rpmfactory/core/RpmFactoryImpl.java index a5012fa4a..3ab7e7df2 100644 --- a/runtime/org.argeo.slc.rpmfactory/src/main/java/org/argeo/slc/rpmfactory/core/RpmFactoryImpl.java +++ b/runtime/org.argeo.slc.rpmfactory/src/main/java/org/argeo/slc/rpmfactory/core/RpmFactoryImpl.java @@ -39,6 +39,7 @@ import org.argeo.slc.SlcConstants; import org.argeo.slc.SlcException; import org.argeo.slc.core.execution.tasks.SystemCall; import org.argeo.slc.repo.NodeIndexerVisitor; +import org.argeo.slc.repo.RpmIndexer; import org.argeo.slc.rpmfactory.RpmFactory; import org.argeo.slc.rpmfactory.RpmRepository; diff --git a/runtime/org.argeo.slc.rpmfactory/src/main/java/org/argeo/slc/rpmfactory/core/RpmIndexer.java b/runtime/org.argeo.slc.rpmfactory/src/main/java/org/argeo/slc/rpmfactory/core/RpmIndexer.java deleted file mode 100644 index ef8b9914b..000000000 --- a/runtime/org.argeo.slc.rpmfactory/src/main/java/org/argeo/slc/rpmfactory/core/RpmIndexer.java +++ /dev/null @@ -1,105 +0,0 @@ -package org.argeo.slc.rpmfactory.core; - -import static org.freecompany.redline.header.Header.HeaderTag.HEADERIMMUTABLE; -import static org.freecompany.redline.header.Signature.SignatureTag.SIGNATURES; - -import java.io.InputStream; -import java.nio.ByteBuffer; -import java.nio.channels.Channels; - -import javax.jcr.Node; -import javax.jcr.Property; - -import org.apache.commons.io.FilenameUtils; -import org.argeo.slc.SlcException; -import org.argeo.slc.jcr.SlcNames; -import org.argeo.slc.jcr.SlcTypes; -import org.argeo.slc.repo.NodeIndexer; -import org.freecompany.redline.ChannelWrapper.Key; -import org.freecompany.redline.ReadableChannelWrapper; -import org.freecompany.redline.header.AbstractHeader; -import org.freecompany.redline.header.Format; -import org.freecompany.redline.header.Header; - -/** Indexes an RPM file. */ -public class RpmIndexer implements NodeIndexer, SlcNames { - - @Override - public Boolean support(String path) { - return FilenameUtils.getExtension(path).equals("rpm"); - } - - @Override - public void index(Node node) { - try { - InputStream in = node.getNode(Node.JCR_CONTENT) - .getProperty(Property.JCR_DATA).getBinary().getStream(); - ReadableChannelWrapper channel = new ReadableChannelWrapper( - Channels.newChannel(in)); - Format format = readRpmInfo(channel); - - node.addMixin(SlcTypes.SLC_RPM); - node.setProperty(SLC_NAME, readTag(format, Header.HeaderTag.NAME)); - String rpmVersion = readTag(format, Header.HeaderTag.VERSION); - String rpmRelease = readTag(format, Header.HeaderTag.RELEASE); - node.setProperty(SLC_RPM_VERSION, rpmVersion); - node.setProperty(SLC_RPM_RELEASE, rpmRelease); - node.setProperty(SLC_VERSION, rpmVersion + "-" + rpmRelease); - - String arch = readTag(format, Header.HeaderTag.ARCH); - if (arch != null) - node.setProperty(SLC_RPM_ARCH, arch); - - String archiveSize = readTag(format, Header.HeaderTag.ARCHIVESIZE); - if (archiveSize != null) - node.setProperty(SLC_RPM_ARCHIVE_SIZE, - Long.parseLong(archiveSize)); - - node.getSession().save(); - } catch (Exception e) { - throw new SlcException("Cannot index " + node, e); - } - - } - - @SuppressWarnings("unused") - public Format readRpmInfo(ReadableChannelWrapper channel) throws Exception { - Format format = new Format(); - - Key lead = channel.start(); - format.getLead().read(channel); - // System.out.println( "Lead ended at '" + in.finish( lead) + "'."); - - Key signature = channel.start(); - int count = format.getSignature().read(channel); - int expected = ByteBuffer - .wrap((byte[]) format.getSignature().getEntry(SIGNATURES) - .getValues(), 8, 4).getInt() - / -16; - // System.out.println( "Signature ended at '" + in.finish( signature) + - // "' and contained '" + count + "' headers (expected '" + expected + - // "')."); - - Key header = channel.start(); - count = format.getHeader().read(channel); - expected = ByteBuffer.wrap( - (byte[]) format.getHeader().getEntry(HEADERIMMUTABLE) - .getValues(), 8, 4).getInt() - / -16; - // System.out.println( "Header ended at '" + in.finish( header) + - // " and contained '" + count + "' headers (expected '" + expected + - // "')."); - - return format; - } - - private String readTag(Format format, Header.HeaderTag tag) { - AbstractHeader.Entry entry = format.getHeader().getEntry(tag); - if (entry == null) - return null; - if (entry.getValues() == null) - return null; - Object[] values = (Object[]) entry.getValues(); - return values[0].toString().trim(); - } -}