/**************************************************************
 * 
 * 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_sheet_XExternalDocLinks_idl__
#define __com_sun_star_sheet_XExternalDocLinks_idl__

#include <com/sun/star/sheet/XExternalDocLink.idl>
#include <com/sun/star/container/XNameAccess.idl>
#include <com/sun/star/container/XIndexAccess.idl>
#include <com/sun/star/container/XEnumerationAccess.idl>

module com {  module sun {  module star {  module sheet {

/** Primary interface for the <type scope="com::sun::star::sheet">ExternalDocLinks</type> service.

    @see com::sun::star::sheet::ExternalDocLinks

    @since OOo 3.1
 */
interface XExternalDocLinks
{
    interface com::sun::star::container::XNameAccess;
    interface com::sun::star::container::XIndexAccess;
    interface com::sun::star::container::XEnumerationAccess;

    /** This method adds a new external document link by its URL, and returns
        its instance.  If a document instance already exists for the specified URL,
        then that instance gets returned instead of creating a new one.

        @param aDocName document URL (e.g. file:///path/to/document.ods)

        @return com::sun::star::sheet::XExternalDocLink external document link instance
     */
    com::sun::star::sheet::XExternalDocLink addDocLink( [in] string aDocName );
};

}; }; }; };

#endif
