<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema"
	targetNamespace="http://www.canoo.com/ulc" xmlns="http://www.canoo.com/ulc"
	elementFormDefault="qualified">

	<xs:element name="ULCApplicationConfiguration">
		<xs:annotation>
			<xs:documentation>
				Configuration data for the ULC Application in a
				project.
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:all>
				<xs:element name="applicationClassName" type="className"
					minOccurs="1">
					<xs:annotation>
						<xs:documentation>
							The full classname of the implementation of
							com.ulcjava.base.application.IApplication to
							be started.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element name="keepAliveInterval" type="positiveInteger"
					minOccurs="0">
					<xs:annotation>
						<xs:documentation>
							The keep alive interval in seconds.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element name="clientLogLevel" type="logLevel"
					minOccurs="0">
					<xs:annotation>
						<xs:documentation>
							Select the log level on the client side. In
							an
							integrated environment, like the
							DevelopmentRunner, this value is
							ignored.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element name="serverLogLevel" type="logLevel"
					minOccurs="0">
					<xs:annotation>
						<xs:documentation>
							Select the log level on the server side. In
							an
							integrated environment, like the
							DevelopmentRunner, this value is
							used to set
							the log level.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element ref="lookAndFeel" minOccurs="0">
					<xs:annotation>
						<xs:documentation>
							Defines which Look and Feel is going to be
							used
							on the client.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element name="modelAdapterProviderClassName" type="className"
					minOccurs="0">
					<xs:annotation>
						<xs:documentation>
							The full classname of the implementation of
							the
							com.ulcjava.base.server.IModelAdapterProvider
							interface to be used
							on the server.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element ref="dataStreamProviderClassName" minOccurs="0">
					<xs:annotation>
						<xs:documentation>
							Defines which implementation of
							com.ulcjava.base.shared.IDataStreamProvider
							is to be used on
							either side.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element name="clientSessionErrorHandlerClassName"
					type="className" minOccurs="0">
					<xs:annotation>
						<xs:documentation>
							Defines the implementation of
							com.ulcjava.base.client.launcher.ISessionErrorHandler
							that is
							instantiated on the client to
							present the error that causes the
							session to
							terminate. The class must have an accessible
							no-arg
							constructor.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element ref="coderRegistryProvider" minOccurs="0">
					<xs:annotation>
						<xs:documentation>
							Defines which implementation of the
							com.ulcjava.base.shared.ICoderRegistryProvider
							interface is going
							to be used on each side.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element ref="carrierStreamProvider" minOccurs="0">
					<xs:annotation>
						<xs:documentation>
							Defines which implementation of the
							com.ulcjava.base.shared.ICarrierStreamProvider
							interface is going
							to be used on either
							side.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element ref="messageServiceClassName" minOccurs="0">
					<xs:annotation>
						<xs:documentation>
							The full classname of the implementation of
							the
							com.ulcjava.base.client.IMessageService
							interface to be used on
							the client side.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element ref="browserService" minOccurs="0">
					<xs:annotation>
						<xs:documentation>
							Defines which implementation of of the
							com.ulcjava.base.client.IBrowserService is
							to be used on the
							client side.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element ref="fileService" minOccurs="0">
					<xs:annotation>
						<xs:documentation>
							Defines which implementation of
							com.ulcjava.base.client.IFileService is to
							be used on the client
							side.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element ref="desktopIntegration" maxOccurs="1"
					minOccurs="0">
					<xs:annotation>
						<xs:documentation>
							Defines the application meta data used for the
							JNLP file's information
							tag. The information data that can be
							internationalized have to
							be
							defined in the
							"ApplicationClassName".properties file.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element ref="java" maxOccurs="1" minOccurs="0">
					<xs:annotation>
						<xs:documentation>
							Definitions for the client java runtime.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element name="coders" maxOccurs="1" minOccurs="0">
					<xs:annotation>
						<xs:documentation>
							Additional Coder definition to be registered
							with the CoderRegistries on the client and
							server side..
						</xs:documentation>
					</xs:annotation>
					<xs:complexType>
						<xs:sequence>
							<xs:annotation>
								<xs:documentation>
									Contains the coder / class pairs
									that are going
									to be registered with
									the client and server respectively.
								</xs:documentation>
							</xs:annotation>
							<xs:choice maxOccurs="unbounded">
								<xs:element name="asymmetricCoder">
									<xs:annotation>
										<xs:documentation>
											Use this for classes that
											are represented
											differently
											on the client and server
											side (e.g java.awt.Color
											and
											com.ulcjava.base.application.util.Color).
											This defines the
											classes and
											coders on each side.
										</xs:documentation>
									</xs:annotation>
									<xs:complexType>
										<xs:all>
											<xs:element name="clientCoder" type="coderType"
												minOccurs="1" maxOccurs="1">
												<xs:annotation>
													<xs:documentation>
														This defines the
														classes and
														coder on the
														client side.
													</xs:documentation>
												</xs:annotation>
											</xs:element>
											<xs:element name="serverCoder" type="coderType"
												minOccurs="1" maxOccurs="1">
												<xs:annotation>
													<xs:documentation>
														This defines the
														classes and
														coder on the
														server side.
													</xs:documentation>
												</xs:annotation>
											</xs:element>
										</xs:all>
									</xs:complexType>
								</xs:element>
								<xs:element name="symmetricCoder" type="coderType">
									<xs:annotation>
										<xs:documentation>
											Use this to register a coder
											for classes that
											a used on
											the server and client side
											(e.g. Date.class and
											DateCoder)
										</xs:documentation>
									</xs:annotation>
								</xs:element>
							</xs:choice>
						</xs:sequence>
					</xs:complexType>
				</xs:element>
				<xs:element name="serverSessionProviderClassName" type="className"
					maxOccurs="1" minOccurs="0">
					<xs:annotation>
						<xs:documentation>
							Class name of the session provider class, a
							factory that creates the ULCSession on the
							server side. The
							configured class must
							inherit from
							com.ulcjava.base.server.DefaultSessionProvider.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element name="defaultClientEnvironment" type="clientEnvironment"
					maxOccurs="1" minOccurs="0">
					<xs:annotation>
						<xs:documentation>
							Defines the client environment in which is
							launched to run the application using the
							ContextRoot URL. If not
							defined Applet is
							used.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element name="jnlpLauncherClassName" type="className"
					maxOccurs="1" minOccurs="0">
					<xs:annotation>
						<xs:documentation>The full class name of the Launcher that is
							run if the application is started with Java Web Start.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element name="appletLauncherClassName" type="className"
					maxOccurs="1" minOccurs="0">
					<xs:annotation>
						<xs:documentation>The full class name of the Launcher that is
							run if the application is started as an Applet.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
			</xs:all>
		</xs:complexType>
	</xs:element>

	<xs:element name="lookAndFeel">
		<xs:complexType>
			<xs:choice>
				<xs:element name="standardLookAndFeel" type="standardLookAndFeel"
					minOccurs="1">
					<xs:annotation>
						<xs:documentation>
							Select on of the standard Look and Feel
							(SYSTEM
							or CROSSPLATFORM) that are provided
							by the UIManager.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element name="lookAndFeelClassName" type="className"
					minOccurs="1">
					<xs:annotation>
						<xs:documentation>
							The full classname of the Look and Feel that
							is
							going to be used on the client.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
			</xs:choice>
		</xs:complexType>
	</xs:element>

	<xs:element name="carrierStreamProvider">
		<xs:complexType>
			<xs:choice>
				<xs:element name="standardCarrierStreamProvider" type="standardCarrierStreamProvider"
					minOccurs="1">
					<xs:annotation>
						<xs:documentation>
							Select one of the standard implementations
							of the
							com.ulcjava.base.shared.ICarrierStreamProvider
							interface.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element ref="carrierStreamProviderClassName"
					minOccurs="1">
					<xs:annotation>
						<xs:documentation>
							The full classname of the implementation of
							the
							com.ulcjava.base.shared.ICarrierStreamProvider
							interface to be
							used on both sides.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
			</xs:choice>
		</xs:complexType>
	</xs:element>

	<xs:element name="fileService">
		<xs:complexType>
			<xs:choice>
				<xs:element name="standardFileService" type="standardFileServices"
					minOccurs="1">
					<xs:annotation>
						<xs:documentation>
							Select one of the standard implementations
							of the
							com.ulcjava.base.client.IFileService
							interface.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element name="fileServiceClassName" type="className"
					minOccurs="1">
					<xs:annotation>
						<xs:documentation>
							The full classname of the implementation of
							com.ulcjava.base.client.IFileService to be
							used on client side.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
			</xs:choice>
		</xs:complexType>
	</xs:element>

	<xs:element name="browserService">
		<xs:complexType>
			<xs:choice>
				<xs:element name="standardBrowserService" type="standardBrowserServices"
					minOccurs="1">
					<xs:annotation>
						<xs:documentation>
							Select one of the standard implementations
							of the
							com.ulcjava.base.client.IBrowserService
							interface.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element name="browserServiceClassName" type="className"
					minOccurs="1">
					<xs:annotation>
						<xs:documentation>
							The full classname of the implementation of
							com.ulcjava.base.client.IBrowserService to
							be used on client side.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
			</xs:choice>
		</xs:complexType>
	</xs:element>

	<xs:element name="messageServiceClassName" type="className" />

	<xs:element name="coderRegistryProvider">
		<xs:annotation>
			<xs:documentation>
				The use of this element is discouraged. See the coders element that
				allows to register coders without writing a java class.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:all>
				<xs:element name="clientCoderRegistryProviderClassName"
					type="className" minOccurs="0">
					<xs:annotation>
						<xs:documentation>
							The full classname of the implementation of
							com.ulcjava.base.shared.ICoderRegistryProvider
							to be used on the
							client side.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element name="serverCoderRegistryProviderClassName"
					type="className" minOccurs="0">
					<xs:annotation>
						<xs:documentation>
							The full classname of the implementation of
							com.ulcjava.base.shared.ICoderRegistryProvider
							to be used on the
							server side.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
			</xs:all>
		</xs:complexType>
	</xs:element>

	<xs:element name="java">
		<xs:annotation>
			<xs:documentation>
				Data that configures the client java vm for jnlp
				deployments.
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:all>
				<xs:element name="version" minOccurs="0" type="xs:string">
					<xs:annotation>
						<xs:documentation>
							The java version required to run the
							application. Legal values are 1.4, 1.4.2,
							1.4+, 1.5, 1.5+, .... If
							not specified 1.4+
							is used for the jnlp file.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element name="vmArgs" type="xs:string" minOccurs="0">
					<xs:annotation>
						<xs:documentation>
							Arguments passed to the client vm.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element name="initialHeapSize" type="xs:integer"
					minOccurs="0">
					<xs:annotation>
						<xs:documentation>
							Indicates the initial size of the Java heap
							in
							Megabyte.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element name="maxHeapSize" type="xs:integer"
					minOccurs="0">
					<xs:annotation>
						<xs:documentation>
							Indicates the maximum size of the Java heap
							in
							Megabyte.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element name="forceAllPermissions" minOccurs="0"
					type="empty">
					<xs:annotation>
						<xs:documentation>
							Forces the all permissions security.
						</xs:documentation>
					</xs:annotation>
				</xs:element>

			</xs:all>
		</xs:complexType>
	</xs:element>

	<xs:element name="shortcut">
		<xs:complexType>
			<xs:all>
				<xs:element name="desktop" minOccurs="0" type="empty">
					<xs:annotation>
						<xs:documentation>
							Hint to create a shortcut on the client's
							desktop.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element name="menu" type="empty" minOccurs="0">
					<xs:annotation>
						<xs:documentation>
							Hint to create a menu item on the client's
							start
							menu. If the shortcut should be added
							to a menu group, the menu
							group's title must
							be provided in the
							"ApplicationClassName".properties with the key
							deployment_parameter.menu_group.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
			</xs:all>
		</xs:complexType>
	</xs:element>

	<xs:element name="association">
		<xs:complexType>
			<xs:all>
				<xs:element name="mimeType" minOccurs="1" type="xs:string">
					<xs:annotation>
						<xs:documentation>
							The mime-type for which the application wishes
							to be registered as primary handler.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element name="extensions" type="xs:string" minOccurs="1">
					<xs:annotation>
						<xs:documentation>
							A list of file extensions (separated by spaces)
							for which the application wishes to be registered as primary
							handler.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
			</xs:all>
		</xs:complexType>
	</xs:element>

	<xs:element name="dataStreamProviderClassName" type="className" />

	<xs:element name="carrierStreamProviderClassName" type="className" />


	<xs:simpleType name="standardCarrierStreamProvider">
		<xs:restriction base="xs:string">
			<xs:enumeration value="TRIVIAL" />
			<xs:enumeration value="ZIP" />
			<xs:enumeration value="BASE64" />
		</xs:restriction>
	</xs:simpleType>

	<xs:simpleType name="clientEnvironment">
		<xs:restriction base="xs:string">
			<xs:enumeration value="Applet" />
			<xs:enumeration value="JNLP" />
		</xs:restriction>
	</xs:simpleType>

	<xs:simpleType name="standardFileServices">
		<xs:restriction base="xs:string">
			<xs:enumeration value="AllPermissions" />
			<xs:enumeration value="JNLP" />
		</xs:restriction>
	</xs:simpleType>

	<xs:simpleType name="standardBrowserServices">
		<xs:restriction base="xs:string">
			<xs:enumeration value="AllPermissions" />
			<xs:enumeration value="Applet" />
			<xs:enumeration value="JNLP" />
		</xs:restriction>
	</xs:simpleType>

	<xs:simpleType name="standardLookAndFeel">
		<xs:restriction base="xs:string">
			<xs:enumeration value="SYSTEM" />
			<xs:enumeration value="CROSSPLATFORM" />
		</xs:restriction>
	</xs:simpleType>

	<xs:simpleType name="logLevel">
		<xs:restriction base="xs:string">
			<xs:enumeration value="ALL" />
			<xs:enumeration value="CONFIG" />
			<xs:enumeration value="SEVERE" />
			<xs:enumeration value="FINE" />
			<xs:enumeration value="FINER" />
			<xs:enumeration value="FINEST" />
			<xs:enumeration value="INFO" />
			<xs:enumeration value="OFF" />
			<xs:enumeration value="WARNING" />
		</xs:restriction>
	</xs:simpleType>


	<xs:simpleType name="className">
		<xs:annotation>
			<xs:documentation>
				A full qualified java class name.
			</xs:documentation>
		</xs:annotation>
		<xs:restriction base="xs:string">
			<xs:whiteSpace value="collapse" />
		</xs:restriction>
	</xs:simpleType>




	<xs:simpleType name="positiveInteger">
		<xs:restriction base="xs:int">
			<xs:minInclusive value="0" />
		</xs:restriction>
	</xs:simpleType>

	<xs:element name="desktopIntegration">
		<xs:annotation>
			<xs:documentation>Desktop integration hints for jnlp
				deployments.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:all>

				<xs:element ref="association" minOccurs="0">
					<xs:annotation>
						<xs:documentation>
							A hint to the JNLP client that it wishes to
							be
							registered with the operating system as
							the primary handler of
							certain extensions
							and a certain mime-type.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element ref="shortcut" minOccurs="0">
					<xs:annotation>
						<xs:documentation>
							A hint for the JNLP client which shortcuts
							should be created.
						</xs:documentation>
					</xs:annotation>
				</xs:element>
			</xs:all>
		</xs:complexType>
	</xs:element>

	<xs:complexType name="empty"></xs:complexType>

	<xs:complexType name="coderType">
		<xs:sequence>
			<xs:element name="class" type="className" maxOccurs="unbounded"
				minOccurs="1">
				<xs:annotation>
					<xs:documentation>
						The full qualified name of the class that is
						serialized / deserializied by the coder.
					</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="coderClassName" type="className">
				<xs:annotation>
					<xs:documentation>
						The full qualified name of the class that
						serializes / deserializies objects of the class
						defined by class.
						The class must implement the IStreamCoder interface and must have
						either a
						default constructor or an constructor that takes a Class
						object as parameter. If the coder has a constructor with a Class
						object parameter the Class that the coder is registered for is
						used
						the create the coder instance.
					</xs:documentation>
				</xs:annotation>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
</xs:schema>

