summaryrefslogtreecommitdiff
path: root/ucb/source/ucp/odma/odma_provider.hxx
blob: 4ce4372e74b8df3f79b7ef6cedcd975bfd0c8bf1 (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
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
/*************************************************************************
 *
 *  OpenOffice.org - a multi-platform office productivity suite
 *
 *  $RCSfile: odma_provider.hxx,v $
 *
 *  $Revision: 1.4 $
 *
 *  last change: $Author: rt $ $Date: 2005-09-09 15:53:43 $
 *
 *  The Contents of this file are made available subject to
 *  the terms of GNU Lesser General Public License Version 2.1.
 *
 *
 *    GNU Lesser General Public License Version 2.1
 *    =============================================
 *    Copyright 2005 by Sun Microsystems, Inc.
 *    901 San Antonio Road, Palo Alto, CA 94303, USA
 *
 *    This library is free software; you can redistribute it and/or
 *    modify it under the terms of the GNU Lesser General Public
 *    License version 2.1, as published by the Free Software Foundation.
 *
 *    This library is distributed in the hope that it will be useful,
 *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 *    Lesser General Public License for more details.
 *
 *    You should have received a copy of the GNU Lesser General Public
 *    License along with this library; if not, write to the Free Software
 *    Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 *    MA  02111-1307  USA
 *
 ************************************************************************/

// @@@ Adjust multi-include-protection-ifdef.
#ifndef ODMA_PROVIDER_HXX
#define ODMA_PROVIDER_HXX

#ifndef _UCBHELPER_PROVIDERHELPER_HXX
#include <ucbhelper/providerhelper.hxx>
#endif
#ifndef ODMA_LIB_HXX
#include "odma_lib.hxx"
#endif
#ifndef _VOS_REF_HXX_
#include <vos/ref.hxx>
#endif
#include <map>
#ifndef ODMA_CONTENTPROPS_HXX
#include "odma_contentprops.hxx"
#endif
// @@@ Adjust namespace name.
namespace odma {

//=========================================================================

// @@@ Adjust defines.

// 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 ::ucb::ContentProviderImplHelper
{
    typedef ::std::map< ::rtl::OString, ::vos::ORef<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 ::vos::ORef<ContentProperties>& _rProp);

    /**
    */
    ::vos::ORef<ContentProperties> getContentProperty(const ::rtl::OUString& _sName,
                                                       const ContentPropertiesMemberFunctor& _aFunctor) const;
public:
    ContentProvider( const ::com::sun::star::uno::Reference<
                        ::com::sun::star::lang::XMultiServiceFactory >& rSMgr );
    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 ::vos::ORef<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
    */
    ::vos::ORef<ContentProperties> queryContentProperty(const ::rtl::OUString& _sDocumentName);

    /** getContentProperty returns the ContentProperties for the first content with that title
        @param	_sTitle	the title of the document

        @return	the content properties
    */
    ::vos::ORef<ContentProperties> getContentPropertyWithTitle(const ::rtl::OUString& _sTitle) const;

    /** getContentProperty returns the ContentProperties for the first content with that SavedAsName
        @param	_sSaveAsName	the SavedAsName of the document

        @return	the content properties
    */
    ::vos::ORef<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 ::vos::ORef<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 ::vos::ORef<ContentProperties>& _rProp);
};

}

#endif