From 2f6b9a6d698d70893d6d56ba0736910c14d44214 Mon Sep 17 00:00:00 2001
From: ulrich <undisclosed>
Date: Sun, 19 Mar 2023 18:56:46 +0000
Subject: [PATCH] Erweiterungen zu chr.-orthodoxen Ereignissen (in Arbeit)

---
 src/de/uhilger/zeitrechnung/ereignis/JulianischesEreignis.java |   48 +++++++++++++++--------
 src/de/uhilger/zeitrechnung/ereignis/TagDatumEreignis.java     |   41 ++++++++++++++------
 src/de/uhilger/zeitrechnung/ereignis/EreignisBasis.java        |    3 +
 src/de/uhilger/zeitrechnung/ereignis/Ereignis.java             |    3 +
 src/de/uhilger/zeitrechnung/Definition.java                    |   10 ++--
 5 files changed, 70 insertions(+), 35 deletions(-)

diff --git a/src/de/uhilger/zeitrechnung/Definition.java b/src/de/uhilger/zeitrechnung/Definition.java
index 90fde2b..f5457d4 100644
--- a/src/de/uhilger/zeitrechnung/Definition.java
+++ b/src/de/uhilger/zeitrechnung/Definition.java
@@ -59,11 +59,11 @@
   
   private String name;
   private int typ;
-  private long p1;
-  private long p2;
-  private long p3;
-  private long p4;
-  private long p5;
+  private long p1 = Long.MAX_VALUE;
+  private long p2 = Long.MAX_VALUE;
+  private long p3 = Long.MAX_VALUE;
+  private long p4 = Long.MAX_VALUE;
+  private long p5 = Long.MAX_VALUE;
 
   public String getName() {
     return name;
diff --git a/src/de/uhilger/zeitrechnung/ereignis/Ereignis.java b/src/de/uhilger/zeitrechnung/ereignis/Ereignis.java
index 38ce2ee..bfa923d 100644
--- a/src/de/uhilger/zeitrechnung/ereignis/Ereignis.java
+++ b/src/de/uhilger/zeitrechnung/ereignis/Ereignis.java
@@ -60,6 +60,9 @@
   /** Typnummer fuer JulianischesEreignis */
   public static final int TYP_JULIANISCH = 9;
   
+  public static final int GREGORIANISCHER_KALENDER = 1;
+  public static final int JULIANISCHER_KALENDER = 2;
+  
   /**
    * Den Typ des Ereignisses ermitteln
    * 
diff --git a/src/de/uhilger/zeitrechnung/ereignis/EreignisBasis.java b/src/de/uhilger/zeitrechnung/ereignis/EreignisBasis.java
index 878db0f..d99eb11 100644
--- a/src/de/uhilger/zeitrechnung/ereignis/EreignisBasis.java
+++ b/src/de/uhilger/zeitrechnung/ereignis/EreignisBasis.java
@@ -31,7 +31,8 @@
     DatumEreignis.class.getName(), TagWocheMonatEreignis.class.getName(), 
     TagDatumEreignis.class.getName(), OsterEreignis.class.getName(), 
     JahreszeitEreignis.class.getName(), HebraeischesEreignis.class.getName(),
-    EinzelEreignis.class.getName(), MuslimischesEreignis.class.getName()
+    EinzelEreignis.class.getName(), MuslimischesEreignis.class.getName(),
+    JulianischesEreignis.class.getName()
   };
   
   /**
diff --git a/src/de/uhilger/zeitrechnung/ereignis/JulianischesEreignis.java b/src/de/uhilger/zeitrechnung/ereignis/JulianischesEreignis.java
index 245a221..df7691c 100644
--- a/src/de/uhilger/zeitrechnung/ereignis/JulianischesEreignis.java
+++ b/src/de/uhilger/zeitrechnung/ereignis/JulianischesEreignis.java
@@ -1,6 +1,7 @@
 package de.uhilger.zeitrechnung.ereignis;
 
 import de.uhilger.zeitrechnung.Datum;
+import de.uhilger.zeitrechnung.Definition;
 import de.uhilger.zeitrechnung.kalender.ISOKalender;
 import de.uhilger.zeitrechnung.kalender.JulianischerKalender;
 import java.util.ArrayList;
@@ -8,19 +9,21 @@
 
 /**
  * Bestimmung der Zeitpunkte von Ereignissen im julianischen Kalendersystem
- * 
+ *
  * <p>
- * Die Ereignis-Definition lautet:<br> 
- * JulianischesEreignis.getDefinition.setp1(Monat des julianischen Kalenders);<br>
- * JulianischesEreignis.getDefinition.setp2(Tag im Monat des julianischen Kalenders);<br>
- * 
+ * Die Ereignis-Definition lautet:<br>
+ * JulianischesEreignis.getDefinition.setp1(Monat des julianischen
+ * Kalenders);<br>
+ * JulianischesEreignis.getDefinition.setp2(Tag im Monat des julianischen
+ * Kalenders);<br>
+ *
  * @author Ulrich Hilger
  */
 public class JulianischesEreignis extends EreignisBasis {
 
   /**
    * Den Typ des Ereignisses ermitteln
-   * 
+   *
    * @return Ereignis.TYP_JULIANISCH
    */
   @Override
@@ -29,22 +32,33 @@
   }
 
   /**
-   * Die Tage eines Jahres im gregorianischen Kalendersystem 
-   * ermitteln, an denen das Ereignis stattfindet.
-   * 
-   * @param isoJahr das Jahr im gregorianischen Kalender, 
-   * fuer das ermittelt werden soll, an welchen Tagen das Ereignis stattfindet
-   * @return die Liste aus Datum-Objekten, die die Tage im gregorianischen 
+   * Die Tage eines Jahres im gregorianischen Kalendersystem ermitteln, an denen
+   * das Ereignis stattfindet.
+   *
+   * @param isoJahr das Jahr im gregorianischen Kalender, fuer das ermittelt
+   * werden soll, an welchen Tagen das Ereignis stattfindet
+   * @return die Liste aus Datum-Objekten, die die Tage im gregorianischen
    * Kalender bezeichnet, an denen das Ereignis stattfindet
    */
   @Override
   public List<Datum> getZeitpunkte(long isoJahr) {
-    Datum jDatum = new Datum(isoJahr, (int) definition.getp1(), (int) definition.getp2());
-    JulianischerKalender j = new JulianischerKalender();
-    long tage = j.zuTagen(jDatum);
     ISOKalender g = new ISOKalender();
+    long start = g.zuTagen(isoJahr, Definition.JANUAR, 1);
+    long end = g.zuTagen(isoJahr, Definition.DEZEMBER, 31);
+    JulianischerKalender j = new JulianischerKalender();
+    Datum jStart = j.vonTagen(start);
+    long jStartJahr = jStart.getJahr();
+    Datum jEnd = j.vonTagen(end);
+    long jEndJahr = jEnd.getJahr();
+    long anzahlJahre = (jEndJahr - jStartJahr) + (long) 1;
     ArrayList list = new ArrayList();
-    list.add(g.vonTagen(tage));
+    for (long y = 0; y < anzahlJahre; y++) {
+      Datum jDatum = new Datum(isoJahr, (int) definition.getp1(), (int) definition.getp2());
+      //JulianischerKalender j = new JulianischerKalender();
+      long tage = j.zuTagen(jDatum);
+      //ISOKalender g = new ISOKalender();
+      list.add(g.vonTagen(tage));
+    }
     return list;
-  }  
+  }
 }
\ No newline at end of file
diff --git a/src/de/uhilger/zeitrechnung/ereignis/TagDatumEreignis.java b/src/de/uhilger/zeitrechnung/ereignis/TagDatumEreignis.java
index b7a2a6a..93f8e1d 100644
--- a/src/de/uhilger/zeitrechnung/ereignis/TagDatumEreignis.java
+++ b/src/de/uhilger/zeitrechnung/ereignis/TagDatumEreignis.java
@@ -23,8 +23,11 @@
 import de.uhilger.zeitrechnung.kalender.ISOKalender;
 import de.uhilger.zeitrechnung.kalender.JulianischerKalender;
 import de.uhilger.zeitrechnung.kalender.Wandler;
+import de.uhilger.zeitrechnung.kalender.Zeitrechnung;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 
 /**
  * Wochentag vor oder nach einem Datum, zB Totensonntag (fuenter Sonntag 
@@ -74,22 +77,36 @@
    */
   @Override
   public List<Datum> getZeitpunkte(long isoJahr) {
+    ISOKalender g = new ISOKalender();
     Definition def = getDefinition();
     long monat = def.getp2();
     long tag = def.getp3();
     long kalender = def.getp5();
-    Wandler w;
-    if(1 == kalender) {
-      w = new ISOKalender();
-    } else {
-      w = new JulianischerKalender();
-    }
-    long basisDatum = w.zuTagen(isoJahr, (int) monat, (int) tag);
-    long generischesDatum = ((BasisKalender) w).nterTag((int) def.getp4(), (int) def.getp1(), basisDatum);
-    Datum d = w.vonTagen(generischesDatum);
-    //Datum d = w.getDatum();
     ArrayList list = new ArrayList();
-    list.add(d);
+    if(GREGORIANISCHER_KALENDER == kalender || Long.MAX_VALUE == kalender) {
+      long basisDatum = g.zuTagen(isoJahr, (int) monat, (int) tag);
+      long generischesDatum = g.nterTag((int) def.getp4(), (int) def.getp1(), basisDatum);
+      Datum d = g.vonTagen(generischesDatum);
+      list.add(d);      
+      list.add(d);      
+    } else {
+      long start = g.zuTagen(isoJahr, Definition.JANUAR, 1);
+      long end = g.zuTagen(isoJahr, Definition.DEZEMBER, 31);
+      JulianischerKalender j = new JulianischerKalender();
+      Datum jStart = j.vonTagen(start);
+      long jStartJahr = jStart.getJahr();
+      Datum jEnd = j.vonTagen(end);
+      long jEndJahr = jEnd.getJahr();
+      long anzahlJahre = (jEndJahr - jStartJahr) + (long) 1;
+      for (long y = 0; y < anzahlJahre; y++) {
+        long tage = j.zuTagen(jStartJahr + y, (int) def.getp2(), (int) def.getp3());
+        long generischesDatum = g.nterTag((int) def.getp4(), (int) def.getp1(), tage);
+        if (generischesDatum >= start && generischesDatum <= end) {
+          Datum d = g.vonTagen(generischesDatum);
+          list.add(d);
+        }
+      }
+    }
     return list;
   } 
-}
\ No newline at end of file
+}

--
Gitblit v1.9.3