/**************************************************************
 * 
 * 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_embed_FileSystemStorage_idl__
#define __com_sun_star_embed_FileSystemStorage_idl__

#ifndef __com_sun_star_embed_BaseStorage_idl__ 
#include <com/sun/star/embed/BaseStorage.idl>
#endif

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

 module com {  module sun {  module star {  module embed {

//============================================================================
/** This is a service that allows to get access to a file system folder using
	storage hierarchy.
 */
published service FileSystemStorage
{
	// -----------------------------------------------------------------------
	/** This service describes the base functionality of storages.

		<p>
		Please see below the description of additional requirements for the
		file system storage implementation.
		</p>

		<dl>
			<dt>interface <type scope="com::sun::star::lang">XComponent</type>
			</dt>
			<dd>
				<p>
				A file system storage is created either by
				<type>StorageFactory</type> or by <type>XStorage</type>
				interface and is controlled by refcounting. In case
				refcounting is decreased to zero the storage will be
				disposed automatically.
				</p>

				<p>
				In case a storage object is disposed the elements
				( substorages and substreams ) are not affected.
				</p>
			</dd>
			<dt>interface <type>XStorage</type></dt>
			<dd>
				<dl>
					<dt><method>XStorage::openStorageElement</method></dt>
					<dd>
						This method returns <type>FileSystemStorage</type>
						service implementation.
					</dd>

					<dt><method>XStorage::copyLastCommitTo</method></dt>
					<dd>
						Since this service implementation supports no transaction
						this method just creates a copy of the storage in it's
						current state.
					</dd>

					<dt><method>XStorage::copyStorageElementLastCommitTo</method></dt>
					<dd>
						Since this service implementation supports no transaction
						this method just creates a copy of the storage in it's
						current state.
					</dd>

					<dt><method>XStorage::removeStorageElement</method></dt>
					<dd>
						If the element is opened and it is a stream element
						the removing will fail. If the element is opened and
						it is a storage element, all the contents that can be
						removed will be removed.
					</dd>
				</dl>
			</dd>
			<dt>property URL</dt>
			<dd>
				This property is not optional for this service.
			</dd>
		</dl>
				
	 */
	service BaseStorage;
};

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

}; }; }; };

#endif

