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
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_connectivity.hxx"
26 #if defined(HAVE_CONFIG_H) && HAVE_CONFIG_H
27 #include <config.h>
28 #endif
29
30 #include "uno/mapping.hxx"
31 #include "uno/environment.hxx"
32 #include "cppuhelper/bootstrap.hxx"
33 #include "cppuhelper/compbase1.hxx"
34 #include "cppuhelper/component_context.hxx"
35 #include "accesslog.hxx"
36 #include <com/sun/star/embed/XTransactedObject.hpp>
37 #include <comphelper/processfactory.hxx>
38 #include <com/sun/star/io/XStream.hpp>
39 #include <com/sun/star/container/XNameAccess.hpp>
40 #include <com/sun/star/document/XDocumentSubStorageSupplier.hpp>
41 #include <com/sun/star/embed/XStorage.hpp>
42 #include <com/sun/star/embed/ElementModes.hpp>
43 #include <comphelper/stl_types.hxx>
44 #include <comphelper/types.hxx>
45 #include "hsqldb/HStorageAccess.hxx"
46 #include "hsqldb/HStorageMap.hxx"
47
48 #include "jvmaccess/virtualmachine.hxx"
49 #include "com/sun/star/lang/XSingleComponentFactory.hpp"
50 #include "diagnose_ex.h"
51
52 using namespace ::com::sun::star::container;
53 using namespace ::com::sun::star::uno;
54 using namespace ::com::sun::star::document;
55 using namespace ::com::sun::star::embed;
56 using namespace ::com::sun::star::io;
57 using namespace ::com::sun::star::lang;
58 using namespace ::connectivity::hsqldb;
59
60 #define OUSTR(x) ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(x) )
61 /*****************************************************************************/
62 /* exception macros */
63
64 #define ThrowException(env, type, msg) { \
65 env->ThrowNew(env->FindClass(type), msg); }
66
67 // -----------------------------------------------------------------------------
68 /*
69 * Class: com_sun_star_sdbcx_comp_hsqldb_StorageNativeOutputStream
70 * Method: openStream
71 * Signature: (Ljava/lang/String;Ljava/lang/String;I)V
72 */
Java_com_sun_star_sdbcx_comp_hsqldb_StorageNativeOutputStream_openStream(JNIEnv * env,jobject,jstring name,jstring key,jint mode)73 extern "C" SAL_DLLPUBLIC_EXPORT void JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_StorageNativeOutputStream_openStream
74 (JNIEnv * env, jobject /*obj_this*/, jstring name, jstring key, jint mode)
75 {
76 #ifdef HSQLDB_DBG
77 {
78 OperationLogFile( env, name, "output" ).logOperation( "openStream" );
79 LogFile( env, name, "output" ).create();
80 }
81 #endif
82 StorageContainer::registerStream(env,name,key,mode);
83 }
84 /*
85 * Class: com_sun_star_sdbcx_comp_hsqldb_StorageNativeOutputStream
86 * Method: write
87 * Signature: (Ljava/lang/String;Ljava/lang/String;[BII)V
88 */
Java_com_sun_star_sdbcx_comp_hsqldb_StorageNativeOutputStream_write__Ljava_lang_String_2Ljava_lang_String_2_3BII(JNIEnv * env,jobject obj_this,jstring key,jstring name,jbyteArray buffer,jint off,jint len)89 extern "C" SAL_DLLPUBLIC_EXPORT void JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_StorageNativeOutputStream_write__Ljava_lang_String_2Ljava_lang_String_2_3BII
90 (JNIEnv * env, jobject obj_this, jstring key, jstring name, jbyteArray buffer, jint off, jint len)
91 {
92 #ifdef HSQLDB_DBG
93 OperationLogFile( env, name, "output" ).logOperation( "write( byte[], int, int )" );
94
95 DataLogFile aDataLog( env, name, "output" );
96 write_to_storage_stream_from_buffer( env, obj_this, name, key, buffer, off, len, &aDataLog );
97 #else
98 write_to_storage_stream_from_buffer( env, obj_this, name, key, buffer, off, len );
99 #endif
100 }
101 // -----------------------------------------------------------------------------
102 /*
103 * Class: com_sun_star_sdbcx_comp_hsqldb_StorageNativeOutputStream
104 * Method: write
105 * Signature: (Ljava/lang/String;Ljava/lang/String;[B)V
106 */
Java_com_sun_star_sdbcx_comp_hsqldb_StorageNativeOutputStream_write__Ljava_lang_String_2Ljava_lang_String_2_3B(JNIEnv * env,jobject obj_this,jstring key,jstring name,jbyteArray buffer)107 extern "C" SAL_DLLPUBLIC_EXPORT void JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_StorageNativeOutputStream_write__Ljava_lang_String_2Ljava_lang_String_2_3B
108 (JNIEnv * env, jobject obj_this, jstring key, jstring name, jbyteArray buffer)
109 {
110 #ifdef HSQLDB_DBG
111 OperationLogFile( env, name, "output" ).logOperation( "write( byte[] )" );
112
113 DataLogFile aDataLog( env, name, "output" );
114 write_to_storage_stream_from_buffer( env, obj_this, name, key, buffer, 0, env->GetArrayLength( buffer ), &aDataLog );
115 #else
116 write_to_storage_stream_from_buffer( env, obj_this, name, key, buffer, 0, env->GetArrayLength( buffer ) );
117 #endif
118 }
119 // -----------------------------------------------------------------------------
120 /*
121 * Class: com_sun_star_sdbcx_comp_hsqldb_StorageNativeOutputStream
122 * Method: close
123 * Signature: (Ljava/lang/String;Ljava/lang/String;)V
124 */
Java_com_sun_star_sdbcx_comp_hsqldb_StorageNativeOutputStream_close(JNIEnv * env,jobject,jstring key,jstring name)125 extern "C" SAL_DLLPUBLIC_EXPORT void JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_StorageNativeOutputStream_close
126 (JNIEnv * env, jobject /*obj_this*/, jstring key, jstring name)
127 {
128 #ifdef HSQLDB_DBG
129 OperationLogFile aOpLog( env, name, "output" );
130 aOpLog.logOperation( "close" );
131
132 LogFile aDataLog( env, name, "output" );
133 #endif
134
135 ::boost::shared_ptr<StreamHelper> pHelper = StorageContainer::getRegisteredStream(env,name,key);
136 Reference< XOutputStream> xFlush = pHelper.get() ? pHelper->getOutputStream() : Reference< XOutputStream>();
137 if ( xFlush.is() )
138 try
139 {
140 xFlush->flush();
141 }
142 catch(Exception&)
143 {}
144
145 #ifdef HSQLDB_DBG
146 aDataLog.close();
147 aOpLog.close();
148 #endif
149 StorageContainer::revokeStream(env,name,key);
150 }
151 // -----------------------------------------------------------------------------
152 /*
153 * Class: com_sun_star_sdbcx_comp_hsqldb_StorageNativeOutputStream
154 * Method: write
155 * Signature: (Ljava/lang/String;Ljava/lang/String;I)V
156 */
Java_com_sun_star_sdbcx_comp_hsqldb_StorageNativeOutputStream_write__Ljava_lang_String_2Ljava_lang_String_2I(JNIEnv * env,jobject obj_this,jstring key,jstring name,jint b)157 extern "C" SAL_DLLPUBLIC_EXPORT void JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_StorageNativeOutputStream_write__Ljava_lang_String_2Ljava_lang_String_2I
158 (JNIEnv * env, jobject obj_this, jstring key, jstring name,jint b)
159 {
160 #ifdef HSQLDB_DBG
161 OperationLogFile( env, name, "output" ).logOperation( "write( int )" );
162
163 DataLogFile aDataLog( env, name, "output" );
164 write_to_storage_stream( env, obj_this, name, key, b, &aDataLog );
165 #else
166 write_to_storage_stream( env, obj_this, name, key, b );
167 #endif
168 }
169 // -----------------------------------------------------------------------------
170 /*
171 * Class: com_sun_star_sdbcx_comp_hsqldb_StorageNativeOutputStream
172 * Method: flush
173 * Signature: (Ljava/lang/String;Ljava/lang/String;)V
174 */
Java_com_sun_star_sdbcx_comp_hsqldb_StorageNativeOutputStream_flush(JNIEnv * env,jobject,jstring key,jstring name)175 extern "C" SAL_DLLPUBLIC_EXPORT void JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_StorageNativeOutputStream_flush
176 (JNIEnv * env, jobject /*obj_this*/, jstring key, jstring name)
177 {
178 OSL_UNUSED( env );
179 OSL_UNUSED( key );
180 OSL_UNUSED( name );
181 #ifdef HSQLDB_DBG
182 OperationLogFile( env, name, "output" ).logOperation( "flush" );
183
184 ::rtl::OUString sKey = StorageContainer::jstring2ustring(env,key);
185 ::rtl::OUString sName = StorageContainer::jstring2ustring(env,name);
186 #endif
187 }
188 // -----------------------------------------------------------------------------
189 /*
190 * Class: com_sun_star_sdbcx_comp_hsqldb_StorageNativeOutputStream
191 * Method: sync
192 * Signature: (Ljava/lang/String;Ljava/lang/String;)V
193 */
Java_com_sun_star_sdbcx_comp_hsqldb_StorageNativeOutputStream_sync(JNIEnv * env,jobject,jstring key,jstring name)194 extern "C" SAL_DLLPUBLIC_EXPORT void JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_StorageNativeOutputStream_sync
195 (JNIEnv * env, jobject /*obj_this*/, jstring key, jstring name)
196 {
197 #ifdef HSQLDB_DBG
198 OperationLogFile( env, name, "output" ).logOperation( "sync" );
199 #endif
200 ::boost::shared_ptr< StreamHelper > pStream = StorageContainer::getRegisteredStream( env, name, key );
201 Reference< XOutputStream > xFlush = pStream.get() ? pStream->getOutputStream() : Reference< XOutputStream>();
202 OSL_ENSURE( xFlush.is(), "StorageNativeOutputStream::sync: could not retrieve an output stream!" );
203 if ( xFlush.is() )
204 {
205 try
206 {
207 xFlush->flush();
208 }
209 catch(Exception&)
210 {
211 OSL_ENSURE( false, "StorageNativeOutputStream::sync: could not flush output stream!" );
212 }
213 }
214 }
215 // -----------------------------------------------------------------------------
216