<!--
  ~ 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.
  -->
<xs:schema targetNamespace="org.apache.felix.ipojo.handlers.jmx"
	xmlns="org.apache.felix.ipojo.handlers.jmx"
	xmlns:xs="http://www.w3.org/2001/XMLSchema"
	elementFormDefault="qualified">
	<xs:element name="config" type="JMXType"></xs:element>

	<xs:complexType name="JMXType">

		<xs:annotation>
			<xs:documentation>
				Description of a JMX managed component.
			</xs:documentation>
		</xs:annotation>
		<xs:choice minOccurs="0" maxOccurs="unbounded">
			<xs:element name="method" type="JMXMethod">
				<xs:annotation>
					<xs:documentation>
						The list of methods to expose.
					</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="property" type="JMXProperty">
				<xs:annotation>
					<xs:documentation>
						The list of attributes to expose.
					</xs:documentation>
				</xs:annotation>
			</xs:element>
		</xs:choice>
		<xs:attribute name="usesMOSGi" type="xs:boolean"
			use="optional">
			<xs:annotation>
				<xs:documentation>
					Determines if the component must be register on the
					MOSGi MBean server or not.
				</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="objectName" type="xs:string"
			use="optional">
			<xs:annotation>
				<xs:documentation>
					The complete object name of the managed component.
					The syntax of this attribute must be compliant with
					the ObjectName syntax, detailed in the JMX
					specification. If neither domain nor name attributes
					are specified, the default value is determined by
					the package, the type and the instance name of the
					component. This attribute overrides the domain and
					name attributes.
				</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="domain" type="xs:string" use="optional">
			<xs:annotation>
				<xs:documentation>
					The domain of the managed object (i.e., the left
					part of the object name). This attribute must be
					compliant with the domain syntax, as described in
					the JMX specification.
				</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="name" type="xs:string" use="optional">
			<xs:annotation>
				<xs:documentation>
					The name property of the managed object. The value
					of this attribute must comply with the ObjectName
					value syntax, as described in the JMX specification.
				</xs:documentation>
			</xs:annotation>
		</xs:attribute>

		<xs:attribute name="preRegister" type="xs:string"
			use="optional">
			<xs:annotation>
				<xs:documentation>
					Specifies method to carry out operations before
					beeing registered from the MBean server. The
					signature of the specified method must be :
					"ObjectName preRegister(MBeanServer server,
					ObjectName name) throws Exception".
				</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="postRegister" type="xs:string"
			use="optional">
			<xs:annotation>
				<xs:documentation>
					Specifies method to carry out operations after
					beeing registered from the MBean server. The
					signature of the specified method must be : "void
					postRegister(Boolean registrationDone)".
				</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="preDeregister" type="xs:string"
			use="optional">
			<xs:annotation>
				<xs:documentation>
					Specifies method to carry out operations before
					beeing unregistered from the MBean server. The
					signature of the specified method must be : "void
					preDeregister() throws Exception".
				</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="postDeregister" type="xs:string" use="optional">
			<xs:annotation>
				<xs:documentation>
					Specifies method to carry out operations after
					beeing unregistered from the MBean server. The
					signature of the specified method must be : 
					"void postDeregister()".</xs:documentation>
			</xs:annotation></xs:attribute>
	</xs:complexType>

	<xs:complexType name="JMXProperty">
        <xs:annotation>
        	<xs:documentation>Description of an attribute to expose.</xs:documentation>
        </xs:annotation>
        <xs:attribute name="field" type="xs:string" use="required">
        	<xs:annotation>
        		<xs:documentation>The name of the component's field to expose.</xs:documentation></xs:annotation></xs:attribute>
		<xs:attribute name="name" type="xs:string" use="optional">
			<xs:annotation>
				<xs:documentation>The name of the property as it will appear in JMX. If unspecified, the default value is the name of the exposed field.</xs:documentation></xs:annotation></xs:attribute>
		<xs:attribute name="rights" use="optional">
            <xs:annotation>
            	<xs:documentation>Specify the access permission of the exposed field.</xs:documentation>
            </xs:annotation>
            <xs:simpleType>
                <xs:annotation>
                	<xs:documentation>Access permission of an exposed field. Accepted values are "r" (read-only access, the default value) and "w" (read and write access).</xs:documentation>
                </xs:annotation>
                <xs:restriction base="xs:string">
					<xs:enumeration value="r"></xs:enumeration>
					<xs:enumeration value="w"></xs:enumeration>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
		<xs:attribute name="notification" type="xs:boolean" use="optional">
			<xs:annotation>
				<xs:documentation>Enable or disable attribute change notification sending for this property. If set to &quot;true&quot;, a notification is sent each time the value of the field changes.</xs:documentation></xs:annotation></xs:attribute>
	</xs:complexType>

	<xs:complexType name="JMXMethod">
        <xs:annotation>
        	<xs:documentation>Description of a method to expose.</xs:documentation>
        </xs:annotation>
        <xs:attribute name="name" type="xs:string" use="required">
        	<xs:annotation>
        		<xs:documentation>The name of the method to expose. If multiple methods have the same name, all of them are exposed.</xs:documentation>
        	</xs:annotation></xs:attribute>
		<xs:attribute name="description" type="xs:string" use="optional">
			<xs:annotation>
				<xs:documentation>The description of the exposed method, as it will appear in JMX.</xs:documentation></xs:annotation></xs:attribute>
	</xs:complexType>
</xs:schema>