<?xml version="1.0"?>
<!--
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.
-->
<model>
    <id>nbm</id>
    <name>NetBeansModule</name>
    <description><![CDATA[Maven's model for the NetBeans module descriptor.]]></description>
    <defaults>
        <default>
            <key>package</key>
            <value>org.netbeans.nbm.model</value>
        </default>
    </defaults>
    <classes>
        <class rootElement="true" xml.tagName="nbm">
            <name>NetBeansModule</name>
            <description>Describes the layout, dependencies and packaging of a NetBeans module.</description>
            <version>1.0.0+</version>
            <fields>
                <field>
                    <name>moduleType</name>
                    <version>1.0.0+</version>
                    <description><![CDATA[
                    <p>DEPRECATED, use the plugin configuration instead. Type of the module. Possible values are </p>
                    <p><b>autoload</b> - Such a module is automatically enabled when some other module requires it and automatically disabled otherwise.</p>
                    <p><b>eager</b> - This module type gets automatically enabled when all it's dependencies are satisfied. Disabled otherwise.</p>
                    <p><b>normal</b> - This is the default value. This kind of module is enabled/disabled manually by the user. It installs enabled.</p>
                    ]]>        </description>
                    <type>String</type>
                    <annotations>
                        <annotation>@Deprecated</annotation>
                    </annotations>
                </field>
                <field>
                    <name>codeNameBase</name>
                    <version>1.0.0+</version>
                    <description>DEPRECATED, use the plugin configuration instead. Codenamebase of the module. Primary identification of the module. Usually the package name. Eg. "org.codehaus.mevenide.project". 
                    If not defined here, the default value is constructed from groupId and artifactId.</description>
                    <type>String</type>
                    <annotations>
                        <annotation>@Deprecated</annotation>
                    </annotations>
                </field>
                <field>
                    <name>cluster</name>
                    <version>1.0.0+</version>
                    <description>DEPRECATED, use the plugin configuration instead. Each modules should belong to a cluster. A cluster is a group of related modules. For individual modules it's not that important. Refer to netbeans.org documentation for more details.</description>
                    <type>String</type>
                    <annotations>
                        <annotation>@Deprecated</annotation>
                    </annotations>
                </field>
                <field>
                    <name>requiresRestart</name>
                    <version>1.0.0+</version>
                    <description>DEPRECATED, use the plugin configuration instead. Determines if the module requires restart of the IDE/platform upon installation.</description>
                    <type>boolean</type>
                    <annotations>
                        <annotation>@Deprecated</annotation>
                    </annotations>
                </field>
                <field>
                    <name>manifest</name>
                    <version>1.0.0+</version>
                    <description>DEPRECATED, use the plugin configuration instead. Location of the manifest file with NetBeans specific manifest entries.
                        </description>
                    <type>String</type>
                    <!--defaultValue>src/main/nbm/manifest.mf</defaultValue-->
                    <annotations>
                        <annotation>@Deprecated</annotation>
                    </annotations>
                </field>
                <field>
                    <name>homepageUrl</name>
                    <version>1.0.0+</version>
                    <description>DEPRECATED, use the plugin configuration instead. Homepage URL of the module. Is accessible from NetBeans UI upon installation, should point to place with additional information about the functionality. If not defined, it defaults to POM's url element.</description>
                    <type>String</type>
                    <annotations>
                        <annotation>@Deprecated</annotation>
                    </annotations>
                </field>
                <field>
                    <name>distributionUrl</name>
                    <version>1.0.0+</version>
                    <description>DEPRECATED, use the plugin configuration instead. Http URL of the location where the module can be downloaded from the internet. This value put into the NBM and used when generating the Autoupdate Site. Should point directly to the NBM download.</description>
                    <type>String</type>
                    <annotations>
                        <annotation>@Deprecated</annotation>
                    </annotations>
                </field>
                <field>
                    <name>author</name>
                    <version>1.0.0+</version>
                    <description>DEPRECATED, use the plugin configuration instead. Author of the module. Is used when generating the NBM file.</description>
                    <type>String</type>
                    <annotations>
                        <annotation>@Deprecated</annotation>
                    </annotations>
                </field>
        
                <field>
                    <name>licenseName</name>
                    <version>1.0.0+</version>
                    <description>DEPRECATED, use the plugin configuration instead. Name of the license. If the user already agreed to the same license before, he/she won't be asked again to agree.</description>
                    <type>String</type>
                    <annotations>
                        <annotation>@Deprecated</annotation>
                    </annotations>
                </field>
                <field>
                    <name>licenseFile</name>
                    <version>1.0.0+</version>
                    <description>DEPRECATED, use the plugin configuration instead. Path to the license agreement file.</description>
                    <type>String</type>
                    <annotations>
                        <annotation>@Deprecated</annotation>
                    </annotations>
                </field>
        
                <field>
                    <name>libraries</name>
                    <version>1.0.0+</version>
                    <description>groupId:artifactId of artifacts that shall become part of the module and be added on the classpath 
                    (ClassPath: manifest entry gets created and the jar is included in the nbm file)</description>
                    <association>
                        <type>String</type>
                        <multiplicity>*</multiplicity>
                    </association>
                </field>
                 <field>
                    <name>dependencies</name>
                    <description>DEPRECATED, use the plugin configuration instead. List of module dependencies. The plugin will use it to Generate the OpenIDE-Module-Module-Dependencies manifest entry.</description>
                    <version>1.0.0+</version>
                    <association>
                        <type>Dependency</type>
                        <multiplicity>*</multiplicity>
                    </association>
                </field>
                <field>
                    <name>nbmResources</name>
                    <description>DEPRECATED, use the plugin configuration instead. List of resources that shall be also included into the Nbm file along with the module jar and library jars.</description>
                    <version>1.0.0+</version>
                    <association>
                        <type>NbmResource</type>
                        <multiplicity>*</multiplicity>
                    </association>
                    <annotations>
                        <annotation>@Deprecated</annotation>
                    </annotations>
                </field>
            </fields>
        </class>
        <class>
            <name>Dependency</name>
            <description></description>
            <version>1.0.0+</version>
            <fields>
                <field>
                    <name>id</name>
                    <description>groupId:artifactId of the dependency defined in the POM (or a transitive dependency)</description>
                    <version>1.0.0+</version>
                    <type>String</type>
                    <required>true</required>
                </field>
                <field>
                    <name>type</name>
                    <description><![CDATA[
                        Type of module dependency. 3 possible values allowed.
                        <p><b>spec</b> - specification dependency, module can only use public APIs in public packages. Works with the version defined and any later version.</p>
                        <p><b>impl</b> - implementation dependency, module can use any class in the dependency module, but works with just the one version of the module.</p>
                        <p><b>loose</b> - similar to spec, but isa very loose connection, no version is required, just the module presence.</p>
                        ]]>
                    </description>
                    <version>1.0.0+</version>
                    <type>String</type>
                    <defaultValue>spec</defaultValue>
                </field>
                <field>
                    <name>explicitValue</name>
                    <description><![CDATA[
                        The plugin tries to resolve the correct module name and module specification/implementation version by examining the
                        dependency jar's manifest.
                        You can override this behaviour by explicitly defining the value here. For example org.openide.io/1 &gt; 10.1 for a "spec" type of dependency.
          
                        ]]>              
                    </description>
                    <version>1.0.0+</version>
                    <type>String</type>
                </field>
            </fields>
        </class>
        <class>
            <name>NbmResource</name>
            <version>1.0.0+</version>
            <fields>
                <field>
                    <name>baseDirectory</name>
                    <description>The base directory, all paths within the nbm file will be the same as paths within the base directory.</description>
                    <version>1.0.0+</version>
                    <type>String</type>
                    <required>true</required>
                </field>
                <field>
                    <name>relativeClusterPath</name>
                    <description>A relative path to be added to cluster root where the files will be copied to.</description>
                    <version>1.0.0+</version>
                    <type>String</type>
                    <required>false</required>
                </field>
                <field>
                    <name>includes</name>
                    <description>Include pattern, what shall be included in the nbm. </description>
                    <version>1.0.0+</version>
                    <association>
                        <type>String</type>
                        <multiplicity>*</multiplicity>
                    </association>
                </field>
                <field>
                    <name>excludes</name>
                    <description>Exclude pattern, what files within the basedir shall not be included. </description>
                    <version>1.0.0+</version>
                    <association>
                        <type>String</type>
                        <multiplicity>*</multiplicity>
                    </association>
                </field>
            </fields>
        </class>
    </classes>
</model>

