<?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.apache.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>

