Author: iocanel
Date: Thu Jan 12 03:09:40 2012
New Revision: 1230380
URL: http://svn.apache.org/viewvc?rev=1230380&view=rev
Log:
[SMX4-1035] Added an OSGi bundle for snappy-java. Minor modification to
bundles-pom.
Added:
servicemix/smx4/bundles/trunk/snappy-java-1.0.4.1/
servicemix/smx4/bundles/trunk/snappy-java-1.0.4.1/pom.xml
servicemix/smx4/bundles/trunk/snappy-java-1.0.4.1/src/
servicemix/smx4/bundles/trunk/snappy-java-1.0.4.1/src/main/
servicemix/smx4/bundles/trunk/snappy-java-1.0.4.1/src/main/java/
servicemix/smx4/bundles/trunk/snappy-java-1.0.4.1/src/main/java/org/
servicemix/smx4/bundles/trunk/snappy-java-1.0.4.1/src/main/java/org/xerial/
servicemix/smx4/bundles/trunk/snappy-java-1.0.4.1/src/main/java/org/xerial/snappy/
servicemix/smx4/bundles/trunk/snappy-java-1.0.4.1/src/main/java/org/xerial/snappy/Snappy.java
(with props)
servicemix/smx4/bundles/trunk/snappy-java-1.0.4.1/src/main/java/org/xerial/snappy/SnappyBundleActivator.java
(with props)
servicemix/smx4/bundles/trunk/snappy-java-1.0.4.1/src/main/resources/
servicemix/smx4/bundles/trunk/snappy-java-1.0.4.1/src/main/resources/OSGI-INF/
servicemix/smx4/bundles/trunk/snappy-java-1.0.4.1/src/main/resources/OSGI-INF/bundle.info
Modified:
servicemix/smx4/bundles/trunk/bundles-pom/pom.xml
servicemix/smx4/bundles/trunk/pom.xml
Modified: servicemix/smx4/bundles/trunk/bundles-pom/pom.xml
URL:
http://svn.apache.org/viewvc/servicemix/smx4/bundles/trunk/bundles-pom/pom.xml?rev=1230380&r1=1230379&r2=1230380&view=diff
==============================================================================
--- servicemix/smx4/bundles/trunk/bundles-pom/pom.xml (original)
+++ servicemix/smx4/bundles/trunk/bundles-pom/pom.xml Thu Jan 12 03:09:40 2012
@@ -30,7 +30,7 @@
<groupId>org.apache.servicemix.bundles</groupId>
<artifactId>bundles-pom</artifactId>
<packaging>pom</packaging>
- <version>8-SNAPSHOT</version>
+ <version>9-SNAPSHOT</version>
<name>Apache ServiceMix :: Bundles</name>
<properties>
@@ -103,6 +103,15 @@
<artifactId>maven-jarsigner-plugin</artifactId>
<version>1.2</version>
</plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>2.3.2</version>
+ <configuration>
+ <source>1.5</source>
+ <target>1.5</target>
+ </configuration>
+ </plugin>
</plugins>
</pluginManagement>
@@ -111,7 +120,7 @@
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
- <version>2.1.0</version>
+ <version>2.3.6</version>
<extensions>true</extensions>
<configuration>
<instructions>
@@ -122,6 +131,8 @@
<Private-Package>${servicemix.osgi.private.pkg}</Private-Package>
<DynamicImport-Package>${servicemix.osgi.dynamicimport.pkg}</DynamicImport-Package>
<Embed-Dependency>${servicemix.osgi.embed.dependency}</Embed-Dependency>
+
<Bundle-NativeCode>${servicemix.osgi.native}</Bundle-NativeCode>
+
<Bundle-Activator>${servicemix.osgi.activator}</Bundle-Activator>
<_failok>${servicemix.osgi.failok}</_failok>
<_versionpolicy>[$(version;==;$(@)),$(version;+;$(@)))</_versionpolicy>
<_removeheaders>Ignore-Package,Include-Resource,Private-Package,Embed-Dependency</_removeheaders>
Modified: servicemix/smx4/bundles/trunk/pom.xml
URL:
http://svn.apache.org/viewvc/servicemix/smx4/bundles/trunk/pom.xml?rev=1230380&r1=1230379&r2=1230380&view=diff
==============================================================================
--- servicemix/smx4/bundles/trunk/pom.xml (original)
+++ servicemix/smx4/bundles/trunk/pom.xml Thu Jan 12 03:09:40 2012
@@ -41,6 +41,7 @@
<name>Apache ServiceMix :: Bundles</name>
<modules>
+ <module>bundles-pom</module>
<module>smack-3.2.1</module>
<module>paranamer-2.4</module>
<module>jopt-simple-4.3</module>
@@ -49,6 +50,7 @@
<module>twitter4j-2.2.5</module>
<module>libthrift-0.7.0</module>
<module>libthrift-0.8.0</module>
+ <module>snappy-java-1.0.4.1</module>
</modules>
</project>
Added: servicemix/smx4/bundles/trunk/snappy-java-1.0.4.1/pom.xml
URL:
http://svn.apache.org/viewvc/servicemix/smx4/bundles/trunk/snappy-java-1.0.4.1/pom.xml?rev=1230380&view=auto
==============================================================================
--- servicemix/smx4/bundles/trunk/snappy-java-1.0.4.1/pom.xml (added)
+++ servicemix/smx4/bundles/trunk/snappy-java-1.0.4.1/pom.xml Thu Jan 12
03:09:40 2012
@@ -0,0 +1,140 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+ <!--
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.servicemix.bundles</groupId>
+ <artifactId>bundles-pom</artifactId>
+ <version>9-SNAPSHOT</version>
+ <relativePath>../bundles-pom/pom.xml</relativePath>
+ </parent>
+
+ <groupId>org.apache.servicemix.bundles</groupId>
+ <artifactId>org.apache.servicemix.bundles.snappy-java</artifactId>
+ <version>1.0.4.1_1-SNAPSHOT</version>
+ <packaging>bundle</packaging>
+ <name>Apache ServiceMix :: Bundles :: ${pkgArtifactId}</name>
+ <description>This OSGi bundle wraps ${pkgArtifactId} ${pkgVersion} jar
file.</description>
+
+ <properties>
+ <pkgGroupId>org.xerial.snappy</pkgGroupId>
+ <pkgArtifactId>snappy-java</pkgArtifactId>
+ <pkgVersion>1.0.4.1</pkgVersion>
+ <servicemix.osgi.export>
+
org.xerial.snappy;version="${pkgVersion}";-split-package:=merge-first
+ </servicemix.osgi.export>
+ <servicemix.osgi.import.pkg>
+ !org.xerial.snappy*,
+ *
+ </servicemix.osgi.import.pkg>
+ <servicemix.osgi.native>
+
org/xerial/snappy/native/Mac/x86_64/libsnappyjava.jnilib;osname=macosx;processor=x86_64,
+
org/xerial/snappy/native/Mac/i386/libsnappyjava.jnilib;osname=macosx;processor=x86,
+
org/xerial/snappy/native/Linux/amd64/libsnappyjava.so;osname=linux;processor=x86_64,
+
org/xerial/snappy/native/Linux/i386/libsnappyjava.so;osname=linux;processor=x86,
+
org/xerial/snappy/native/Windows/x86/snappyjava.dll;osname=win32;processor=x86,
+
org/xerial/snappy/native/Windows/amd64/snappyjava.dll;osname=win32;processor=x86_64
+ </servicemix.osgi.native>
+
<servicemix.osgi.activator>org.xerial.snappy.SnappyBundleActivator</servicemix.osgi.activator>
+ </properties>
+
+ <dependencies>
+ <dependency>
+ <groupId>${pkgGroupId}</groupId>
+ <artifactId>${pkgArtifactId}</artifactId>
+ <version>${pkgVersion}</version>
+ <optional>true</optional>
+ </dependency>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.core</artifactId>
+ <version>4.2.0</version>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <resources>
+ <resource>
+ <directory>target/nativelibs</directory>
+ <includes>
+ <include>**/*</include>
+ </includes>
+ </resource>
+ </resources>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-dependency-plugin</artifactId>
+ <version>2.4</version>
+ <executions>
+ <execution>
+ <id>unpack</id>
+ <phase>generate-resources</phase>
+ <goals>
+ <goal>unpack</goal>
+ </goals>
+ <configuration>
+ <artifactItems>
+ <artifactItem>
+ <groupId>${pkgGroupId}</groupId>
+ <artifactId>${pkgArtifactId}</artifactId>
+ <version>${pkgVersion}</version>
+ <type>jar</type>
+ <overWrite>true</overWrite>
+
<outputDirectory>${project.build.directory}/nativelibs</outputDirectory>
+ <includes>**/native/**/*</includes>
+ </artifactItem>
+ </artifactItems>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-shade-plugin</artifactId>
+ <executions>
+ <execution>
+ <phase>package</phase>
+ <goals>
+ <goal>shade</goal>
+ </goals>
+ <configuration>
+ <artifactSet>
+ <includes>
+
<include>${pkgGroupId}:${pkgArtifactId}</include>
+ </includes>
+ </artifactSet>
+ <filters>
+ <filter>
+
<artifact>${pkgGroupId}:${pkgArtifactId}</artifact>
+ <excludes>
+ <exclude>**</exclude>
+ </excludes>
+ </filter>
+ </filters>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
Added:
servicemix/smx4/bundles/trunk/snappy-java-1.0.4.1/src/main/java/org/xerial/snappy/Snappy.java
URL:
http://svn.apache.org/viewvc/servicemix/smx4/bundles/trunk/snappy-java-1.0.4.1/src/main/java/org/xerial/snappy/Snappy.java?rev=1230380&view=auto
==============================================================================
---
servicemix/smx4/bundles/trunk/snappy-java-1.0.4.1/src/main/java/org/xerial/snappy/Snappy.java
(added)
+++
servicemix/smx4/bundles/trunk/snappy-java-1.0.4.1/src/main/java/org/xerial/snappy/Snappy.java
Thu Jan 12 03:09:40 2012
@@ -0,0 +1,755 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.xerial.snappy;
+
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URL;
+import java.nio.ByteBuffer;
+import java.nio.charset.Charset;
+import java.util.Properties;
+
+/**
+ * Snappy API for data compression/decompression
+ *
+ * @author leo
+ *
+ */
+public class Snappy
+{
+ /**
+ * An instance of SnappyNativeAPI
+ */
+ private static SnappyNativeAPI impl = new SnappyNative();
+
+ /**
+ * Copy bytes from source to destination
+ *
+ * @param src
+ * pointer to the source array
+ * @param offset
+ * byte offset in the source array
+ * @param byteLength
+ * the number of bytes to copy
+ * @param dest
+ * pointer to the destination array
+ * @param dest_offset
+ * byte offset in the destination array
+ * @throws IOException
+ */
+ public static void arrayCopy(Object src, int offset, int byteLength,
Object dest, int dest_offset)
+ throws IOException {
+ ((SnappyNativeAPI) impl).arrayCopy(src, offset, byteLength, dest,
dest_offset);
+ }
+
+ /**
+ * High-level API for compressing the input byte array. This method
performs
+ * array copy to generate the result. If you want to reduce the memory copy
+ * cost, use {@link #compress(byte[], int, int, byte[], int)} or
+ * {@link #compress(ByteBuffer, ByteBuffer)}.
+ *
+ * @param input
+ * the input data
+ * @return the compressed byte array
+ * @throws IOException
+ */
+ public static byte[] compress(byte[] input) throws IOException {
+ return rawCompress(input, input.length);
+ }
+
+ /**
+ * Compress the input buffer content in [inputOffset,
+ * ...inputOffset+inputLength) then output to the specified output buffer.
+ *
+ * @param input
+ * @param inputOffset
+ * @param inputLength
+ * @param output
+ * @param outputOffset
+ * @return byte size of the compressed data
+ * @throws IOException
+ * when failed to access the input/output buffer
+ */
+ public static int compress(byte[] input, int inputOffset, int inputLength,
byte[] output, int outputOffset)
+ throws IOException {
+ return rawCompress(input, inputOffset, inputLength, output,
outputOffset);
+ }
+
+ /**
+ * Compress the content in the given input buffer. After the compression,
+ * you can retrieve the compressed data from the output buffer [pos() ...
+ * limit()) (compressed data size = limit() - pos() = remaining())
+ *
+ * @param uncompressed
+ * buffer[pos() ... limit()) containing the input data
+ * @param compressed
+ * output of the compressed data. Uses range [pos()..].
+ * @return byte size of the compressed data.
+ *
+ * @throws SnappyError
+ * when the input is not a direct buffer
+ */
+ public static int compress(ByteBuffer uncompressed, ByteBuffer compressed)
throws IOException {
+
+ if (!uncompressed.isDirect())
+ throw new SnappyError(SnappyErrorCode.NOT_A_DIRECT_BUFFER, "input
is not a direct buffer");
+ if (!compressed.isDirect())
+ throw new SnappyError(SnappyErrorCode.NOT_A_DIRECT_BUFFER,
"destination is not a direct buffer");
+
+ // input: uncompressed[pos(), limit())
+ // output: compressed
+ int uPos = uncompressed.position();
+ int uLen = uncompressed.remaining();
+ int compressedSize = ((SnappyNativeAPI)
impl).rawCompress(uncompressed, uPos, uLen, compressed,
+ compressed.position());
+
+ // pos limit
+ // [ ......BBBBBBB.........]
+ compressed.limit(compressed.position() + compressedSize);
+
+ return compressedSize;
+ }
+
+ /**
+ * Compress the input char array
+ *
+ * @param input
+ * @return the compressed data
+ */
+ public static byte[] compress(char[] input) {
+ return rawCompress(input, input.length * 2); // char uses 2 bytes
+ }
+
+ /**
+ * Compress the input double array
+ *
+ * @param input
+ * @return the compressed data
+ */
+ public static byte[] compress(double[] input) {
+ return rawCompress(input, input.length * 8); // double uses 8 bytes
+ }
+
+ /**
+ * Compress the input float array
+ *
+ * @param input
+ * @return the compressed data
+ */
+ public static byte[] compress(float[] input) {
+ return rawCompress(input, input.length * 4); // float uses 4 bytes
+ }
+
+ /**
+ * Compress the input int array
+ *
+ * @param input
+ * @return the compressed data
+ */
+ public static byte[] compress(int[] input) {
+ return rawCompress(input, input.length * 4); // int uses 4 bytes
+ }
+
+ /**
+ * Compress the input long array
+ *
+ * @param input
+ * @return the compressed data
+ */
+ public static byte[] compress(long[] input) {
+ return rawCompress(input, input.length * 8); // long uses 8 bytes
+ }
+
+ /**
+ * Compress the input short array
+ *
+ * @param input
+ * @return the compressed data
+ */
+ public static byte[] compress(short[] input) {
+ return rawCompress(input, input.length * 2); // short uses 2 bytes
+ }
+
+ /**
+ * Compress the input String
+ *
+ * @param s
+ * @return the compressed data
+ * @throws IOException
+ */
+ public static byte[] compress(String s) throws IOException {
+ try {
+ return compress(s, "UTF-8");
+ }
+ catch (UnsupportedEncodingException e) {
+ throw new IllegalStateException("UTF-8 encoder is not found");
+ }
+ }
+
+ /**
+ * Compress the input string using the given encoding
+ *
+ * @param s
+ * @param encoding
+ * @return the compressed data
+ * @throws UnsupportedEncodingException
+ * @throws IOException
+ */
+ public static byte[] compress(String s, String encoding) throws
UnsupportedEncodingException, IOException {
+ byte[] data = s.getBytes(encoding);
+ return compress(data);
+ }
+
+ /**
+ * Compress the input string using the given encoding
+ *
+ * @param s
+ * @param encoding
+ * @return the compressed data
+ * @throws UnsupportedEncodingException
+ * @throws IOException
+ */
+ public static byte[] compress(String s, Charset encoding) throws
IOException {
+ byte[] data = s.getBytes(encoding);
+ return compress(data);
+ }
+
+ /**
+ * Get the native library version of the snappy
+ *
+ * @return native library version
+ */
+ public static String getNativeLibraryVersion() {
+
+ URL versionFile =
Snappy.class.getResource("/org/xerial/snappy/VERSION");
+
+ String version = "unknown";
+ try {
+ if (versionFile != null) {
+ Properties versionData = new Properties();
+ versionData.load(versionFile.openStream());
+ version = versionData.getProperty("version", version);
+ if (version.equals("unknown"))
+ version = versionData.getProperty("VERSION", version);
+ version = version.trim().replaceAll("[^0-9\\.]", "");
+ }
+ }
+ catch (IOException e) {
+ e.printStackTrace();
+ }
+ return version;
+ }
+
+ /**
+ * Returns true iff the contents of compressed buffer [offset,
+ * offset+length) can be uncompressed successfully. Does not return the
+ * uncompressed data. Takes time proportional to the input length, but is
+ * usually at least a factor of four faster than actual decompression.
+ */
+ public static boolean isValidCompressedBuffer(byte[] input, int offset,
int length) throws IOException {
+ if (input == null)
+ throw new NullPointerException("input is null");
+ return ((SnappyNativeAPI) impl).isValidCompressedBuffer(input, offset,
length);
+ }
+
+ /**
+ * Returns true iff the contents of compressed buffer [offset,
+ * offset+length) can be uncompressed successfully. Does not return the
+ * uncompressed data. Takes time proportional to the input length, but is
+ * usually at least a factor of four faster than actual decompression.
+ */
+ public static boolean isValidCompressedBuffer(byte[] input) throws
IOException {
+ return isValidCompressedBuffer(input, 0, input.length);
+ }
+
+ /**
+ * Returns true iff the contents of compressed buffer [pos() ... limit())
+ * can be uncompressed successfully. Does not return the uncompressed data.
+ * Takes time proportional to the input length, but is usually at least a
+ * factor of four faster than actual decompression.
+ */
+ public static boolean isValidCompressedBuffer(ByteBuffer compressed)
throws IOException {
+ return ((SnappyNativeAPI) impl).isValidCompressedBuffer(compressed,
compressed.position(),
+ compressed.remaining());
+ }
+
+ /**
+ * Get the maximum byte size needed for compressing data of the given byte
+ * size.
+ *
+ * @param byteSize
+ * byte size of the data to compress
+ * @return maximum byte size of the compressed data
+ */
+ public static int maxCompressedLength(int byteSize) {
+ return ((SnappyNativeAPI) impl).maxCompressedLength(byteSize);
+ }
+
+ /**
+ * Compress the input data and produce a byte array of the uncompressed
data
+ *
+ * @param data
+ * input array. The input MUST be an array type
+ * @param byteSize
+ * the input byte size
+ * @return compressed data
+ */
+ public static byte[] rawCompress(Object data, int byteSize) {
+ byte[] buf = new byte[Snappy.maxCompressedLength(byteSize)];
+ int compressedByteSize = ((SnappyNativeAPI) impl).rawCompress(data, 0,
byteSize, buf, 0);
+ byte[] result = new byte[compressedByteSize];
+ System.arraycopy(buf, 0, result, 0, compressedByteSize);
+ return result;
+ }
+
+ /**
+ * Compress the input buffer [offset,... ,offset+length) contents, then
+ * write the compressed data to the output buffer[offset, ...)
+ *
+ * @param input
+ * input array. This MUST be a primitive array type
+ * @param inputOffset
+ * byte offset at the output array
+ * @param inputLength
+ * byte length of the input data
+ * @param output
+ * output array. This MUST be a primitive array type
+ * @param outputOffset
+ * byte offset at the output array
+ * @return byte size of the compressed data
+ * @throws IOException
+ */
+ public static int rawCompress(Object input, int inputOffset, int
inputLength, byte[] output, int outputOffset)
+ throws IOException {
+ if (input == null || output == null)
+ throw new NullPointerException("input or output is null");
+
+ int compressedSize = ((SnappyNativeAPI) impl)
+ .rawCompress(input, inputOffset, inputLength, output,
outputOffset);
+ return compressedSize;
+ }
+
+ /**
+ * Uncompress the content in the input buffer. The uncompressed data is
+ * written to the output buffer.
+ *
+ * Note that if you pass the wrong data or the range [inputOffset,
+ * inputOffset + inputLength) that cannot be uncompressed, your JVM might
+ * crash due to the access violation exception issued in the native code
+ * written in C++. To avoid this type of crash, use
+ * {@link #isValidCompressedBuffer(byte[], int, int)} first.
+ *
+ * @param input
+ * input byte array
+ * @param inputOffset
+ * byte offset in the input byte array
+ * @param inputLength
+ * byte length of the input data
+ * @param output
+ * output buffer, MUST be a primitive type array
+ * @param outputOffset
+ * byte offset in the output buffer
+ * @return the byte size of the uncompressed data
+ * @throws IOException
+ * when failed to uncompress the input data
+ */
+ public static int rawUncompress(byte[] input, int inputOffset, int
inputLength, Object output, int outputOffset)
+ throws IOException {
+ if (input == null || output == null)
+ throw new NullPointerException("input or output is null");
+ return ((SnappyNativeAPI) impl).rawUncompress(input, inputOffset,
inputLength, output, outputOffset);
+ }
+
+ /**
+ * High-level API for uncompressing the input byte array.
+ *
+ * @param input
+ * @return the uncompressed byte array
+ * @throws IOException
+ */
+ public static byte[] uncompress(byte[] input) throws IOException {
+ byte[] result = new byte[Snappy.uncompressedLength(input)];
+ int byteSize = Snappy.uncompress(input, 0, input.length, result, 0);
+ return result;
+ }
+
+ /**
+ * Uncompress the content in the input buffer. The uncompressed data is
+ * written to the output buffer.
+ *
+ * Note that if you pass the wrong data or the range [inputOffset,
+ * inputOffset + inputLength) that cannot be uncompressed, your JVM might
+ * crash due to the access violation exception issued in the native code
+ * written in C++. To avoid this type of crash, use
+ * {@link #isValidCompressedBuffer(byte[], int, int)} first.
+ *
+ * @param input
+ * @param inputOffset
+ * @param inputLength
+ * @param output
+ * @param outputOffset
+ * @return the byte size of the uncompressed data
+ * @throws IOException
+ */
+ public static int uncompress(byte[] input, int inputOffset, int
inputLength, byte[] output, int outputOffset)
+ throws IOException {
+ return rawUncompress(input, inputOffset, inputLength, output,
outputOffset);
+ }
+
+ /**
+ * Uncompress the content in the input buffer. The result is dumped to the
+ * specified output buffer.
+ *
+ * Note that if you pass the wrong data or the range [pos(), limit()) that
+ * cannot be uncompressed, your JVM might crash due to the access violation
+ * exception issued in the native code written in C++. To avoid this type
of
+ * crash, use {@link #isValidCompressedBuffer(ByteBuffer)} first.
+ *
+ *
+ * @param compressed
+ * buffer[pos() ... limit()) containing the input data
+ * @param uncompressed
+ * output of the the uncompressed data. It uses buffer[pos()..]
+ * @return uncompressed data size
+ *
+ * @throws IOException
+ * when failed to uncompress the given input
+ * @throws SnappyError
+ * when the input is not a direct buffer
+ */
+ public static int uncompress(ByteBuffer compressed, ByteBuffer
uncompressed) throws IOException {
+
+ if (!compressed.isDirect())
+ throw new SnappyError(SnappyErrorCode.NOT_A_DIRECT_BUFFER, "input
is not a direct buffer");
+ if (!uncompressed.isDirect())
+ throw new SnappyError(SnappyErrorCode.NOT_A_DIRECT_BUFFER,
"destination is not a direct buffer");
+
+ int cPos = compressed.position();
+ int cLen = compressed.remaining();
+
+ // pos limit
+ // [ ......UUUUUU.........]
+ int decompressedSize = ((SnappyNativeAPI)
impl).rawUncompress(compressed, cPos, cLen, uncompressed,
+ uncompressed.position());
+ uncompressed.limit(uncompressed.position() + decompressedSize);
+
+ return decompressedSize;
+ }
+
+ /**
+ * Uncompress the input data as char array
+ *
+ * @param input
+ * @return the uncompressed data
+ * @throws IOException
+ */
+ public static char[] uncompressCharArray(byte[] input) throws IOException {
+ return uncompressCharArray(input, 0, input.length);
+ }
+
+ /**
+ * Uncompress the input[offset, .., offset+length) as a char array
+ *
+ * @param input
+ * @param offset
+ * @param length
+ * @return the uncompressed data
+ * @throws IOException
+ */
+ public static char[] uncompressCharArray(byte[] input, int offset, int
length) throws IOException {
+ int uncompressedLength = Snappy.uncompressedLength(input, offset,
length);
+ char[] result = new char[uncompressedLength / 2];
+ int byteSize = ((SnappyNativeAPI) impl).rawUncompress(input, offset,
length, result, 0);
+ return result;
+ }
+
+ /**
+ * Uncompress the input as a double array
+ *
+ * @param input
+ * @return the uncompressed data
+ * @throws IOException
+ */
+ public static double[] uncompressDoubleArray(byte[] input) throws
IOException {
+ int uncompressedLength = Snappy.uncompressedLength(input, 0,
input.length);
+ double[] result = new double[uncompressedLength / 8];
+ int byteSize = ((SnappyNativeAPI) impl).rawUncompress(input, 0,
input.length, result, 0);
+ return result;
+ }
+
+ /**
+ * Get the uncompressed byte size of the given compressed input. This
+ * operation takes O(1) time.
+ *
+ * @param input
+ * @return uncompressed byte size of the the given input data
+ * @throws IOException
+ * when failed to uncompress the given input. The error code is
+ * {@link SnappyErrorCode#PARSING_ERROR}
+ */
+ public static int uncompressedLength(byte[] input) throws IOException {
+ return ((SnappyNativeAPI) impl).uncompressedLength(input, 0,
input.length);
+ }
+
+ /**
+ * Get the uncompressed byte size of the given compressed input. This
+ * operation takes O(1) time.
+ *
+ * @param input
+ * @param offset
+ * @param length
+ * @return uncompressed byte size of the the given input data
+ * @throws IOException
+ * when failed to uncompress the given input. The error code is
+ * {@link SnappyErrorCode#PARSING_ERROR}
+ */
+ public static int uncompressedLength(byte[] input, int offset, int length)
throws IOException {
+ if (input == null)
+ throw new NullPointerException("input is null");
+
+ return ((SnappyNativeAPI) impl).uncompressedLength(input, offset,
length);
+ }
+
+ /**
+ * Get the uncompressed byte size of the given compressed input. This
+ * operation taks O(1) time.
+ *
+ * @param compressed
+ * input data [pos() ... limit())
+ * @return uncompressed byte length of the given input
+ * @throws IOException
+ * when failed to uncompress the given input. The error code is
+ * {@link SnappyErrorCode#PARSING_ERROR}
+ * @throws SnappyError
+ * when the input is not a direct buffer
+ */
+ public static int uncompressedLength(ByteBuffer compressed) throws
IOException {
+ if (!compressed.isDirect())
+ throw new SnappyError(SnappyErrorCode.NOT_A_DIRECT_BUFFER, "input
is not a direct buffer");
+
+ return ((SnappyNativeAPI) impl).uncompressedLength(compressed,
compressed.position(), compressed.remaining());
+ }
+
+ /**
+ * Uncompress the input as a float array
+ *
+ * @param input
+ * @return the uncompressed data
+ * @throws IOException
+ */
+ public static float[] uncompressFloatArray(byte[] input) throws
IOException {
+ return uncompressFloatArray(input, 0, input.length);
+ }
+
+ /**
+ * Uncompress the input[offset, offset+length) as a float array
+ *
+ * @param input
+ * @param offset
+ * @param length
+ * @return the uncompressed data
+ * @throws IOException
+ */
+ public static float[] uncompressFloatArray(byte[] input, int offset, int
length) throws IOException {
+ int uncompressedLength = Snappy.uncompressedLength(input, offset,
length);
+ float[] result = new float[uncompressedLength / 4];
+ int byteSize = ((SnappyNativeAPI) impl).rawUncompress(input, offset,
length, result, 0);
+ return result;
+ }
+
+ /**
+ * Uncompress the input data as an int array
+ *
+ * @param input
+ * @return the uncompressed data
+ * @throws IOException
+ */
+ public static int[] uncompressIntArray(byte[] input) throws IOException {
+ return uncompressIntArray(input, 0, input.length);
+ }
+
+ /**
+ * Uncompress the input[offset, offset+length) as an int array
+ *
+ * @param input
+ * @param offset
+ * @param length
+ * @return the uncompressed data
+ * @throws IOException
+ */
+ public static int[] uncompressIntArray(byte[] input, int offset, int
length) throws IOException {
+ int uncompressedLength = Snappy.uncompressedLength(input, offset,
length);
+ int[] result = new int[uncompressedLength / 4];
+ int byteSize = ((SnappyNativeAPI) impl).rawUncompress(input, offset,
length, result, 0);
+ return result;
+ }
+
+ /**
+ * Uncompress the input data as a long array
+ *
+ * @param input
+ * @return the uncompressed data
+ * @throws IOException
+ */
+ public static long[] uncompressLongArray(byte[] input) throws IOException {
+ return uncompressLongArray(input, 0, input.length);
+ }
+
+ /**
+ * Uncompress the input[offset, offset+length) as a long array
+ *
+ * @param input
+ * @param offset
+ * @param length
+ * @return the uncompressed data
+ * @throws IOException
+ */
+ public static long[] uncompressLongArray(byte[] input, int offset, int
length) throws IOException {
+ int uncompressedLength = Snappy.uncompressedLength(input, offset,
length);
+ long[] result = new long[uncompressedLength / 8];
+ int byteSize = ((SnappyNativeAPI) impl).rawUncompress(input, offset,
length, result, 0);
+ return result;
+ }
+
+ /**
+ * Uncompress the input as a short array
+ *
+ * @param input
+ * @return the uncompressed data
+ * @throws IOException
+ */
+ public static short[] uncompressShortArray(byte[] input) throws
IOException {
+ return uncompressShortArray(input, 0, input.length);
+ }
+
+ /**
+ * Uncompress the input[offset, offset+length) as a short array
+ *
+ * @param input
+ * @param offset
+ * @param length
+ * @return the uncompressed data
+ * @throws IOException
+ */
+ public static short[] uncompressShortArray(byte[] input, int offset, int
length) throws IOException {
+ int uncompressedLength = Snappy.uncompressedLength(input, offset,
length);
+ short[] result = new short[uncompressedLength / 2];
+ int byteSize = ((SnappyNativeAPI) impl).rawUncompress(input, offset,
length, result, 0);
+ return result;
+ }
+
+ /**
+ * Uncompress the input as a String
+ *
+ * @param input
+ * @return the uncompressed dasta
+ * @throws IOException
+ */
+ public static String uncompressString(byte[] input) throws IOException {
+ try {
+ return uncompressString(input, "UTF-8");
+ }
+ catch (UnsupportedEncodingException e) {
+ throw new IllegalStateException("UTF-8 decoder is not found");
+ }
+ }
+
+ /**
+ * Uncompress the input[offset, offset+length) as a String
+ *
+ * @param input
+ * @param offset
+ * @param length
+ * @return the uncompressed data
+ * @throws IOException
+ */
+ public static String uncompressString(byte[] input, int offset, int
length) throws IOException {
+ try {
+ return uncompressString(input, offset, length, "UTF-8");
+ }
+ catch (UnsupportedEncodingException e) {
+ throw new IllegalStateException("UTF-8 decoder is not found");
+ }
+ }
+
+ /**
+ * Uncompress the input[offset, offset+length) as a String of the given
+ * encoding
+ *
+ * @param input
+ * @param offset
+ * @param length
+ * @param encoding
+ * @return the uncompressed data
+ * @throws IOException
+ */
+ public static String uncompressString(byte[] input, int offset, int
length, String encoding) throws IOException,
+ UnsupportedEncodingException {
+ byte[] uncompressed = new byte[uncompressedLength(input, offset,
length)];
+ int compressedSize = uncompress(input, offset, length, uncompressed,
0);
+ return new String(uncompressed, encoding);
+ }
+
+ /**
+ * Uncompress the input[offset, offset+length) as a String of the given
+ * encoding
+ *
+ * @param input
+ * @param offset
+ * @param length
+ * @param encoding
+ * @return the uncompressed data
+ * @throws IOException
+ */
+ public static String uncompressString(byte[] input, int offset, int
length, Charset encoding) throws IOException,
+ UnsupportedEncodingException {
+ byte[] uncompressed = new byte[uncompressedLength(input, offset,
length)];
+ int compressedSize = uncompress(input, offset, length, uncompressed,
0);
+ return new String(uncompressed, encoding);
+ }
+
+ /**
+ * Uncompress the input as a String of the given encoding
+ *
+ * @param input
+ * @param encoding
+ * @return the uncompressed data
+ * @throws IOException
+ * @throws UnsupportedEncodingException
+ */
+ public static String uncompressString(byte[] input, String encoding)
throws IOException,
+ UnsupportedEncodingException {
+ byte[] uncompressed = uncompress(input);
+ return new String(uncompressed, encoding);
+ }
+
+ /**
+ * Uncompress the input as a String of the given encoding
+ *
+ * @param input
+ * @param encoding
+ * @return the uncompressed data
+ * @throws IOException
+ */
+ public static String uncompressString(byte[] input, Charset encoding)
throws IOException,
+ UnsupportedEncodingException {
+ byte[] uncompressed = uncompress(input);
+ return new String(uncompressed, encoding);
+ }
+}
Propchange:
servicemix/smx4/bundles/trunk/snappy-java-1.0.4.1/src/main/java/org/xerial/snappy/Snappy.java
------------------------------------------------------------------------------
svn:executable = *
Added:
servicemix/smx4/bundles/trunk/snappy-java-1.0.4.1/src/main/java/org/xerial/snappy/SnappyBundleActivator.java
URL:
http://svn.apache.org/viewvc/servicemix/smx4/bundles/trunk/snappy-java-1.0.4.1/src/main/java/org/xerial/snappy/SnappyBundleActivator.java?rev=1230380&view=auto
==============================================================================
---
servicemix/smx4/bundles/trunk/snappy-java-1.0.4.1/src/main/java/org/xerial/snappy/SnappyBundleActivator.java
(added)
+++
servicemix/smx4/bundles/trunk/snappy-java-1.0.4.1/src/main/java/org/xerial/snappy/SnappyBundleActivator.java
Thu Jan 12 03:09:40 2012
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.xerial.snappy;
+
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+
+/**
+ * OSGi bundle entry point
+ *
+ * @author leo
+ *
+ */
+public class SnappyBundleActivator implements BundleActivator
+{
+ public void start(BundleContext context) throws Exception {
+ System.loadLibrary("snappyjava");
+ }
+
+ public void stop(BundleContext context) throws Exception {
+
+ }
+
+}
Propchange:
servicemix/smx4/bundles/trunk/snappy-java-1.0.4.1/src/main/java/org/xerial/snappy/SnappyBundleActivator.java
------------------------------------------------------------------------------
svn:executable = *
Added:
servicemix/smx4/bundles/trunk/snappy-java-1.0.4.1/src/main/resources/OSGI-INF/bundle.info
URL:
http://svn.apache.org/viewvc/servicemix/smx4/bundles/trunk/snappy-java-1.0.4.1/src/main/resources/OSGI-INF/bundle.info?rev=1230380&view=auto
==============================================================================
---
servicemix/smx4/bundles/trunk/snappy-java-1.0.4.1/src/main/resources/OSGI-INF/bundle.info
(added)
+++
servicemix/smx4/bundles/trunk/snappy-java-1.0.4.1/src/main/resources/OSGI-INF/bundle.info
Thu Jan 12 03:09:40 2012
@@ -0,0 +1,11 @@
+\u001B[1mSYNOPSIS\u001B[0m
+ ${project.description}
+
+ Original Maven URL:
+ \u001B[33mmvn:${pkgGroupId}/${pkgArtifactId}/${pkgVersion}\u001B[0m
+
+\u001B[1mDESCRIPTION\u001B[0m
+ The snappy-java is a Java port of the snappy, a fast
compresser/decompresser written in C++, originally developed by Google.
+
+\u001B[1mSEE ALSO\u001B[0m
+ \u001B[36mhttp://code.google.com/p/snappy-java\u001B[0m