001/*
002 *    GeoAPI - Java interfaces for OGC/ISO standards
003 *    http://www.geoapi.org
004 *
005 *    Copyright (C) 2008-2019 Open Geospatial Consortium, Inc.
006 *    All Rights Reserved. http://www.opengeospatial.org/ogc/legal
007 *
008 *    Permission to use, copy, and modify this software and its documentation, with
009 *    or without modification, for any purpose and without fee or royalty is hereby
010 *    granted, provided that you include the following on ALL copies of the software
011 *    and documentation or portions thereof, including modifications, that you make:
012 *
013 *    1. The full text of this NOTICE in a location viewable to users of the
014 *       redistributed or derivative work.
015 *    2. Notice of any changes or modifications to the OGC files, including the
016 *       date changes were made.
017 *
018 *    THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE
019 *    NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
020 *    TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT
021 *    THE USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTY
022 *    PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
023 *
024 *    COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR
025 *    CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENTATION.
026 *
027 *    The name and trademarks of copyright holders may NOT be used in advertising or
028 *    publicity pertaining to the software without specific, written prior permission.
029 *    Title to copyright in this software and any associated documentation will at all
030 *    times remain with copyright holders.
031 */
032package org.opengis.test;
033
034import javax.imageio.spi.ImageReaderSpi;
035import javax.imageio.spi.ImageWriterSpi;
036import javax.imageio.metadata.IIOMetadataFormat;
037
038import org.opengis.util.*;
039import org.opengis.metadata.*;
040import org.opengis.metadata.extent.*;
041import org.opengis.metadata.citation.*;
042import org.opengis.geometry.*;
043import org.opengis.parameter.*;
044import org.opengis.referencing.*;
045import org.opengis.referencing.cs.*;
046import org.opengis.referencing.crs.*;
047import org.opengis.referencing.datum.*;
048import org.opengis.referencing.operation.*;
049
050// Following imports are for javadoc
051import org.opengis.test.util.*;
052import org.opengis.test.geometry.*;
053import org.opengis.test.metadata.*;
054import org.opengis.test.referencing.*;
055import org.opengis.test.coverage.image.*;
056
057
058/**
059 * A set of convenience static methods for validating GeoAPI implementations. Every
060 * {@code validate} method defined in this class delegate their work to one of many
061 * {@link Validator} objects in various packages. This class is especially convenient
062 * when used with {@code static import} statements.
063 *
064 * <p><b><u>Customization</u></b><br>
065 * To override some validation process on a <em>system-wide</em> basis, vendors can either
066 * assign a new {@link ValidatorContainer} instance to the {@link #DEFAULT} static field, or
067 * modify the fields ({@link ValidatorContainer#cs cs}, {@link ValidatorContainer#crs crs},
068 * <i>etc.</i>) in the existing instance. The following example alters the existing instance
069 * in order to accept non-standard axis names:</p>
070 *
071 * <blockquote><pre>Validators.DEFAULT.crs.enforceStandardNames = false;</pre></blockquote>
072 *
073 * <p>To override some validation process without changing the system-wide setting,
074 * vendors can create a new instance of {@link ValidatorContainer} and invoke its
075 * non-static methods from the vendor's test cases.</p>
076 *
077 * @author  Martin Desruisseaux (Geomatys)
078 * @version 3.1
079 * @since   2.2
080 */
081public class Validators {
082    /**
083     * The default container to be used by all static {@code validate} methods.
084     * Vendors can change the validators referenced by this container, or change
085     * their setting.
086     *
087     * <p>This field is not final in order to allow vendors to switch easily between
088     * different configurations, for example:</p>
089     *
090     * <blockquote><pre>ValidatorContainer original = Validators.DEFAULT;
091     *Validators.DEFAULT = myConfig;
092     *... do some tests ...
093     *Validators.DEFAULT = original;</pre></blockquote>
094     */
095    public static ValidatorContainer DEFAULT = new ValidatorContainer();
096
097    /**
098     * For subclass constructors only.
099     */
100    protected Validators() {
101    }
102
103    /**
104     * For each interface implemented by the given object, invokes the corresponding
105     * {@code validate(…)} method (if any). Use this method only if the type is
106     * unknown at compile-time.
107     *
108     * @param  object  the object to dispatch to {@code validate(…)} methods, or {@code null}.
109     */
110    public static void dispatch(final Object object) {
111        DEFAULT.dispatch(object);
112    }
113
114    /**
115     * Tests the conformance of the given object.
116     *
117     * @param  object  the object to test, or {@code null}.
118     *
119     * @see MetadataBaseValidator#validate(Metadata)
120     *
121     * @since 3.1
122     */
123    public static void validate(final Metadata object) {
124        DEFAULT.validate(object);
125    }
126
127    /**
128     * Tests the conformance of the given object.
129     *
130     * @param  object  the object to test, or {@code null}.
131     *
132     * @see CitationValidator#validate(Citation)
133     */
134    public static void validate(final Citation object) {
135        DEFAULT.validate(object);
136    }
137
138    /**
139     * Tests the conformance of the given objects.
140     *
141     * @param  object  the objects to test, or {@code null}.
142     *
143     * @see CitationValidator#validate(CitationDate...)
144     *
145     * @since 3.1
146     */
147    public static void validate(final CitationDate... object) {
148        DEFAULT.validate(object);
149    }
150
151    /**
152     * Tests the conformance of the given object.
153     *
154     * @param  object  the object to test, or {@code null}.
155     *
156     * @see CitationValidator#validate(Responsibility)
157     *
158     * @since 3.1
159     */
160    public static void validate(final Responsibility object) {
161        DEFAULT.validate(object);
162    }
163
164    /**
165     * Tests the conformance of the given object.
166     *
167     * @param  object  the object to test, or {@code null}.
168     *
169     * @see CitationValidator#validate(Party)
170     *
171     * @since 3.1
172     */
173    public static void validate(final Party object) {
174        DEFAULT.validate(object);
175    }
176
177    /**
178     * Tests the conformance of the given object.
179     *
180     * @param  object  the object to test, or {@code null}.
181     *
182     * @see CitationValidator#validate(Contact)
183     *
184     * @since 3.1
185     */
186    public static void validate(final Contact object) {
187        DEFAULT.validate(object);
188    }
189
190    /**
191     * Tests the conformance of the given object.
192     *
193     * @param  object  the object to test, or {@code null}.
194     *
195     * @see CitationValidator#validate(Telephone)
196     *
197     * @since 3.1
198     */
199    public static void validate(final Telephone object) {
200        DEFAULT.validate(object);
201    }
202
203    /**
204     * Tests the conformance of the given object.
205     *
206     * @param  object  the object to test, or {@code null}.
207     *
208     * @see CitationValidator#validate(Address)
209     *
210     * @since 3.1
211     */
212    public static void validate(final Address object) {
213        DEFAULT.validate(object);
214    }
215
216    /**
217     * Tests the conformance of the given object.
218     *
219     * @param  object  the object to test, or {@code null}.
220     *
221     * @see CitationValidator#validate(OnlineResource)
222     *
223     * @since 3.1
224     */
225    public static void validate(final OnlineResource object) {
226        DEFAULT.validate(object);
227    }
228
229    /**
230     * Tests the conformance of the given object.
231     *
232     * @param  object  the object to test, or {@code null}.
233     *
234     * @see ExtentValidator#validate(Extent)
235     */
236    public static void validate(final Extent object) {
237        DEFAULT.validate(object);
238    }
239
240    /**
241     * Tests the conformance of the given object.
242     *
243     * @param  object  the object to test, or {@code null}.
244     *
245     * @see ExtentValidator#validate(TemporalExtent)
246     */
247    public static void validate(final TemporalExtent object) {
248        DEFAULT.validate(object);
249    }
250
251    /**
252     * Tests the conformance of the given object.
253     *
254     * @param  object  the object to test, or {@code null}.
255     *
256     * @see ExtentValidator#validate(VerticalExtent)
257     */
258    public static void validate(final VerticalExtent object) {
259        DEFAULT.validate(object);
260    }
261
262    /**
263     * Tests the conformance of the given object.
264     *
265     * @param  object  the object to test, or {@code null}.
266     *
267     * @see ExtentValidator#dispatch(GeographicExtent)
268     */
269    public static void validate(final GeographicExtent object) {
270        DEFAULT.validate(object);
271    }
272
273    /**
274     * Tests the conformance of the given object.
275     *
276     * @param  object  the object to test, or {@code null}.
277     *
278     * @see ExtentValidator#validate(GeographicDescription)
279     */
280    public static void validate(final GeographicDescription object) {
281        DEFAULT.validate(object);
282    }
283
284    /**
285     * Tests the conformance of the given object.
286     *
287     * @param  object  the object to test, or {@code null}.
288     *
289     * @see ExtentValidator#validate(BoundingPolygon)
290     */
291    public static void validate(final BoundingPolygon object) {
292        DEFAULT.validate(object);
293    }
294
295    /**
296     * Tests the conformance of the given object.
297     *
298     * @param  object  the object to test, or {@code null}.
299     *
300     * @see ExtentValidator#validate(GeographicBoundingBox)
301     */
302    public static void validate(final GeographicBoundingBox object) {
303        DEFAULT.validate(object);
304    }
305
306    /**
307     * Tests the conformance of the given object.
308     *
309     * @param  object  the object to test, or {@code null}.
310     *
311     * @see GeometryValidator#validate(Envelope)
312     */
313    public static void validate(final Envelope object) {
314        DEFAULT.validate(object);
315    }
316
317    /**
318     * Tests the conformance of the given object.
319     *
320     * @param  object  the object to test, or {@code null}.
321     *
322     * @see GeometryValidator#validate(DirectPosition)
323     */
324    public static void validate(final DirectPosition object) {
325        DEFAULT.validate(object);
326    }
327
328    /**
329     * Tests the conformance of the given object.
330     *
331     * @param  object  the object to test, or {@code null}.
332     *
333     * @see CRSValidator#dispatch(CoordinateReferenceSystem)
334     */
335    public static void validate(final CoordinateReferenceSystem 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 CRSValidator#validate(GeocentricCRS)
345     */
346    public static void validate(final GeocentricCRS object) {
347        DEFAULT.validate(object);
348    }
349
350    /**
351     * Tests the conformance of the given object.
352     *
353     * @param  object  the object to test, or {@code null}.
354     *
355     * @see CRSValidator#validate(GeographicCRS)
356     */
357    public static void validate(final GeographicCRS object) {
358        DEFAULT.validate(object);
359    }
360
361    /**
362     * Validates the given coordinate reference system.
363     *
364     * @param  object  the object to validate, or {@code null}.
365     *
366     * @see CRSValidator#validate(ProjectedCRS)
367     */
368    public static void validate(final ProjectedCRS object) {
369        DEFAULT.validate(object);
370    }
371
372    /**
373     * Validates the given coordinate reference system.
374     *
375     * @param  object  the object to validate, or {@code null}.
376     *
377     * @see CRSValidator#validate(DerivedCRS)
378     */
379    public static void validate(final DerivedCRS object) {
380        DEFAULT.validate(object);
381    }
382
383    /**
384     * Validates the given coordinate reference system.
385     *
386     * @param  object  the object to validate, or {@code null}.
387     *
388     * @see CRSValidator#validate(ImageCRS)
389     */
390    public static void validate(final ImageCRS object) {
391        DEFAULT.validate(object);
392    }
393
394    /**
395     * Validates the given coordinate reference system.
396     *
397     * @param  object  the object to validate, or {@code null}.
398     *
399     * @see CRSValidator#validate(EngineeringCRS)
400     */
401    public static void validate(final EngineeringCRS object) {
402        DEFAULT.validate(object);
403    }
404
405    /**
406     * Validates the given coordinate reference system.
407     *
408     * @param  object  the object to validate, or {@code null}.
409     *
410     * @see CRSValidator#validate(VerticalCRS)
411     */
412    public static void validate(final VerticalCRS object) {
413        DEFAULT.validate(object);
414    }
415
416    /**
417     * Validates the given coordinate reference system.
418     *
419     * @param  object  the object to validate, or {@code null}.
420     *
421     * @see CRSValidator#validate(TemporalCRS)
422     */
423    public static void validate(final TemporalCRS object) {
424        DEFAULT.validate(object);
425    }
426
427    /**
428     * Validates the given coordinate reference system.
429     *
430     * @param  object  the object to validate, or {@code null}.
431     *
432     * @see CRSValidator#validate(CompoundCRS)
433     */
434    public static void validate(final CompoundCRS object) {
435        DEFAULT.validate(object);
436    }
437
438    /**
439     * Tests the conformance of the given object.
440     *
441     * @param  object  the object to test, or {@code null}.
442     *
443     * @see CSValidator#dispatch(CoordinateSystem)
444     */
445    public static void validate(final CoordinateSystem object) {
446        DEFAULT.validate(object);
447    }
448
449    /**
450     * Tests the conformance of the given object.
451     *
452     * @param  object  the object to test, or {@code null}.
453     *
454     * @see CSValidator#validate(CartesianCS)
455     */
456    public static void validate(final CartesianCS object) {
457        DEFAULT.validate(object);
458    }
459
460    /**
461     * Tests the conformance of the given object.
462     *
463     * @param  object  the object to test, or {@code null}.
464     *
465     * @see CSValidator#validate(EllipsoidalCS)
466     */
467    public static void validate(final EllipsoidalCS object) {
468        DEFAULT.validate(object);
469    }
470
471    /**
472     * Tests the conformance of the given object.
473     *
474     * @param  object  the object to test, or {@code null}.
475     *
476     * @see CSValidator#validate(SphericalCS)
477     */
478    public static void validate(final SphericalCS object) {
479        DEFAULT.validate(object);
480    }
481
482    /**
483     * Tests the conformance of the given object.
484     *
485     * @param  object  the object to test, or {@code null}.
486     *
487     * @see CSValidator#validate(CylindricalCS)
488     */
489    public static void validate(final CylindricalCS object) {
490        DEFAULT.validate(object);
491    }
492
493    /**
494     * Tests the conformance of the given object.
495     *
496     * @param  object  the object to test, or {@code null}.
497     *
498     * @see CSValidator#validate(PolarCS)
499     */
500    public static void validate(final PolarCS object) {
501        DEFAULT.validate(object);
502    }
503
504    /**
505     * Tests the conformance of the given object.
506     *
507     * @param  object  the object to test, or {@code null}.
508     *
509     * @see CSValidator#validate(LinearCS)
510     */
511    public static void validate(final LinearCS object) {
512        DEFAULT.validate(object);
513    }
514
515    /**
516     * Tests the conformance of the given object.
517     *
518     * @param  object  the object to test, or {@code null}.
519     *
520     * @see CSValidator#validate(VerticalCS)
521     */
522    public static void validate(final VerticalCS object) {
523        DEFAULT.validate(object);
524    }
525
526    /**
527     * Tests the conformance of the given object.
528     *
529     * @param  object  the object to test, or {@code null}.
530     *
531     * @see CSValidator#validate(TimeCS)
532     */
533    public static void validate(final TimeCS object) {
534        DEFAULT.validate(object);
535    }
536
537    /**
538     * Tests the conformance of the given object.
539     *
540     * @param  object  the object to test, or {@code null}.
541     *
542     * @see CSValidator#validate(UserDefinedCS)
543     */
544    public static void validate(final UserDefinedCS object) {
545        DEFAULT.validate(object);
546    }
547
548    /**
549     * Tests the conformance of the given object.
550     *
551     * @param  object  the object to test, or {@code null}.
552     *
553     * @see CSValidator#validate(CoordinateSystemAxis)
554     */
555    public static void validate(final CoordinateSystemAxis object) {
556        DEFAULT.validate(object);
557    }
558
559    /**
560     * Tests the conformance of the given object.
561     *
562     * @param  object  the object to test, or {@code null}.
563     *
564     * @see DatumValidator#dispatch(Datum)
565     */
566    public static void validate(final Datum object) {
567        DEFAULT.validate(object);
568    }
569
570    /**
571     * Tests the conformance of the given object.
572     *
573     * @param  object  the object to test, or {@code null}.
574     *
575     * @see DatumValidator#validate(PrimeMeridian)
576     */
577    public static void validate(final PrimeMeridian object) {
578        DEFAULT.validate(object);
579    }
580
581    /**
582     * Tests the conformance of the given object.
583     *
584     * @param  object  the object to test, or {@code null}.
585     *
586     * @see DatumValidator#validate(Ellipsoid)
587     */
588    public static void validate(final Ellipsoid object) {
589        DEFAULT.validate(object);
590    }
591
592    /**
593     * Tests the conformance of the given object.
594     *
595     * @param  object  the object to test, or {@code null}.
596     *
597     * @see DatumValidator#validate(GeodeticDatum)
598     */
599    public static void validate(final GeodeticDatum object) {
600        DEFAULT.validate(object);
601    }
602
603    /**
604     * Tests the conformance of the given object.
605     *
606     * @param  object  the object to test, or {@code null}.
607     *
608     * @see DatumValidator#validate(VerticalDatum)
609     */
610    public static void validate(final VerticalDatum object) {
611        DEFAULT.validate(object);
612    }
613
614    /**
615     * Tests the conformance of the given object.
616     *
617     * @param  object  the object to test, or {@code null}.
618     *
619     * @see DatumValidator#validate(TemporalDatum)
620     */
621    public static void validate(final TemporalDatum object) {
622        DEFAULT.validate(object);
623    }
624
625    /**
626     * Tests the conformance of the given object.
627     *
628     * @param  object  the object to test, or {@code null}.
629     *
630     * @see DatumValidator#validate(ImageDatum)
631     */
632    public static void validate(final ImageDatum object) {
633        DEFAULT.validate(object);
634    }
635
636    /**
637     * Tests the conformance of the given object.
638     *
639     * @param  object  the object to test, or {@code null}.
640     *
641     * @see DatumValidator#validate(EngineeringDatum)
642     */
643    public static void validate(final EngineeringDatum object) {
644        DEFAULT.validate(object);
645    }
646
647    /**
648     * Tests the conformance of the given object.
649     *
650     * @param  object  the object to test, or {@code null}.
651     *
652     * @see OperationValidator#dispatch(CoordinateOperation)
653     */
654    public static void validate(final CoordinateOperation object) {
655        DEFAULT.validate(object);
656    }
657
658    /**
659     * Tests the conformance of the given object.
660     *
661     * @param  object  the object to test, or {@code null}.
662     *
663     * @see OperationValidator#validate(Conversion)
664     */
665    public static void validate(final Conversion object) {
666        DEFAULT.validate(object);
667    }
668
669    /**
670     * Tests the conformance of the given object.
671     *
672     * @param  object  the object to test, or {@code null}.
673     *
674     * @see OperationValidator#validate(Transformation)
675     */
676    public static void validate(final Transformation object) {
677        DEFAULT.validate(object);
678    }
679
680    /**
681     * Tests the conformance of the given object.
682     *
683     * @param  object  the object to test, or {@code null}.
684     *
685     * @see OperationValidator#validate(ConcatenatedOperation)
686     */
687    public static void validate(final ConcatenatedOperation object) {
688        DEFAULT.validate(object);
689    }
690
691    /**
692     * Tests the conformance of the given object.
693     *
694     * @param  object  the object to test, or {@code null}.
695     *
696     * @see OperationValidator#validate(PassThroughOperation)
697     */
698    public static void validate(final PassThroughOperation object) {
699        DEFAULT.validate(object);
700    }
701
702    /**
703     * Tests the conformance of the given object.
704     *
705     * @param  object  the object to test, or {@code null}.
706     *
707     * @see OperationValidator#validate(OperationMethod)
708     */
709    public static void validate(final OperationMethod object) {
710        DEFAULT.validate(object);
711    }
712
713    /**
714     * Tests the conformance of the given object.
715     *
716     * @param  object  the object to test, or {@code null}.
717     *
718     * @see OperationValidator#validate(Formula)
719     */
720    public static void validate(final Formula object) {
721        DEFAULT.validate(object);
722    }
723
724    /**
725     * Tests the conformance of the given object.
726     *
727     * @param  object  the object to test, or {@code null}.
728     *
729     * @see OperationValidator#validate(MathTransform)
730     */
731    public static void validate(final MathTransform object) {
732        DEFAULT.validate(object);
733    }
734
735    /**
736     * Tests the conformance of the given object.
737     *
738     * @param  object  the object to test, or {@code null}.
739     *
740     * @see ParameterValidator#dispatch(GeneralParameterDescriptor)
741     */
742    public static void validate(final GeneralParameterDescriptor object) {
743        DEFAULT.validate(object);
744    }
745
746    /**
747     * Tests the conformance of the given object.
748     *
749     * @param  object  the object to test, or {@code null}.
750     *
751     * @see ParameterValidator#validate(ParameterDescriptor)
752     */
753    public static void validate(final ParameterDescriptor<?> object) {
754        DEFAULT.validate(object);
755    }
756
757    /**
758     * Tests the conformance of the given object.
759     *
760     * @param  object  the object to test, or {@code null}.
761     *
762     * @see ParameterValidator#validate(ParameterDescriptorGroup)
763     */
764    public static void validate(final ParameterDescriptorGroup object) {
765        DEFAULT.validate(object);
766    }
767
768    /**
769     * Tests the conformance of the given object.
770     *
771     * @param  object  the object to test, or {@code null}.
772     *
773     * @see ParameterValidator#dispatch(GeneralParameterValue)
774     */
775    public static void validate(final GeneralParameterValue object) {
776        DEFAULT.validate(object);
777    }
778
779    /**
780     * Tests the conformance of the given object.
781     *
782     * @param  object  the object to test, or {@code null}.
783     *
784     * @see ParameterValidator#validate(ParameterValue)
785     */
786    public static void validate(final ParameterValue<?> object) {
787        DEFAULT.validate(object);
788    }
789
790    /**
791     * Tests the conformance of the given object.
792     *
793     * @param  object  the object to test, or {@code null}.
794     *
795     * @see ParameterValidator#validate(ParameterValueGroup)
796     */
797    public static void validate(final ParameterValueGroup object) {
798        DEFAULT.validate(object);
799    }
800
801    /**
802     * Tests the conformance of the given object.
803     *
804     * @param  object  the object to test, or {@code null}.
805     *
806     * @see ReferencingValidator#dispatchObject(IdentifiedObject)
807     */
808    public static void validate(final IdentifiedObject object) {
809        DEFAULT.validate(object);
810    }
811
812    /**
813     * Tests the conformance of the given object.
814     *
815     * @param  object  the object to test, or {@code null}.
816     *
817     * @see MetadataBaseValidator#validate(Identifier)
818     *
819     * @since 3.1
820     */
821    public static void validate(final Identifier 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 NameValidator#dispatch(GenericName)
831     */
832    public static void validate(final GenericName 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 NameValidator#validate(LocalName)
842     */
843    public static void validate(final LocalName 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 NameValidator#validate(ScopedName)
853     */
854    public static void validate(final ScopedName 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 NameValidator#validate(NameSpace)
864     */
865    public static void validate(final NameSpace 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 NameValidator#validate(InternationalString)
875     */
876    public static void validate(final InternationalString 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 ImageValidator#validate(ImageReaderSpi)
886     */
887    public static void validate(final ImageReaderSpi 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 ImageValidator#validate(ImageWriterSpi)
897     */
898    public static void validate(final ImageWriterSpi 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 ImageValidator#validate(IIOMetadataFormat)
908     */
909    public static void validate(final IIOMetadataFormat object) {
910        DEFAULT.validate(object);
911    }
912}