/**
* 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.oaipmh;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
/**
* General purpose functions for OAI-PMH.
*/
public final class OaiPmhUtil {
private OaiPmhUtil() {
}
/**
* Convert a date into a UTC string of the given granularity.
*/
public static String toUtc(Date d, Granularity g) {
if (d != null) {
switch (g) {
case SECOND:
return toUtcSecond(d);
case DAY:
return toUtcDay(d);
default:
throw new RuntimeException("bug");
}
} else {
return null;
}
}
/**
* Convert to a UTC date and time string (granularity is "second").
*/
public static String toUtcSecond(Date d) {
return newDateTimeFormat().format(d);
}
/**
* Convert to a UTC date string containing only the day (granularity is "day").
*/
public static String toUtcDay(Date d) {
return newDateFormat().format(d);
}
/**
* Convert to a date from a UTC string with either day or second granularity.
* @throws ParseException
* malformed date string
*/
public static Date fromUtc(String d) throws ParseException {
try {
return newDateTimeFormat().parse(d);
} catch (ParseException e) {
return newDateFormat().parse(d);
}
}
public static DateFormat newDateTimeFormat() {
SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
f.setTimeZone(TimeZone.getTimeZone("UTC"));
return f;
}
public static DateFormat newDateFormat() {
SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd");
f.setTimeZone(TimeZone.getTimeZone("UTC"));
return f;
}
private static final String GRANULARITY_DAY = "YYYY-MM-DD";
private static final String GRANULARITY_SECOND = "YYYY-MM-DDThh:mm:ssZ";
/**
* Convert from a OAI representation.
* See the <a href="http://www.openarchives.org/OAI/openarchivesprotocol.html#Identify">spec</a> for
* further details.
*
* @throws IllegalArgumentException
* oai is not valid representation
*/
public static Granularity fromOaiRepresentation(String oai) {
if (GRANULARITY_DAY.equals(oai))
return Granularity.DAY;
if (GRANULARITY_SECOND.equals(oai))
return Granularity.SECOND;
throw new IllegalArgumentException(oai + " is not a valid representation");
}
public static String toOaiRepresentation(Granularity g) {
switch (g) {
case DAY: return GRANULARITY_DAY;
case SECOND: return GRANULARITY_SECOND;
default: throw new RuntimeException("bug");
}
}
}