001/*
002 *    GeoAPI - Java interfaces for OGC/ISO standards
003 *    Copyright © 2008-2024 Open Geospatial Consortium, Inc.
004 *    http://www.geoapi.org
005 *
006 *    Licensed under the Apache License, Version 2.0 (the "License");
007 *    you may not use this file except in compliance with the License.
008 *    You may obtain a copy of the License at
009 *
010 *        http://www.apache.org/licenses/LICENSE-2.0
011 *
012 *    Unless required by applicable law or agreed to in writing, software
013 *    distributed under the License is distributed on an "AS IS" BASIS,
014 *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015 *    See the License for the specific language governing permissions and
016 *    limitations under the License.
017 */
018package org.opengis.test;
019
020import javax.imageio.spi.ImageReaderSpi;
021import javax.imageio.spi.ImageWriterSpi;
022import javax.imageio.metadata.IIOMetadataFormat;
023
024import org.opengis.util.*;
025import org.opengis.metadata.*;
026import org.opengis.metadata.extent.*;
027import org.opengis.metadata.citation.*;
028import org.opengis.geometry.*;
029import org.opengis.metadata.quality.*;
030import org.opengis.metadata.maintenance.*;
031import org.opengis.metadata.maintenance.Scope;      // Resolve ambiguity.
032import org.opengis.parameter.*;
033import org.opengis.referencing.*;
034import org.opengis.referencing.cs.*;
035import org.opengis.referencing.crs.*;
036import org.opengis.referencing.datum.*;
037import org.opengis.referencing.operation.*;
038
039// Following imports are for javadoc
040import org.opengis.test.util.*;
041import org.opengis.test.geometry.*;
042import org.opengis.test.metadata.*;
043import org.opengis.test.referencing.*;
044import org.opengis.test.coverage.image.*;
045
046
047/**
048 * A set of convenience static methods for validating GeoAPI implementations. Every
049 * {@code validate} method defined in this class delegate their work to one of many
050 * {@link Validator} objects in various packages. This class is especially convenient
051 * when used with {@code static import} statements.
052 *
053 * <h2>Customization</h2>
054 * To override some validation process on a <em>system-wide</em> basis, vendors can either
055 * assign a new {@link ValidatorContainer} instance to the {@link #DEFAULT} static field, or
056 * modify the fields ({@link ValidatorContainer#cs cs}, {@link ValidatorContainer#crs crs},
057 * <i>etc.</i>) in the existing instance. The following example alters the existing instance
058 * in order to accept non-standard axis names:
059 *
060 * {@snippet lang="java" :
061 * Validators.DEFAULT.crs.enforceStandardNames = false;
062 * }
063 *
064 * <p>To override some validation process without changing the system-wide setting,
065 * vendors can create a new instance of {@link ValidatorContainer} and invoke its
066 * non-static methods from the vendor's test cases.</p>
067 *
068 * @author  Martin Desruisseaux (Geomatys)
069 * @version 3.1
070 * @since   2.2
071 */
072public class Validators {
073    /**
074     * The default container to be used by all static {@code validate} methods.
075     * Vendors can change the validators referenced by this container, or change
076     * their setting.
077     *
078     * <p>This field is not final in order to allow vendors to switch easily between
079     * different configurations, for example:</p>
080     *
081     * {@snippet lang="java" :
082     * ValidatorContainer original = Validators.DEFAULT;
083     * Validators.DEFAULT = myConfig;
084     * ... do some tests ...
085     * Validators.DEFAULT = original;
086     * }
087     */
088    public static ValidatorContainer DEFAULT = new ValidatorContainer();
089
090    /**
091     * For subclass constructors only.
092     */
093    protected Validators() {
094    }
095
096    /**
097     * For each interface implemented by the given object, invokes the corresponding
098     * {@code validate(…)} method (if any). Use this method only if the type is
099     * unknown at compile-time.
100     *
101     * @param  object  the object to dispatch to {@code validate(…)} methods, or {@code null}.
102     */
103    public static void dispatch(final Object object) {
104        DEFAULT.dispatch(object);
105    }
106
107    /**
108     * Tests the conformance of the given object.
109     *
110     * @param  object  the object to test, or {@code null}.
111     *
112     * @see MetadataBaseValidator#validate(Metadata)
113     *
114     * @since 3.1
115     */
116    public static void validate(final Metadata object) {
117        DEFAULT.validate(object);
118    }
119
120    /**
121     * Tests the conformance of the given object.
122     *
123     * @param  object  the object to test, or {@code null}.
124     *
125     * @see CitationValidator#validate(Citation)
126     */
127    public static void validate(final Citation object) {
128        DEFAULT.validate(object);
129    }
130
131    /**
132     * Tests the conformance of the given objects.
133     *
134     * @param  object  the objects to test, or {@code null}.
135     *
136     * @see CitationValidator#validate(CitationDate...)
137     *
138     * @since 3.1
139     */
140    public static void validate(final CitationDate... object) {
141        DEFAULT.validate(object);
142    }
143
144    /**
145     * Tests the conformance of the given object.
146     *
147     * @param  object  the object to test, or {@code null}.
148     *
149     * @see CitationValidator#validate(Responsibility)
150     *
151     * @since 3.1
152     */
153    public static void validate(final Responsibility object) {
154        DEFAULT.validate(object);
155    }
156
157    /**
158     * Tests the conformance of the given object.
159     *
160     * @param  object  the object to test, or {@code null}.
161     *
162     * @see CitationValidator#validate(Party)
163     *
164     * @since 3.1
165     */
166    public static void validate(final Party object) {
167        DEFAULT.validate(object);
168    }
169
170    /**
171     * Tests the conformance of the given object.
172     *
173     * @param  object  the object to test, or {@code null}.
174     *
175     * @see CitationValidator#validate(Contact)
176     *
177     * @since 3.1
178     */
179    public static void validate(final Contact object) {
180        DEFAULT.validate(object);
181    }
182
183    /**
184     * Tests the conformance of the given object.
185     *
186     * @param  object  the object to test, or {@code null}.
187     *
188     * @see CitationValidator#validate(Telephone)
189     *
190     * @since 3.1
191     */
192    public static void validate(final Telephone object) {
193        DEFAULT.validate(object);
194    }
195
196    /**
197     * Tests the conformance of the given object.
198     *
199     * @param  object  the object to test, or {@code null}.
200     *
201     * @see CitationValidator#validate(Address)
202     *
203     * @since 3.1
204     */
205    public static void validate(final Address object) {
206        DEFAULT.validate(object);
207    }
208
209    /**
210     * Tests the conformance of the given object.
211     *
212     * @param  object  the object to test, or {@code null}.
213     *
214     * @see CitationValidator#validate(OnlineResource)
215     *
216     * @since 3.1
217     */
218    public static void validate(final OnlineResource object) {
219        DEFAULT.validate(object);
220    }
221
222    /**
223     * Tests the conformance of the given object.
224     *
225     * @param  object  the object to test, or {@code null}.
226     *
227     * @see QualityValidator#validate(DataQuality)
228     *
229     * @since 3.1
230     */
231    public static void validate(final DataQuality object) {
232        DEFAULT.validate(object);
233    }
234
235    /**
236     * Tests the conformance of the given object.
237     *
238     * @param  object  the object to test, or {@code null}.
239     *
240     * @see QualityValidator#dispatch(Element)
241     *
242     * @since 3.1
243     */
244    public static void validate(final Element object) {
245        DEFAULT.validate(object);
246    }
247
248    /**
249     * Tests the conformance of the given object.
250     *
251     * @param  object  the object to test, or {@code null}.
252     *
253     * @see MaintenanceValidator#validate(MaintenanceInformation)
254     *
255     * @since 3.1
256     */
257    public static void validate(final PositionalAccuracy object) {
258        DEFAULT.validate(object);
259    }
260
261    /**
262     * Tests the conformance of the given object.
263     *
264     * @param  object  the object to test, or {@code null}.
265     *
266     * @see QualityValidator#dispatch(Result)
267     *
268     * @since 3.1
269     */
270    public static void validate(final Result object) {
271        DEFAULT.validate(object);
272    }
273
274    /**
275     * Tests the conformance of the given object.
276     *
277     * @param  object  the object to test, or {@code null}.
278     *
279     * @see QualityValidator#validate(DescriptiveResult)
280     *
281     * @since 3.1
282     */
283    public static void validate(final DescriptiveResult object) {
284        DEFAULT.validate(object);
285    }
286
287    /**
288     * Tests the conformance of the given object.
289     *
290     * @param  object  the object to test, or {@code null}.
291     *
292     * @see QualityValidator#validate(ConformanceResult)
293     *
294     * @since 3.1
295     */
296    public static void validate(final ConformanceResult object) {
297        DEFAULT.validate(object);
298    }
299
300    /**
301     * Tests the conformance of the given object.
302     *
303     * @param  object  the object to test, or {@code null}.
304     *
305     * @see QualityValidator#validate(QuantitativeResult)
306     *
307     * @since 3.1
308     */
309    public static void validate(final QuantitativeResult object) {
310        DEFAULT.validate(object);
311    }
312
313    /**
314     * Tests the conformance of the given object.
315     *
316     * @param  object  the object to test, or {@code null}.
317     *
318     * @see QualityValidator#validate(CoverageResult)
319     *
320     * @since 3.1
321     */
322    public static void validate(final CoverageResult object) {
323        DEFAULT.validate(object);
324    }
325
326    /**
327     * Tests the conformance of the given object.
328     *
329     * @param  object  the object to test, or {@code null}.
330     *
331     * @see MaintenanceValidator#validate(MaintenanceInformation)
332     *
333     * @since 3.1
334     */
335    public static void validate(final MaintenanceInformation object) {
336        DEFAULT.validate(object);
337    }
338
339    /**
340     * Tests the conformance of the given object.
341     *
342     * @param  object  the object to test, or {@code null}.
343     *
344     * @see MaintenanceValidator#validate(Scope)
345     *
346     * @since 3.1
347     */
348    public static void validate(final Scope object) {
349        DEFAULT.validate(object);
350    }
351
352    /**
353     * Tests the conformance of the given object.
354     *
355     * @param  object  the object to test, or {@code null}.
356     *
357     * @see ExtentValidator#validate(Extent)
358     */
359    public static void validate(final Extent object) {
360        DEFAULT.validate(object);
361    }
362
363    /**
364     * Tests the conformance of the given object.
365     *
366     * @param  object  the object to test, or {@code null}.
367     *
368     * @see ExtentValidator#validate(TemporalExtent)
369     */
370    public static void validate(final TemporalExtent object) {
371        DEFAULT.validate(object);
372    }
373
374    /**
375     * Tests the conformance of the given object.
376     *
377     * @param  object  the object to test, or {@code null}.
378     *
379     * @see ExtentValidator#validate(VerticalExtent)
380     */
381    public static void validate(final VerticalExtent object) {
382        DEFAULT.validate(object);
383    }
384
385    /**
386     * Tests the conformance of the given object.
387     *
388     * @param  object  the object to test, or {@code null}.
389     *
390     * @see ExtentValidator#dispatch(GeographicExtent)
391     */
392    public static void validate(final GeographicExtent object) {
393        DEFAULT.validate(object);
394    }
395
396    /**
397     * Tests the conformance of the given object.
398     *
399     * @param  object  the object to test, or {@code null}.
400     *
401     * @see ExtentValidator#validate(GeographicDescription)
402     */
403    public static void validate(final GeographicDescription object) {
404        DEFAULT.validate(object);
405    }
406
407    /**
408     * Tests the conformance of the given object.
409     *
410     * @param  object  the object to test, or {@code null}.
411     *
412     * @see ExtentValidator#validate(BoundingPolygon)
413     */
414    public static void validate(final BoundingPolygon object) {
415        DEFAULT.validate(object);
416    }
417
418    /**
419     * Tests the conformance of the given object.
420     *
421     * @param  object  the object to test, or {@code null}.
422     *
423     * @see ExtentValidator#validate(GeographicBoundingBox)
424     */
425    public static void validate(final GeographicBoundingBox object) {
426        DEFAULT.validate(object);
427    }
428
429    /**
430     * Tests the conformance of the given object.
431     *
432     * @param  object  the object to test, or {@code null}.
433     *
434     * @see GeometryValidator#validate(Envelope)
435     */
436    public static void validate(final Envelope object) {
437        DEFAULT.validate(object);
438    }
439
440    /**
441     * Tests the conformance of the given object.
442     *
443     * @param  object  the object to test, or {@code null}.
444     *
445     * @see GeometryValidator#validate(DirectPosition)
446     */
447    public static void validate(final DirectPosition object) {
448        DEFAULT.validate(object);
449    }
450
451    /**
452     * Tests the conformance of the given object.
453     *
454     * @param  object  the object to test, or {@code null}.
455     *
456     * @see CRSValidator#dispatch(CoordinateReferenceSystem)
457     */
458    public static void validate(final CoordinateReferenceSystem object) {
459        DEFAULT.validate(object);
460    }
461
462    /**
463     * Tests the conformance of the given object.
464     *
465     * @param  object  the object to test, or {@code null}.
466     *
467     * @see CRSValidator#validate(GeodeticCRS)
468     *
469     * @since 3.1
470     */
471    public static void validate(final GeodeticCRS object) {
472        DEFAULT.validate(object);
473    }
474
475    /**
476     * Validates the given coordinate reference system.
477     *
478     * @param  object  the object to validate, or {@code null}.
479     *
480     * @see CRSValidator#validate(ProjectedCRS)
481     */
482    public static void validate(final ProjectedCRS object) {
483        DEFAULT.validate(object);
484    }
485
486    /**
487     * Validates the given coordinate reference system.
488     *
489     * @param  object  the object to validate, or {@code null}.
490     *
491     * @see CRSValidator#validate(DerivedCRS)
492     */
493    public static void validate(final DerivedCRS object) {
494        DEFAULT.validate(object);
495    }
496
497    /**
498     * Validates the given coordinate reference system.
499     *
500     * @param  object  the object to validate, or {@code null}.
501     *
502     * @see CRSValidator#validate(ImageCRS)
503     *
504     * @deprecated {@code ImageCRS} is replaced by {@link EngineeringCRS} as of ISO 19111:2019.
505     */
506    @Deprecated(since="3.1")
507    public static void validate(final ImageCRS object) {
508        DEFAULT.validate(object);
509    }
510
511    /**
512     * Validates the given coordinate reference system.
513     *
514     * @param  object  the object to validate, or {@code null}.
515     *
516     * @see CRSValidator#validate(EngineeringCRS)
517     */
518    public static void validate(final EngineeringCRS object) {
519        DEFAULT.validate(object);
520    }
521
522    /**
523     * Validates the given coordinate reference system.
524     *
525     * @param  object  the object to validate, or {@code null}.
526     *
527     * @see CRSValidator#validate(VerticalCRS)
528     */
529    public static void validate(final VerticalCRS object) {
530        DEFAULT.validate(object);
531    }
532
533    /**
534     * Validates the given coordinate reference system.
535     *
536     * @param  object  the object to validate, or {@code null}.
537     *
538     * @see CRSValidator#validate(TemporalCRS)
539     */
540    public static void validate(final TemporalCRS object) {
541        DEFAULT.validate(object);
542    }
543
544    /**
545     * Validates the given coordinate reference system.
546     *
547     * @param  object  the object to validate, or {@code null}.
548     *
549     * @see CRSValidator#validate(CompoundCRS)
550     */
551    public static void validate(final CompoundCRS object) {
552        DEFAULT.validate(object);
553    }
554
555    /**
556     * Tests the conformance of the given object.
557     *
558     * @param  object  the object to test, or {@code null}.
559     *
560     * @see CSValidator#dispatch(CoordinateSystem)
561     */
562    public static void validate(final CoordinateSystem object) {
563        DEFAULT.validate(object);
564    }
565
566    /**
567     * Tests the conformance of the given object.
568     *
569     * @param  object  the object to test, or {@code null}.
570     *
571     * @see CSValidator#validate(CartesianCS)
572     */
573    public static void validate(final CartesianCS object) {
574        DEFAULT.validate(object);
575    }
576
577    /**
578     * Tests the conformance of the given object.
579     *
580     * @param  object  the object to test, or {@code null}.
581     *
582     * @see CSValidator#validate(EllipsoidalCS)
583     */
584    public static void validate(final EllipsoidalCS object) {
585        DEFAULT.validate(object);
586    }
587
588    /**
589     * Tests the conformance of the given object.
590     *
591     * @param  object  the object to test, or {@code null}.
592     *
593     * @see CSValidator#validate(SphericalCS)
594     */
595    public static void validate(final SphericalCS object) {
596        DEFAULT.validate(object);
597    }
598
599    /**
600     * Tests the conformance of the given object.
601     *
602     * @param  object  the object to test, or {@code null}.
603     *
604     * @see CSValidator#validate(CylindricalCS)
605     */
606    public static void validate(final CylindricalCS object) {
607        DEFAULT.validate(object);
608    }
609
610    /**
611     * Tests the conformance of the given object.
612     *
613     * @param  object  the object to test, or {@code null}.
614     *
615     * @see CSValidator#validate(PolarCS)
616     */
617    public static void validate(final PolarCS object) {
618        DEFAULT.validate(object);
619    }
620
621    /**
622     * Tests the conformance of the given object.
623     *
624     * @param  object  the object to test, or {@code null}.
625     *
626     * @see CSValidator#validate(LinearCS)
627     */
628    public static void validate(final LinearCS object) {
629        DEFAULT.validate(object);
630    }
631
632    /**
633     * Tests the conformance of the given object.
634     *
635     * @param  object  the object to test, or {@code null}.
636     *
637     * @see CSValidator#validate(VerticalCS)
638     */
639    public static void validate(final VerticalCS object) {
640        DEFAULT.validate(object);
641    }
642
643    /**
644     * Tests the conformance of the given object.
645     *
646     * @param  object  the object to test, or {@code null}.
647     *
648     * @see CSValidator#validate(TimeCS)
649     */
650    public static void validate(final TimeCS object) {
651        DEFAULT.validate(object);
652    }
653
654    /**
655     * Tests the conformance of the given object.
656     *
657     * @param  object  the object to test, or {@code null}.
658     *
659     * @see CSValidator#validate(UserDefinedCS)
660     */
661    @Deprecated(since="3.1")
662    public static void validate(final UserDefinedCS object) {
663        DEFAULT.validate(object);
664    }
665
666    /**
667     * Tests the conformance of the given object.
668     *
669     * @param  object  the object to test, or {@code null}.
670     *
671     * @see CSValidator#validate(CoordinateSystemAxis)
672     */
673    public static void validate(final CoordinateSystemAxis object) {
674        DEFAULT.validate(object);
675    }
676
677    /**
678     * Tests the conformance of the given object.
679     *
680     * @param  object  the object to test, or {@code null}.
681     *
682     * @see DatumValidator#dispatch(Datum)
683     */
684    public static void validate(final Datum object) {
685        DEFAULT.validate(object);
686    }
687
688    /**
689     * Tests the conformance of the given object.
690     *
691     * @param  object  the object to test, or {@code null}.
692     *
693     * @see DatumValidator#validate(PrimeMeridian)
694     */
695    public static void validate(final PrimeMeridian object) {
696        DEFAULT.validate(object);
697    }
698
699    /**
700     * Tests the conformance of the given object.
701     *
702     * @param  object  the object to test, or {@code null}.
703     *
704     * @see DatumValidator#validate(Ellipsoid)
705     */
706    public static void validate(final Ellipsoid object) {
707        DEFAULT.validate(object);
708    }
709
710    /**
711     * Tests the conformance of the given object.
712     *
713     * @param  object  the object to test, or {@code null}.
714     *
715     * @see DatumValidator#validate(GeodeticDatum)
716     */
717    public static void validate(final GeodeticDatum object) {
718        DEFAULT.validate(object);
719    }
720
721    /**
722     * Tests the conformance of the given object.
723     *
724     * @param  object  the object to test, or {@code null}.
725     *
726     * @see DatumValidator#validate(VerticalDatum)
727     */
728    public static void validate(final VerticalDatum object) {
729        DEFAULT.validate(object);
730    }
731
732    /**
733     * Tests the conformance of the given object.
734     *
735     * @param  object  the object to test, or {@code null}.
736     *
737     * @see DatumValidator#validate(TemporalDatum)
738     */
739    public static void validate(final TemporalDatum object) {
740        DEFAULT.validate(object);
741    }
742
743    /**
744     * Tests the conformance of the given object.
745     *
746     * @param  object  the object to test, or {@code null}.
747     *
748     * @see DatumValidator#validate(ImageDatum)
749     *
750     * @deprecated {@code ImageCRS} is replaced by {@link EngineeringCRS} as of ISO 19111:2019.
751     */
752    @Deprecated(since="3.1")
753    @SuppressWarnings("removal")
754    public static void validate(final ImageDatum object) {
755        DEFAULT.validate(object);
756    }
757
758    /**
759     * Tests the conformance of the given object.
760     *
761     * @param  object  the object to test, or {@code null}.
762     *
763     * @see DatumValidator#validate(EngineeringDatum)
764     */
765    public static void validate(final EngineeringDatum object) {
766        DEFAULT.validate(object);
767    }
768
769    /**
770     * Tests the conformance of the given object.
771     *
772     * @param  object  the object to test, or {@code null}.
773     *
774     * @see DatumValidator#validate(DatumEnsemble)
775     */
776    public static void validate(final DatumEnsemble<?> object) {
777        DEFAULT.validate(object);
778    }
779
780    /**
781     * Tests the conformance of the given object.
782     *
783     * @param  object  the object to test, or {@code null}.
784     *
785     * @see OperationValidator#dispatch(CoordinateOperation)
786     */
787    public static void validate(final CoordinateOperation object) {
788        DEFAULT.validate(object);
789    }
790
791    /**
792     * Tests the conformance of the given object.
793     *
794     * @param  object  the object to test, or {@code null}.
795     *
796     * @see OperationValidator#validate(Conversion)
797     */
798    public static void validate(final Conversion object) {
799        DEFAULT.validate(object);
800    }
801
802    /**
803     * Tests the conformance of the given object.
804     *
805     * @param  object  the object to test, or {@code null}.
806     *
807     * @see OperationValidator#validate(Transformation)
808     */
809    public static void validate(final Transformation object) {
810        DEFAULT.validate(object);
811    }
812
813    /**
814     * Tests the conformance of the given object.
815     *
816     * @param  object  the object to test, or {@code null}.
817     *
818     * @see OperationValidator#validate(PointMotionOperation)
819     * @since 3.1
820     */
821    public static void validate(final PointMotionOperation object) {
822        DEFAULT.validate(object);
823    }
824
825    /**
826     * Tests the conformance of the given object.
827     *
828     * @param  object  the object to test, or {@code null}.
829     *
830     * @see OperationValidator#validate(ConcatenatedOperation)
831     */
832    public static void validate(final ConcatenatedOperation object) {
833        DEFAULT.validate(object);
834    }
835
836    /**
837     * Tests the conformance of the given object.
838     *
839     * @param  object  the object to test, or {@code null}.
840     *
841     * @see OperationValidator#validate(PassThroughOperation)
842     */
843    public static void validate(final PassThroughOperation object) {
844        DEFAULT.validate(object);
845    }
846
847    /**
848     * Tests the conformance of the given object.
849     *
850     * @param  object  the object to test, or {@code null}.
851     *
852     * @see OperationValidator#validate(OperationMethod)
853     */
854    public static void validate(final OperationMethod object) {
855        DEFAULT.validate(object);
856    }
857
858    /**
859     * Tests the conformance of the given object.
860     *
861     * @param  object  the object to test, or {@code null}.
862     *
863     * @see OperationValidator#validate(Formula)
864     */
865    public static void validate(final Formula object) {
866        DEFAULT.validate(object);
867    }
868
869    /**
870     * Tests the conformance of the given object.
871     *
872     * @param  object  the object to test, or {@code null}.
873     *
874     * @see OperationValidator#validate(MathTransform)
875     */
876    public static void validate(final MathTransform object) {
877        DEFAULT.validate(object);
878    }
879
880    /**
881     * Tests the conformance of the given object.
882     *
883     * @param  object  the object to test, or {@code null}.
884     *
885     * @see ParameterValidator#dispatch(GeneralParameterDescriptor)
886     */
887    public static void validate(final GeneralParameterDescriptor object) {
888        DEFAULT.validate(object);
889    }
890
891    /**
892     * Tests the conformance of the given object.
893     *
894     * @param  object  the object to test, or {@code null}.
895     *
896     * @see ParameterValidator#validate(ParameterDescriptor)
897     */
898    public static void validate(final ParameterDescriptor<?> object) {
899        DEFAULT.validate(object);
900    }
901
902    /**
903     * Tests the conformance of the given object.
904     *
905     * @param  object  the object to test, or {@code null}.
906     *
907     * @see ParameterValidator#validate(ParameterDescriptorGroup)
908     */
909    public static void validate(final ParameterDescriptorGroup object) {
910        DEFAULT.validate(object);
911    }
912
913    /**
914     * Tests the conformance of the given object.
915     *
916     * @param  object  the object to test, or {@code null}.
917     *
918     * @see ParameterValidator#dispatch(GeneralParameterValue)
919     */
920    public static void validate(final GeneralParameterValue object) {
921        DEFAULT.validate(object);
922    }
923
924    /**
925     * Tests the conformance of the given object.
926     *
927     * @param  object  the object to test, or {@code null}.
928     *
929     * @see ParameterValidator#validate(ParameterValue)
930     */
931    public static void validate(final ParameterValue<?> object) {
932        DEFAULT.validate(object);
933    }
934
935    /**
936     * Tests the conformance of the given object.
937     *
938     * @param  object  the object to test, or {@code null}.
939     *
940     * @see ParameterValidator#validate(ParameterValueGroup)
941     */
942    public static void validate(final ParameterValueGroup object) {
943        DEFAULT.validate(object);
944    }
945
946    /**
947     * Tests the conformance of the given object.
948     *
949     * @param  object  the object to test, or {@code null}.
950     *
951     * @see ReferencingValidator#dispatchObject(IdentifiedObject)
952     */
953    public static void validate(final IdentifiedObject object) {
954        DEFAULT.validate(object);
955    }
956
957    /**
958     * Tests the conformance of the given object.
959     *
960     * @param  object  the object to test, or {@code null}.
961     *
962     * @see MetadataBaseValidator#validate(Identifier)
963     *
964     * @since 3.1
965     */
966    public static void validate(final Identifier object) {
967        DEFAULT.validate(object);
968    }
969
970    /**
971     * Tests the conformance of the given object.
972     *
973     * @param  object  the object to test, or {@code null}.
974     *
975     * @see NameValidator#dispatch(GenericName)
976     */
977    public static void validate(final GenericName object) {
978        DEFAULT.validate(object);
979    }
980
981    /**
982     * Tests the conformance of the given object.
983     *
984     * @param  object  the object to test, or {@code null}.
985     *
986     * @see NameValidator#validate(LocalName)
987     */
988    public static void validate(final LocalName object) {
989        DEFAULT.validate(object);
990    }
991
992    /**
993     * Tests the conformance of the given object.
994     *
995     * @param  object  the object to test, or {@code null}.
996     *
997     * @see NameValidator#validate(ScopedName)
998     */
999    public static void validate(final ScopedName object) {
1000        DEFAULT.validate(object);
1001    }
1002
1003    /**
1004     * Tests the conformance of the given object.
1005     *
1006     * @param  object  the object to test, or {@code null}.
1007     *
1008     * @see NameValidator#validate(NameSpace)
1009     */
1010    public static void validate(final NameSpace object) {
1011        DEFAULT.validate(object);
1012    }
1013
1014    /**
1015     * Tests the conformance of the given object.
1016     *
1017     * @param  object  the object to test, or {@code null}.
1018     *
1019     * @see NameValidator#validate(InternationalString)
1020     */
1021    public static void validate(final InternationalString object) {
1022        DEFAULT.validate(object);
1023    }
1024
1025    /**
1026     * Tests the conformance of the given object.
1027     *
1028     * @param  object  the object to test, or {@code null}.
1029     *
1030     * @see ImageValidator#validate(ImageReaderSpi)
1031     */
1032    public static void validate(final ImageReaderSpi object) {
1033        DEFAULT.validate(object);
1034    }
1035
1036    /**
1037     * Tests the conformance of the given object.
1038     *
1039     * @param  object  the object to test, or {@code null}.
1040     *
1041     * @see ImageValidator#validate(ImageWriterSpi)
1042     */
1043    public static void validate(final ImageWriterSpi object) {
1044        DEFAULT.validate(object);
1045    }
1046
1047    /**
1048     * Tests the conformance of the given object.
1049     *
1050     * @param  object  the object to test, or {@code null}.
1051     *
1052     * @see ImageValidator#validate(IIOMetadataFormat)
1053     */
1054    public static void validate(final IIOMetadataFormat object) {
1055        DEFAULT.validate(object);
1056    }
1057}