From 61a2d23ef72630934c603fe9ffb96ebebff6ee09 Mon Sep 17 00:00:00 2001 From: netconomy Date: Thu, 29 Nov 2007 12:00:22 +0000 Subject: PDF-AS API git-svn-id: https://joinup.ec.europa.eu/svn/pdf-as/trunk@233 7b5415b0-85f9-ee4d-85bd-d5d0c3b42d1c --- .../at/gv/egiz/pdfas/io/ByteArrayDataSink.java | 87 +++++++++++++++ .../at/gv/egiz/pdfas/io/ByteArrayDataSource.java | 95 ++++++++++++++++ .../at/gv/egiz/pdfas/io/FileBasedDataSink.java | 96 ++++++++++++++++ .../at/gv/egiz/pdfas/io/FileBasedDataSource.java | 121 +++++++++++++++++++++ .../pdfas/io/FileBasedTextBasedDataSource.java | 103 ++++++++++++++++++ .../egiz/pdfas/io/StringTextBasedDataSource.java | 96 ++++++++++++++++ 6 files changed, 598 insertions(+) create mode 100644 src/main/java/at/gv/egiz/pdfas/io/ByteArrayDataSink.java create mode 100644 src/main/java/at/gv/egiz/pdfas/io/ByteArrayDataSource.java create mode 100644 src/main/java/at/gv/egiz/pdfas/io/FileBasedDataSink.java create mode 100644 src/main/java/at/gv/egiz/pdfas/io/FileBasedDataSource.java create mode 100644 src/main/java/at/gv/egiz/pdfas/io/FileBasedTextBasedDataSource.java create mode 100644 src/main/java/at/gv/egiz/pdfas/io/StringTextBasedDataSource.java (limited to 'src/main/java/at/gv/egiz/pdfas/io') diff --git a/src/main/java/at/gv/egiz/pdfas/io/ByteArrayDataSink.java b/src/main/java/at/gv/egiz/pdfas/io/ByteArrayDataSink.java new file mode 100644 index 0000000..bf74ed5 --- /dev/null +++ b/src/main/java/at/gv/egiz/pdfas/io/ByteArrayDataSink.java @@ -0,0 +1,87 @@ +/** + * + */ +package at.gv.egiz.pdfas.io; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.OutputStream; + +import at.gv.egiz.pdfas.api.io.DataSink; + +/** + * @author wprinz + * + */ +public class ByteArrayDataSink implements DataSink +{ + /** + * The byte output stream. + */ + ByteArrayOutputStream baos = null; + + /** + * The mime type. + */ + protected String mimeType = null; + + /** + * The character encoding. + */ + protected String characterEncoding = null; + + /** + * @see at.gv.egiz.pdfas.api.io.DataSink#createOutputStream(java.lang.String) + */ + public OutputStream createOutputStream(String mimeType) throws IOException + { + return createOutputStream(mimeType, null); + } + + /** + * @see at.gv.egiz.pdfas.api.io.DataSink#createOutputStream(java.lang.String, + * java.lang.String) + */ + public OutputStream createOutputStream(String mimeType, String characterEncoding) throws IOException + { + this.mimeType = mimeType; + this.characterEncoding = characterEncoding; + this.baos = new ByteArrayOutputStream(); + return this.baos; + } + + /** + * @see at.gv.egiz.pdfas.api.io.DataSink#getMimeType() + */ + public String getMimeType() + { + return this.mimeType; + } + + /** + * @see at.gv.egiz.pdfas.api.io.DataSink#getCharacterEncoding() + */ + public String getCharacterEncoding() + { + return this.characterEncoding; + } + + /** + * Returns the byte data, or null if none available. + * + *

+ * Note that internally, this just calls the {@link ByteArrayOutputStream#toByteArray()} method. + *

+ * + * @return Returns the byte data, or null if none available. + */ + public byte [] getData() + { + if (this.baos == null) + { + return null; + } + return this.baos.toByteArray(); + } + +} diff --git a/src/main/java/at/gv/egiz/pdfas/io/ByteArrayDataSource.java b/src/main/java/at/gv/egiz/pdfas/io/ByteArrayDataSource.java new file mode 100644 index 0000000..37726df --- /dev/null +++ b/src/main/java/at/gv/egiz/pdfas/io/ByteArrayDataSource.java @@ -0,0 +1,95 @@ +/** + * + */ +package at.gv.egiz.pdfas.io; + +import java.io.ByteArrayInputStream; +import java.io.InputStream; + +import at.gv.egiz.pdfas.api.io.DataSource; + +/** + * A byte array backed DataSource. + * + * @author wprinz + */ +public class ByteArrayDataSource implements DataSource +{ + + /** + * The byte array. + */ + protected byte[] data = null; + + /** + * The mime type. + */ + protected String mimeType = null; + + /** + * The character encoding. + */ + protected String characterEncoding = null; + + /** + * @param data + * @param mimeType + */ + public ByteArrayDataSource(byte[] data, String mimeType) + { + this(data, mimeType, null); + } + + /** + * @param data + * @param mimeType + * @param characterEncoding + */ + public ByteArrayDataSource(byte[] data, String mimeType, String characterEncoding) + { + this.data = data; + this.mimeType = mimeType; + this.characterEncoding = characterEncoding; + } + + /** + * @see at.gv.egiz.pdfas.api.io.DataSource#createInputStream() + */ + public InputStream createInputStream() + { + return new ByteArrayInputStream(this.data); + } + + /** + * @see at.gv.egiz.pdfas.api.io.DataSource#getAsByteArray() + */ + public byte[] getAsByteArray() + { + return this.data; + } + + /** + * @see at.gv.egiz.pdfas.api.io.DataSource#getCharacterEncoding() + */ + public String getCharacterEncoding() + { + return this.characterEncoding; + } + + /** + * @see at.gv.egiz.pdfas.api.io.DataSource#getMimeType() + */ + public String getMimeType() + { + return this.mimeType; + } + + /** + * @see at.gv.egiz.pdfas.api.io.DataSource#getLength() + */ + public int getLength() + { + return this.data.length; + } + +} diff --git a/src/main/java/at/gv/egiz/pdfas/io/FileBasedDataSink.java b/src/main/java/at/gv/egiz/pdfas/io/FileBasedDataSink.java new file mode 100644 index 0000000..184dd09 --- /dev/null +++ b/src/main/java/at/gv/egiz/pdfas/io/FileBasedDataSink.java @@ -0,0 +1,96 @@ +/** + * + */ +package at.gv.egiz.pdfas.io; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; + +import at.gv.egiz.pdfas.api.io.DataSink; +import at.gv.egiz.pdfas.api.io.FileBased; + +/** + * @author wprinz + * + */ +public class FileBasedDataSink implements DataSink, FileBased +{ + protected File file = null; + + protected String mimeType = null; + + protected String characterEncoding = null; + + + + /** + * @param file + * @throws IOException + */ + public FileBasedDataSink(File file) throws IOException + { + if (!file.exists()) + { + file.createNewFile(); + } + if (!file.isFile()) + { + throw new IOException("The file '" + file + "' is not a normal file."); + } + if (!file.canWrite()) + { + throw new IOException("The file '" + file + "' cannot be written."); + } + + this.file = file; + } + + /** + * @throws FileNotFoundException + * @see at.gv.egiz.pdfas.api.io.DataSink#createOutputStream(java.lang.String) + */ + public OutputStream createOutputStream(String mimeType) throws FileNotFoundException + { + return createOutputStream(mimeType, null); + } + + /** + * @throws FileNotFoundException + * @see at.gv.egiz.pdfas.api.io.DataSink#createOutputStream(java.lang.String, + * java.lang.String) + */ + public OutputStream createOutputStream(String mimeType, String characterEncoding) throws FileNotFoundException + { + this.mimeType = mimeType; + this.characterEncoding = characterEncoding; + return new FileOutputStream(this.file); + } + + /** + * @see at.gv.egiz.pdfas.api.io.DataSink#getMimeType() + */ + public String getMimeType() + { + return this.mimeType; + } + + /** + * @see at.gv.egiz.pdfas.api.io.DataSink#getCharacterEncoding() + */ + public String getCharacterEncoding() + { + return this.characterEncoding; + } + + /** + * @see at.gv.egiz.pdfas.api.io.FileBased#getFile() + */ + public File getFile() + { + return this.file; + } + +} diff --git a/src/main/java/at/gv/egiz/pdfas/io/FileBasedDataSource.java b/src/main/java/at/gv/egiz/pdfas/io/FileBasedDataSource.java new file mode 100644 index 0000000..fd56bfe --- /dev/null +++ b/src/main/java/at/gv/egiz/pdfas/io/FileBasedDataSource.java @@ -0,0 +1,121 @@ +/** + * + */ +package at.gv.egiz.pdfas.io; + +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; + +import at.gv.egiz.pdfas.api.io.DataSource; +import at.gv.egiz.pdfas.api.io.FileBased; +import at.gv.egiz.pdfas.impl.input.helper.DataSourceHelper; + +/** + * A FileBased DataSource implementation. + * + * @author wprinz + */ +public class FileBasedDataSource implements DataSource, FileBased +{ + protected File file = null; + + protected String mimeType = null; + + protected String characterEncoding = null; + + protected byte[] cache = null; + + /** + * @param file + * @param mimeType + * @throws IOException + */ + public FileBasedDataSource(File file, String mimeType) throws IOException + { + this(file, mimeType, null); + } + + /** + * @param file + * @param mimeType + * @param characterEncoding + * @throws IOException + */ + public FileBasedDataSource(File file, String mimeType, String characterEncoding) throws IOException + { + if (file == null) + { + throw new IllegalArgumentException("The file must not be null."); + } + if (mimeType == null) + { + throw new IllegalArgumentException("The mimeType must not be null."); + } + if (!file.exists()) + { + throw new FileNotFoundException("The file '" + file + "' does not exist."); + } + if (!file.canRead()) + { + throw new IOException("The file '" + file + "' cannot be read."); + } + + this.file = file; + this.mimeType = mimeType; + this.characterEncoding = characterEncoding; + this.cache = DataSourceHelper.convertInputStreamToByteArrayIOEx(new FileInputStream(this.file)); + } + + /** + * @see at.gv.egiz.pdfas.api.io.DataSource#createInputStream() + */ + public InputStream createInputStream() + { + return new ByteArrayInputStream(this.cache); + } + + /** + * @see at.gv.egiz.pdfas.api.io.DataSource#getAsByteArray() + */ + public byte[] getAsByteArray() + { + return this.cache; + } + + /** + * @see at.gv.egiz.pdfas.api.io.DataSource#getLength() + */ + public int getLength() + { + return this.cache.length; + } + + /** + * @see at.gv.egiz.pdfas.api.io.DataSource#getMimeType() + */ + public String getMimeType() + { + return this.mimeType; + } + + /** + * @see at.gv.egiz.pdfas.api.io.DataSource#getCharacterEncoding() + */ + public String getCharacterEncoding() + { + return this.characterEncoding; + } + + /** + * @see at.gv.egiz.pdfas.api.io.FileBased#getFile() + */ + public File getFile() + { + return this.file; + } + +} diff --git a/src/main/java/at/gv/egiz/pdfas/io/FileBasedTextBasedDataSource.java b/src/main/java/at/gv/egiz/pdfas/io/FileBasedTextBasedDataSource.java new file mode 100644 index 0000000..5be2148 --- /dev/null +++ b/src/main/java/at/gv/egiz/pdfas/io/FileBasedTextBasedDataSource.java @@ -0,0 +1,103 @@ +/** + * + */ +package at.gv.egiz.pdfas.io; + +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.io.UnsupportedEncodingException; + +import at.gv.egiz.pdfas.api.io.TextBased; + +/** + * FileBased DataSource that is TextBased. + * + * @author wprinz + */ +public class FileBasedTextBasedDataSource extends FileBasedDataSource implements TextBased +{ + protected String text = null; + + /** + * @param file + * @param mimeType + * @param characterEncoding + * @throws IOException + */ + public FileBasedTextBasedDataSource(File file, String mimeType, String characterEncoding) throws IOException + { + super(file, mimeType, characterEncoding); + if (characterEncoding == null) + { + throw new IllegalArgumentException("The characterEncoding must not be null."); + } + } + + /** + * @see at.gv.egiz.pdfas.api.io.DataSource#createInputStream() + */ + public InputStream createInputStream() + { + return new ByteArrayInputStream(this.cache); + } + + /** + * @see at.gv.egiz.pdfas.api.io.DataSource#getAsByteArray() + */ + public byte[] getAsByteArray() + { + return this.cache; + } + + /** + * @see at.gv.egiz.pdfas.api.io.DataSource#getLength() + */ + public int getLength() + { + return this.cache.length; + } + + /** + * @see at.gv.egiz.pdfas.api.io.DataSource#getMimeType() + */ + public String getMimeType() + { + return this.mimeType; + } + + /** + * @see at.gv.egiz.pdfas.api.io.DataSource#getCharacterEncoding() + */ + public String getCharacterEncoding() + { + return this.characterEncoding; + } + + /** + * @see at.gv.egiz.pdfas.api.io.FileBased#getFile() + */ + public File getFile() + { + return this.file; + } + + public String getText() + { + if (this.text == null) + { + try + { + this.text = new String(this.cache, this.characterEncoding); + } + catch (UnsupportedEncodingException e) + { + e.printStackTrace(); + throw new RuntimeException(e); + } + } + return this.text; + } + +} diff --git a/src/main/java/at/gv/egiz/pdfas/io/StringTextBasedDataSource.java b/src/main/java/at/gv/egiz/pdfas/io/StringTextBasedDataSource.java new file mode 100644 index 0000000..d8b879f --- /dev/null +++ b/src/main/java/at/gv/egiz/pdfas/io/StringTextBasedDataSource.java @@ -0,0 +1,96 @@ +/** + * + */ +package at.gv.egiz.pdfas.io; + +import java.io.ByteArrayInputStream; +import java.io.InputStream; +import java.io.UnsupportedEncodingException; + +import at.gv.egiz.pdfas.api.io.DataSource; +import at.gv.egiz.pdfas.api.io.TextBased; + +/** + * A String TextBased DataSource. + * + * @author wprinz + * + */ +public class StringTextBasedDataSource implements DataSource, TextBased +{ + /** + * The text. + */ + protected String text = null; + + protected byte[] cache = null; + + /** + * @param text + */ + public StringTextBasedDataSource(String text) + { + this.text = text; + } + + /** + * @see at.gv.egiz.pdfas.api.io.DataSource#createInputStream() + */ + public InputStream createInputStream() + { + return new ByteArrayInputStream(getAsByteArray()); + } + + /** + * @see at.gv.egiz.pdfas.api.io.DataSource#getAsByteArray() + */ + public byte[] getAsByteArray() + { + if (cache == null) + { + try + { + this.cache = this.text.getBytes("UTF-8"); + } + catch (UnsupportedEncodingException e) + { + e.printStackTrace(); + throw new RuntimeException(e); + } + } + return this.cache; + } + + /** + * @see at.gv.egiz.pdfas.api.io.DataSource#getLength() + */ + public int getLength() + { + return getAsByteArray().length; + } + + /** + * @see at.gv.egiz.pdfas.api.io.DataSource#getMimeType() + */ + public String getMimeType() + { + return "text/plain"; + } + + /** + * @see at.gv.egiz.pdfas.api.io.DataSource#getCharacterEncoding() + */ + public String getCharacterEncoding() + { + return "UTF-8"; + } + + /** + * @see at.gv.egiz.pdfas.api.io.TextBased#getText() + */ + public String getText() + { + return this.text; + } + +} -- cgit v1.2.3