xref: /AOO41X/main/javaunohelper/com/sun/star/lib/uno/adapter/InputStreamToXInputStreamAdapter.java (revision 83137a03adbb58b5b3bdafefefa1e93de35e0011)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 package com.sun.star.lib.uno.adapter;
24 
25 import java.io.IOException;
26 import com.sun.star.io.XInputStream;
27 import java.io.InputStream;
28 
29 /** The <code>InputStreamToInputXStreamAdapter</code> wraps the
30     Java <code>InputStream</code> object into a
31     UNO <code>XInputStream</code> object.
32     This allows users to access an <code>InputStream</code>
33     as if it were an <code>XInputStream</code>.
34  */
35 public class InputStreamToXInputStreamAdapter implements XInputStream {
36 
37     /**
38      *  Internal store to the InputStream
39      */
40     private InputStream iIn;
41 
42     /**
43      *  Constructor.
44      *
45      *  @param  in  The <code>XInputStream</code> to be
46      *              accessed as an <code>InputStream</code>.
47      */
48     public InputStreamToXInputStreamAdapter (InputStream in)
49     {
50         iIn = in;
51     }
52 
53     public int available() throws
54             com.sun.star.io.IOException
55     {
56 
57         int bytesAvail;
58 
59         try {
60             bytesAvail = iIn.available();
61         } catch (IOException e) {
62             throw new com.sun.star.io.IOException(e.toString());
63         }
64 
65         return(bytesAvail);
66     }
67 
68     public void closeInput() throws
69             com.sun.star.io.IOException
70     {
71         try {
72             iIn.close();
73         } catch (IOException e) {
74             throw new com.sun.star.io.IOException(e.toString());
75         }
76     }
77 
78     public int readBytes(byte[][] b, int len) throws
79             com.sun.star.io.IOException
80     {
81         int count = 0;
82         try {
83         long bytesRead=0;
84         if (len >iIn.available()) {
85             bytesRead = iIn.read(b[0], 0, iIn.available());
86         }
87         else{
88             bytesRead = iIn.read(b[0], 0, len);
89         }
90             // Casting bytesRead to an int is okay, since the user can
91             // only pass in an integer length to read, so the bytesRead
92             // must <= len.
93             //
94             if (bytesRead <= 0) {
95                 return(0);
96         }
97         return ((int)bytesRead);
98 
99 
100         } catch (IOException e) {
101             throw new com.sun.star.io.IOException("reader error: "+e.toString());
102         }
103     }
104 
105     public int readSomeBytes(byte[][] b, int len) throws
106             com.sun.star.io.IOException
107     {
108         int count = 0;
109         try {
110         long bytesRead=0;
111         if (len >iIn.available()) {
112             bytesRead = iIn.read(b[0], 0, iIn.available());
113         }
114         else{
115             bytesRead = iIn.read(b[0], 0, len);
116         }
117             // Casting bytesRead to an int is okay, since the user can
118             // only pass in an integer length to read, so the bytesRead
119             // must <= len.
120             //
121             if (bytesRead <= 0) {
122                 return(0);
123         }
124         return ((int)bytesRead);
125 
126 
127         } catch (IOException e) {
128             throw new com.sun.star.io.IOException("reader error: "+e.toString());
129         }
130     }
131 
132     public void skipBytes(int n) throws
133             com.sun.star.io.IOException
134     {
135         int avail;
136         int tmpLongVal = n;
137         int  tmpIntVal;
138 
139         try {
140             avail = iIn.available();
141         } catch (IOException e) {
142             throw new com.sun.star.io.IOException(e.toString());
143         }
144 
145         do {
146             if (tmpLongVal >= Integer.MAX_VALUE) {
147                tmpIntVal = Integer.MAX_VALUE;
148             } else {
149                // Casting is safe here.
150                tmpIntVal = (int)tmpLongVal;
151             }
152             tmpLongVal -= tmpIntVal;
153 
154             try {
155                 iIn.skip(tmpIntVal);
156             } catch (IOException e) {
157                 throw new com.sun.star.io.IOException(e.toString());
158             }
159         } while (tmpLongVal > 0);
160     }
161 }
162 
163