com.xpn.xwiki.criteria.impl.Period.java Source code

Java tutorial

Introduction

Here is the source code for com.xpn.xwiki.criteria.impl.Period.java

Source

/*
 * See the NOTICE file distributed with this work for additional
 * information regarding copyright ownership.
 *
 * This is free software; you can redistribute it and/or modify it
 * under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation; either version 2.1 of
 * the License, or (at your option) any later version.
 *
 * This software is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this software; if not, write to the Free
 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
 * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
 *
 */

package com.xpn.xwiki.criteria.impl;

import org.joda.time.Interval;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;

/**
 * Immutable period for retrieving statistics. A period of time is uniquely identified by its bounds, and not by its
 * span. Two periods of time with the same span are different if they don't start at the same time.
 */
public class Period {
    /**
     * Formatter associated with periods that have less than a month
     */
    private static final DateTimeFormatter DAY_PERIOD_FORMATTER = DateTimeFormat.forPattern("yyyyMMdd");

    /**
     * Formatter associated with periods that have at least one month
     */
    private static final DateTimeFormatter MONTH_PERIOD_FORMATTER = DateTimeFormat.forPattern("yyyyMM");

    private Interval interval;

    /**
     * Creates a new time Period from the specified start time to the specified end time. Both ends of the period are
     * given as time stamps (the number of milliseconds from 1970-01-01T00:00:00Z)
     * 
     * @param start The period start as the number of milliseconds from 1970-01-01T00:00:00Z
     * @param end The period end as the number of milliseconds from 1970-01-01T00:00:00Z
     */
    public Period(long start, long end) {
        this.interval = new Interval(start, end);
    }

    /**
     * @return The period start as the number of milliseconds from 1970-01-01T00:00:00Z
     */
    public long getStart() {
        return this.interval.getStartMillis();
    }

    /**
     * @return The period end as the number of milliseconds from 1970-01-01T00:00:00Z
     */
    public long getEnd() {
        return this.interval.getEndMillis();
    }

    /**
     * @return The start of the period formatted with the associated formatter. Usually this is how the start of the
     *         period is stored in the database.
     * @see #getFormatter()
     */
    public int getStartCode() {
        return Integer.parseInt(getFormatter().print(this.interval.getStart()));
    }

    /**
     * @return The end of the period formatted with the associated formatter. Usually this is how the end of the period
     *         is stored in the database.
     * @see #getFormatter()
     */
    public int getEndCode() {
        return Integer.parseInt(getFormatter().print(this.interval.getEnd()));
    }

    /**
     * @return The formatter associated with this Period instance
     * @see #DAY_PERIOD_FORMATTER
     * @see #MONTH_PERIOD_FORMATTER
     */
    private DateTimeFormatter getFormatter() {
        if (this.interval.toPeriod().getMonths() >= 1) {
            return MONTH_PERIOD_FORMATTER;
        }
        return DAY_PERIOD_FORMATTER;
    }
}