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