/**************************************************************
 * 
 * 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_script_DocumentScriptLibraryContainer_idl__
#define __com_sun_star_script_DocumentScriptLibraryContainer_idl__

#ifndef __com_sun_star_script_XStorageBasedLibraryContainer_idl__
#include <com/sun/star/script/XStorageBasedLibraryContainer.idl>
#endif
#ifndef __com_sun_star_embed_XStorageBasedDocument_idl__
#include <com/sun/star/document/XStorageBasedDocument.idl>
#endif
#ifndef __com_sun_star_lang_IllegalArgumentException_idl__ 
#include <com/sun/star/lang/IllegalArgumentException.idl>
#endif


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

module com { module sun { module star { module script { 

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

/** defines a container of StarBasic script libraries, which is to be made
    persistent in a sub storage of a document storage.

    @since OpenOffice 2.3
 */
service DocumentScriptLibraryContainer : XStorageBasedLibraryContainer
{
    /** creates an instance of the <code>DocumentScriptLibraryContainer</code>, belonging to a document

        <p>The current storage of the document will be set as initial root storage
        (see <member>XPersistentLibraryContainer::RootStorage</member>) of the container.</p>

        <p>Usually, you will only create a <code>DocumentScriptLibraryContainer</code> within
        the implementation of the document to which the container should belong.</p>

        @param Document
            The document to which the container should belong to. Must not be
            <NULL/>.

        @throws ::com::sun::star::lang::IllegalArgumentException
            if <code>Document</code> does not denote a valid
            <type scope="com::sun::star::document">OfficeDocument</type>.
    */
    create( [in] ::com::sun::star::document::XStorageBasedDocument Document )
        raises( ::com::sun::star::lang::IllegalArgumentException );

};

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

}; }; }; };

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

#endif

