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

    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.

-->

<constraints>
  <check-info>
    <name>Boolean Constraint</name>
    <classname>org.netbeans.modules.j2ee.sun.validation.constraints.BooleanConstraint</classname>
  </check-info>
  <check-info>
    <name>Cardinal Constraint</name>
    <classname>org.netbeans.modules.j2ee.sun.validation.constraints.CardinalConstraint</classname>
      <arguments>
	  <argument>
	    <name>cardinal</name>
	    <type>java.lang.String</type>
	  </argument>
      </arguments>
  </check-info>
  <check-info>
    <name>Mandatory Constraint</name>
    <classname>org.netbeans.modules.j2ee.sun.validation.constraints.MandatoryConstraint</classname>
  </check-info>
  <check-info>
    <name>NonZeroLength Constraint</name>
    <classname>org.netbeans.modules.j2ee.sun.validation.constraints.NonZeroLengthConstraint</classname>
  </check-info>
  <check-info>
    <name>Number Constraint</name>
    <classname>org.netbeans.modules.j2ee.sun.validation.constraints.NumberConstraint</classname>
  </check-info>
  <check-info>
    <name>Range Constraint</name>
    <classname>org.netbeans.modules.j2ee.sun.validation.constraints.RangeConstraint</classname>
      <arguments>
	  <argument>
	    <name>range-start</name>
	    <type>java.lang.String</type>
	  </argument>
	  <argument>
	    <name>range-end</name>
	    <type>java.lang.String</type>
	  </argument>
      </arguments>
  </check-info>
  <check-info>
    <name>Enumeration Constraint</name>
    <classname>org.netbeans.modules.j2ee.sun.validation.constraints.InConstraint</classname>
      <arguments>
	  <argument>
	    <name>enumeration-value</name>
	    <type>java.lang.String[]</type>
          </argument>
      </arguments>
  </check-info>
  <check-info>
    <name>NonBlank Constraint</name>
    <classname>org.netbeans.modules.j2ee.sun.validation.constraints.NonBlankConstraint</classname>
  </check-info>
  <check-info>
    <name>ZeroToMaxInteger Constraint</name>
    <classname>org.netbeans.modules.j2ee.sun.validation.constraints.ZeroToMaxIntegerConstraint</classname>
  </check-info>
  <check-info>
    <name>IntegerGreaterThan Constraint</name>
    <classname>org.netbeans.modules.j2ee.sun.validation.constraints.IntegerGreaterThanConstraint</classname>
      <arguments>
	  <argument>
	    <name>value</name>
	    <type>java.lang.String</type>
	  </argument>
      </arguments>
  </check-info>
</constraints>
