1956476d7SDamjan Jovanovic /**************************************************************
2956476d7SDamjan Jovanovic  *
3956476d7SDamjan Jovanovic  * Licensed to the Apache Software Foundation (ASF) under one
4956476d7SDamjan Jovanovic  * or more contributor license agreements.  See the NOTICE file
5956476d7SDamjan Jovanovic  * distributed with this work for additional information
6956476d7SDamjan Jovanovic  * regarding copyright ownership.  The ASF licenses this file
7956476d7SDamjan Jovanovic  * to you under the Apache License, Version 2.0 (the
8956476d7SDamjan Jovanovic  * "License"); you may not use this file except in compliance
9956476d7SDamjan Jovanovic  * with the License.  You may obtain a copy of the License at
10956476d7SDamjan Jovanovic  *
11956476d7SDamjan Jovanovic  *   http://www.apache.org/licenses/LICENSE-2.0
12956476d7SDamjan Jovanovic  *
13956476d7SDamjan Jovanovic  * Unless required by applicable law or agreed to in writing,
14956476d7SDamjan Jovanovic  * software distributed under the License is distributed on an
15956476d7SDamjan Jovanovic  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16956476d7SDamjan Jovanovic  * KIND, either express or implied.  See the License for the
17956476d7SDamjan Jovanovic  * specific language governing permissions and limitations
18956476d7SDamjan Jovanovic  * under the License.
19956476d7SDamjan Jovanovic  *
20956476d7SDamjan Jovanovic  *************************************************************/
21956476d7SDamjan Jovanovic package com.sun.star.comp.sdbc;
22956476d7SDamjan Jovanovic 
23956476d7SDamjan Jovanovic import java.io.InputStream;
24956476d7SDamjan Jovanovic 
25956476d7SDamjan Jovanovic import org.apache.openoffice.comp.sdbc.dbtools.comphelper.ResourceBasedEventLogger;
26956476d7SDamjan Jovanovic import org.apache.openoffice.comp.sdbc.dbtools.util.Resources;
27956476d7SDamjan Jovanovic import org.apache.openoffice.comp.sdbc.dbtools.util.SharedResources;
28956476d7SDamjan Jovanovic import org.apache.openoffice.comp.sdbc.dbtools.util.StandardSQLState;
29956476d7SDamjan Jovanovic 
30956476d7SDamjan Jovanovic import com.sun.star.io.XInputStream;
31956476d7SDamjan Jovanovic import com.sun.star.lib.uno.adapter.InputStreamToXInputStreamAdapter;
32956476d7SDamjan Jovanovic import com.sun.star.lib.uno.helper.ComponentBase;
33956476d7SDamjan Jovanovic import com.sun.star.logging.LogLevel;
34956476d7SDamjan Jovanovic import com.sun.star.sdbc.SQLException;
35956476d7SDamjan Jovanovic import com.sun.star.sdbc.XBlob;
36956476d7SDamjan Jovanovic import com.sun.star.uno.Any;
37956476d7SDamjan Jovanovic 
38956476d7SDamjan Jovanovic public class JavaSQLBlob extends ComponentBase implements XBlob {
39*8ccb802dSDamjan Jovanovic     private final ResourceBasedEventLogger logger;
40*8ccb802dSDamjan Jovanovic     private final java.sql.Blob jdbcBlob;
41956476d7SDamjan Jovanovic 
JavaSQLBlob(ResourceBasedEventLogger logger, java.sql.Blob jdbcBlob)42956476d7SDamjan Jovanovic     public JavaSQLBlob(ResourceBasedEventLogger logger, java.sql.Blob jdbcBlob) {
43956476d7SDamjan Jovanovic         this.logger = logger;
44956476d7SDamjan Jovanovic         this.jdbcBlob = jdbcBlob;
45956476d7SDamjan Jovanovic     }
46956476d7SDamjan Jovanovic 
47956476d7SDamjan Jovanovic     @Override
postDisposing()48956476d7SDamjan Jovanovic     protected void postDisposing() {
49956476d7SDamjan Jovanovic         try {
50956476d7SDamjan Jovanovic             jdbcBlob.free();
51956476d7SDamjan Jovanovic         } catch (java.sql.SQLException jdbcSQLException) {
52956476d7SDamjan Jovanovic             logger.log(LogLevel.WARNING, jdbcSQLException);
53956476d7SDamjan Jovanovic         }
54956476d7SDamjan Jovanovic     }
55956476d7SDamjan Jovanovic 
56956476d7SDamjan Jovanovic     @Override
getBinaryStream()57956476d7SDamjan Jovanovic     public XInputStream getBinaryStream() throws SQLException {
58956476d7SDamjan Jovanovic         try {
59956476d7SDamjan Jovanovic             InputStream inputStream = jdbcBlob.getBinaryStream();
60956476d7SDamjan Jovanovic             if (inputStream != null) {
61956476d7SDamjan Jovanovic                 return new InputStreamToXInputStreamAdapter(inputStream);
62956476d7SDamjan Jovanovic             } else {
63956476d7SDamjan Jovanovic                 return null;
64956476d7SDamjan Jovanovic             }
65956476d7SDamjan Jovanovic         } catch (java.sql.SQLException jdbcSQLException) {
66956476d7SDamjan Jovanovic             throw Tools.toUnoException(this, jdbcSQLException);
67956476d7SDamjan Jovanovic         }
68956476d7SDamjan Jovanovic     }
69956476d7SDamjan Jovanovic 
70956476d7SDamjan Jovanovic     @Override
getBytes(long pos, int length)71956476d7SDamjan Jovanovic     public byte[] getBytes(long pos, int length) throws SQLException {
72956476d7SDamjan Jovanovic         try {
73956476d7SDamjan Jovanovic             return jdbcBlob.getBytes(pos, length);
74956476d7SDamjan Jovanovic         } catch (java.sql.SQLException jdbcSQLException) {
75956476d7SDamjan Jovanovic             throw Tools.toUnoException(this, jdbcSQLException);
76956476d7SDamjan Jovanovic         }
77956476d7SDamjan Jovanovic     }
78956476d7SDamjan Jovanovic 
79956476d7SDamjan Jovanovic     @Override
length()80956476d7SDamjan Jovanovic     public long length() throws SQLException {
81956476d7SDamjan Jovanovic         try {
82956476d7SDamjan Jovanovic             return jdbcBlob.length();
83956476d7SDamjan Jovanovic         } catch (java.sql.SQLException jdbcSQLException) {
84956476d7SDamjan Jovanovic             throw Tools.toUnoException(this, jdbcSQLException);
85956476d7SDamjan Jovanovic         }
86956476d7SDamjan Jovanovic     }
87956476d7SDamjan Jovanovic 
88956476d7SDamjan Jovanovic     @Override
position(byte[] pattern, long start)89956476d7SDamjan Jovanovic     public long position(byte[] pattern, long start) throws SQLException {
90956476d7SDamjan Jovanovic         try {
91956476d7SDamjan Jovanovic             return jdbcBlob.position(pattern, start);
92956476d7SDamjan Jovanovic         } catch (java.sql.SQLException jdbcSQLException) {
93956476d7SDamjan Jovanovic             throw Tools.toUnoException(this, jdbcSQLException);
94956476d7SDamjan Jovanovic         }
95956476d7SDamjan Jovanovic     }
96956476d7SDamjan Jovanovic 
97956476d7SDamjan Jovanovic     @Override
positionOfBlob(XBlob arg0, long arg1)98956476d7SDamjan Jovanovic     public long positionOfBlob(XBlob arg0, long arg1) throws SQLException {
99956476d7SDamjan Jovanovic         // this was put here in CWS warnings01. The previous implementation was defective, as it did ignore
100956476d7SDamjan Jovanovic         // the pattern parameter. Since the effort for proper implementation is rather high - we would need
101956476d7SDamjan Jovanovic         // to translated patter into a byte[] -, we defer this functionality for the moment (hey, it was
102956476d7SDamjan Jovanovic         // unusable, anyway)
103956476d7SDamjan Jovanovic         // 2005-11-15 / #i57457# / frank.schoenheit@sun.com
104956476d7SDamjan Jovanovic         throw new SQLException(
105956476d7SDamjan Jovanovic                 SharedResources.getInstance().getResourceStringWithSubstitution(
106956476d7SDamjan Jovanovic                         Resources.STR_UNSUPPORTED_FEATURE, "$featurename$", "XBlob::positionOfBlob"),
107956476d7SDamjan Jovanovic                 this, StandardSQLState.SQL_FEATURE_NOT_IMPLEMENTED.name(), 0, Any.VOID);
108956476d7SDamjan Jovanovic     }
109956476d7SDamjan Jovanovic }
110