xref: /AOO41X/main/connectivity/source/drivers/hsqldb/StorageFileAccess.cxx (revision 9b5730f6ddef7eb82608ca4d31dc0d7678e652cf)
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 
27 #if defined(HAVE_CONFIG_H) && HAVE_CONFIG_H
28 #include <config.h>
29 #endif
30 #include <com/sun/star/container/XNameAccess.hpp>
31 #include <com/sun/star/embed/XStorage.hpp>
32 #include "hsqldb/StorageFileAccess.h"
33 #include "hsqldb/HStorageMap.hxx"
34 
35 #include <rtl/logfile.hxx>
36 
37 using namespace ::com::sun::star::container;
38 using namespace ::com::sun::star::uno;
39 using namespace ::com::sun::star::embed;
40 using namespace ::com::sun::star::io;
41 using namespace ::com::sun::star::lang;
42 using namespace ::connectivity::hsqldb;
43 
44 #define OUSTR(x) ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(x) )
45 /*****************************************************************************/
46 /* exception macros */
47 
48 #define ThrowException(env, type, msg) { \
49     env->ThrowNew(env->FindClass(type), msg); }
50 
51 /*
52  * Class:     com_sun_star_sdbcx_comp_hsqldb_StorageFileAccess
53  * Method:    isStreamElement
54  * Signature: (Ljava/lang/String;Ljava/lang/String;)Z
55  */
Java_com_sun_star_sdbcx_comp_hsqldb_StorageFileAccess_isStreamElement(JNIEnv * env,jobject,jstring key,jstring name)56 SAL_DLLPUBLIC_EXPORT jboolean JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_StorageFileAccess_isStreamElement
57   (JNIEnv * env, jobject /*obj_this*/,jstring key, jstring name)
58 {
59     TStorages::mapped_type aStoragePair = StorageContainer::getRegisteredStorage(StorageContainer::jstring2ustring(env,key));
60     if ( aStoragePair.first.first.is() )
61     {
62         try
63         {
64             ::rtl::OUString sName = StorageContainer::jstring2ustring(env,name);
65             try
66             {
67                 ::rtl::OUString sOldName = StorageContainer::removeOldURLPrefix(sName);
68                 if ( aStoragePair.first.first->isStreamElement(sOldName) )
69                 {
70                     try
71                     {
72                         aStoragePair.first.first->renameElement(sOldName,StorageContainer::removeURLPrefix(sName,aStoragePair.first.second));
73                     }
74                     catch(Exception&)
75                     {
76                     }
77                 }
78             }
79             catch(NoSuchElementException&)
80             {
81             }
82             return aStoragePair.first.first->isStreamElement(StorageContainer::removeURLPrefix(sName,aStoragePair.first.second));
83         }
84         catch(NoSuchElementException&)
85         {
86         }
87         catch(Exception& e)
88         {
89             OSL_ENSURE(0,"Exception catched! : Java_com_sun_star_sdbcx_comp_hsqldb_StorageFileAccess_isStreamElement");
90             if (JNI_FALSE != env->ExceptionCheck())
91                 env->ExceptionClear();
92             ::rtl::OString cstr( ::rtl::OUStringToOString(e.Message, RTL_TEXTENCODING_JAVA_UTF8 ) );
93             OSL_TRACE( __FILE__": forwarding Exception: %s", cstr.getStr() );
94         }
95     }
96     return JNI_FALSE;
97 }
98 // -----------------------------------------------------------------------------
99 
100 /*
101  * Class:     com_sun_star_sdbcx_comp_hsqldb_StorageFileAccess
102  * Method:    removeElement
103  * Signature: (Ljava/lang/String;Ljava/lang/String;)V
104  */
Java_com_sun_star_sdbcx_comp_hsqldb_StorageFileAccess_removeElement(JNIEnv * env,jobject,jstring key,jstring name)105 SAL_DLLPUBLIC_EXPORT void JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_StorageFileAccess_removeElement
106   (JNIEnv * env, jobject /*obj_this*/,jstring key, jstring name)
107 {
108 #ifdef HSQLDB_DBG
109     {
110         ::rtl::OUString sKey = StorageContainer::jstring2ustring(env,key);
111         ::rtl::OUString sName = StorageContainer::jstring2ustring(env,name);
112     }
113 #endif
114     TStorages::mapped_type aStoragePair = StorageContainer::getRegisteredStorage(StorageContainer::jstring2ustring(env,key));
115     if ( aStoragePair.first.first.is() )
116     {
117         try
118         {
119             aStoragePair.first.first->removeElement(StorageContainer::removeURLPrefix(StorageContainer::jstring2ustring(env,name),aStoragePair.first.second));
120         }
121         catch(NoSuchElementException&)
122         {
123             if (JNI_FALSE != env->ExceptionCheck())
124                 env->ExceptionClear();
125         }
126         catch(Exception& e)
127         {
128             OSL_ENSURE(0,"Exception catched! : Java_com_sun_star_sdbcx_comp_hsqldb_StorageFileAccess_removeElement");
129             StorageContainer::throwJavaException(e,env);
130         }
131     }
132 }
133 // -----------------------------------------------------------------------------
134 
135 /*
136  * Class:     com_sun_star_sdbcx_comp_hsqldb_StorageFileAccess
137  * Method:    renameElement
138  * Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
139  */
Java_com_sun_star_sdbcx_comp_hsqldb_StorageFileAccess_renameElement(JNIEnv * env,jobject,jstring key,jstring oldname,jstring newname)140 SAL_DLLPUBLIC_EXPORT void JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_StorageFileAccess_renameElement
141   (JNIEnv * env, jobject /*obj_this*/,jstring key, jstring oldname, jstring newname)
142 {
143 #ifdef HSQLDB_DBG
144     {
145         ::rtl::OUString sKey = StorageContainer::jstring2ustring(env,key);
146         ::rtl::OUString sNewName = StorageContainer::jstring2ustring(env,newname);
147         ::rtl::OUString sOldName = StorageContainer::jstring2ustring(env,oldname);
148     }
149 #endif
150     TStorages::mapped_type aStoragePair = StorageContainer::getRegisteredStorage(StorageContainer::jstring2ustring(env,key));
151     if ( aStoragePair.first.first.is() )
152     {
153         try
154         {
155             aStoragePair.first.first->renameElement(
156                 StorageContainer::removeURLPrefix(StorageContainer::jstring2ustring(env,oldname),aStoragePair.first.second),
157                 StorageContainer::removeURLPrefix(StorageContainer::jstring2ustring(env,newname),aStoragePair.first.second)
158             );
159 #ifdef HSQLDB_DBG
160             {
161                 ::rtl::OUString sNewName = StorageContainer::removeURLPrefix(StorageContainer::jstring2ustring(env,newname),aStoragePair.first.second);
162                 OSL_ENSURE(aStoragePair.first.first->isStreamElement(sNewName),"Stream could not be renamed");
163             }
164 #endif
165         }
166         catch(NoSuchElementException&)
167         {
168         }
169         catch(Exception& e)
170         {
171             OSL_ENSURE(0,"Exception catched! : Java_com_sun_star_sdbcx_comp_hsqldb_StorageFileAccess_renameElement");
172             StorageContainer::throwJavaException(e,env);
173         }
174     }
175 }
176 // -----------------------------------------------------------------------------
177