/** * Licensed to The Apereo Foundation under one or more contributor license * agreements. See the NOTICE file distributed with this work for additional * information regarding copyright ownership. * * * The Apereo Foundation licenses this file to you under the Educational * Community 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://opensource.org/licenses/ecl2.txt * * 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.opencastproject.metadata.dublincore; import com.entwinemedia.fn.Fn; import java.util.Date; import javax.annotation.Nonnull; import javax.annotation.ParametersAreNonnullByDefault; /** * Collection of metadata encoding functions following Opencast rules. */ @ParametersAreNonnullByDefault public final class OpencastMetadataCodec { private OpencastMetadataCodec() { } /** Encode a date with day precision. */ @Nonnull public static DublinCoreValue encodeDate(Date date) { return EncodingSchemeUtils.encodeDate(date, Precision.Day); } /** Encode a date with a given precision. */ @Nonnull public static DublinCoreValue encodeDate(Date date, Precision p) { return EncodingSchemeUtils.encodeDate(date, p); } /** Decode a W3C-DTF encoded date. */ @Nonnull public static Date decodeDate(String date) { return EncodingSchemeUtils.decodeMandatoryDate(date); } /** {@link OpencastMetadataCodec#decodeDate(java.lang.String)} as a function. */ public static final Fn<String, Date> decodeDate = new Fn<String, Date>() { @Override public Date apply(String a) { return decodeDate(a); } }; /** Encode a duration. */ @Nonnull public static DublinCoreValue encodeDuration(long ms) { return EncodingSchemeUtils.encodeDuration(ms); } /** Decode a duration. */ public static long decodeDuration(String ms) { return EncodingSchemeUtils.decodeMandatoryDuration(ms); } /** {@link OpencastMetadataCodec#decodeDuration(String)} as a function. */ public static final Fn<String, Long> decodeDuration = new Fn<String, Long>() { @Override public Long apply(String a) { return decodeDuration(a); } }; /** Encode a period with a given precision. */ @Nonnull public static DublinCoreValue encodePeriod(Date from, Date to, Precision precision) { return EncodingSchemeUtils.encodePeriod(new DCMIPeriod(from, to), precision); } /** Decode a period. */ @Nonnull public static DCMIPeriod decodePeriod(String period) { return EncodingSchemeUtils.decodeMandatoryPeriod(period); } /** Decode a temporal value. */ @Nonnull public static Temporal decodeTemporal(DublinCoreValue temporal) { return EncodingSchemeUtils.decodeMandatoryTemporal(temporal); } /** {@link OpencastMetadataCodec#decodeTemporal(DublinCoreValue)} as a function. */ @Nonnull public static final Fn<DublinCoreValue, Temporal> decodeTemporal = new Fn<DublinCoreValue, Temporal>() { @Override public Temporal apply(DublinCoreValue a) { return decodeTemporal(a); } }; private static String toStr(String s) { return s != null ? s : ""; } }