blob: 48649d15c9159c8b7c4a7bba2691392315ef115f [file] [log] [blame]
/*
* 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.
*/
package org.apache.rya.api.functions;
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkNotNull;
import java.time.temporal.ChronoUnit;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import org.eclipse.rdf4j.model.IRI;
import org.eclipse.rdf4j.model.ValueFactory;
import org.eclipse.rdf4j.model.impl.SimpleValueFactory;
/**
* Constants for OWL-Time primitives in the OWL-Time namespace.
*
*/
public class OWLTime {
private static final ValueFactory VF = SimpleValueFactory.getInstance();
/**
* Indicates namespace of OWL-Time ontology
*/
public static final String NAMESPACE = "http://www.w3.org/2006/time#";
/**
* Seconds class of type DurationDescription in OWL-Time ontology
*/
public static final IRI SECONDS_URI = VF.createIRI(NAMESPACE, "seconds");
/**
* Minutes class of type DurationDescription in OWL-Time ontology
*/
public static final IRI MINUTES_URI = VF.createIRI(NAMESPACE, "minutes");
/**
* Hours class of type DurationDescription in OWL-Time ontology
*/
public static final IRI HOURS_URI = VF.createIRI(NAMESPACE, "hours");
/**
* Days class of type DurationDescription in OWL-Time ontology
*/
public static final IRI DAYS_URI = VF.createIRI(NAMESPACE, "days");
/**
* Weeks class of type DurationDescription in OWL-Time ontology
*/
public static final IRI WEEKS_URI = VF.createIRI(NAMESPACE, "weeks");
private static final Map<IRI, ChronoUnit> DURATION_MAP = new HashMap<>();
static {
DURATION_MAP.put(SECONDS_URI, ChronoUnit.SECONDS);
DURATION_MAP.put(MINUTES_URI, ChronoUnit.MINUTES);
DURATION_MAP.put(HOURS_URI, ChronoUnit.HOURS);
DURATION_MAP.put(DAYS_URI, ChronoUnit.DAYS);
DURATION_MAP.put(WEEKS_URI, ChronoUnit.WEEKS);
}
/**
* Verifies whether URI is a valid OWL-Time URI that is supported by this class.
* @param durationURI - OWLTime URI indicating the time unit (not null)
* @return - {@code true} if this URI indicates a supported OWLTime time unit
*/
public static boolean isValidDurationType(IRI durationURI) {
checkNotNull(durationURI);
return DURATION_MAP.containsKey(durationURI);
}
/**
* Returns the duration in milliseconds
*
* @param duration - amount of time in the units indicated by the provided {@link OWLTime} URI
* @param uri - OWLTime URI indicating the time unit of duration (not null)
* @return - the amount of time in milliseconds
* @throws IllegalArgumentException if provided {@link IRI} is not a valid, supported OWL-Time time unit.
*/
public static long getMillis(int duration, IRI uri) throws IllegalArgumentException {
Optional<ChronoUnit> unit = getChronoUnitFromURI(uri);
checkArgument(unit.isPresent(),
String.format("URI %s does not indicate a valid OWLTime time unit. URI must of be of type %s, %s, %s, %s, or %s .", uri,
SECONDS_URI, MINUTES_URI, HOURS_URI, DAYS_URI, WEEKS_URI));
return duration * unit.get().getDuration().toMillis();
}
/**
* Converts the {@link OWLTime} URI time unit to a {@link ChronoUnit} time unit
*
* @param durationURI - OWLTime time unit URI (not null)
* @return - corresponding ChronoUnit time unit
*/
public static Optional<ChronoUnit> getChronoUnitFromURI(IRI durationURI) {
return Optional.ofNullable(DURATION_MAP.get(durationURI));
}
}