diff options
Diffstat (limited to 'javaunohelper/com/sun/star/lib/uno/adapter/ByteArrayToXInputStreamAdapter.java')
-rwxr-xr-x | javaunohelper/com/sun/star/lib/uno/adapter/ByteArrayToXInputStreamAdapter.java | 161 |
1 files changed, 161 insertions, 0 deletions
diff --git a/javaunohelper/com/sun/star/lib/uno/adapter/ByteArrayToXInputStreamAdapter.java b/javaunohelper/com/sun/star/lib/uno/adapter/ByteArrayToXInputStreamAdapter.java new file mode 100755 index 000000000000..bcc2aa128fa5 --- /dev/null +++ b/javaunohelper/com/sun/star/lib/uno/adapter/ByteArrayToXInputStreamAdapter.java @@ -0,0 +1,161 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +/* + * ByteArrayXInputStram.java + * + * Created on 10. April 2003, 15:45 + */ + +package com.sun.star.lib.uno.adapter; + +/** + * + * @author lo119109 + */ + +import com.sun.star.io.XInputStream; +import com.sun.star.io.XSeekable; +import com.sun.star.lib.uno.helper.ComponentBase; + +public class ByteArrayToXInputStreamAdapter + extends ComponentBase + implements XInputStream, XSeekable +{ + + byte[] m_bytes; + int m_length; + int m_pos; + + boolean m_open; + + /** Creates a new instance of ByteArrayXInputStram */ + public ByteArrayToXInputStreamAdapter(byte[] bytes) { + init(bytes); + } + + public void init(byte[] bytes) { + // System.err.println("ByteArrayXInputStream"); + m_bytes = bytes; + m_length = bytes.length; + m_pos = 0; + m_open = true; + } + + private void _check() throws com.sun.star.io.NotConnectedException, com.sun.star.io.IOException { + if (m_bytes == null) { + // System.err.println("check failed no bytes!"); + throw new com.sun.star.io.NotConnectedException("no bytes"); + } + if(!m_open) { + // System.err.println("check failed: closed"); + throw new com.sun.star.io.IOException("input closed"); + } + } + + public int available() throws com.sun.star.io.NotConnectedException, com.sun.star.io.IOException { + _check(); + long a = m_length - m_pos; + if (a != (int)a) + throw new com.sun.star.io.IOException("integer overflow"); + else { + // System.err.println("available() -> "+a); + return (int)a; + } + } + + public void closeInput() throws com.sun.star.io.NotConnectedException, com.sun.star.io.IOException { + // System.err.println("closeInput()"); + _check(); + m_open = false; + } + + public int readBytes(byte[][] values, int param) throws com.sun.star.io.NotConnectedException, com.sun.star.io.BufferSizeExceededException, com.sun.star.io.IOException { + // System.err.println("readbytes(..., "+param+")"); + _check(); + try { + int remain = (int)(m_length - m_pos); + if (param > remain) param = remain; + /* ARGH!!! */ + if (values[0] == null){ + values[0] = new byte[param]; + // System.err.println("allocated new buffer of "+param+" bytes"); + } + System.arraycopy(m_bytes, m_pos, values[0], 0, param); + // System.err.println("readbytes() -> "+param); + m_pos += param; + return param; + } catch (ArrayIndexOutOfBoundsException ae) { + // System.err.println("readbytes() -> ArrayIndexOutOfBounds"); + ae.printStackTrace(); + throw new com.sun.star.io.BufferSizeExceededException("buffer overflow"); + } catch (Exception e) { + // System.err.println("readbytes() -> Exception: "+e.getMessage()); + e.printStackTrace(); + throw new com.sun.star.io.IOException("error accessing buffer"); + } + } + + public int readSomeBytes(byte[][] values, int param) throws com.sun.star.io.NotConnectedException, com.sun.star.io.BufferSizeExceededException, com.sun.star.io.IOException { + // System.err.println("readSomebytes()"); + return readBytes(values, param); + } + + public void skipBytes(int param) throws com.sun.star.io.NotConnectedException, com.sun.star.io.BufferSizeExceededException, com.sun.star.io.IOException { + // System.err.println("skipBytes("+param+")"); + _check(); + if (param > (m_length - m_pos)) + throw new com.sun.star.io.BufferSizeExceededException("buffer overflow"); + m_pos += param; + } + + public long getLength() throws com.sun.star.io.IOException { + // System.err.println("getLength() -> "+m_length); + if (m_bytes != null) return m_length; + else throw new com.sun.star.io.IOException("no bytes"); + } + + public long getPosition() throws com.sun.star.io.IOException { + // System.err.println("getPosition() -> "+m_pos); + if (m_bytes != null) return m_pos; + else throw new com.sun.star.io.IOException("no bytes"); + } + + public void seek(long param) throws com.sun.star.lang.IllegalArgumentException, com.sun.star.io.IOException { + // System.err.println("seek("+param+")"); + if (m_bytes != null){ + if (param < 0 || param > m_length) throw new com.sun.star.lang.IllegalArgumentException("invalid seek position"); + else m_pos = (int)param; + }else throw new com.sun.star.io.IOException("no bytes"); + } + + public void finalize() throws Throwable{ + // System.err.println("finalizer called for ByteArrayXInputStream!"); + super.finalize(); + } + +} |