From afb10c94cbcda348ddfef73a0db295358980e22b Mon Sep 17 00:00:00 2001 From: Gabor Bakos Date: Sun, 26 Jun 2016 20:37:35 +0200 Subject: [PATCH 1/5] Generates OSGi bundle and source bundle. --- pom.xml | 50 ++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 48 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 136d2e6..dafd02a 100644 --- a/pom.xml +++ b/pom.xml @@ -3,8 +3,8 @@ 4.0.0 com.epam parso - 2.0 - jar + 2.1.0-SNAPSHOT + bundle parso Parso is a lightweight Java library designed to read SAS7BDAT datasets. The Parso interfaces are analogous to libraries designed to read table-storing files, for example, CSVReader library. @@ -89,6 +89,26 @@ + + + + org.codehaus.mojo + build-helper-maven-plugin + 1.10 + + + set-osgi-version + package + + parse-version + + + + + org.apache.maven.plugins maven-source-plugin @@ -102,6 +122,18 @@ + + + + 2 + ${project.name} + ${groupId}.${artifactId}.source + ${organization.name} + ${parsedVersion.osgiVersion} + ${groupId}.${artifactId};version=${parsedVersion.osgiVersion};roots:="." + + + org.sonatype.plugins @@ -135,6 +167,20 @@ + + org.apache.felix + maven-bundle-plugin + 3.0.1 + true + + + com.epam.parso;com.epam.parso.impl + com.epam.parso.impl.* + + + + + From dc94114ba8959a5e7db33afa08abc346699f34ac Mon Sep 17 00:00:00 2001 From: Gabor Bakos Date: Sun, 26 Jun 2016 20:45:21 +0200 Subject: [PATCH 2/5] Fixing .gitignore to better support eclipse development. --- .gitignore | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.gitignore b/.gitignore index 6240411..129d624 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,7 @@ *.iml .idea target +/.checkstyle +/.classpath +/.project +/.settings \ No newline at end of file From d4fb24b9140f3e084a9f41f4a121071b6e5f68dc Mon Sep 17 00:00:00 2001 From: Michael George Date: Wed, 20 Jul 2016 13:48:45 +0100 Subject: [PATCH 3/5] Add support for controlByte 0x50 within decompressRow() Add support for controlByte 0x50 (i.e. 17 or more @ symbols) within decompressRow(). Control byte 0x50 is essentially the same as controlByte 0x60 and 0x70 but for the @ symbol (0x40) rather than space (0x20) or NUL (0x00). This type of RLE was encountered in my SAS dataset and I have confirmed that repeated @ characters are encoded using control byte 0x50. --- src/main/java/com/epam/parso/impl/CharDecompressor.java | 6 ++++++ 1 file changed, 6 insertions(+) mode change 100644 => 100755 src/main/java/com/epam/parso/impl/CharDecompressor.java diff --git a/src/main/java/com/epam/parso/impl/CharDecompressor.java b/src/main/java/com/epam/parso/impl/CharDecompressor.java old mode 100644 new mode 100755 index 942bb32..e105d8d --- a/src/main/java/com/epam/parso/impl/CharDecompressor.java +++ b/src/main/java/com/epam/parso/impl/CharDecompressor.java @@ -81,6 +81,12 @@ public byte[] decompressRow(int offset, int length, int resultLength, byte[] pag } currentByteIndex += 2; break; + case 0x50: + for (int i = 0; i < endOfFirstByte * 256 + (page[offset + currentByteIndex + 1] & 0xFF) + 17; i++) { + resultByteArray[currentResultArrayIndex++] = 0x40; + } + currentByteIndex++; + break; case 0x60: for (int i = 0; i < endOfFirstByte * 256 + (page[offset + currentByteIndex + 1] & 0xFF) + 17; i++) { resultByteArray[currentResultArrayIndex++] = 0x20; From 4fcaa09e8a3ff1f781091d423c5d8064bec76962 Mon Sep 17 00:00:00 2001 From: Gabor Bakos Date: Sun, 26 Jun 2016 20:37:35 +0200 Subject: [PATCH 4/5] Generates OSGi bundle and source bundle. --- pom.xml | 50 ++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 48 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 136d2e6..dafd02a 100644 --- a/pom.xml +++ b/pom.xml @@ -3,8 +3,8 @@ 4.0.0 com.epam parso - 2.0 - jar + 2.1.0-SNAPSHOT + bundle parso Parso is a lightweight Java library designed to read SAS7BDAT datasets. The Parso interfaces are analogous to libraries designed to read table-storing files, for example, CSVReader library. @@ -89,6 +89,26 @@ + + + + org.codehaus.mojo + build-helper-maven-plugin + 1.10 + + + set-osgi-version + package + + parse-version + + + + + org.apache.maven.plugins maven-source-plugin @@ -102,6 +122,18 @@ + + + + 2 + ${project.name} + ${groupId}.${artifactId}.source + ${organization.name} + ${parsedVersion.osgiVersion} + ${groupId}.${artifactId};version=${parsedVersion.osgiVersion};roots:="." + + + org.sonatype.plugins @@ -135,6 +167,20 @@ + + org.apache.felix + maven-bundle-plugin + 3.0.1 + true + + + com.epam.parso;com.epam.parso.impl + com.epam.parso.impl.* + + + + + From 90141040f6a1398249075a2cef51534830b81aca Mon Sep 17 00:00:00 2001 From: Gabor Bakos Date: Thu, 15 Sep 2016 16:56:04 +0200 Subject: [PATCH 5/5] Changed to use OSGi services, do not export the implementation package. Added version to the exported classes/interfaces. --- pom.xml | 4 +- .../java/com/epam/parso/CSVDataWriter.java | 1 + .../com/epam/parso/CSVMetadataWriter.java | 1 + src/main/java/com/epam/parso/Column.java | 1 + .../java/com/epam/parso/SasFileReader.java | 1 + .../com/epam/parso/SasFileReaderFactory.java | 42 ++++++++++++++ .../parso/impl/SasFileReaderFactoryImpl.java | 56 +++++++++++++++++++ src/main/resources/OSGi-INF/component.xml | 7 +++ 8 files changed, 112 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/epam/parso/SasFileReaderFactory.java create mode 100644 src/main/java/com/epam/parso/impl/SasFileReaderFactoryImpl.java create mode 100644 src/main/resources/OSGi-INF/component.xml diff --git a/pom.xml b/pom.xml index dafd02a..d082c54 100644 --- a/pom.xml +++ b/pom.xml @@ -174,10 +174,12 @@ true - com.epam.parso;com.epam.parso.impl + com.epam.parso com.epam.parso.impl.* + lazy + OSGi-INF/component.xml diff --git a/src/main/java/com/epam/parso/CSVDataWriter.java b/src/main/java/com/epam/parso/CSVDataWriter.java index b57808c..6b36efb 100644 --- a/src/main/java/com/epam/parso/CSVDataWriter.java +++ b/src/main/java/com/epam/parso/CSVDataWriter.java @@ -21,6 +21,7 @@ /** * Interface for exporting data from sas7bdat file to csv. + * @since 2.1 */ public interface CSVDataWriter { /** diff --git a/src/main/java/com/epam/parso/CSVMetadataWriter.java b/src/main/java/com/epam/parso/CSVMetadataWriter.java index 30b3caa..4aca86f 100644 --- a/src/main/java/com/epam/parso/CSVMetadataWriter.java +++ b/src/main/java/com/epam/parso/CSVMetadataWriter.java @@ -21,6 +21,7 @@ /** * Interface for exporting metadata from sas7bdat file to csv. + * @since 2.1 */ public interface CSVMetadataWriter { /** diff --git a/src/main/java/com/epam/parso/Column.java b/src/main/java/com/epam/parso/Column.java index 3742d2a..63ea644 100644 --- a/src/main/java/com/epam/parso/Column.java +++ b/src/main/java/com/epam/parso/Column.java @@ -18,6 +18,7 @@ /** * A class to store column metadata. + * @since 2.1 */ public class Column { /** diff --git a/src/main/java/com/epam/parso/SasFileReader.java b/src/main/java/com/epam/parso/SasFileReader.java index a06eedd..4bdf7f0 100644 --- a/src/main/java/com/epam/parso/SasFileReader.java +++ b/src/main/java/com/epam/parso/SasFileReader.java @@ -21,6 +21,7 @@ /** * Main interface for working with library. + * @since 2.1 */ public interface SasFileReader { /** diff --git a/src/main/java/com/epam/parso/SasFileReaderFactory.java b/src/main/java/com/epam/parso/SasFileReaderFactory.java new file mode 100644 index 0000000..9569d3f --- /dev/null +++ b/src/main/java/com/epam/parso/SasFileReaderFactory.java @@ -0,0 +1,42 @@ +package com.epam.parso; + +import java.io.InputStream; + +/** + * Factory for creating {@link SasFileReader}s using {@link InputStream}s. + * + * @author Gabor Bakos + * @since 2.1 + */ +public interface SasFileReaderFactory { + /** + * Creates a new {@link SasFileReader} using {@code stream}. + * + * @param stream + * an input stream which should contain a correct sas7bdat file. + * @return An {@link SasFileReader} instance. + */ + SasFileReader create(InputStream stream); + + /** + * Creates a new {@link SasFileReader} using {@code stream}. + * + * @param stream + * an input stream which should contain a correct sas7bdat file. + * @param encoding + * the string containing the encoding to use in strings output + * @return An {@link SasFileReader} instance. + */ + SasFileReader create(InputStream stream, String encoding); + + /** + * Creates a new {@link SasFileReader} using {@code stream}. + * + * @param stream + * an input stream which should contain a correct sas7bdat file. + * @param byteOutput + * the flag of data output in binary or string format + * @return An {@link SasFileReader} instance. + */ + SasFileReader create(InputStream stream, Boolean byteOutput); +} diff --git a/src/main/java/com/epam/parso/impl/SasFileReaderFactoryImpl.java b/src/main/java/com/epam/parso/impl/SasFileReaderFactoryImpl.java new file mode 100644 index 0000000..3bc9c6d --- /dev/null +++ b/src/main/java/com/epam/parso/impl/SasFileReaderFactoryImpl.java @@ -0,0 +1,56 @@ +/** + * + */ +package com.epam.parso.impl; + +import java.io.InputStream; + +import com.epam.parso.SasFileReader; +import com.epam.parso.SasFileReaderFactory; + +/** + * @author Gabor Bakos + * + */ +public class SasFileReaderFactoryImpl implements SasFileReaderFactory { + + /** + * + */ + public SasFileReaderFactoryImpl() { + // TODO Auto-generated constructor stub + } + + /* + * (non-Javadoc) + * + * @see com.epam.parso.SasFileReaderFactory#create(java.io.InputStream) + */ + @Override + public SasFileReader create(final InputStream stream) { + return new SasFileReaderImpl(stream); + } + + /* + * (non-Javadoc) + * + * @see com.epam.parso.SasFileReaderFactory#create(java.io.InputStream, + * java.lang.String) + */ + @Override + public SasFileReader create(final InputStream stream, final String encoding) { + return new SasFileReaderImpl(stream, encoding); + } + + /* + * (non-Javadoc) + * + * @see com.epam.parso.SasFileReaderFactory#create(java.io.InputStream, + * java.lang.Boolean) + */ + @Override + public SasFileReader create(final InputStream stream, final Boolean byteOutput) { + return new SasFileReaderImpl(stream, byteOutput); + } + +} diff --git a/src/main/resources/OSGi-INF/component.xml b/src/main/resources/OSGi-INF/component.xml new file mode 100644 index 0000000..498047d --- /dev/null +++ b/src/main/resources/OSGi-INF/component.xml @@ -0,0 +1,7 @@ + + + + + + +