blob: 447315e899cf55bc912a5fafa6162613e93fce42 [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.jackrabbit.oak.benchmark.util;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Collections;
import java.util.List;
import java.util.Random;
import java.util.TimeZone;
/**
* Enumerates some Calendar with math applied for easying tests
*/
public enum Date {
/**
* what could be considered the current timestamp
*/
NOW(Calendar.getInstance()),
/**
* given {@code NOW} less 2 hours
*/
LAST_2_HRS(add(NOW.getCalendar(), Calendar.HOUR_OF_DAY, -2)),
/**
* given {@code NOW} less 24 hours
*/
LAST_24_HRS(add(NOW.getCalendar(), Calendar.HOUR_OF_DAY, -24)),
/**
* given {@code NOW} less 1 week
*/
LAST_7_DAYS(add(NOW.getCalendar(), Calendar.HOUR_OF_DAY, -24*7)),
/**
* given {@code NOW} less 1 month
*/
LAST_MONTH(add(NOW.getCalendar(), Calendar.MONTH, -1)),
/**
* given {@code NOW} less 1 year
*/
LAST_YEAR(add(NOW.getCalendar(), Calendar.YEAR, -1));
/**
* perform math on the provided calendar and return it.
*
* @param cal the calendar to add value to
* @param field the field to change
* @param amount the amount to be added
* @return the changed calendar
*/
private static Calendar add(Calendar cal, int field, int amount) {
cal.add(field, amount);
return cal;
}
private final Calendar cal;
Date(Calendar cal) {
this.cal = cal;
}
public Calendar getCalendar() {
// duplicating the calendar for allowing safe operations from consumers
Calendar c = Calendar.getInstance();
c.setTime(cal.getTime());
return c;
}
public String toISO_8601_2000() {
return convertToISO_8601_2000(getCalendar());
}
private static final List<Date> VALUES = Collections.unmodifiableList(Arrays.asList(values()));
private static final int SIZE = VALUES.size();
private static final Random RND = new Random(30);
/**
* return a random Date
*
* @return the date
*/
public static Date randomDate() {
return VALUES.get(RND.nextInt(SIZE));
}
public static String convertToISO_8601_2000(Calendar cal) {
SimpleDateFormat format = new SimpleDateFormat(
"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
format.setTimeZone(TimeZone.getTimeZone("GMT"));
return format.format(cal.getTime());
}
}