blob: 4aa5285d599d7a6d22ad8ff50eb239821d69b6e2 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#ifndef ODMA_PROVIDER_HXX
#define ODMA_PROVIDER_HXX
#include <ucbhelper/providerhelper.hxx>
#include "odma_lib.hxx"
#include "rtl/ref.hxx"
#include <map>
#include "odma_contentprops.hxx"
namespace odma {
//=========================================================================
// UNO service name for the provider. This name will be used by the UCB to
// create instances of the provider.
#define ODMA_CONTENT_PROVIDER_SERVICE_NAME \
"com.sun.star.ucb.ODMAContentProvider"
// #define ODMA_CONTENT_PROVIDER_SERVICE_NAME_LENGTH 34
// URL scheme. This is the scheme the provider will be able to create
// contents for. The UCB will select the provider ( i.e. in order to create
// contents ) according to this scheme.
#define ODMA_URL_ODMAID "::ODMA"
#define ODMA_URL_SCHEME "vnd.sun.star.odma"
#define ODMA_URL_SCHEME_SHORT "odma"
#define ODMA_URL_SHORT ":"
#define ODMA_URL_SHORT_LGTH 5
#define ODMA_URL_LGTH 18
#define ODMA_URL_ODMAID_LGTH 6
// UCB Content Type.
#define ODMA_CONTENT_TYPE "application/" ODMA_URL_SCHEME "-content"
#define ODMA_ODMA_REGNAME "sodma"
#define ODM_NAME_MAX 64 // Max length of a name document including
// the terminating NULL character.
//=========================================================================
class ContentProperties;
class ContentProvider : public ::ucbhelper::ContentProviderImplHelper
{
typedef ::std::map< ::rtl::OString, ::rtl::Reference<ContentProperties> > ContentsMap;
ContentsMap m_aContents; // contains all ContentProperties
static ODMHANDLE m_aOdmHandle; // the one and only ODMA handle to our DMS
/** fillDocumentProperties fills the given _rProp with ODMA properties
@param _rProp the ContentProperties
*/
void fillDocumentProperties(const ::rtl::Reference<ContentProperties>& _rProp);
/**
*/
::rtl::Reference<ContentProperties> getContentProperty(const ::rtl::OUString& _sName,
const ContentPropertiesMemberFunctor& _aFunctor) const;
public:
ContentProvider( const ::com::sun::star::uno::Reference<
::com::sun::star::uno::XComponentContext >& rContext );
virtual ~ContentProvider();
// XInterface
XINTERFACE_DECL()
// XTypeProvider
XTYPEPROVIDER_DECL()
// XServiceInfo
XSERVICEINFO_DECL()
// XContentProvider
virtual ::com::sun::star::uno::Reference<
::com::sun::star::ucb::XContent > SAL_CALL
queryContent( const ::com::sun::star::uno::Reference<
::com::sun::star::ucb::XContentIdentifier >& Identifier )
throw( ::com::sun::star::ucb::IllegalIdentifierException,
::com::sun::star::uno::RuntimeException );
//////////////////////////////////////////////////////////////////////
// Additional interfaces
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
// Non-interface methods.
//////////////////////////////////////////////////////////////////////
static ODMHANDLE getHandle();
/** append add an entry to the internal map
@param _rProp the content properties
*/
void append(const ::rtl::Reference<ContentProperties>& _rProp);
/** closeDocument closes the document
@param _sDocumentId the id of the document
*/
void closeDocument(const ::rtl::OString& _sDocumentId);
/** saveDocument saves the document in DMS
@param _sDocumentId the id of the document
*/
void saveDocument(const ::rtl::OString& _sDocumentId);
/** queryContentProperty query in the DMS for a content which document name is equal to _sDocumentName
@param _sDocumentName the document to query for
@return the content properties for this content or an empty refernce
*/
::rtl::Reference<ContentProperties> queryContentProperty(const ::rtl::OUString& _sDocumentName);
/** getContentPropertyWithTitle returns the ContentProperties for the first content with that title
@param _sTitle the title of the document
@return the content properties
*/
::rtl::Reference<ContentProperties> getContentPropertyWithTitle(const ::rtl::OUString& _sTitle) const;
/** getContentPropertyWithDocumentId returns the ContentProperties for the first content with that title
@param _sTitle the title of the document
@return the content properties
*/
::rtl::Reference<ContentProperties> getContentPropertyWithDocumentId(const ::rtl::OUString& _sDocumentId) const;
/** getContentPropertyWithSavedAsName returns the ContentProperties for the first content with that SavedAsName
@param _sSaveAsName the SavedAsName of the document
@return the content properties
*/
::rtl::Reference<ContentProperties> getContentPropertyWithSavedAsName(const ::rtl::OUString& _sSaveAsName) const;
/** openDoc returns the URL for the temporary file for the specific Content and opens it
@param _rProp used for check if already open, the member m_sFileURL will be set if is wan't opened yet
@return the URL of the temporary file
*/
static ::rtl::OUString openDoc(const ::rtl::Reference<ContentProperties>& _rProp) throw (::com::sun::star::uno::Exception);
/** convertURL converts a normal URL into an ODMA understandable name
@param _sCanonicURL the URL from ContentIndentifier
@return the ODMA name
*/
static ::rtl::OUString convertURL(const ::rtl::OUString& _sCanonicURL);
/** deleteDocument deletes the document inside the DMS and remove the content properties from inside list
@param _rProp the ContentProperties
@return true when successful
*/
sal_Bool deleteDocument(const ::rtl::Reference<ContentProperties>& _rProp);
};
}
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|