com.helger.datetime.holiday.parser.impl.RelativeToFixedParser.java Source code

Java tutorial

Introduction

Here is the source code for com.helger.datetime.holiday.parser.impl.RelativeToFixedParser.java

Source

/**
 * Copyright (C) 2014-2015 Philip Helger (www.helger.com)
 * philip[at]helger[dot]com
 *
 * Licensed 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 com.helger.datetime.holiday.parser.impl;

import org.joda.time.LocalDate;

import com.helger.datetime.holiday.HolidayMap;
import com.helger.datetime.holiday.IHolidayType;
import com.helger.datetime.holiday.ResourceBundleHoliday;
import com.helger.datetime.holiday.config.Holidays;
import com.helger.datetime.holiday.config.RelativeToFixed;
import com.helger.datetime.holiday.config.When;
import com.helger.datetime.holiday.mgr.XMLUtil;
import com.helger.datetime.holiday.parser.AbstractHolidayParser;

/**
 * @author Sven Diedrichsen
 * @author Philip Helger
 */
public class RelativeToFixedParser extends AbstractHolidayParser {
    private static final RelativeToFixedParser s_aInstance = new RelativeToFixedParser();

    private RelativeToFixedParser() {
    }

    public static RelativeToFixedParser getInstance() {
        return s_aInstance;
    }

    public void parse(final int nYear, final HolidayMap aHolidays, final Holidays aConfig) {
        for (final RelativeToFixed aRelativeToFixed : aConfig.getRelativeToFixed()) {
            if (!isValid(aRelativeToFixed, nYear))
                continue;

            LocalDate aFixed = XMLUtil.create(nYear, aRelativeToFixed.getDate());
            if (aRelativeToFixed.getWeekday() != null) {
                // if weekday is set -> move to weekday
                final int nExpectedWeekday = XMLUtil.getWeekday(aRelativeToFixed.getWeekday());
                final int nDirection = (aRelativeToFixed.getWhen() == When.BEFORE ? -1 : 1);
                do {
                    aFixed = aFixed.plusDays(nDirection);
                } while (aFixed.getDayOfWeek() != nExpectedWeekday);
            } else if (aRelativeToFixed.getDays() != null) {
                // if number of days set -> move number of days
                aFixed = aFixed
                        .plusDays(aRelativeToFixed.getWhen() == When.BEFORE ? -aRelativeToFixed.getDays().intValue()
                                : aRelativeToFixed.getDays().intValue());
            }

            final IHolidayType aType = XMLUtil.getType(aRelativeToFixed.getLocalizedType());
            final String sPropertyKey = aRelativeToFixed.getDescriptionPropertiesKey();
            aHolidays.add(aFixed, new ResourceBundleHoliday(aType, sPropertyKey));
        }
    }
}