001/* 002 * Portions of this software was developed by employees of the National Institute 003 * of Standards and Technology (NIST), an agency of the Federal Government and is 004 * being made available as a public service. Pursuant to title 17 United States 005 * Code Section 105, works of NIST employees are not subject to copyright 006 * protection in the United States. This software may be subject to foreign 007 * copyright. Permission in the United States and in foreign countries, to the 008 * extent that NIST may hold copyright, to use, copy, modify, create derivative 009 * works, and distribute this software and its documentation without fee is hereby 010 * granted on a non-exclusive basis, provided that this notice and disclaimer 011 * of warranty appears in all copies. 012 * 013 * THE SOFTWARE IS PROVIDED 'AS IS' WITHOUT ANY WARRANTY OF ANY KIND, EITHER 014 * EXPRESSED, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, ANY WARRANTY 015 * THAT THE SOFTWARE WILL CONFORM TO SPECIFICATIONS, ANY IMPLIED WARRANTIES OF 016 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND FREEDOM FROM 017 * INFRINGEMENT, AND ANY WARRANTY THAT THE DOCUMENTATION WILL CONFORM TO THE 018 * SOFTWARE, OR ANY WARRANTY THAT THE SOFTWARE WILL BE ERROR FREE. IN NO EVENT 019 * SHALL NIST BE LIABLE FOR ANY DAMAGES, INCLUDING, BUT NOT LIMITED TO, DIRECT, 020 * INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES, ARISING OUT OF, RESULTING FROM, 021 * OR IN ANY WAY CONNECTED WITH THIS SOFTWARE, WHETHER OR NOT BASED UPON WARRANTY, 022 * CONTRACT, TORT, OR OTHERWISE, WHETHER OR NOT INJURY WAS SUSTAINED BY PERSONS OR 023 * PROPERTY OR OTHERWISE, AND WHETHER OR NOT LOSS WAS SUSTAINED FROM, OR AROSE OUT 024 * OF THE RESULTS OF, OR USE OF, THE SOFTWARE OR SERVICES PROVIDED HEREUNDER. 025 */ 026 027package gov.nist.secauto.metaschema.core.datatype.adapter; 028 029import com.google.auto.service.AutoService; 030 031import gov.nist.secauto.metaschema.core.datatype.AbstractDataTypeProvider; 032import gov.nist.secauto.metaschema.core.datatype.IDataTypeProvider; 033 034import edu.umd.cs.findbugs.annotations.NonNull; 035 036/** 037 * Provides for runtime discovery of built-in implementations of the core 038 * Metaschema data types. 039 */ 040@AutoService(IDataTypeProvider.class) 041public final class MetaschemaDataTypeProvider // NOPMD - Used for service initialization 042 extends AbstractDataTypeProvider { 043 @NonNull 044 public static final Base64Adapter BASE64 = new Base64Adapter(); 045 @NonNull 046 public static final BooleanAdapter BOOLEAN = new BooleanAdapter(); 047 @NonNull 048 public static final DateAdapter DATE = new DateAdapter(); 049 @NonNull 050 public static final DateWithTZAdapter DATE_WITH_TZ = new DateWithTZAdapter(); 051 @NonNull 052 public static final DateTimeAdapter DATE_TIME = new DateTimeAdapter(); 053 @NonNull 054 public static final DateTimeWithTZAdapter DATE_TIME_WITH_TZ = new DateTimeWithTZAdapter(); 055 @NonNull 056 public static final IPv4AddressAdapter IP_V4_ADDRESS = new IPv4AddressAdapter(); 057 @NonNull 058 public static final IPv6AddressAdapter IP_V6_ADDRESS = new IPv6AddressAdapter(); 059 @NonNull 060 public static final UriAdapter URI = new UriAdapter(); 061 @NonNull 062 public static final UriReferenceAdapter URI_REFERENCE = new UriReferenceAdapter(); 063 @NonNull 064 public static final UuidAdapter UUID = new UuidAdapter(); 065 066 @NonNull 067 public static final DayTimeAdapter DAY_TIME_DURATION = new DayTimeAdapter(); 068 @NonNull 069 public static final YearMonthAdapter YEAR_MONTH_DURATION = new YearMonthAdapter(); 070 071 @NonNull 072 public static final DecimalAdapter DECIMAL = new DecimalAdapter(); 073 @NonNull 074 public static final IntegerAdapter INTEGER = new IntegerAdapter(); 075 @NonNull 076 public static final NonNegativeIntegerAdapter NON_NEGATIVE_INTEGER = new NonNegativeIntegerAdapter(); 077 @NonNull 078 public static final PositiveIntegerAdapter POSITIVE_INTEGER = new PositiveIntegerAdapter(); 079 080 @NonNull 081 public static final EmailAddressAdapter EMAIL_ADDRESS = new EmailAddressAdapter(); 082 @NonNull 083 public static final HostnameAdapter HOSTNAME = new HostnameAdapter(); 084 @NonNull 085 public static final NcNameAdapter NCNAME = new NcNameAdapter(); 086 @NonNull 087 public static final StringAdapter STRING = new StringAdapter(); 088 @NonNull 089 public static final TokenAdapter TOKEN = new TokenAdapter(); 090 091 @NonNull 092 public static final StringAdapter DEFAULT_DATA_TYPE = STRING; 093 094 /** 095 * Initialize the built-in data types. 096 */ 097 public MetaschemaDataTypeProvider() { 098 // The data type "string" must be first since this is the default data type for 099 // the {@link String} 100 // Java type. This ensures that when a data type is resolved that this data type 101 // is matched first 102 // before other String-based data types. 103 registerDatatype(STRING); 104 105 registerDatatype(BASE64); 106 registerDatatype(BOOLEAN); 107 registerDatatype(DATE); 108 registerDatatype(DATE_WITH_TZ); 109 registerDatatype(DATE_TIME); 110 registerDatatype(DATE_TIME_WITH_TZ); 111 registerDatatype(DAY_TIME_DURATION); 112 registerDatatype(DECIMAL); 113 registerDatatype(EMAIL_ADDRESS); 114 registerDatatype(HOSTNAME); 115 registerDatatype(INTEGER); 116 registerDatatype(IP_V4_ADDRESS); 117 registerDatatype(IP_V6_ADDRESS); 118 119 registerDatatype(NON_NEGATIVE_INTEGER); 120 registerDatatype(POSITIVE_INTEGER); 121 registerDatatype(TOKEN); 122 registerDatatype(URI); 123 registerDatatype(URI_REFERENCE); 124 registerDatatype(UUID); 125 registerDatatype(YEAR_MONTH_DURATION); 126 } 127}