/**************************************************************
 * 
 * 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
 * 
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 * 
 *************************************************************/



#ifndef __com_sun_star_ucb_RemoteProxyContentProvider_idl__
#define __com_sun_star_ucb_RemoteProxyContentProvider_idl__

module com { module sun { module star { module ucb {

 published interface XContentIdentifierFactory;
 published interface XContentProvider;
 published interface XParameterizedContentProvider;

//============================================================================
/** A <type>ContentProvider</type> that wraps remote content providers that
    (potentially) have been distributed to a UCB.

    <p>Before trying to pass a request to a 'real,' underlying content provider
    (which will most likely be a remote content provider distributed to this
    UCB), this proxy first activates any remote content providers that have
    been distributed here, but are still inactive (see
    <type>RemoteContentProviderAcceptor</type> and
    <type>XRemoteContentProviderActivator</type> for more information).

    <p>The way this works might change, therefore this interface is marked as
    deprectated.

    @deprecated
 */
published service RemoteProxyContentProvider
{
    //------------------------------------------------------------------------
    /** activates any potentially inactive remote content providers before
        passing on requests to the underlying <type>XContentProvider</type>.
     */
    interface XContentProvider;

    //------------------------------------------------------------------------
    /** activates any potentially inactive remote content providers before
        passing on requests to the underlying
        <type>XContentIdentifierFactory</type>.
     */
    [optional] interface XContentIdentifierFactory;

    //------------------------------------------------------------------------
	/** allows this <type>ContentProvider</type> to adjust itself to special
		needs.
     */
    [optional] interface XParameterizedContentProvider;
};

}; }; }; };

#endif
