/**************************************************************
 * 
 * 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_util_URL_idl__
#define __com_sun_star_util_URL_idl__


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

module com {  module sun {  module star {  module util {

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

/** represents the structure of an Uniform Resource Locator.

	<p>
	If the structure represents a valid URL or not depends on prior usage of
	the functions of <type>XURLTransformer</type>. Only after one of the functions
    returned <TRUE/> this can be assumed.</br>
	It is not necessary to set all of the fields; either <member>URL::Complete</member>
	or (some of) the others are set. Additionally, most of the other
	fields, like <member>URL::Host</member>, <member>URL::Port</member>,
	<member>URL::User</member>, <member>URL::Password</member>,
	or <member>URL::Mark</member>, are optional.

	@see XURLTransformer

	</p>
 */
published struct URL
{
	/** contains the string representation of the complete URL, for example,
		http://www.sun.de:8080/pub/test/foo.txt?a=b#xyz

		<p>
		It is used as a central input/output or input parameter for the interfaces of
		<type>XURLTransformer</type>. The usage of one of the <type>XURLTransformer</type>
		function is mandatory to validate the URL. It cannot be assumed that
		<member>URL::Complete</member> represents always a valid URL!
		</p>
	 */
	string Complete;

	//-------------------------------------------------------------------------
	/** contains the URL without a mark and without arguments, for example,
		http://www.sun.de:8080/pub/test/foo.txt
	 */
	string Main;

	//-------------------------------------------------------------------------
	/** contains the protocol (scheme) of the URL, for example, "http"
	 */
	string Protocol;

	//-------------------------------------------------------------------------
	/** contains the user-identifier of the URL, for example, "me"
	 */
	string User;

	//-------------------------------------------------------------------------
	/** contains the users password of the URL, for example, "pass"
	 */
	string Password;

	//-------------------------------------------------------------------------
	/** contains the server part of the URL, for example, "www.sun.de"
	 */
	string Server;

	//-------------------------------------------------------------------------
	/** contains the port at the server of the URL, for example, "8080"
	 */
	short Port;

	//-------------------------------------------------------------------------
	/** contains all segments but the last one of the hierarchical path of the URL, for example, "/pub/test/"
	 */
	string Path;

	//-------------------------------------------------------------------------
	/** contains the last segment of the hierarchical path of the URL, for the above example, "foo.txt"
		<p>
		<strong>Attention:</strong>A service implementing the <type>XURLTransformer</type> interface
		will normally not detect if the last segment is a folder or a file. So it is possible that
		the last segment describes a folder. If you want to be sure that a file URL that references
		a folder will be correctly put into the URL fields you should append a '/' at the end of the
		hierarchical path.
		</p>
	 */
	string Name;

	//-------------------------------------------------------------------------
	/** contains the arguments part of the URL, for example, "a=b"
	 */
	string Arguments;

	//-------------------------------------------------------------------------
	/** contains the mark part of the URL, for example, "xyz"
	 */
	string Mark;

};

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

}; }; }; };

#endif
