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 __com_sun_star_ucb_XContentProviderManager_idl__
24*b1cdbd2cSJim Jagielski#define __com_sun_star_ucb_XContentProviderManager_idl__
25*b1cdbd2cSJim Jagielski
26*b1cdbd2cSJim Jagielski#ifndef __com_sun_star_uno_XInterface_idl__
27*b1cdbd2cSJim Jagielski#include <com/sun/star/uno/XInterface.idl>
28*b1cdbd2cSJim Jagielski#endif
29*b1cdbd2cSJim Jagielski
30*b1cdbd2cSJim Jagielski#ifndef __com_sun_star_ucb_XContentProvider_idl__
31*b1cdbd2cSJim Jagielski#include <com/sun/star/ucb/XContentProvider.idl>
32*b1cdbd2cSJim Jagielski#endif
33*b1cdbd2cSJim Jagielski
34*b1cdbd2cSJim Jagielski#ifndef __com_sun_star_ucb_DuplicateProviderException_idl__
35*b1cdbd2cSJim Jagielski#include <com/sun/star/ucb/DuplicateProviderException.idl>
36*b1cdbd2cSJim Jagielski#endif
37*b1cdbd2cSJim Jagielski
38*b1cdbd2cSJim Jagielski#ifndef __com_sun_star_ucb_ContentProviderInfo_idl__
39*b1cdbd2cSJim Jagielski#include <com/sun/star/ucb/ContentProviderInfo.idl>
40*b1cdbd2cSJim Jagielski#endif
41*b1cdbd2cSJim Jagielski
42*b1cdbd2cSJim Jagielski
43*b1cdbd2cSJim Jagielski//=============================================================================
44*b1cdbd2cSJim Jagielski
45*b1cdbd2cSJim Jagielskimodule com { module sun { module star { module ucb {
46*b1cdbd2cSJim Jagielski
47*b1cdbd2cSJim Jagielski//=============================================================================
48*b1cdbd2cSJim Jagielski/** makes it possible to query/register/deregister content providers.
49*b1cdbd2cSJim Jagielski
50*b1cdbd2cSJim Jagielski	@version  1.0
51*b1cdbd2cSJim Jagielski	@author   Kai Sommerfeld
52*b1cdbd2cSJim Jagielski	@see      XContentProvider
53*b1cdbd2cSJim Jagielski*/
54*b1cdbd2cSJim Jagielskipublished interface XContentProviderManager: com::sun::star::uno::XInterface
55*b1cdbd2cSJim Jagielski{
56*b1cdbd2cSJim Jagielski	//-------------------------------------------------------------------------
57*b1cdbd2cSJim Jagielski	/** registers a content provider for a specific URL template.
58*b1cdbd2cSJim Jagielski
59*b1cdbd2cSJim Jagielski		@see XContentIdentifier
60*b1cdbd2cSJim Jagielski
61*b1cdbd2cSJim Jagielski		@param Provider
62*b1cdbd2cSJim Jagielski		the content provider to register.
63*b1cdbd2cSJim Jagielski
64*b1cdbd2cSJim Jagielski		<p>This may be <NULL/>, in which case a later
65*b1cdbd2cSJim Jagielski		<member>XContentProvider::queryContent</member> with an
66*b1cdbd2cSJim Jagielski	    <type>XContentIdentifier</type>	that matches the <var>Scheme</var>
67*b1cdbd2cSJim Jagielski	    will simply return <NULL/>. These "dummy" content providers are useful
68*b1cdbd2cSJim Jagielski	    in combination with other content providers that are registered on a
69*b1cdbd2cSJim Jagielski	    wildcard URL template: For example,	imagine that you want to route all
70*b1cdbd2cSJim Jagielski	    http URLs to a HTTP content	provider, but want to block all URLs for
71*b1cdbd2cSJim Jagielski	    the server <code>www.dont.go</code>. One solution would be to register
72*b1cdbd2cSJim Jagielski	    the HTTP content provider on the <var>Scheme</var> <code>http</code>,
73*b1cdbd2cSJim Jagielski	    and to register a "dummy" (i.e., <NULL/>) content provider on the
74*b1cdbd2cSJim Jagielski		<var>Scheme</var> <code>"http://www.dont.go"([/?#].*)?</code>.
75*b1cdbd2cSJim Jagielski
76*b1cdbd2cSJim Jagielski		@param Scheme
77*b1cdbd2cSJim Jagielski		the URL scheme for the provided contents. More generally, this may not
78*b1cdbd2cSJim Jagielski		only be a URL scheme, but a URL template.
79*b1cdbd2cSJim Jagielski
80*b1cdbd2cSJim Jagielski		<p>A URL template is a regular expression (represented as a string) that
81*b1cdbd2cSJim Jagielski		specifies a subset of the set of all possible URLs (this subset
82*b1cdbd2cSJim Jagielski		consists of exactly those URLs that match the regular expression).  The
83*b1cdbd2cSJim Jagielski		language to denote the regular expressions is initially quite limited,
84*b1cdbd2cSJim Jagielski		but it may be extended in the future:
85*b1cdbd2cSJim Jagielski
86*b1cdbd2cSJim Jagielski		<p><ul>
87*b1cdbd2cSJim Jagielski		<li><code>regexp = scheme / simple / translation</code></li>
88*b1cdbd2cSJim Jagielski		<li><code>scheme = ALPHA *(ALPHA / DIGIT / "+" / "-" / ".")</code></li>
89*b1cdbd2cSJim Jagielski		<li><code>simple = simple-prefix / simple-authority / simple-domain</code></li>
90*b1cdbd2cSJim Jagielski		<li><code>translation = trans-prefix / trans-authority / trans-domain</code></li>
91*b1cdbd2cSJim Jagielski		<li><code>simple-prefix = [string] ".*"</code></li>
92*b1cdbd2cSJim Jagielski		<li><code>trans-prefix = [string] "(.*)->" [string] "\1"</code></li>
93*b1cdbd2cSJim Jagielski		<li><code>simple-authority = [string] "([/?#].*)?"</code></li>
94*b1cdbd2cSJim Jagielski		<li><code>trans-authority = [string] "(([/?#].*)?)->" string "\1"</code></li>
95*b1cdbd2cSJim Jagielski		<li><code>simple-domain = [string] "[^/?#]*" string "([/?#].*)?"</code></li>
96*b1cdbd2cSJim Jagielski		<li><code>trans-domain = [string] "([^/?#]*" string "([/?#].*)?)->" string "\1"</code></li>
97*b1cdbd2cSJim Jagielski		<li><code>string = DQUOTE 1*(schar / sescape) DQUOTE  ; DQUOTE is "</code></li>
98*b1cdbd2cSJim Jagielski		<li><code>schar = &lt any UTF-16 character except " or \></code></li>
99*b1cdbd2cSJim Jagielski		<li><code>sescape = "\" (DQUOTE / "\")</code></li>
100*b1cdbd2cSJim Jagielski		</ul>
101*b1cdbd2cSJim Jagielski
102*b1cdbd2cSJim Jagielski		<p>A <code>&lt;scheme&gt:</code> matches any URL of exactly the given
103*b1cdbd2cSJim Jagielski	    scheme (ignoring case),	keeping the extension from URL schemes to URL
104*b1cdbd2cSJim Jagielski	    templates backwards	compatible.  The <code>&lt;simple&gt:</code>
105*b1cdbd2cSJim Jagielski	    regexps match any URL starting with a given	string literal, followed
106*b1cdbd2cSJim Jagielski	    by arbitrary characters (<code>&lt;simple-prefix&gt:</code>), or
107*b1cdbd2cSJim Jagielski		by arbitrary characters that start with one of '/', '?', or '#', if any
108*b1cdbd2cSJim Jagielski		(<code>&lt;simple-authority&gt:</code>), or by arbitrary characters not
109*b1cdbd2cSJim Jagielski	    including any of '/', '?', or '#', followed by a given string literal,
110*b1cdbd2cSJim Jagielski	    followed by	arbitrary characters that start with one of '/', '?', or
111*b1cdbd2cSJim Jagielski	    '#', if any. The comparision of string literals is done ignoring the
112*b1cdbd2cSJim Jagielski	    case of ASCII letters.  The <code>&lt;translation&gt:</code> regexps
113*b1cdbd2cSJim Jagielski	    match the same URLs as their <code>&lt;simple&gt:</code> counterparts,
114*b1cdbd2cSJim Jagielski	    but they also describe how a (local) URL is mapped to another (remote)
115*b1cdbd2cSJim Jagielski	    URL.  This mapping is only relevant for	methods of the
116*b1cdbd2cSJim Jagielski	    <type>RemoteAccessContentProvider</type>'s
117*b1cdbd2cSJim Jagielski	  	<type>XParameterizedContentProvider</type> interface; in all other
118*b1cdbd2cSJim Jagielski		cases, <code>&lt;translation&gt:</code> regexps have the same semantics
119*b1cdbd2cSJim Jagielski	    as their <code>&lt;simple&gt:</code> counterparts.
120*b1cdbd2cSJim Jagielski
121*b1cdbd2cSJim Jagielski		@param ReplaceExisting
122*b1cdbd2cSJim Jagielski		<TRUE/>: replace the provider possibly registered for the given URL
123*b1cdbd2cSJim Jagielski	    template. The replaced provider will not be	deregistered automatically!
124*b1cdbd2cSJim Jagielski	    If the superseding provider gets deregistered, the superseded one will
125*b1cdbd2cSJim Jagielski		become active again.
126*b1cdbd2cSJim Jagielski		<p><FALSE/>: do not register, if another provider is already registered
127*b1cdbd2cSJim Jagielski	    for the given URL template.
128*b1cdbd2cSJim Jagielski
129*b1cdbd2cSJim Jagielski		@returns
130*b1cdbd2cSJim Jagielski		the replaced content provider, if there was one.
131*b1cdbd2cSJim Jagielski	*/
132*b1cdbd2cSJim Jagielski	com::sun::star::ucb::XContentProvider registerContentProvider(
133*b1cdbd2cSJim Jagielski				[in] com::sun::star::ucb::XContentProvider Provider,
134*b1cdbd2cSJim Jagielski				[in] string Scheme,
135*b1cdbd2cSJim Jagielski				[in] boolean ReplaceExisting )
136*b1cdbd2cSJim Jagielski		raises( com::sun::star::ucb::DuplicateProviderException );
137*b1cdbd2cSJim Jagielski
138*b1cdbd2cSJim Jagielski	//-------------------------------------------------------------------------
139*b1cdbd2cSJim Jagielski	/** deregisters a content provider.
140*b1cdbd2cSJim Jagielski
141*b1cdbd2cSJim Jagielski		@param Provider
142*b1cdbd2cSJim Jagielski		a content provider to deregister.
143*b1cdbd2cSJim Jagielski
144*b1cdbd2cSJim Jagielski		@param Scheme
145*b1cdbd2cSJim Jagielski		the URL scheme for the provided contents. More generally, this
146*b1cdbd2cSJim Jagielski		may not only be a URL scheme, but a URL template (see
147*b1cdbd2cSJim Jagielski		<member>registerContentProvider</member> for a discussion of URL
148*b1cdbd2cSJim Jagielski		templates).
149*b1cdbd2cSJim Jagielski	*/
150*b1cdbd2cSJim Jagielski	[oneway] void deregisterContentProvider(
151*b1cdbd2cSJim Jagielski				[in] com::sun::star::ucb::XContentProvider Provider,
152*b1cdbd2cSJim Jagielski			 	[in] string Scheme );
153*b1cdbd2cSJim Jagielski
154*b1cdbd2cSJim Jagielski	//-------------------------------------------------------------------------
155*b1cdbd2cSJim Jagielski	/** returns a list of information on all registered content providers.
156*b1cdbd2cSJim Jagielski
157*b1cdbd2cSJim Jagielski		@returns
158*b1cdbd2cSJim Jagielski		a list information on content providers.
159*b1cdbd2cSJim Jagielski	*/
160*b1cdbd2cSJim Jagielski	sequence<com::sun::star::ucb::ContentProviderInfo> queryContentProviders();
161*b1cdbd2cSJim Jagielski
162*b1cdbd2cSJim Jagielski	//-------------------------------------------------------------------------
163*b1cdbd2cSJim Jagielski	/** returns the currently active content provider for a content
164*b1cdbd2cSJim Jagielski        identifier.
165*b1cdbd2cSJim Jagielski
166*b1cdbd2cSJim Jagielski		@param Identifier
167*b1cdbd2cSJim Jagielski		a content identifier (i.e., a URL).
168*b1cdbd2cSJim Jagielski
169*b1cdbd2cSJim Jagielski		@returns
170*b1cdbd2cSJim Jagielski		a content provider.
171*b1cdbd2cSJim Jagielski	*/
172*b1cdbd2cSJim Jagielski	com::sun::star::ucb::XContentProvider queryContentProvider(
173*b1cdbd2cSJim Jagielski				[in] string Identifier );
174*b1cdbd2cSJim Jagielski};
175*b1cdbd2cSJim Jagielski
176*b1cdbd2cSJim Jagielski//=============================================================================
177*b1cdbd2cSJim Jagielski
178*b1cdbd2cSJim Jagielski}; }; }; };
179*b1cdbd2cSJim Jagielski
180*b1cdbd2cSJim Jagielski#endif
181