1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski #ifndef CONNECTIVI_HSQLDB_HSTORAGEMAP_HXX
24*b1cdbd2cSJim Jagielski #define CONNECTIVI_HSQLDB_HSTORAGEMAP_HXX
25*b1cdbd2cSJim Jagielski 
26*b1cdbd2cSJim Jagielski #include <com/sun/star/embed/XStorage.hpp>
27*b1cdbd2cSJim Jagielski #include <com/sun/star/embed/XTransactionListener.hpp>
28*b1cdbd2cSJim Jagielski #include <com/sun/star/io/XStream.hpp>
29*b1cdbd2cSJim Jagielski #include <com/sun/star/io/XOutputStream.hpp>
30*b1cdbd2cSJim Jagielski #include <com/sun/star/io/XInputStream.hpp>
31*b1cdbd2cSJim Jagielski #include <com/sun/star/io/XSeekable.hpp>
32*b1cdbd2cSJim Jagielski #ifndef BOOST_SHARED_PTR_HPP_INCLUDED
33*b1cdbd2cSJim Jagielski #include <boost/shared_ptr.hpp>
34*b1cdbd2cSJim Jagielski #endif
35*b1cdbd2cSJim Jagielski #include <comphelper/stl_types.hxx>
36*b1cdbd2cSJim Jagielski #include <jni.h>
37*b1cdbd2cSJim Jagielski //........................................................................
38*b1cdbd2cSJim Jagielski namespace connectivity
39*b1cdbd2cSJim Jagielski {
40*b1cdbd2cSJim Jagielski //........................................................................
41*b1cdbd2cSJim Jagielski 	namespace hsqldb
42*b1cdbd2cSJim Jagielski 	{
43*b1cdbd2cSJim Jagielski 		class StreamHelper
44*b1cdbd2cSJim Jagielski 		{
45*b1cdbd2cSJim Jagielski 			::com::sun::star::uno::Reference< ::com::sun::star::io::XStream>		m_xStream;
46*b1cdbd2cSJim Jagielski 			::com::sun::star::uno::Reference< ::com::sun::star::io::XSeekable>		m_xSeek;
47*b1cdbd2cSJim Jagielski 			::com::sun::star::uno::Reference< ::com::sun::star::io::XOutputStream>	m_xOutputStream;
48*b1cdbd2cSJim Jagielski 			::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream>	m_xInputStream;
49*b1cdbd2cSJim Jagielski 		public:
50*b1cdbd2cSJim Jagielski 			StreamHelper(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XStream>& _xStream);
51*b1cdbd2cSJim Jagielski 			~StreamHelper();
52*b1cdbd2cSJim Jagielski 
53*b1cdbd2cSJim Jagielski 			::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream>	getInputStream();
54*b1cdbd2cSJim Jagielski 			::com::sun::star::uno::Reference< ::com::sun::star::io::XOutputStream>	getOutputStream();
55*b1cdbd2cSJim Jagielski 			::com::sun::star::uno::Reference< ::com::sun::star::io::XSeekable>		getSeek();
56*b1cdbd2cSJim Jagielski 		};
57*b1cdbd2cSJim Jagielski 
58*b1cdbd2cSJim Jagielski 
59*b1cdbd2cSJim Jagielski 		DECLARE_STL_USTRINGACCESS_MAP(::boost::shared_ptr<StreamHelper>,TStreamMap);
60*b1cdbd2cSJim Jagielski         typedef ::std::pair< ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >, ::rtl::OUString > TStorageURLPair;
61*b1cdbd2cSJim Jagielski 		typedef ::std::pair< TStorageURLPair, TStreamMap> TStoragePair;
62*b1cdbd2cSJim Jagielski 		DECLARE_STL_USTRINGACCESS_MAP(TStoragePair,TStorages);
63*b1cdbd2cSJim Jagielski 		/** contains all storages so far accessed.
64*b1cdbd2cSJim Jagielski 		*/
65*b1cdbd2cSJim Jagielski 		class StorageContainer
66*b1cdbd2cSJim Jagielski 		{
67*b1cdbd2cSJim Jagielski 		public:
68*b1cdbd2cSJim Jagielski 			static ::rtl::OUString registerStorage(const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage>& _xStorage,const ::rtl::OUString& _sURL);
69*b1cdbd2cSJim Jagielski             static TStorages::mapped_type getRegisteredStorage(const ::rtl::OUString& _sKey);
70*b1cdbd2cSJim Jagielski             static ::rtl::OUString getRegisteredKey(const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage>& _xStorage);
71*b1cdbd2cSJim Jagielski 			static void revokeStorage(const ::rtl::OUString& _sKey,const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XTransactionListener>& _xListener);
72*b1cdbd2cSJim Jagielski 
73*b1cdbd2cSJim Jagielski 			static TStreamMap::mapped_type registerStream(JNIEnv * env,jstring name, jstring key,sal_Int32 _nMode);
74*b1cdbd2cSJim Jagielski 			static void revokeStream(JNIEnv * env,jstring name, jstring key);
75*b1cdbd2cSJim Jagielski 			static TStreamMap::mapped_type getRegisteredStream( JNIEnv * env, jstring name, jstring key);
76*b1cdbd2cSJim Jagielski 
77*b1cdbd2cSJim Jagielski 			static ::rtl::OUString jstring2ustring(JNIEnv * env, jstring jstr);
78*b1cdbd2cSJim Jagielski 			static ::rtl::OUString removeURLPrefix(const ::rtl::OUString& _sURL,const ::rtl::OUString& _sFileURL);
79*b1cdbd2cSJim Jagielski             static ::rtl::OUString removeOldURLPrefix(const ::rtl::OUString& _sURL);
80*b1cdbd2cSJim Jagielski             static void throwJavaException(const ::com::sun::star::uno::Exception& _aException,JNIEnv * env);
81*b1cdbd2cSJim Jagielski 		};
82*b1cdbd2cSJim Jagielski 	//........................................................................
83*b1cdbd2cSJim Jagielski 	}	// namespace hsqldb
84*b1cdbd2cSJim Jagielski 	//........................................................................
85*b1cdbd2cSJim Jagielski //........................................................................
86*b1cdbd2cSJim Jagielski }	// namespace connectivity
87*b1cdbd2cSJim Jagielski 
88*b1cdbd2cSJim Jagielski //........................................................................
89*b1cdbd2cSJim Jagielski #endif // CONNECTIVI_HSQLDB_HSTORAGEMAP_HXX
90*b1cdbd2cSJim Jagielski 
91