/**************************************************************
 * 
 * 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_resource_StringResourceWithStorage_idl__
#define __com_sun_star_resource_StringResourceWithStorage_idl__

#ifndef __com_sun_star_resource_XStringResourceWithStorage_idl__
#include <com/sun/star/resource/XStringResourceWithStorage.idl>
#endif


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

module com { module sun { module star { module resource {

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

/** specifies a service providing access to a resource string table implementing the
    <type scope="com::sun::star::resource">XStringResourceWithStorage</type> interface.
 */
service StringResourceWithStorage : com::sun::star::resource::XStringResourceWithStorage
{
    /** is used to initialize the object on its creation.

		@param Storage
			Specifies the storage used to load and store - if
			the ReadOnly state allows it - the string table data.

		@param ReadOnly
			Specifies if the resource should be read only,
			see <code>XStringResourceManager::isReadOnly</code>

		@param locale
			Specifies if the locale first to be used as current locale. Internally 
			the <code>XStringResourceManager::setCurrentLocale</code> method is
			called with FindClosestMatch=true.
			see <code>XStringResourceManager::setCurrentLocale</code>

        @param BaseName
            Base string for the file names used to store the locale data.
			The locale data is stored in Java properties files also following
			the corresponding naming sceme. The files will be named like this:
			"[BaseName]_[Language]_[Country].properties", 
			e.g. "MyBaseName_en_US.properties"
			If an empty string is passed for BaseName, "strings" will be used
			as BaseName.

        @param Comment
            Comment stored first in each properties file followed by a line
			feed character. The line feed character is added automatically
			and hasn't to be part of the comment string. The caller is re-
			sponsible that the passed string is a valid comment in a Java
			properties file, e.g. "# My strings". The string may be empty.

		@throws <type scope="com::sun::star::lang">IllegalArgumentException</type>
			if a null interface is passed as Storage
	 */
	create( [in] ::com::sun::star::embed::XStorage Storage, 
			[in] boolean ReadOnly, [in] com::sun::star::lang::Locale locale,
			[in] string BaseName, [in] string Comment )
		raises( ::com::sun::star::lang::IllegalArgumentException );
};

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

}; }; }; };

#endif
