/**
* This file is part of Archiv-Editor.
*
* The software Archiv-Editor serves as a client user interface for working with
* the Person Data Repository. See: pdr.bbaw.de
*
* The software Archiv-Editor was developed at the Berlin-Brandenburg Academy
* of Sciences and Humanities, Jägerstr. 22/23, D-10117 Berlin.
* www.bbaw.de
*
* Copyright (C) 2010-2013 Berlin-Brandenburg Academy
* of Sciences and Humanities
*
* The software Archiv-Editor was developed by @author: Christoph Plutte.
*
* Archiv-Editor 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 3 of the License, or
* (at your option) any later version.
*
* Archiv-Editor 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 Archiv-Editor.
* If not, see <http://www.gnu.org/licenses/lgpl-3.0.html>.
*/
package org.bbaw.pdr.dates;
import java.util.Calendar;
import java.util.GregorianCalendar;
/**
* DatesUtils enthält die statischen Methoden zur Datumserkennung.
* D.h. zur Kodierung des Originaltextes,
* zur Erkennung von Datumsangaben aus dem kodierten Text,
* zur Formatierung der erkannten Angaben ins ISO-Format.
* @author Martin Fechner
*/
class DatesToolsIt extends DatesTools
{
// METHODEN
/**
* Kodiert einen italienischen Originaltext durch die aufgeführten Kodes
* und schreibt den Kode in den kodierten Text.
* @param result Das zu bearbeitende DatesResult-Objekt.
*/
private static void code(DatesResult result){
for (int i=0; i<result.length(); i++){
code(result, i, DatesConstantsIt.word); // muss vorne stehen,
// da bestimmte worte nochmal neu kodiert werden.
code(result, i, DatesConstantsIt.space);
code(result, i, DatesConstantsIt.miscellaneous);
code(result, i, DatesConstantsIt.Other);
code(result, i, DatesConstantsIt.punctuation);
code(result, i, DatesConstantsIt.d); // muss vor den anderen Zahlen
// stehen, da die nochmal neu kodiert werden.
code(result, i, DatesConstantsIt.ordinalIndicator);
code(result, i, DatesConstantsIt.apostrophe);
// Zahlen
code(result, i, DatesConstantsIt.d1);
code(result, i, DatesConstantsIt.d2);
code(result, i, DatesConstantsIt.d3);
code(result, i, DatesConstantsIt.d4);
// spezielle Worte
code(result, i, DatesConstantsIt.link);
code(result, i, DatesConstantsIt.article);
code(result, i, DatesConstantsIt.of);
code(result, i, DatesConstantsIt.from);
code(result, i, DatesConstantsIt.to);
code(result, i, DatesConstantsIt.notBefore);
code(result, i, DatesConstantsIt.notAfterFirst);
code(result, i, DatesConstantsIt.around);
code(result, i, DatesConstantsIt.at);
code(result, i, DatesConstantsIt.atNext);
code(result, i, DatesConstantsIt.year);
code(result, i, DatesConstantsIt.day);
code(result, i, DatesConstantsIt.and);
code(result, i, DatesConstantsIt.Between);
code(result, i, DatesConstantsIt.approximation);
code(result, i, DatesConstantsIt.half);
// Zahlworte
code(result, i, DatesConstantsIt.ordinal01);
code(result, i, DatesConstantsIt.ordinal02);
// Namen
code(result, i, DatesConstantsIt.saint);
code(result, i, DatesConstantsIt.maria);
code(result, i, DatesConstantsIt.Jesus);
code(result, i, DatesConstantsIt.stephan);
code(result, i, DatesConstantsIt.silvester);
code(result, i, DatesConstantsIt.valetine);
code(result, i, DatesConstantsIt.all);
// Wochentage
code(result, i, DatesConstantsIt.monday);
code(result, i, DatesConstantsIt.tuesday);
code(result, i, DatesConstantsIt.wednesday);
code(result, i, DatesConstantsIt.thursday);
code(result, i, DatesConstantsIt.friday);
code(result, i, DatesConstantsIt.saturday);
code(result, i, DatesConstantsIt.sunday);
// Tage
code(result, i, DatesConstantsIt.cardinal02);
code(result, i, DatesConstantsIt.cardinal03);
code(result, i, DatesConstantsIt.cardinal04);
code(result, i, DatesConstantsIt.cardinal05);
code(result, i, DatesConstantsIt.cardinal06);
code(result, i, DatesConstantsIt.cardinal07);
code(result, i, DatesConstantsIt.cardinal08);
code(result, i, DatesConstantsIt.cardinal09);
code(result, i, DatesConstantsIt.cardinal10);
code(result, i, DatesConstantsIt.cardinal11);
code(result, i, DatesConstantsIt.cardinal12);
code(result, i, DatesConstantsIt.cardinal13);
code(result, i, DatesConstantsIt.cardinal14);
code(result, i, DatesConstantsIt.cardinal15);
code(result, i, DatesConstantsIt.cardinal16);
code(result, i, DatesConstantsIt.cardinal17);
code(result, i, DatesConstantsIt.cardinal18);
code(result, i, DatesConstantsIt.cardinal19);
code(result, i, DatesConstantsIt.cardinal20);
code(result, i, DatesConstantsIt.cardinal21);
code(result, i, DatesConstantsIt.cardinal22);
code(result, i, DatesConstantsIt.cardinal23);
code(result, i, DatesConstantsIt.cardinal24);
code(result, i, DatesConstantsIt.cardinal25);
code(result, i, DatesConstantsIt.cardinal26);
code(result, i, DatesConstantsIt.cardinal27);
code(result, i, DatesConstantsIt.cardinal28);
code(result, i, DatesConstantsIt.cardinal29);
code(result, i, DatesConstantsIt.cardinal30);
code(result, i, DatesConstantsIt.cardinal31);
// Monate
code(result, i, DatesConstantsIt.month01);
code(result, i, DatesConstantsIt.month02);
code(result, i, DatesConstantsIt.month03);
code(result, i, DatesConstantsIt.month04);
code(result, i, DatesConstantsIt.month05);
code(result, i, DatesConstantsIt.month06);
code(result, i, DatesConstantsIt.month07);
code(result, i, DatesConstantsIt.month08);
code(result, i, DatesConstantsIt.month09);
code(result, i, DatesConstantsIt.month10);
code(result, i, DatesConstantsIt.month11);
code(result, i, DatesConstantsIt.month12);
// Jahreszeiten
code(result, i, DatesConstantsIt.spring);
code(result, i, DatesConstantsIt.summer);
code(result, i, DatesConstantsIt.autumn);
code(result, i, DatesConstantsIt.winter);
// Feste
code(result, i, DatesConstantsIt.newYear);
code(result, i, DatesConstantsIt.epiphany);
code(result, i, DatesConstantsIt.valetine);
code(result, i, DatesConstantsIt.ferragosto);
code(result, i, DatesConstantsIt.allHallows);
code(result, i, DatesConstantsIt.allSouls);
code(result, i, DatesConstantsIt.immaculateConception);
code(result, i, DatesConstantsIt.christmas);
code(result, i, DatesConstantsIt.assumption);
// Feiertage
code(result, i, DatesConstantsIt.carnivalWeek);
code(result, i, DatesConstantsIt.carnival);
code(result, i, DatesConstantsIt.palmSunday);
code(result, i, DatesConstantsIt.easter);
code(result, i, DatesConstantsIt.easterMonday);
code(result, i, DatesConstantsIt.angel);
code(result, i, DatesConstantsIt.ascension);
code(result, i, DatesConstantsIt.pentecost);
code(result, i, DatesConstantsIt.corpusChristi);
// Jahrhundert
code(result, i, DatesConstantsIt.century);
code(result, i, DatesConstantsIt.century16th);
code(result, i, DatesConstantsIt.century17th);
code(result, i, DatesConstantsIt.century18th);
code(result, i, DatesConstantsIt.century19th);
code(result, i, DatesConstantsIt.century20th);
code(result, i, DatesConstantsIt.ordinal06);
code(result, i, DatesConstantsIt.ordinal07);
code(result, i, DatesConstantsIt.ordinal08);
code(result, i, DatesConstantsIt.ordinal09);
code(result, i, DatesConstantsIt.ordinal10);
code(result, i, DatesConstantsIt.ordinal16);
code(result, i, DatesConstantsIt.ordinal17);
code(result, i, DatesConstantsIt.ordinal18);
code(result, i, DatesConstantsIt.ordinal19);
code(result, i, DatesConstantsIt.ordinal20);
code(result, i, DatesConstantsIt.ordinal21);
}
}
/**
* Erkennt die aufgeführten Muster für italienische Datumsangaben
* im Kode und schreibt die passenden Bezeichner in erkannterText.
* @param result Das zu bearbeitende DatesResult-Objekt.
*/
private static void identify(DatesResult result){
// zuerst einfache Datumsangaben
identifyDate(result, DatesSymbolsIt.day_art_month_art_yyyy);
identifyDate(result, DatesSymbolsIt.dd_art_month_art_yyyy);
identifyDate(result, DatesSymbolsIt.day_month_art_yyyy);
identifyDate(result, DatesSymbolsIt.ddp_month_art_yyyy);
identifyDate(result, DatesSymbolsIt.dd_month_art_yyyy);
identifyDate(result, DatesSymbolsIt.day_art_monthp_yyyy);
identifyDate(result, DatesSymbolsIt.dd_art_monthp_yyyy);
identifyDate(result, DatesSymbolsIt.day_monthp_yyyy);
identifyDate(result, DatesSymbolsIt.ddp_monthp_yyyy);
identifyDate(result, DatesSymbolsIt.dd_monthp_yyyy);
identifyDate(result, DatesSymbolsIt.day_art_month_yyyy);
identifyDate(result, DatesSymbolsIt.dd_art_month_yyyy);
identifyDate(result, DatesSymbolsIt.day_month_yyyy);
identifyDate(result, DatesSymbolsIt.ddp_month_yyyy);
identifyDate(result, DatesSymbolsIt.dd_month_yyyy);
identifyDate(result, DatesSymbolsIt.ddpmonthpyyyy);
identifyDate(result, DatesSymbolsIt.ddpmmpyyyy);
identifyDate(result, DatesSymbolsIt.ddummuyyyy);
identifyDate(result, DatesSymbolsIt.month_artpyear_yyyy);
identifyDate(result, DatesSymbolsIt.month_art_yyyy);
identifyDate(result, DatesSymbolsIt.monthp_yyyy);
identifyDate(result, DatesSymbolsIt.month_yyyy);
identifyDate(result, DatesSymbolsIt.year_yyyy);
identifyDate(result, DatesSymbolsIt.yyyy);
// Jahreszeiten
identifyDate(result, DatesSymbolsIt.season_art_yyyy);
identifyDate(result, DatesSymbolsIt.season_yyyy);
// Feiertage und Feste
identifyDate(result, DatesSymbolsIt.day_artpyear_yyyy);
identifyDate(result, DatesSymbolsIt.assumption_art_maria_yyyy);
identifyDate(result, DatesSymbolsIt.all_art_hallows_yyyy);
identifyDate(result, DatesSymbolsIt.all_art_souls_yyyy);
identifyDate(result, DatesSymbolsIt.immaculate_conception_yyyy);
identifyDate(result, DatesSymbolsIt.weekday_carnival_yyyy);
identifyDate(result, DatesSymbolsIt.art_palmsunday_yyyy);
identifyDate(result, DatesSymbolsIt.weekday_art_palmsunday_yyyy);
identifyDate(result, DatesSymbolsIt.weekday_st_yyyy);
identifyDate(result, DatesSymbolsIt.weekday_artpeaster_yyyy);
identifyDate(result, DatesSymbolsIt.weekday_art_pentecost_yyyy);
identifyDate(result, DatesSymbolsIt.ascension_art_jesus_yyyy);
identifyDate(result, DatesSymbolsIt.corpus_christi_yyyy);
identifyDate(result, DatesSymbolsIt.st_name_yyyy);
identifyDate(result, DatesSymbolsIt.holyday_yyyy);
// weiteres
identifyDate(result, DatesSymbolsIt.yyyyp_dd_monthp);
identifyDate(result, DatesSymbolsIt.ord_century);
identifyDate(result, DatesSymbolsIt.no_century);
identifyDate(result, DatesSymbolsIt.ordo_century);
identifyDate(result, DatesSymbolsIt.century_ord);
identifyDate(result, DatesSymbolsIt.century_ordo);
identifyDate(result, DatesSymbolsIt.centuryp_ord);
identifyDate(result, DatesSymbolsIt.century_ord_ord);
identifyDate(result, DatesSymbolsIt.ncentury);
if (identifyDate(result, DatesSymbolsIt.aposyyy))
{
identifyPrePhrase(result, DatesSymbolsIt.ord_half_art);
identifyPrePhrase(result, DatesSymbolsIt.approx_art);
identifyPrePhrase(result, DatesSymbolsIt.limit_art);
identifyPrePhrase(result, DatesSymbolsIt.limit_at);
identifyPrePhrase(result, DatesSymbolsIt.lim);
identifyPrePhrase(result, DatesSymbolsIt.art);
identifyConnection(result, DatesSymbolsIt.connect);
identifyPrePhrase(result, DatesSymbolsIt.at);
}
// mögliche Angaben vor einfachen Datumsangaben
identifyPrePhrase(result, DatesSymbolsIt.ord_half_art_);
identifyPrePhrase(result, DatesSymbolsIt.ord_half_artp);
identifyPrePhrase(result, DatesSymbolsIt.ord_half_);
identifyPrePhrase(result, DatesSymbolsIt.approx_art_);
identifyPrePhrase(result, DatesSymbolsIt.approx_artp);
identifyPrePhrase(result, DatesSymbolsIt.approx_);
identifyPrePhrase(result, DatesSymbolsIt.limit_art_);
identifyPrePhrase(result, DatesSymbolsIt.limit_artp);
identifyPrePhrase(result, DatesSymbolsIt.limit_at_);
identifyPrePhrase(result, DatesSymbolsIt.limit_atp);
identifyPrePhrase(result, DatesSymbolsIt.limit_);
identifyPrePhrase(result, DatesSymbolsIt.limitp);
identifyPrePhrase(result, DatesSymbolsIt.limitp_);
identifyPrePhrase(result, DatesSymbolsIt.art_);
identifyPrePhrase(result, DatesSymbolsIt.artp);
// zwei zusammengehörige Datumsangaben
if(findPattern(result, DatesSymbolsIt.between_) &&
findPattern(result, DatesSymbolsIt.and_)){
identifyPrePhrase(result, DatesSymbolsIt.between_);
identifyConnection(result, DatesSymbolsIt.and_);
}
identifyConnection(result, DatesSymbolsIt.connect);
identifyConnection(result, DatesSymbolsIt.connect_);
identifyConnection(result, DatesSymbolsIt.connect_to_);
identifyConnection(result, DatesSymbolsIt.connect_top);
identifyAfterDate(result, DatesSymbolsIt.connect_y);
identifyAfterDate(result, DatesSymbolsIt.connect_yy);
// mögliche Angaben vor den kombinierten Datumsangaben
identifyPrePhrase(result, DatesSymbolsIt.at_);
identifyPrePhrase(result, DatesSymbolsIt.atp);
// Angaben im ISO-Format
identifyDate(result, DatesSymbolsIt.yyyyummudd);
}
/**
* Fügt das erkannte italienische Datum, das bei 'i' startet,
* im richtigen Format der Ergebnisliste "erkannteDaten" hinzu.
* @param result Das zu bearbeitende DatesResult-Objekt.
* @param i Startelement des erkannten Datums.
*/
private static void formatDate_it(DatesResult result, int i){
// ermittelt die Startposition der Angabe im Originalstring.
int start = 0;
for (int j=0; j<i; j++){
start += result.original(j).length();
}
// initialisiert die notwendigen Angaben für eine neue Datumsangabe.
int length = 0;
boolean isDate = true;
String originalText = "";
String limit1 = "";
String limit2 = "";
String limit1_old = "";
String year1 = "";
String year2 = "";
String month1 = "";
String month2 = "";
String day1 = "";
String day2 = "";
String weekday1 = "";
String weekday2 = "";
String holyday1 = "";
String holyday2 = "";
String easter1 = "";
String easter2 = "";
String century1 = "";
String century2 = "";
String approximation1 = "";
String approximation2 = "";
boolean isCentury1 = false;
boolean isCentury2 = false;
boolean circa1 = false;
boolean circa2 = false;
// geht die Bezeichner des erkannten Datums durch und
// übernimmt die Angaben im richtigen Format
for (int j=0; j<result.identifiedLength(i); j++){
// erhöht die Länge der Angabe
length += result.original(i+j).length();
// übernimmt den Originaltext
originalText += result.original(i+j);
// unterscheidet die Angaben durch den Bezeichner
DatesSymbol.Label label = result.identified(i+j);
switch (label){
case LIMIT1:
if (result.coded(i+j).equals(DatesConstantsIt.from.s()))
limit1 = "from";
if (result.coded(i+j).equals(DatesConstantsIt.at.s()))
limit1 = "when";
if (result.coded(i+j).equals(DatesConstantsIt.to.s()))
limit1 = "to";
if (result.coded(i+j).equals(DatesConstantsIt.notBefore.s()))
limit1 = "notBefore";
if (result.coded(i+j).equals(DatesConstantsIt.notAfterFirst.s()))
limit1 = "notAfter";
if (result.coded(i+j).equals(DatesConstantsDe.around.s()))
circa1 = true;
break;
case YEAR1:
if (result.coded(i+j).equals(DatesConstantsIt.d4.s()))
{
year1 = result.original(i+j);
if (Integer.parseInt(year1)>2100)
isDate = false;
if (Integer.parseInt(year1)<1582)
isDate = false;
}
// für bewegliche Feiertage mit Bezug zu Ostern
if (!easter1.isEmpty())
{
int holydayDate = easterDate(year1) + Integer.parseInt(easter1);
int hDay=1;
if (holydayDate <1)
{
month1 = "02";
hDay = holydayDate + 28;
if (isLeapYear(year1))
hDay = hDay + 1;
if (hDay<1)
{
month1 = "01";
hDay = hDay + 31;
}
}
else if (holydayDate <= 31)
{
month1 = "03";
hDay = holydayDate;
}
else if (holydayDate <= 31+30)
{
month1= "04";
hDay = holydayDate-31;
}
else if (holydayDate <= 31+30+31)
{
month1= "05";
hDay = holydayDate-31-30;
}
else if (holydayDate <= 31+30+31+30)
{
month1= "06";
hDay = holydayDate-31-30-31;
}
if (hDay<10)
day1 = "0" + String.valueOf(hDay);
else
day1 = String.valueOf(hDay);
approximation1 = "";
}
// Für Näherungsangaben
if (!approximation1.isEmpty())
{
if (!limit1.isEmpty())
limit1_old = limit1;
if (approximation1.equals("1/2"))
{
limit1 = "notBefore";
month1 = "01";
limit2 = "notAfter";
month2 = "06";
year2 = year1;
}
if (approximation1.equals("2/2"))
{
limit1 = "notBefore";
month1 = "07";
limit2 = "notAfter";
month2 = "12";
year2 = year1;
}
if (approximation1.equals("1/3"))
{
limit1 = "notBefore";
month1 = "01";
limit2 = "notAfter";
month2 = "04";
year2 = year1;
}
if (approximation1.equals("2/3"))
{
limit1 = "notBefore";
month1 = "05";
limit2 = "notAfter";
month2 = "08";
year2 = year1;
}
if (approximation1.equals("3/3"))
{
limit1 = "notBefore";
month1 = "09";
limit2 = "notAfter";
month2 = "12";
year2 = year1;
}
// falls schon Zeitraumangaben vorhanden waren
if (limit1_old.equals("from"))
{
limit2 = "";
month2 = "";
year2 = "";
}
if (limit1_old.equals("notBefore"))
{
limit2 = "";
month2 = "";
year2 = "";
}
if (limit1_old.equals("to"))
{
limit1 = limit2;
month1 = month2;
limit2 = "";
month2 = "";
year2 = "";
}
if (limit1_old.equals("notAfter"))
{
limit1 = limit2;
month1 = month2;
limit2 = "";
month2 = "";
year2 = "";
}
approximation1 = "";
}
break;
case MONTH1:
if (result.coded(i+j).equals(DatesConstantsIt.d1.s()))
month1 = "0" + result.original(i+j);
if (result.coded(i+j).equals(DatesConstantsIt.d2.s()))
{
month1 = result.original(i+j);
if (Integer.parseInt(month1)>12)
isDate = false;
}
if (result.coded(i+j).equals(DatesConstantsIt.month01.s()))
month1 = "01";
if (result.coded(i+j).equals(DatesConstantsIt.month02.s()))
month1 = "02";
if (result.coded(i+j).equals(DatesConstantsIt.month03.s()))
month1 = "03";
if (result.coded(i+j).equals(DatesConstantsIt.month04.s()))
month1 = "04";
if (result.coded(i+j).equals(DatesConstantsIt.month05.s()))
month1 = "05";
if (result.coded(i+j).equals(DatesConstantsIt.month06.s()))
month1 = "06";
if (result.coded(i+j).equals(DatesConstantsIt.month07.s()))
month1 = "07";
if (result.coded(i+j).equals(DatesConstantsIt.month08.s()))
month1 = "08";
if (result.coded(i+j).equals(DatesConstantsIt.month09.s()))
month1 = "09";
if (result.coded(i+j).equals(DatesConstantsIt.month10.s()))
month1 = "10";
if (result.coded(i+j).equals(DatesConstantsIt.month11.s()))
month1 = "11";
if (result.coded(i+j).equals(DatesConstantsIt.month12.s()))
month1 = "12";
if (!approximation1.isEmpty())
{
if (!limit1.isEmpty())
limit1_old = limit1;
if (approximation1.equals("1/2"))
{
limit1 = "notBefore";
day1 = "01";
limit2 = "notAfter";
day2 = "15";
month2 = month1;
}
if (approximation1.equals("2/2"))
{
limit1 = "notBefore";
day1 = "16";
limit2 = "notAfter";
if (month1.equals("01")||month1.equals("03")||month1.equals("05")||
month1.equals("07")||month1.equals("08")||month1.equals("10")||
month1.equals("12"))
day2 = "31";
if (month1.equals("02")||month1.equals("04")||month1.equals("06")||
month1.equals("09")||month1.equals("11"))
day2 = "30";
month2 = month1;
}
if (approximation1.equals("1/3"))
{
limit1 = "notBefore";
day1 = "01";
limit2 = "notAfter";
day2 = "10";
month2 = month1;
}
if (approximation1.equals("2/3"))
{
limit1 = "notBefore";
day1 = "11";
limit2 = "notAfter";
day2 = "20";
month2 = month1;
}
if (approximation1.equals("3/3"))
{
limit1 = "notBefore";
day1 = "21";
limit2 = "notAfter";
if (month1.equals("01")||month1.equals("03")||month1.equals("05")||
month1.equals("07")||month1.equals("08")||month1.equals("10")||
month1.equals("12"))
day2 = "31";
if (month1.equals("02")||month1.equals("04")||month1.equals("06")||
month1.equals("09")||month1.equals("11"))
day2 = "30";
month2 = month1;
}
// falls schon Zeitraumangaben vorhanden waren
if (limit1_old.equals("from"))
{
limit2 = "";
day2 = "";
month2 = "";
}
if (limit1_old.equals("notBefore"))
{
limit2 = "";
day2 = "";
month2 = "";
}
if (limit1_old.equals("to"))
{
limit1 = limit2;
day1 = day2;
limit2 = "";
day2 = "";
month2 = "";
}
if (limit1_old.equals("notAfter"))
{
limit1 = limit2;
day1 = day2;
limit2 = "";
day2 = "";
month2 = "";
}
approximation1 = "";
}
break;
case DAY1:
if (result.coded(i+j).equals(DatesConstantsIt.d1.s()))
day1 = "0" + result.original(i+j);
if (result.coded(i+j).equals(DatesConstantsIt.d2.s()))
{
day1 = result.original(i+j);
if (Integer.parseInt(day1)>31)
isDate = false;
}
if (result.coded(i+j).equals(DatesConstantsIt.ordinal01.s()))
day1 = "01";
if (result.coded(i+j).equals(DatesConstantsIt.cardinal02.s()))
day1 = "02";
if (result.coded(i+j).equals(DatesConstantsIt.cardinal03.s()))
day1 = "03";
if (result.coded(i+j).equals(DatesConstantsIt.cardinal04.s()))
day1 = "04";
if (result.coded(i+j).equals(DatesConstantsIt.cardinal05.s()))
day1 = "05";
if (result.coded(i+j).equals(DatesConstantsIt.cardinal06.s()))
day1 = "06";
if (result.coded(i+j).equals(DatesConstantsIt.cardinal07.s()))
day1 = "07";
if (result.coded(i+j).equals(DatesConstantsIt.cardinal08.s()))
day1 = "08";
if (result.coded(i+j).equals(DatesConstantsIt.cardinal09.s()))
day1 = "09";
if (result.coded(i+j).equals(DatesConstantsIt.cardinal10.s()))
day1 = "10";
if (result.coded(i+j).equals(DatesConstantsIt.cardinal11.s()))
day1 = "11";
if (result.coded(i+j).equals(DatesConstantsIt.cardinal12.s()))
day1 = "12";
if (result.coded(i+j).equals(DatesConstantsIt.cardinal13.s()))
day1 = "13";
if (result.coded(i+j).equals(DatesConstantsIt.cardinal14.s()))
day1 = "14";
if (result.coded(i+j).equals(DatesConstantsIt.cardinal15.s()))
day1 = "15";
if (result.coded(i+j).equals(DatesConstantsIt.cardinal16.s()))
day1 = "16";
if (result.coded(i+j).equals(DatesConstantsIt.cardinal17.s()))
day1 = "17";
if (result.coded(i+j).equals(DatesConstantsIt.cardinal18.s()))
day1 = "18";
if (result.coded(i+j).equals(DatesConstantsIt.cardinal19.s()))
day1 = "19";
if (result.coded(i+j).equals(DatesConstantsIt.cardinal20.s()))
day1 = "20";
if (result.coded(i+j).equals(DatesConstantsIt.cardinal21.s()))
day1 = "21";
if (result.coded(i+j).equals(DatesConstantsIt.cardinal22.s()))
day1 = "22";
if (result.coded(i+j).equals(DatesConstantsIt.cardinal23.s()))
day1 = "23";
if (result.coded(i+j).equals(DatesConstantsIt.cardinal24.s()))
day1 = "24";
if (result.coded(i+j).equals(DatesConstantsIt.cardinal25.s()))
day1 = "25";
if (result.coded(i+j).equals(DatesConstantsIt.cardinal26.s()))
day1 = "26";
if (result.coded(i+j).equals(DatesConstantsIt.cardinal27.s()))
day1 = "27";
if (result.coded(i+j).equals(DatesConstantsIt.cardinal28.s()))
day1 = "28";
if (result.coded(i+j).equals(DatesConstantsIt.cardinal29.s()))
day1 = "29";
if (result.coded(i+j).equals(DatesConstantsIt.cardinal30.s()))
day1 = "30";
if (result.coded(i+j).equals(DatesConstantsIt.cardinal31.s()))
day1 = "31";
if (!approximation1.isEmpty())
approximation1 = "";
break;
case APPROXIMATION1:
// Jahreszeiten
if (result.coded(i+j).equals(DatesConstantsIt.spring.s())
|| result.coded(i+j).equals(DatesConstantsIt.summer.s())
|| result.coded(i+j).equals(DatesConstantsIt.autumn.s())
|| result.coded(i+j).equals(DatesConstantsIt.winter.s()))
{
if (!limit1.isEmpty())
limit1_old = limit1;
if (result.coded(i+j).equals(DatesConstantsIt.spring.s()))
{
limit1 = "notBefore";
month1 = "03";
limit2 = "notAfter";
month2 = "06";
}
if (result.coded(i+j).equals(DatesConstantsIt.summer.s()))
{
limit1 = "notBefore";
month1 = "06";
limit2 = "notAfter";
month2 = "09";
}
if (result.coded(i+j).equals(DatesConstantsIt.autumn.s()))
{
limit1 = "notBefore";
month1 = "09";
limit2 = "notAfter";
month2 = "12";
}
if (result.coded(i+j).equals(DatesConstantsIt.winter.s()))
{
limit1 = "notBefore";
month1 = "01";
limit2 = "notAfter";
month2 = "03";
}
if (limit1_old.equals("from"))
{
limit2 = "";
month2 = "";
}
if (limit1_old.equals("notBefore"))
{
limit2 = "";
month2 = "";
}
if (limit1_old.equals("to"))
{
limit1 = limit2;
month1 = month2;
limit2 = "";
month2 = "";
}
if (limit1_old.equals("notAfter"))
{
limit1 = limit2;
month1 = month2;
limit2 = "";
month2 = "";
}
}
// Wochentage
if (result.coded(i+j).equals(DatesConstantsIt.monday.s()))
weekday1 = "1";
if (result.coded(i+j).equals(DatesConstantsIt.tuesday.s()))
weekday1 = "2";
if (result.coded(i+j).equals(DatesConstantsIt.wednesday.s()))
weekday1 = "3";
if (result.coded(i+j).equals(DatesConstantsIt.thursday.s()))
weekday1 = "4";
if (result.coded(i+j).equals(DatesConstantsIt.friday.s()))
weekday1 = "5";
if (result.coded(i+j).equals(DatesConstantsIt.saturday.s()))
weekday1 = "6";
if (result.coded(i+j).equals(DatesConstantsIt.sunday.s()))
weekday1 = "7";
// Feste
if (result.coded(i+j).equals(DatesConstantsIt.newYear.s()))
{
day1 = "01";
month1 = "01";
approximation1 = "";
}
if (result.coded(i+j).equals(DatesConstantsIt.ordinal01.s()))
holyday1 = "01";
if (result.coded(i+j).equals(DatesConstantsIt.year.s()))
{
if (holyday1.equals("01"))
{
day1 = "01";
month1 = "01";
approximation1 = "";
}
}
if (result.coded(i+j).equals(DatesConstantsIt.epiphany.s()))
{
day1 = "06";
month1 = "01";
approximation1 = "";
}
if (result.coded(i+j).equals(DatesConstantsIt.valetine.s()))
{
day1 = "14";
month1 = "02";
approximation1 = "";
}
if (result.coded(i+j).equals(DatesConstantsIt.ferragosto.s()))
{
day1 = "15";
month1 = "08";
approximation1 = "";
}
if (result.coded(i+j).equals(DatesConstantsIt.assumption.s()))
holyday1 = "MariäHimmelfahrt";
if (result.coded(i+j).equals(DatesConstantsIt.maria.s()))
{
if (holyday1.equals("MariäHimmelfahrt"))
{
day1 = "15";
month1 = "08";
approximation1 = "";
}
}
if (result.coded(i+j).equals(DatesConstantsIt.allHallows.s()))
{
day1 = "01";
month1 = "11";
approximation1 = "";
}
if (result.coded(i+j).equals(DatesConstantsIt.all.s()))
holyday1 = "Allerheiligen";
if (result.coded(i+j).equals(DatesConstantsIt.saint.s()))
{
if (holyday1.equals("Allerheiligen"))
{
day1 = "01";
month1 = "11";
approximation1 = "";
}
}
if (result.coded(i+j).equals(DatesConstantsIt.allSouls.s()))
{
day1 = "02";
month1 = "11";
approximation1 = "";
}
if (result.coded(i+j).equals(DatesConstantsIt.immaculateConception.s()))
{
if (holyday1.equals("MariäEmpfängnis"))
{
day1 = "08";
month1 = "12";
}
else
holyday1 = "MariäEmpfängnis";
}
if (result.coded(i+j).equals(DatesConstantsIt.christmas.s()))
{
day1 = "25";
month1 = "12";
approximation1 = "";
}
if (result.coded(i+j).equals(DatesConstantsIt.stephan.s()))
{
day1 = "26";
month1 = "12";
approximation1 = "";
}
if (result.coded(i+j).equals(DatesConstantsIt.silvester.s()))
{
day1 = "31";
month1 = "12";
approximation1 = "";
}
// bewegliche Feiertage
if (result.coded(i+j).equals(DatesConstantsIt.carnivalWeek.s()))
{
if (weekday1.equals("4"))
easter1 = "-52";
if (weekday1.equals("5"))
easter1 = "-51";
if (weekday1.equals("6"))
easter1 = "-50";
if (weekday1.equals("7"))
easter1 = "-49";
if (weekday1.equals("1"))
easter1 = "-48";
if (weekday1.equals("2"))
easter1 = "-47";
if (weekday1.equals("3"))
easter1 = "-46";
}
if (result.coded(i+j).equals(DatesConstantsIt.carnival.s()))
easter1 = "-49";
if (result.coded(i+j).equals(DatesConstantsIt.palmSunday.s()))
easter1 = "-7";
if (result.coded(i+j).equals(DatesConstantsIt.saint.s()))
{
if (weekday1.equals("1"))
easter1 = "-6";
if (weekday1.equals("2"))
easter1 = "-5";
if (weekday1.equals("3"))
easter1 = "-4";
if (weekday1.equals("4"))
easter1 = "-3";
if (weekday1.equals("5"))
easter1 = "-2";
if (weekday1.equals("6"))
easter1 = "-1";
if (weekday1.equals("7"))
easter1 = "0";
}
if (result.coded(i+j).equals(DatesConstantsIt.easter.s()))
easter1 = "0";
if (result.coded(i+j).equals(DatesConstantsIt.easterMonday.s()))
easter1 = "1";
if (result.coded(i+j).equals(DatesConstantsIt.angel.s()))
easter1 = "1";
if (result.coded(i+j).equals(DatesConstantsIt.ascension.s()))
easter1 = "39";
if (result.coded(i+j).equals(DatesConstantsIt.pentecost.s()))
{
if (weekday1.equals("1"))
easter1 = "50";
else
easter1 = "49";
}
if (result.coded(i+j).equals(DatesConstantsIt.corpusChristi.s()))
easter1 = "60";
// für Jahrhundertangaben
if (result.coded(i+j).equals(DatesConstantsIt.century.s()))
{
isCentury1 = true;
}
if (result.coded(i+j).equals(DatesConstantsIt.d2.s()))
century1 = result.original(i+j);
if (result.coded(i+j).equals(DatesConstantsIt.ordinal16.s()))
century1 = "16";
if (result.coded(i+j).equals(DatesConstantsIt.ordinal17.s()))
century1 = "17";
if (result.coded(i+j).equals(DatesConstantsIt.ordinal18.s()))
century1 = "18";
if (result.coded(i+j).equals(DatesConstantsIt.ordinal19.s()))
century1 = "19";
if (result.coded(i+j).equals(DatesConstantsIt.ordinal20.s()))
century1 = "20";
if (result.coded(i+j).equals(DatesConstantsIt.ordinal21.s()))
century1 = "21";
if (result.coded(i+j).equals(DatesConstantsIt.century16th.s()))
{
isCentury1 = true;
century1 = "16";
}
if (result.coded(i+j).equals(DatesConstantsIt.century17th.s()))
{
isCentury1 = true;
century1 = "17";
}
if (result.coded(i+j).equals(DatesConstantsIt.century18th.s()))
{
isCentury1 = true;
century1 = "18";
}
if (result.coded(i+j).equals(DatesConstantsIt.century19th.s()))
{
isCentury1 = true;
century1 = "19";
}
if (result.coded(i+j).equals(DatesConstantsIt.century20th.s()))
{
isCentury1 = true;
century1 = "20";
}
if (result.coded(i+j).equals(DatesConstantsIt.ordinal10.s()))
{
if (century1.equals("6") || century1.equals("7") ||
century1.equals("8") || century1.equals("9"))
century1 = "1" + century1;
else century1 = "10";
}
if (result.coded(i+j).equals(DatesConstantsIt.ordinal06.s()))
{
if (century1.equals("10"))
century1 = "16";
else century1 = "6";
}
if (result.coded(i+j).equals(DatesConstantsIt.ordinal07.s()))
{
if (century1.equals("10"))
century1 = "17";
else century1 = "7";
}
if (result.coded(i+j).equals(DatesConstantsIt.ordinal08.s()))
{
if (century1.equals("10"))
century1 = "18";
else century1 = "8";
}
if (result.coded(i+j).equals(DatesConstantsIt.ordinal09.s()))
{
if (century1.equals("10"))
century1 = "19";
else century1 = "9";
}
if (result.coded(i+j).equals(DatesConstantsIt.apostrophe.s()))
isCentury1 = true;
if (result.coded(i+j).equals(DatesConstantsIt.d3.s()))
{
if (result.original(i+j).substring(1).equals("00"))
century1 = (Integer.parseInt(result.original(i+j).substring(0, 1))+ 11) + "";
}
if (isCentury1 && !century1.isEmpty())
{
if (Integer.parseInt(century1)<=15)
isDate = false;
if (Integer.parseInt(century1)>21)
isDate = false;
if (Integer.parseInt(century1)>15 &&
Integer.parseInt(century1)<=21)
{
isDate = true;
isCentury1 = false;
limit1_old = limit1;
year1 = (Integer.parseInt(century1)-1) + "00";
limit1 = "notBefore";
year2 = (Integer.parseInt(century1)) + "00";
limit2 = "notAfter";
if (!approximation1.isEmpty())
{
if (approximation1.equals("1/2"))
year2 = (Integer.parseInt(century1)-1) + "50";
if (approximation1.equals("2/2"))
year1 = (Integer.parseInt(century1)-1) + "50";
if (approximation1.equals("1/3"))
year2 = (Integer.parseInt(century1)-1) + "33";
if (approximation1.equals("2/3"))
{
year1 = (Integer.parseInt(century1)-1) + "33";
year2 = (Integer.parseInt(century1)-1) + "66";
}
if (approximation1.equals("3/3"))
year1 = (Integer.parseInt(century1)-1) + "66";
approximation1 = "";
}
if (limit1_old.equals("from"))
{
year2 = "";
limit2 = "";
}
if (limit1_old.equals("notBefore"))
{
year2 = "";
limit2 = "";
}
if (limit1_old.equals("to"))
{
year1 = year2;
limit1 = limit2;
year2 = "";
limit2 = "";
}
if (limit1_old.equals("notAfter"))
{
year1 = year2;
limit1 = limit2;
year2 = "";
limit2 = "";
}
}
}
// 1. Hälfte, Anfang, Mitte, etc.
if (result.coded(i+j).equals(DatesConstantsIt.half.s()))
{
if (result.original(i+j).equals("metà"))
approximation1 = "2/3";
if (result.coded(i+j-2).equals(DatesConstantsIt.notAfterFirst.s()))
approximation1 = "1/2";
if (result.coded(i+j-2).equals(DatesConstantsIt.ordinal01.s()))
approximation1 = "1/2";
if (result.coded(i+j-2).equals(DatesConstantsIt.ordinal02.s()))
approximation1 = "2/2";
}
if (result.coded(i+j).equals(DatesConstantsIt.approximation.s()))
{
if (result.original(i+j).equals("inizio"))
approximation1 = "1/3";
if (result.original(i+j).equals("Inizio"))
approximation1 = "1/3";
if (result.original(i+j).equals("fine"))
approximation1 = "3/3";
if (result.original(i+j).equals("Fine"))
approximation1 = "3/3";
}
break;
case CONNECTION:
limit2 = "";
year2 = "";
month2 = "";
day2 = "";
break;
case LIMIT2:
if (result.coded(i+j).equals(DatesConstantsDe.around.s()))
circa2 = true;
if (result.coded(i+j).equals(DatesConstantsIt.notAfterFirst.s()))
limit2 = "notAfter";
break;
case YEAR2:
if (result.coded(i+j).equals(DatesConstantsIt.d4.s()))
{
year2 = result.original(i+j);
if (Integer.parseInt(year2)>2100)
isDate = false;
if (Integer.parseInt(year2)<1582)
isDate = false;
}
if (result.coded(i+j).equals(DatesConstantsIt.d2.s()))
{
year2 = year1.substring(0, 2) + result.original(i+j);
if (Integer.parseInt(year2)<Integer.parseInt(year1) && month1.isEmpty())
{
month1 = result.original(i+j);
year2 = "";
}
}
if (result.coded(i+j).equals(DatesConstantsIt.d1.s()))
{
year2 = year1.substring(0, 3) + result.original(i+j);
}
// für bewegliche Feiertage mit Bezug zu Ostern
if (!easter2.isEmpty())
{
int holydayDate = easterDate(year2) + Integer.parseInt(easter2);
int hDay=1;
if (holydayDate <=1)
{
month2 = "02";
hDay = holydayDate + 28;
if (isLeapYear(year2))
hDay = hDay + 1;
if (hDay<1)
{
month2 = "01";
hDay = hDay + 31;
}
}
else if (holydayDate <= 31)
{
month2 = "03";
hDay = holydayDate;
}
else if (holydayDate <= 31+30)
{
month2 = "04";
hDay = holydayDate-31;
}
else if (holydayDate <= 31+30+31)
{
month2 = "05";
hDay = holydayDate-31-30;
}
else if (holydayDate <= 31+30+31+30)
{
month2 = "06";
hDay = holydayDate-31-30-31;
}
if (hDay<10)
day2 = "0" + String.valueOf(hDay);
else
day2 = String.valueOf(hDay);
approximation2 = "";
}
if (!approximation2.isEmpty())
{
if (approximation2.equals("1/2"))
{
limit2 = "notAfter";
month2 = "06";
}
if (approximation2.equals("2/2"))
{
limit2 = "notAfter";
month2 = "12";
}
if (approximation2.equals("1/3"))
{
limit2 = "notAfter";
month2 = "04";
}
if (approximation2.equals("2/3"))
{
limit2 = "notAfter";
month2 = "08";
}
if (approximation2.equals("3/3"))
{
limit2 = "notAfter";
month2 = "12";
}
approximation2 = "";
}
break;
case MONTH2:
if (result.coded(i+j).equals(DatesConstantsIt.d1.s()))
month2 = "0" + result.original(i+j);
if (result.coded(i+j).equals(DatesConstantsIt.d2.s()))
{
month2 = result.original(i+j);
if (Integer.parseInt(month2)>12)
isDate = false;
}
if (result.coded(i+j).equals(DatesConstantsIt.month01.s()))
month2 = "01";
if (result.coded(i+j).equals(DatesConstantsIt.month02.s()))
month2 = "02";
if (result.coded(i+j).equals(DatesConstantsIt.month03.s()))
month2 = "03";
if (result.coded(i+j).equals(DatesConstantsIt.month04.s()))
month2 = "04";
if (result.coded(i+j).equals(DatesConstantsIt.month05.s()))
month2 = "05";
if (result.coded(i+j).equals(DatesConstantsIt.month06.s()))
month2 = "06";
if (result.coded(i+j).equals(DatesConstantsIt.month07.s()))
month2 = "07";
if (result.coded(i+j).equals(DatesConstantsIt.month08.s()))
month2 = "08";
if (result.coded(i+j).equals(DatesConstantsIt.month09.s()))
month2 = "09";
if (result.coded(i+j).equals(DatesConstantsIt.month10.s()))
month2 = "10";
if (result.coded(i+j).equals(DatesConstantsIt.month11.s()))
month2 = "11";
if (result.coded(i+j).equals(DatesConstantsIt.month12.s()))
month2 = "12";
if (!approximation2.isEmpty())
{
if (approximation2.equals("1/2"))
{
limit2 = "notAfter";
day2 = "15";
}
if (approximation2.equals("2/2"))
{
limit2 = "notAfter";
if (month2.equals("01")||month2.equals("03")||month2.equals("05")||
month2.equals("07")||month2.equals("08")||month2.equals("10")||
month2.equals("12"))
day2 = "31";
if (month2.equals("02")||month2.equals("04")||month2.equals("06")||
month2.equals("09")||month2.equals("11"))
day2 = "30";
}
if (approximation2.equals("1/3"))
{
limit2 = "notAfter";
day2 = "10";
}
if (approximation2.equals("2/3"))
{
limit2 = "notAfter";
day2 = "20";
}
if (approximation2.equals("3/3"))
{
limit2 = "notAfter";
if (month2.equals("01")||month2.equals("03")||month2.equals("05")||
month2.equals("07")||month2.equals("08")||month2.equals("10")||
month2.equals("12"))
day2 = "31";
if (month2.equals("02")||month2.equals("04")||month2.equals("06")||
month2.equals("09")||month2.equals("11"))
day2 = "30";
}
approximation2 = "";
}
break;
case DAY2:
if (result.coded(i+j).equals(DatesConstantsIt.d1.s()))
day2 = "0" + result.original(i+j);
if (result.coded(i+j).equals(DatesConstantsIt.d2.s()))
{
day2 = result.original(i+j);
if (Integer.parseInt(day2)>31)
isDate = false;
}
if (result.coded(i+j).equals(DatesConstantsIt.ordinal01.s()))
day2 = "01";
if (result.coded(i+j).equals(DatesConstantsIt.cardinal02.s()))
day2 = "02";
if (result.coded(i+j).equals(DatesConstantsIt.cardinal03.s()))
day2 = "03";
if (result.coded(i+j).equals(DatesConstantsIt.cardinal04.s()))
day2 = "04";
if (result.coded(i+j).equals(DatesConstantsIt.cardinal05.s()))
day2 = "05";
if (result.coded(i+j).equals(DatesConstantsIt.cardinal06.s()))
day2 = "06";
if (result.coded(i+j).equals(DatesConstantsIt.cardinal07.s()))
day2 = "07";
if (result.coded(i+j).equals(DatesConstantsIt.cardinal08.s()))
day2 = "08";
if (result.coded(i+j).equals(DatesConstantsIt.cardinal09.s()))
day2 = "09";
if (result.coded(i+j).equals(DatesConstantsIt.cardinal10.s()))
day2 = "10";
if (result.coded(i+j).equals(DatesConstantsIt.cardinal11.s()))
day2 = "11";
if (result.coded(i+j).equals(DatesConstantsIt.cardinal12.s()))
day2 = "12";
if (result.coded(i+j).equals(DatesConstantsIt.cardinal13.s()))
day2 = "13";
if (result.coded(i+j).equals(DatesConstantsIt.cardinal14.s()))
day2 = "14";
if (result.coded(i+j).equals(DatesConstantsIt.cardinal15.s()))
day2 = "15";
if (result.coded(i+j).equals(DatesConstantsIt.cardinal16.s()))
day2 = "16";
if (result.coded(i+j).equals(DatesConstantsIt.cardinal17.s()))
day2 = "17";
if (result.coded(i+j).equals(DatesConstantsIt.cardinal18.s()))
day2 = "18";
if (result.coded(i+j).equals(DatesConstantsIt.cardinal19.s()))
day2 = "19";
if (result.coded(i+j).equals(DatesConstantsIt.cardinal20.s()))
day2 = "20";
if (result.coded(i+j).equals(DatesConstantsIt.cardinal21.s()))
day2 = "21";
if (result.coded(i+j).equals(DatesConstantsIt.cardinal22.s()))
day2 = "22";
if (result.coded(i+j).equals(DatesConstantsIt.cardinal23.s()))
day2 = "23";
if (result.coded(i+j).equals(DatesConstantsIt.cardinal24.s()))
day2 = "24";
if (result.coded(i+j).equals(DatesConstantsIt.cardinal25.s()))
day2 = "25";
if (result.coded(i+j).equals(DatesConstantsIt.cardinal26.s()))
day2 = "26";
if (result.coded(i+j).equals(DatesConstantsIt.cardinal27.s()))
day2 = "27";
if (result.coded(i+j).equals(DatesConstantsIt.cardinal28.s()))
day2 = "28";
if (result.coded(i+j).equals(DatesConstantsIt.cardinal29.s()))
day2 = "29";
if (result.coded(i+j).equals(DatesConstantsIt.cardinal30.s()))
day2 = "30";
if (result.coded(i+j).equals(DatesConstantsIt.cardinal31.s()))
day2 = "31";
if (!approximation2.isEmpty())
{
approximation2 = "";
}
break;
case APPROXIMATION2:
// Jahreszeiten
if (result.coded(i+j).equals(DatesConstantsIt.spring.s()))
{
limit2 = "notAfter";
month2 = "06";
}
if (result.coded(i+j).equals(DatesConstantsIt.summer.s()))
{
limit2 = "notAfter";
month2 = "09";
}
if (result.coded(i+j).equals(DatesConstantsIt.autumn.s()))
{
limit2 = "notAfter";
month2 = "12";
}
if (result.coded(i+j).equals(DatesConstantsIt.winter.s()))
{
limit2 = "notAfter";
month2 = "12";
}
// Wochentage
if (result.coded(i+j).equals(DatesConstantsIt.monday.s()))
weekday2 = "1";
if (result.coded(i+j).equals(DatesConstantsIt.tuesday.s()))
weekday2 = "2";
if (result.coded(i+j).equals(DatesConstantsIt.wednesday.s()))
weekday2 = "3";
if (result.coded(i+j).equals(DatesConstantsIt.thursday.s()))
weekday2 = "4";
if (result.coded(i+j).equals(DatesConstantsIt.friday.s()))
weekday2 = "5";
if (result.coded(i+j).equals(DatesConstantsIt.saturday.s()))
weekday2 = "6";
if (result.coded(i+j).equals(DatesConstantsIt.sunday.s()))
weekday2 = "7";
// Feste
if (result.coded(i+j).equals(DatesConstantsIt.newYear.s()))
{
day2 = "01";
month2 = "01";
approximation2 = "";
}
if (result.coded(i+j).equals(DatesConstantsIt.ordinal01.s()))
holyday2 = "01";
if (result.coded(i+j).equals(DatesConstantsIt.year.s()))
{
if (holyday2.equals("01"))
{
day2 = "01";
month2 = "01";
approximation2 = "";
}
}
if (result.coded(i+j).equals(DatesConstantsIt.epiphany.s()))
{
day2 = "06";
month2 = "01";
approximation2 = "";
}
if (result.coded(i+j).equals(DatesConstantsIt.valetine.s()))
{
day2 = "14";
month2 = "02";
approximation2 = "";
}
if (result.coded(i+j).equals(DatesConstantsIt.ferragosto.s()))
{
day2 = "15";
month2 = "08";
approximation2 = "";
}
if (result.coded(i+j).equals(DatesConstantsIt.assumption.s()))
holyday2 = "MariäHimmelfahrt";
if (result.coded(i+j).equals(DatesConstantsIt.maria.s()))
{
if (holyday2.equals("MariäHimmelfahrt"))
{
day2 = "15";
month2 = "08";
approximation2 = "";
}
}
if (result.coded(i+j).equals(DatesConstantsIt.allHallows.s()))
{
day2 = "01";
month2 = "11";
approximation2 = "";
}
if (result.coded(i+j).equals(DatesConstantsIt.all.s()))
holyday2 = "Allerheiligen";
if (result.coded(i+j).equals(DatesConstantsIt.saint.s()))
{
if (holyday2.equals("Allerheiligen"))
{
day2 = "01";
month2 = "11";
approximation2 = "";
}
}
if (result.coded(i+j).equals(DatesConstantsIt.allSouls.s()))
{
day2 = "02";
month2 = "11";
approximation2 = "";
}
if (result.coded(i+j).equals(DatesConstantsIt.immaculateConception.s()))
{
if (holyday2.equals("MariäEmpfängnis"))
{
day2 = "08";
month2 = "12";
approximation2 = "";
}
else
holyday2 = "MariäEmpfängnis";
}
if (result.coded(i+j).equals(DatesConstantsIt.christmas.s()))
{
day2 = "25";
month2 = "12";
approximation2 = "";
}
if (result.coded(i+j).equals(DatesConstantsIt.stephan.s()))
{
day2 = "26";
month2 = "12";
approximation2 = "";
}
if (result.coded(i+j).equals(DatesConstantsIt.silvester.s()))
{
day2 = "31";
month2 = "12";
approximation2 = "";
}
// bewegliche Feiertage
if (result.coded(i+j).equals(DatesConstantsIt.carnivalWeek.s()))
{
if (weekday2.equals("4"))
easter2 = "-52";
if (weekday2.equals("5"))
easter2 = "-51";
if (weekday2.equals("6"))
easter2 = "-50";
if (weekday2.equals("7"))
easter2 = "-49";
if (weekday2.equals("1"))
easter2 = "-48";
if (weekday2.equals("2"))
easter2 = "-47";
if (weekday2.equals("3"))
easter2 = "-46";
}
if (result.coded(i+j).equals(DatesConstantsIt.carnival.s()))
easter2 = "-49";
if (result.coded(i+j).equals(DatesConstantsIt.palmSunday.s()))
easter2 = "-7";
if (result.coded(i+j).equals(DatesConstantsIt.saint.s()))
{
if (weekday2.equals("1"))
easter2 = "-6";
if (weekday2.equals("2"))
easter2 = "-5";
if (weekday2.equals("3"))
easter2 = "-4";
if (weekday2.equals("4"))
easter2 = "-3";
if (weekday2.equals("5"))
easter2 = "-2";
if (weekday2.equals("6"))
easter2 = "-1";
if (weekday2.equals("7"))
easter2 = "0";
}
if (result.coded(i+j).equals(DatesConstantsIt.easter.s()))
easter2 = "0";
if (result.coded(i+j).equals(DatesConstantsIt.easterMonday.s()))
easter2 = "1";
if (result.coded(i+j).equals(DatesConstantsIt.angel.s()))
easter2 = "1";
if (result.coded(i+j).equals(DatesConstantsIt.ascension.s()))
easter2 = "39";
if (result.coded(i+j).equals(DatesConstantsIt.pentecost.s()))
{
if (weekday2.equals("1"))
easter2 = "50";
else
easter2 = "49";
}
if (result.coded(i+j).equals(DatesConstantsIt.corpusChristi.s()))
easter2 = "60";
// für Jahrhundertangaben
if (result.coded(i+j).equals(DatesConstantsIt.century.s()))
{
isCentury2 = true;
}
if (result.coded(i+j).equals(DatesConstantsIt.d2.s()))
century2 = result.original(i+j);
if (result.coded(i+j).equals(DatesConstantsIt.ordinal16.s()))
century2 = "16";
if (result.coded(i+j).equals(DatesConstantsIt.ordinal17.s()))
century2 = "17";
if (result.coded(i+j).equals(DatesConstantsIt.ordinal18.s()))
century2 = "18";
if (result.coded(i+j).equals(DatesConstantsIt.ordinal19.s()))
century2 = "19";
if (result.coded(i+j).equals(DatesConstantsIt.ordinal20.s()))
century2 = "20";
if (result.coded(i+j).equals(DatesConstantsIt.ordinal21.s()))
century2 = "21";
if (result.coded(i+j).equals(DatesConstantsIt.century16th.s()))
{
isCentury2 = true;
century2 = "16";
}
if (result.coded(i+j).equals(DatesConstantsIt.century17th.s()))
{
isCentury2 = true;
century2 = "17";
}
if (result.coded(i+j).equals(DatesConstantsIt.century18th.s()))
{
isCentury2 = true;
century2 = "18";
}
if (result.coded(i+j).equals(DatesConstantsIt.century19th.s()))
{
isCentury2 = true;
century2 = "19";
}
if (result.coded(i+j).equals(DatesConstantsIt.century20th.s()))
{
isCentury2 = true;
century2 = "20";
}
if (result.coded(i+j).equals(DatesConstantsIt.ordinal10.s()))
{
if (century2.equals("6") || century2.equals("7") ||
century2.equals("8") || century2.equals("9"))
century2 = "1" + century2;
else century2 = "10";
}
if (result.coded(i+j).equals(DatesConstantsIt.ordinal06.s()))
{
if (century2.equals("10"))
century2 = "16";
else century2 = "6";
}
if (result.coded(i+j).equals(DatesConstantsIt.ordinal07.s()))
{
if (century2.equals("10"))
century2 = "17";
else century2 = "7";
}
if (result.coded(i+j).equals(DatesConstantsIt.ordinal08.s()))
{
if (century2.equals("10"))
century2 = "18";
else century2 = "8";
}
if (result.coded(i+j).equals(DatesConstantsIt.ordinal09.s()))
{
if (century2.equals("10"))
century2 = "19";
else century2 = "9";
}
if (result.coded(i+j).equals(DatesConstantsIt.apostrophe.s()))
isCentury2 = true;
if (result.coded(i+j).equals(DatesConstantsIt.d3.s()))
{
if (result.original(i+j).substring(1).equals("00"))
century2 = (Integer.parseInt(result.original(i+j).substring(0, 1))+ 11) + "";
}
if (isCentury2 && !century2.isEmpty())
{
if (Integer.parseInt(century2)<=15)
isDate = false;
if (Integer.parseInt(century2)>21)
isDate = false;
if (Integer.parseInt(century2)>15 &&
Integer.parseInt(century2)<=21)
{
isDate = true;
isCentury2 = false;
year2 = (Integer.parseInt(century2)) + "00";
limit2 = "notAfter";
if (!approximation2.isEmpty())
{
if (approximation2.equals("1/2"))
year2 = (Integer.parseInt(century2)-1) + "50";
if (approximation2.equals("1/3"))
year2 = (Integer.parseInt(century2)-1) + "33";
if (approximation2.equals("2/3"))
year2 = (Integer.parseInt(century2)-1) + "66";
approximation2 = "";
}
}
}
// 1. Hälfte, Anfang, Mitte, etc.
if (result.coded(i+j).equals(DatesConstantsIt.half.s()))
{
if (result.original(i+j).equals("metà"))
approximation2 = "2/3";
if (result.coded(i+j-2).equals(DatesConstantsIt.notAfterFirst.s()))
approximation2 = "1/2";
if (result.coded(i+j-2).equals(DatesConstantsIt.ordinal01.s()))
approximation2 = "1/2";
if (result.coded(i+j-2).equals(DatesConstantsIt.ordinal02.s()))
approximation2 = "2/2";
}
if (result.coded(i+j).equals(DatesConstantsIt.approximation.s()))
{
if (result.original(i+j).equals("inizio"))
approximation2 = "1/3";
if (result.original(i+j).equals("Inizio"))
approximation2 = "1/3";
if (result.original(i+j).equals("fine"))
approximation2 = "3/3";
if (result.original(i+j).equals("Fine"))
approximation2 = "3/3";
}
break;
default:
break;
}
}
{
// falls eine zweite Monatsangabe vorhanden ist, wird das Jahr ergänzt
if (!month2.isEmpty() && year2.isEmpty())
year2 = year1;
// falls Ende Februar gemeint ist, wird geschaut, ob es ein Schaltjahr ist
if (!month1.isEmpty() && !day1.isEmpty())
{
if (month1.equals("02") && day1.equals("30"))
{
if (isLeapYear(year1))
day1 = "29";
else
day1 = "28";
}
}
if (!month2.isEmpty() && !day2.isEmpty())
{
if (month2.equals("02") && day2.equals("30"))
{
if (isLeapYear(year2))
day2 = "29";
else
day2 = "28";
}
}
}
// für ungefähre Datumsangaben
if (circa1 || circa2)
{
if(year2.isEmpty())
{
if(circa1)
{
if(!day1.isEmpty())
{
Calendar date1 = new GregorianCalendar(Integer.parseInt(year1), Integer.parseInt(month1)-1, Integer.parseInt(day1));
Calendar date2 = new GregorianCalendar(Integer.parseInt(year1), Integer.parseInt(month1)-1, Integer.parseInt(day1));
date1.add(Calendar.DAY_OF_MONTH, -3);
day1 = String.format("%1$td", date1);
month1 = String.format("%1$tm", date1);
year1 = String.format("%1$tY", date1);
limit1 = "notBefore";
date2.add(Calendar.DAY_OF_MONTH, 3);
day2 = String.format("%1$td", date2);
month2 = String.format("%1$tm", date2);
year2 = String.format("%1$tY", date2);
limit2 = "notAfter";
}
else if(!month1.isEmpty())
{
Calendar date1 = new GregorianCalendar(Integer.parseInt(year1), Integer.parseInt(month1)-1, 1);
Calendar date2 = new GregorianCalendar(Integer.parseInt(year1), Integer.parseInt(month1)-1, 1);
date1.add(Calendar.MONTH, -2);
month1 = String.format("%1$tm", date1);
year1 = String.format("%1$tY", date1);
limit1 = "notBefore";
date2.add(Calendar.MONTH, 2);
month2 = String.format("%1$tm", date2);
year2 = String.format("%1$tY", date2);
limit2 = "notAfter";
}
else if(Integer.parseInt(year1)<=1900)
{
Calendar date1 = new GregorianCalendar(Integer.parseInt(year1), 0, 1);
Calendar date2 = new GregorianCalendar(Integer.parseInt(year1), 0, 1);
date1.add(Calendar.YEAR, -5);
year1 = String.format("%1$tY", date1);
limit1 = "notBefore";
date2.add(Calendar.YEAR, 5);
year2 = String.format("%1$tY", date2);
limit2 = "notAfter";
}
else
{
Calendar date1 = new GregorianCalendar(Integer.parseInt(year1), 0, 1);
Calendar date2 = new GregorianCalendar(Integer.parseInt(year1), 0, 1);
date1.add(Calendar.YEAR, -2);
year1 = String.format("%1$tY", date1);
limit1 = "notBefore";
date2.add(Calendar.YEAR, 2);
year2 = String.format("%1$tY", date2);
limit2 = "notAfter";
}
}
}
else
{
if(circa1)
{
if(!day1.isEmpty())
{
Calendar date1 = new GregorianCalendar(Integer.parseInt(year1), Integer.parseInt(month1)-1, Integer.parseInt(day1));
date1.add(Calendar.DAY_OF_MONTH, -3);
day1 = String.format("%1$td", date1);
month1 = String.format("%1$tm", date1);
year1 = String.format("%1$tY", date1);
limit1 = "notBefore";
}
else if(!month1.isEmpty())
{
Calendar date1 = new GregorianCalendar(Integer.parseInt(year1), Integer.parseInt(month1)-1, 1);
date1.add(Calendar.MONTH, -2);
month1 = String.format("%1$tm", date1);
year1 = String.format("%1$tY", date1);
limit1 = "notBefore";
}
else if(Integer.parseInt(year1)<=1900)
{
Calendar date1 = new GregorianCalendar(Integer.parseInt(year1), 0, 1);
date1.add(Calendar.YEAR, -5);
year1 = String.format("%1$tY", date1);
limit1 = "notBefore";
}
else
{
Calendar date1 = new GregorianCalendar(Integer.parseInt(year1), 0, 1);
date1.add(Calendar.YEAR, -2);
year1 = String.format("%1$tY", date1);
limit1 = "notBefore";
}
}
if(circa2)
{
if(!day2.isEmpty())
{
Calendar date2 = new GregorianCalendar(Integer.parseInt(year2), Integer.parseInt(month2)-1, Integer.parseInt(day2));
date2.add(Calendar.DAY_OF_MONTH, 3);
day2 = String.format("%1$td", date2);
month2 = String.format("%1$tm", date2);
year2 = String.format("%1$tY", date2);
limit2 = "notAfter";
}
else if(!month2.isEmpty())
{
Calendar date2 = new GregorianCalendar(Integer.parseInt(year2), Integer.parseInt(month2)-1, 1);
date2.add(Calendar.MONTH, 2);
month2 = String.format("%1$tm", date2);
year2 = String.format("%1$tY", date2);
limit2 = "notAfter";
}
else if(Integer.parseInt(year2)<=1900)
{
Calendar date2 = new GregorianCalendar(Integer.parseInt(year2), 0, 1);
date2.add(Calendar.YEAR, 5);
year2 = String.format("%1$tY", date2);
limit2 = "notAfter";
}
else
{
Calendar date2 = new GregorianCalendar(Integer.parseInt(year2), 0, 1);
date2.add(Calendar.YEAR, 2);
year2 = String.format("%1$tY", date2);
limit2 = "notAfter";
}
}
}
}
// erzeugt eine neue Datumsangabe und schreibt sie in die Ergebnisliste
if (isDate)
{
DateOccurrence newDate = new DateOccurrence(start, length, limit1, year1, month1, day1,
limit2, year2, month2, day2, originalText);
result.addIdentifiedDate(newDate);
}
}
/**
* Sucht den italienischen Text nach den Startelemente
* von erkannten Daten durch und formatiert das jeweilige Datum.
* @param result Das zu bearbeitende DatesResult-Objekt.
*/
private static void format(DatesResult result){
boolean isDate = false;
for (int i=0; i<result.length(); i++){
if (result.identifiedLength(i)==0)
isDate = false;
else{
if (!isDate){
formatDate_it(result, i);
}
isDate = true;
}
}
}
/**
* Findet italienische Datumsangaben im Eingabetext des übergebenen
* Ergebnis-Objects.
*/
static void findOccurrences(DatesResult result){
code(result);
identify(result);
format(result);
}
}