001/* 002 * SPDX-License-Identifier: Apache-2.0 003 * 004 * Copyright 2024-2026 The Enola <https://enola.dev> Authors 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 * https://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 dev.enola.model.enola; 019 020import com.google.common.collect.ImmutableList; 021import com.google.common.primitives.UnsignedLong; 022 023import dev.enola.common.ByteSeq; 024import dev.enola.common.convert.ObjectToStringBiConverters; 025import dev.enola.datatype.Datatype; 026import dev.enola.datatype.ImmutableDatatype; 027import dev.enola.thing.KIRI; 028 029import java.nio.file.attribute.FileTime; 030import java.time.Instant; 031 032/** Enola's built-in core datatypes. */ 033// TODO Doc: <p>See https://enola.dev/datatypes --- once we put something on 034// https://docs.enola.dev/models/datatypes and have a working HTTP redirector. 035public final class Datatypes { 036 037 public static final Datatype<Instant> TIMESTAMP = 038 dev.enola.model.xsd.Datatypes.DATE_TIME 039 .child() 040 .iri("https://enola.dev/Timestamp") 041 .build(); 042 043 public static final Datatype<UnsignedLong> UNSIGNED_LONG = 044 new ImmutableDatatype<>( 045 "https://enola.dev/UnsignedLong", 046 ObjectToStringBiConverters.UNSIGNED_LONG, 047 UnsignedLong.class); 048 049 // IRI_TEMPLATE "https://enola.dev/IRITemplate" isn't really required. 050 051 public static final Datatype<FileTime> FILE_TIME = 052 new ImmutableDatatype<>( 053 "https://enola.dev/FileTime", 054 ObjectToStringBiConverters.FILE_TIME, 055 FileTime.class); 056 057 public static final Datatype<ByteSeq> BINARY = 058 new ImmutableDatatype<>( 059 KIRI.E.BINARY, 060 ObjectToStringBiConverters.MULTIBASE, 061 ByteSeq.class, 062 // NB: Multibase Pattern is also in binary.ttl 063 "[0179fFvVtTbBcChkKRzZmMuUpQ/🚀][^\\s]*"); 064 065 // Beware: The order here matters very much, for DatatypeRepository#match() 066 public static final Iterable<Datatype<?>> ALL = 067 ImmutableList.of(UNSIGNED_LONG, TIMESTAMP, FILE_TIME); 068 069 private Datatypes() {} 070}