<?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.codehaus.mojo.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>

