/**************************************************************
 * 
 * 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_TransferInfo_idl__
#define __com_sun_star_ucb_TransferInfo_idl__


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

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

//=============================================================================
/** contains information needed to transfer objects from one location to another.

    <p>The transfer command is always called on the target folder. For a
    details description of the transfer command refer to the documentation
    of service <type>Content</type>.
*/
published struct TransferInfo
{
	//-------------------------------------------------------------------------
	/** contains the flags describing whether the data shall be moved
	    instead of copied.
	*/
	boolean MoveData;

	//-------------------------------------------------------------------------
	/** contains the URL of the source of the action (e.g. the URL of a
	    file to move).
	*/
	string SourceURL;

	//-------------------------------------------------------------------------
	/** contains the title of the transferred object, if it is different
	    from the original one.

	    <p>If this field is filled, for example, a file will be renamed
	    while it is being transferred.</p>
	*/
	string NewTitle;

	//-------------------------------------------------------------------------
	/** describes how to act in case of title clashes while transferring
	    the data.

		<p>A title clash for instance occurs, if a file named "foo.txt" is
		to be transferred to a folder already containing another file named
		"foo.txt".

		<p>The value can be one of the <type>NameClash</type> constants.

	    <p>Implementations that are not able to detect whether there is a
		clashing resource may ignore <member>NameClash::ERROR</member> and
		<member>NameClash::RENAME</member> always write the new data.
	*/
	long NameClash;

};

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

}; }; }; };

#endif
