Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -304,6 +304,11 @@
</profile>
</profiles>
<dependencies>
<dependency>
<groupId>net.time4j</groupId>
<artifactId>time4j-base</artifactId>
<version>5.2</version>
</dependency>
<dependency>
<groupId>org.threeten</groupId>
<artifactId>threeten-extra</artifactId>
Expand Down
88 changes: 88 additions & 0 deletions src/main/java/de/jollyday/parser/impl/ChineseHolidayParser.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
/*
* Copyright 2010 Sven Diedrichsen
*
* 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 de.jollyday.parser.impl;

import de.jollyday.Holiday;
import de.jollyday.HolidayType;
import de.jollyday.config.ChineseHoliday;
import de.jollyday.config.Holidays;
import de.jollyday.parser.AbstractHolidayParser;
import net.time4j.PlainDate;
import net.time4j.calendar.ChineseCalendar;
import net.time4j.calendar.EastAsianMonth;
import net.time4j.calendar.EastAsianYear;

import java.time.LocalDate;
import java.util.Collections;
import java.util.Set;

/**
* This parser calculates gregorian dates for the different Chinese holidays.
*
* @author Meno Hochschild
* @version $Id: $
*/
public class ChineseHolidayParser extends AbstractHolidayParser {

/**
* Properties prefix for Chinese holidays.
*/
private static final String PREFIX_PROPERTY_CHINESE = "chinese.";

/*
* (non-Javadoc)
*
* @see de.jollyday.parser.HolidayParser#parse(int, java.util.Set,
* de.jollyday.config.Holidays)
*/
/** {@inheritDoc} */
@Override
public void parse(int year, Set<Holiday> holidays, final Holidays config) {
for (ChineseHoliday i : config.getChineseHoliday()) {
if (!isValid(i, year)) {
continue;
}
ChineseCalendar chineseHoliday;
switch (i.getType()) {
case NEW_YEAR:
chineseHoliday = ChineseCalendar.ofNewYear(year);
break;
case QING_MING:
chineseHoliday = ChineseCalendar.ofQingMing(year);
break;
case DRAGON_BOAT:
chineseHoliday = ChineseCalendar.of(EastAsianYear.forGregorian(year), EastAsianMonth.valueOf(5), 5);
break;
case MID_AUTUMN:
chineseHoliday = ChineseCalendar.of(EastAsianYear.forGregorian(year), EastAsianMonth.valueOf(8), 15);
break;
case CHUNG_YEUNG:
chineseHoliday = ChineseCalendar.of(EastAsianYear.forGregorian(year), EastAsianMonth.valueOf(9), 9);
break;
default:
throw new IllegalArgumentException("Unknown islamic holiday " + i.getType());
}
Set<LocalDate> chineseHolidays =
Collections.singleton(chineseHoliday.transform(PlainDate.class).toTemporalAccessor());
String propertiesKey = PREFIX_PROPERTY_CHINESE + i.getType().name();
HolidayType type = xmlUtil.getType(i.getLocalizedType());
for (LocalDate d : chineseHolidays) {
holidays.add(new Holiday(d, propertiesKey, type));
}
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ holiday.description.CYRUS_METHODIUS = Saints Cyril and Methodius
holiday.description.DAY_AFTER_NEW_YEAR = Day after New Year
holiday.description.DAYTON = Dayton Agreement
holiday.description.DEFENDER_FATHERLAND = Defender of the Fatherland
holiday.description.DRAGON_BOAT = Dragon Boat Festival
holiday.description.EDU_CULTURE = Education, Culture and Literature Day
holiday.description.EIGHT = Eight hours day
holiday.description.ELECTION = Election day
Expand Down Expand Up @@ -129,11 +130,12 @@ holiday.description.MAY_DAY = May Day
holiday.description.MAY_REVOLUTION = May Revolution
holiday.description.MELBOURNE_CUP = Melbourne Cup
holiday.description.MEMORIAL = Memorial Day
holiday.description.MID_AUTUMN = Mid-Autumn Festival
holiday.description.MIDSUMMER = Midsummer Day
holiday.description.MIDSUMMER_EVE = Midsummer Eve
holiday.description.MOTHERS_DAY = Mothers Day
holiday.description.MOTHER_TERESA = Beatification of Mother Teresa
holiday.description.MOUNTAIN_DAY=Mountain day
holiday.description.MOUNTAIN_DAY = Mountain day
holiday.description.NATIONAL_DAY = National Day
holiday.description.NATIONAL_UPRISING = National Uprising
holiday.description.NATIVITY_LADY = Nativity of our Lady
Expand All @@ -153,6 +155,7 @@ holiday.description.PLEBISCITE = Day of the plebiscite
holiday.description.PRESEREN = Pre\u0161eren Day
holiday.description.PROCLAMATION = Proclamation Day
holiday.description.PULASKI = Casimir Pulaski Day
holiday.description.QING_MING = Qing Ming Festival
holiday.description.QUEENS_BIRTHDAY = Queen's birthday
holiday.description.RACE = Day of the Race
holiday.description.RECONCILIATION = Day of Reconciliation
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ holiday.description.CYRUS_METHODIUS = Heiligen Cyril und Methodiu
holiday.description.DAY_AFTER_NEW_YEAR = Tag nach Neujahr
holiday.description.DAYTON = Dayton Abkommen
holiday.description.DEFENDER_FATHERLAND = Verteidiger des Vaterlandes
holiday.description.DRAGON_BOAT = Drachenbootfest
holiday.description.EDU_CULTURE = Bildungs-, Kultur- und Literatur-Tag
holiday.description.EIGHT = Acht Stunden Tag
holiday.description.ELECTION = Wahltag
Expand Down Expand Up @@ -129,11 +130,12 @@ holiday.description.MAY_DAY = Mai-Tag
holiday.description.MAY_REVOLUTION = Mai Revolution
holiday.description.MELBOURNE_CUP = Melbourne Cup
holiday.description.MEMORIAL = Gedenktag
holiday.description.MIDSUMMER = Midsommer
holiday.description.MIDSUMMER_EVE = Midsommerabend
holiday.description.MID_AUTUMN = Mondfest
holiday.description.MIDSUMMER = Mittsommer
holiday.description.MIDSUMMER_EVE = Mittsommerabend
holiday.description.MOTHERS_DAY = Muttertag
holiday.description.MOTHER_TERESA = Seligsprechung von Mutter Teresa
holiday.description.MOUNTAIN_DAY=Tag des Berges
holiday.description.MOUNTAIN_DAY = Tag des Berges
holiday.description.NATIONAL_DAY = Nationalfeiertag
holiday.description.NATIONAL_UPRISING = Tag des nationalen Widerstandes
holiday.description.NATIVITY_LADY = Mari\u00E4 Geburt
Expand All @@ -153,7 +155,8 @@ holiday.description.PLEBISCITE = Tag der Volksabstimmung
holiday.description.PRESEREN = Pre\u0161eren Tag
holiday.description.PROCLAMATION = Proklamationstag
holiday.description.PULASKI = Casimir Pulaski Tag
holiday.description.QUEENS_BIRTHDAY=Geburtstag der K\u00F6nigin
holiday.description.QING_MING = Qingming-Fest
holiday.description.QUEENS_BIRTHDAY = Geburtstag der K\u00F6nigin
holiday.description.RACE = Kolumbus-Tag
holiday.description.RECONCILIATION = Tag der Vers\u00F6hnung
holiday.description.RECREATION = Erholungstag
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ holiday.description.CYRUS_METHODIUS = Saints Cyril and Methodius
holiday.description.DAY_AFTER_NEW_YEAR = Day after New Year
holiday.description.DAYTON = Dayton Agreement
holiday.description.DEFENDER_FATHERLAND = Defender of the Fatherland
holiday.description.DRAGON_BOAT = Dragon Boat Festival
holiday.description.EDU_CULTURE = Education, Culture and Literature Day
holiday.description.EIGHT = Eight hours day
holiday.description.ELECTION = Election day
Expand Down Expand Up @@ -129,6 +130,7 @@ holiday.description.MAY_DAY = May Day
holiday.description.MAY_REVOLUTION = May Revolution
holiday.description.MELBOURNE_CUP = Melbourne Cup
holiday.description.MEMORIAL = Memorial Day
holiday.description.MID_AUTUMN = Mid-Autumn Festival
holiday.description.MIDSUMMER = Midsummer Day
holiday.description.MIDSUMMER_EVE = Midsummer Eve
holiday.description.MOTHERS_DAY = Mothers Day
Expand All @@ -153,6 +155,7 @@ holiday.description.PLEBISCITE = Day of the plebiscite
holiday.description.PRESEREN = Pre\u0161eren Day
holiday.description.PROCLAMATION = Proclamation Day
holiday.description.PULASKI = Casimir Pulaski Day
holiday.description.QING_MING = Tomb-Sweeping Day
holiday.description.QUEENS_BIRTHDAY = Queen's birthday
holiday.description.RACE = Day of the Race
holiday.description.RECONCILIATION = Day of Reconciliation
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ holiday.description.CYRUS_METHODIUS = Jour de Saint Cyril et Meth
holiday.description.DAY_AFTER_NEW_YEAR = Jour après le Nouvel An
holiday.description.DAYTON = Accord de Dayton
holiday.description.DEFENDER_FATHERLAND = D\u00E9tenteur de la Patrie
holiday.description.DRAGON_BOAT = F\u00EAte des bateaux dragons
holiday.description.EDU_CULTURE = Journ\u00E9e de l'Education, de la Culture et de la Lit\u00E9rature
holiday.description.EIGHT = Journ\u00E9e de huit heures
holiday.description.ELECTION = Jour des Elections
Expand Down Expand Up @@ -130,11 +131,12 @@ holiday.description.MAY_DAY = May Day
holiday.description.MAY_REVOLUTION = May Revolution
holiday.description.MELBOURNE_CUP = Melbourne Cup
holiday.description.MEMORIAL = Memorial Day
holiday.description.MID_AUTUMN = F\u00EAte de la mi-automne
holiday.description.MIDSUMMER = Midsummer Day
holiday.description.MIDSUMMER_EVE = Midsummer Eve
holiday.description.MOTHERS_DAY = Mothers Day
holiday.description.MOTHER_TERESA = Beatification of Mother Teresa
holiday.description.MOUNTAIN_DAY=Journée de montagne
holiday.description.MOUNTAIN_DAY = Journée de montagne
holiday.description.NATIONAL_DAY = F\u00EAte nationale
holiday.description.NATIONAL_UPRISING = National Uprising
holiday.description.NATIVITY_LADY = Nativity of our Lady
Expand All @@ -154,6 +156,7 @@ holiday.description.PLEBISCITE = Day of the plebiscite
holiday.description.PRESEREN = Pre\u0161eren Day
holiday.description.PROCLAMATION = Proclamation Day
holiday.description.PULASKI = Casimir Pulaski Day
holiday.description.QING_MING = F\u00EAte de Qing Ming
holiday.description.QUEENS_BIRTHDAY = Queen's birthday
holiday.description.RACE = Day of the Race
holiday.description.RECONCILIATION = Day of Reconciliation
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ holiday.description.CYRUS_METHODIUS = Cyrillus en Methodius dag
holiday.description.DAY_AFTER_NEW_YEAR = Dag na Nieuwjaar
holiday.description.DAYTON = Dayton-akkoord
holiday.description.DEFENDER_FATHERLAND = De verdediger van het vaderland
holiday.description.DRAGON_BOAT = Drakenbootfeest
holiday.description.EDU_CULTURE = Onderwijs, cultuur en literatuurdag
holiday.description.EIGHT = acht uurs-dag
holiday.description.ELECTION = Dag van de verkiezingen
Expand Down Expand Up @@ -129,6 +130,7 @@ holiday.description.MAY_DAY = Mei-dag
holiday.description.MAY_REVOLUTION = Mei-revolutie
holiday.description.MELBOURNE_CUP = Melbourne Cup
holiday.description.MEMORIAL = Dag ter nagedachtenis
holiday.description.MID_AUTUMN = Midherfstfestival
holiday.description.MIDSUMMER = Midzomerdag
holiday.description.MIDSUMMER_EVE = Midzomeravond
holiday.description.MOTHERS_DAY = Moederdag
Expand All @@ -153,6 +155,7 @@ holiday.description.PLEBISCITE = Dag van de volksraadpleging
holiday.description.PRESEREN = Pre\u0161eren Dag
holiday.description.PROCLAMATION = Proclamatiedag
holiday.description.PULASKI = Casimir Pulaski Dag
holiday.description.QING_MING = Qingmingfestival
holiday.description.QUEENS_BIRTHDAY = Koninginnedag
holiday.description.RACE = Dag van de race
holiday.description.RECONCILIATION = Dag van de verzoening
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ holiday.description.CYRUS_METHODIUS = Dia dos Santos Cyril e Meth
holiday.description.DAY_AFTER_NEW_YEAR = Dia após o Ano Novo
holiday.description.DAYTON = Acordo de Dayton
holiday.description.DEFENDER_FATHERLAND = Defender of the Fatherland
holiday.description.DRAGON_BOAT = Festival do Barco do Drag\u00E3o
holiday.description.EDU_CULTURE = Dia da Educa\u00E7\u00E3o, da Cultura e da Literatura
holiday.description.EIGHT = Eight hours day
holiday.description.ELECTION = Dia de Elei\u00E7\u00F5es
Expand Down Expand Up @@ -130,6 +131,7 @@ holiday.description.MAY_DAY = May Day
holiday.description.MAY_REVOLUTION = Revolu\u00E7\u00E3o de Maio
holiday.description.MELBOURNE_CUP = Ta\u00E7a Melbourne
holiday.description.MEMORIAL = Memorial Day
holiday.description.MID_AUTUMN = Festival da Lua
holiday.description.MIDSUMMER = Dia do Solest\u00EDcio de Ver\u00E3o
holiday.description.MIDSUMMER_EVE = Solest\u00EDcio de Ver\u00E3o
holiday.description.MOTHERS_DAY = Dia da M\u00E3e
Expand All @@ -154,6 +156,7 @@ holiday.description.PLEBISCITE = Day of the plebiscite
holiday.description.PRESEREN = Pre\u0161eren Day
holiday.description.PROCLAMATION = Dia da Proclama\u00E7\u00E3o
holiday.description.PULASKI = Casimir Pulaski Day
holiday.description.QING_MING = Festival Qingming
holiday.description.QUEENS_BIRTHDAY = Anivers\u00E1rio da Rainha
holiday.description.RACE = Dia da Corrida
holiday.description.RECONCILIATION = Dia da Reconcilia\u00E7\u00E3o
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ holiday.description.CYRUS_METHODIUS = Saints Cyril and Methodius
holiday.description.DAY_AFTER_NEW_YEAR = Day after New Year
holiday.description.DAYTON = Dayton Agreement
holiday.description.DEFENDER_FATHERLAND = Defender of the Fatherland
holiday.description.DRAGON_BOAT = Dragon Boat Festival
holiday.description.EDU_CULTURE = Education, Culture and Literature Day
holiday.description.EIGHT = Eight hours day
holiday.description.ELECTION = Election day
Expand Down Expand Up @@ -130,6 +131,7 @@ holiday.description.MAY_DAY = May Day
holiday.description.MAY_REVOLUTION = May Revolution
holiday.description.MELBOURNE_CUP = Melbourne Cup
holiday.description.MEMORIAL = Memorial Day
holiday.description.MID_AUTUMN = Mid-Autumn Festival
holiday.description.MIDSUMMER = Midsummer Day
holiday.description.MIDSUMMER_EVE = Midsummer Eve
holiday.description.MOTHERS_DAY = Mothers Day
Expand All @@ -154,6 +156,7 @@ holiday.description.PLEBISCITE = Day of the plebiscite
holiday.description.PRESEREN = Pre\u0161eren Day
holiday.description.PROCLAMATION = Proclamation Day
holiday.description.PULASKI = Casimir Pulaski Day
holiday.description.QING_MING = Qing Ming Festival
holiday.description.QUEENS_BIRTHDAY = Queen's birthday
holiday.description.RACE = Day of the Race
holiday.description.RECONCILIATION = Day of Reconciliation
Expand Down
19 changes: 19 additions & 0 deletions src/main/resources/holidays/Holidays_zh.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<tns:Configuration hierarchy="zh" description="China"
xmlns:tns="http://www.example.org/Holiday" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.org/Holiday/Holiday.xsd">
<tns:Holidays>
<tns:Fixed month="JANUARY" day="1" descriptionPropertiesKey="NEW_YEAR"/>
<tns:Fixed month="MAY" day="1" descriptionPropertiesKey="LABOUR_DAY"/>
<tns:Fixed month="OCTOBER" day="1" descriptionPropertiesKey="NATIONAL_DAY"/>
<tns:ChineseHoliday type="NEW_YEAR" descriptionPropertiesKey="NEW_YEAR"/>
<tns:ChineseHoliday type="QING_MING" descriptionPropertiesKey="QING_MING"/>
<tns:ChineseHoliday type="DRAGON_BOAT" descriptionPropertiesKey="DRAGON_BOAT"/>
<tns:ChineseHoliday type="MID_AUTUMN" descriptionPropertiesKey="MID_AUTUMN"/>
</tns:Holidays>
<tns:SubConfigurations hierarchy="hk" description="Hongkong">
<tns:Holidays>
<tns:ChineseHoliday type="CHUNG_YEUNG"/>
</tns:Holidays>
</tns:SubConfigurations>
</tns:Configuration>
1 change: 1 addition & 0 deletions src/main/resources/jollyday.properties
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ configuration.datasource.impl=de.jollyday.datasource.impl.XmlFileDataSource
# Configure the parsers to be used for each individual configuration type
parser.impl.de.jollyday.config.Fixed=de.jollyday.parser.impl.FixedParser
parser.impl.de.jollyday.config.FixedWeekdayInMonth=de.jollyday.parser.impl.FixedWeekdayInMonthParser
parser.impl.de.jollyday.config.ChineseHoliday=de.jollyday.parser.impl.ChineseHolidayParser
parser.impl.de.jollyday.config.IslamicHoliday=de.jollyday.parser.impl.IslamicHolidayParser
parser.impl.de.jollyday.config.ChristianHoliday=de.jollyday.parser.impl.ChristianHolidayParser
parser.impl.de.jollyday.config.RelativeToFixed=de.jollyday.parser.impl.RelativeToFixedParser
Expand Down
Loading