Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*************************************************************************
3 : *
4 : * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 : *
6 : * Copyright 2000, 2010 Oracle and/or its affiliates.
7 : *
8 : * OpenOffice.org - a multi-platform office productivity suite
9 : *
10 : * This file is part of OpenOffice.org.
11 : *
12 : * OpenOffice.org is free software: you can redistribute it and/or modify
13 : * it under the terms of the GNU Lesser General Public License version 3
14 : * only, as published by the Free Software Foundation.
15 : *
16 : * OpenOffice.org is distributed in the hope that it will be useful,
17 : * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 : * GNU Lesser General Public License version 3 for more details
20 : * (a copy is included in the LICENSE file that accompanied this code).
21 : *
22 : * You should have received a copy of the GNU Lesser General Public License
23 : * version 3 along with OpenOffice.org. If not, see
24 : * <http://www.openoffice.org/license.html>
25 : * for a copy of the LGPLv3 License.
26 : *
27 : ************************************************************************/
28 :
29 : #ifndef INCLUDED_UCB_SOURCE_UCP_WEBDAV_NEON_WEBDAVCONTENT_HXX
30 : #define INCLUDED_UCB_SOURCE_UCP_WEBDAV_NEON_WEBDAVCONTENT_HXX
31 :
32 : #include <config_lgpl.h>
33 : #include <memory>
34 : #include <list>
35 : #include <rtl/ref.hxx>
36 : #include <com/sun/star/ucb/ContentCreationException.hpp>
37 : #include <com/sun/star/ucb/XContentCreator.hpp>
38 : #include <ucbhelper/contenthelper.hxx>
39 : #include "DAVResourceAccess.hxx"
40 : #include "PropertyMap.hxx"
41 :
42 : namespace com { namespace sun { namespace star { namespace beans {
43 : struct Property;
44 : struct PropertyValue;
45 : } } } }
46 :
47 : namespace com { namespace sun { namespace star { namespace io {
48 : class XInputStream;
49 : } } } }
50 :
51 : namespace com { namespace sun { namespace star { namespace sdbc {
52 : class XRow;
53 : } } } }
54 :
55 : namespace com { namespace sun { namespace star { namespace ucb {
56 : struct OpenCommandArgument3;
57 : struct PostCommandArgument2;
58 : struct PropertyCommandArgument;
59 : struct TransferInfo;
60 : } } } }
61 :
62 : namespace webdav_ucp
63 : {
64 :
65 :
66 :
67 : // UNO service name for the content.
68 : #define WEBDAV_CONTENT_SERVICE_NAME "com.sun.star.ucb.WebDAVContent"
69 :
70 :
71 :
72 : class ContentProvider;
73 : class ContentProperties;
74 : class CachableContentProperties;
75 :
76 : class Content : public ::ucbhelper::ContentImplHelper,
77 : public com::sun::star::ucb::XContentCreator
78 : {
79 : enum ResourceType
80 : {
81 : UNKNOWN,
82 : FTP,
83 : NON_DAV,
84 : DAV
85 : };
86 :
87 : std::unique_ptr< DAVResourceAccess > m_xResAccess;
88 : std::unique_ptr< CachableContentProperties >
89 : m_xCachedProps; // locally cached props
90 : OUString m_aEscapedTitle;
91 : ResourceType m_eResourceType;
92 : ContentProvider* m_pProvider; // No need for a ref, base class holds object
93 : bool m_bTransient;
94 : bool m_bLocked;
95 : bool m_bCollection;
96 : bool m_bDidGetOrHead;
97 : std::vector< OUString > m_aFailedPropNames;
98 :
99 : private:
100 : virtual com::sun::star::uno::Sequence< com::sun::star::beans::Property >
101 : getProperties( const com::sun::star::uno::Reference<
102 : com::sun::star::ucb::XCommandEnvironment > & xEnv ) SAL_OVERRIDE;
103 : virtual com::sun::star::uno::Sequence< com::sun::star::ucb::CommandInfo >
104 : getCommands( const com::sun::star::uno::Reference<
105 : com::sun::star::ucb::XCommandEnvironment > & xEnv ) SAL_OVERRIDE;
106 : virtual OUString getParentURL() SAL_OVERRIDE;
107 :
108 : bool isFolder( const ::com::sun::star::uno::Reference<
109 : ::com::sun::star::ucb::XCommandEnvironment >& xEnv )
110 : throw ( ::com::sun::star::uno::Exception, std::exception );
111 :
112 : ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRow >
113 : getPropertyValues( const ::com::sun::star::uno::Sequence<
114 : ::com::sun::star::beans::Property >& rProperties,
115 : const ::com::sun::star::uno::Reference<
116 : ::com::sun::star::ucb::XCommandEnvironment >& xEnv )
117 : throw ( ::com::sun::star::uno::Exception, std::exception );
118 :
119 : ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >
120 : setPropertyValues( const ::com::sun::star::uno::Sequence<
121 : ::com::sun::star::beans::PropertyValue >& rValues,
122 : const ::com::sun::star::uno::Reference<
123 : ::com::sun::star::ucb::XCommandEnvironment >& xEnv )
124 : throw ( ::com::sun::star::uno::Exception, std::exception );
125 :
126 : typedef rtl::Reference< Content > ContentRef;
127 : typedef std::list< ContentRef > ContentRefList;
128 : void queryChildren( ContentRefList& rChildren);
129 :
130 : bool
131 : exchangeIdentity( const ::com::sun::star::uno::Reference<
132 : ::com::sun::star::ucb::XContentIdentifier >& xNewId );
133 :
134 : const OUString
135 : getBaseURI( const std::unique_ptr< DAVResourceAccess > & rResAccess );
136 :
137 : ResourceType
138 : getResourceType( const ::com::sun::star::uno::Reference<
139 : ::com::sun::star::ucb::XCommandEnvironment >& xEnv )
140 : throw ( ::com::sun::star::uno::Exception, std::exception );
141 :
142 : ResourceType
143 : getResourceType( const ::com::sun::star::uno::Reference<
144 : ::com::sun::star::ucb::XCommandEnvironment >& xEnv,
145 : const std::unique_ptr< DAVResourceAccess > & rResAccess,
146 : bool * networkAccessAllowed = 0)
147 : throw ( ::com::sun::star::uno::Exception, std::exception );
148 :
149 : // Command "open"
150 : com::sun::star::uno::Any open(
151 : const com::sun::star::ucb::OpenCommandArgument3 & rArg,
152 : const com::sun::star::uno::Reference<
153 : com::sun::star::ucb::XCommandEnvironment > & xEnv )
154 : throw (css::uno::Exception, std::exception);
155 :
156 : // Command "post"
157 : void post( const com::sun::star::ucb::PostCommandArgument2 & rArg,
158 : const com::sun::star::uno::Reference<
159 : com::sun::star::ucb::XCommandEnvironment > & xEnv )
160 : throw( ::com::sun::star::uno::Exception );
161 :
162 : // Command "insert"
163 : void insert( const ::com::sun::star::uno::Reference<
164 : ::com::sun::star::io::XInputStream > & xInputStream,
165 : bool bReplaceExisting,
166 : const com::sun::star::uno::Reference<
167 : com::sun::star::ucb::XCommandEnvironment >& Environment )
168 : throw( ::com::sun::star::uno::Exception );
169 :
170 : // Command "transfer"
171 : void transfer( const ::com::sun::star::ucb::TransferInfo & rArgs,
172 : const com::sun::star::uno::Reference<
173 : com::sun::star::ucb::XCommandEnvironment >& Environment )
174 : throw( ::com::sun::star::uno::Exception );
175 :
176 : // Command "delete"
177 : void destroy( bool bDeletePhysical )
178 : throw( ::com::sun::star::uno::Exception );
179 :
180 : // Command "lock"
181 : void lock( const com::sun::star::uno::Reference<
182 : com::sun::star::ucb::XCommandEnvironment >& Environment )
183 : throw( ::com::sun::star::uno::Exception );
184 :
185 : // Command "unlock"
186 : void unlock( const com::sun::star::uno::Reference<
187 : com::sun::star::ucb::XCommandEnvironment >& Environment )
188 : throw( ::com::sun::star::uno::Exception );
189 :
190 : ::com::sun::star::uno::Any MapDAVException( const DAVException & e,
191 : bool bWrite );
192 : void cancelCommandExecution(
193 : const DAVException & e,
194 : const ::com::sun::star::uno::Reference<
195 : com::sun::star::ucb::XCommandEnvironment > & xEnv,
196 : bool bWrite = false )
197 : throw( ::com::sun::star::uno::Exception );
198 :
199 : static bool shouldAccessNetworkAfterException( const DAVException & e );
200 :
201 : bool supportsExclusiveWriteLock(
202 : const com::sun::star::uno::Reference<
203 : com::sun::star::ucb::XCommandEnvironment >& Environment );
204 :
205 : void addProperty( const com::sun::star::ucb::PropertyCommandArgument &aCmdArg,
206 : const com::sun::star::uno::Reference<
207 : com::sun::star::ucb::XCommandEnvironment >& Environment )
208 : throw( com::sun::star::beans::PropertyExistException,
209 : com::sun::star::beans::IllegalTypeException,
210 : com::sun::star::lang::IllegalArgumentException,
211 : com::sun::star::uno::RuntimeException,
212 : std::exception );
213 :
214 : void removeProperty( const OUString& Name,
215 : const com::sun::star::uno::Reference<
216 : com::sun::star::ucb::XCommandEnvironment >& Environment )
217 : throw( com::sun::star::beans::UnknownPropertyException,
218 : com::sun::star::beans::NotRemoveableException,
219 : com::sun::star::uno::RuntimeException,
220 : std::exception );
221 :
222 : public:
223 : Content( const ::com::sun::star::uno::Reference<
224 : ::com::sun::star::uno::XComponentContext >& rxContext,
225 : ContentProvider* pProvider,
226 : const ::com::sun::star::uno::Reference<
227 : ::com::sun::star::ucb::XContentIdentifier >& Identifier,
228 : rtl::Reference< DAVSessionFactory > const & rSessionFactory )
229 : throw ( ::com::sun::star::ucb::ContentCreationException );
230 : Content( const ::com::sun::star::uno::Reference<
231 : ::com::sun::star::uno::XComponentContext >& rxContext,
232 : ContentProvider* pProvider,
233 : const ::com::sun::star::uno::Reference<
234 : ::com::sun::star::ucb::XContentIdentifier >& Identifier,
235 : rtl::Reference< DAVSessionFactory > const & rSessionFactory,
236 : bool isCollection )
237 : throw ( ::com::sun::star::ucb::ContentCreationException );
238 : virtual ~Content();
239 :
240 : // XInterface
241 : virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & rType )
242 : throw( css::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
243 : virtual void SAL_CALL acquire()
244 : throw() SAL_OVERRIDE;
245 : virtual void SAL_CALL release()
246 : throw() SAL_OVERRIDE;
247 :
248 : // XTypeProvider
249 : virtual css::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId()
250 : throw( css::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
251 : virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes()
252 : throw( css::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
253 :
254 : // XServiceInfo
255 : virtual OUString SAL_CALL
256 : getImplementationName()
257 : throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
258 :
259 : virtual ::com::sun::star::uno::Sequence< OUString > SAL_CALL
260 : getSupportedServiceNames()
261 : throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
262 :
263 : // XContent
264 : virtual OUString SAL_CALL
265 : getContentType()
266 : throw( com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
267 :
268 : // XCommandProcessor
269 : virtual com::sun::star::uno::Any SAL_CALL
270 : execute( const com::sun::star::ucb::Command& aCommand,
271 : sal_Int32 CommandId,
272 : const com::sun::star::uno::Reference<
273 : com::sun::star::ucb::XCommandEnvironment >& Environment )
274 : throw( com::sun::star::uno::Exception,
275 : com::sun::star::ucb::CommandAbortedException,
276 : com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
277 : virtual void SAL_CALL
278 : abort( sal_Int32 CommandId )
279 : throw( com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
280 :
281 : // XPropertyContainer
282 : virtual void SAL_CALL
283 : addProperty( const OUString& Name,
284 : sal_Int16 Attributes,
285 : const com::sun::star::uno::Any& DefaultValue )
286 : throw( com::sun::star::beans::PropertyExistException,
287 : com::sun::star::beans::IllegalTypeException,
288 : com::sun::star::lang::IllegalArgumentException,
289 : com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
290 :
291 : virtual void SAL_CALL
292 : removeProperty( const OUString& Name )
293 : throw( com::sun::star::beans::UnknownPropertyException,
294 : com::sun::star::beans::NotRemoveableException,
295 : com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
296 :
297 :
298 : // Additional interfaces
299 :
300 :
301 : // XContentCreator
302 : virtual com::sun::star::uno::Sequence<
303 : com::sun::star::ucb::ContentInfo > SAL_CALL
304 : queryCreatableContentsInfo()
305 : throw( com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
306 : virtual com::sun::star::uno::Reference<
307 : com::sun::star::ucb::XContent > SAL_CALL
308 : createNewContent( const com::sun::star::ucb::ContentInfo& Info )
309 : throw( com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
310 :
311 :
312 : // Non-interface methods.
313 :
314 :
315 0 : DAVResourceAccess & getResourceAccess() { return *m_xResAccess; }
316 :
317 : // Called from resultset data supplier.
318 : static ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRow >
319 : getPropertyValues( const ::com::sun::star::uno::Reference<
320 : ::com::sun::star::uno::XComponentContext >& rxContext,
321 : const ::com::sun::star::uno::Sequence<
322 : ::com::sun::star::beans::Property >& rProperties,
323 : const ContentProperties& rData,
324 : const rtl::Reference<
325 : ::ucbhelper::ContentProviderImplHelper >& rProvider,
326 : const OUString& rContentId );
327 : };
328 :
329 : }
330 :
331 : #endif
332 :
333 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|