package AstroOL; /** Planeten- und Hausposition direkt mit der Swiss Ephemeris berechnen. Die Klasse <code>NativeCalculator</code> verwendet das <i>Java Native Interface</i> (JNI), um die C-Routinen der Swiss Ephemeris aufzurufen. Hierzu ist neben der Swiss Ephemeris eine kleine Wrapper-Bibliothek <a href="./doc-files/NativeCalculator.dll">NativeCalculator.dll</a> erforderlich, die im wesentlichen die Typumwandlungen der C- in die Java-Datentypen besorgt. <p>Wenn der NativeCalculator in einem Applet verwendet werden soll, muss das Applet auf dem Client-PC die Berechtigung <code>java.lang.RuntimePermission "loadLibrary.NativeCalculator"</code> zum Laden der native Library besitzen, sonst kommt es zu einer <code>SecurityException</code>. @see <a href="./doc-files/NativeCalculator.html">Verwendung des NativeCalculators</a> */ public class NativeCalculator implements ICalculator { static { System.loadLibrary("NativeCalculator"); } private String _msg; /** Leere Implementierung, da die Klasse NativeCalculator keine Serververbindung braucht. */ public void setServletURL( String x ) {} /** Leere Implementierung, da die Klasse NativeCalculator keine Serververbindung braucht. */ public String getServletURL( ) { return null; } /** Planeten und Häuser berechnen. Die Methode ist vollständig in C implementiert und ruft die Funktionen swe_calc() und swe_houses() der Swiss Ephemeris Bibliothek auf. */ public native boolean getPlanetsAndHouses(double jd_ut, double lon, double lat, double[] pl, double[] h) ; /** Einen einzelnen Planeten berechnen. Implementierung der Interface-Methode. */ public double[] getPlanet( double jd_ut, int planet, StringBuffer msg) { return getPlanet( jd_ut, planet, 0, msg); } /** Einen einzelnen Planeten berechnen. Direkter Zugriff in Java auf die zentrale Routine <code>swe_calc()</code> der Swiss Ephemeris. */ public double[] getPlanet( double jd_ut, int planet, int iflag, StringBuffer msg) { double[] x = getPlanet( jd_ut, planet, iflag ); if (msg == null) msg = new StringBuffer(_msg); else msg.append(_msg); return x; } /** Etwaige Fehlermeldung zurückgeben. */ public String getMessage() { return _msg; } /** Native Methode zur Planetenberechnung. Die Signatur unterscheidet sich von der öffentlichen Methode dadurch, dass der StringBuffer für die Nachricht fehlt. Die Meldungen werden von der nativen Methode direkt in einen privaten String übergeben und können von dort mit der Methode {@link #getMessage(void)} abgeholt werden. */ private native double[] getPlanet( double jd_ut, int planet, int iflag); /** Länge eines einzelnen Hauses berechnen. */ public native double getHouse( double jd_ut, double lon, double lat, double houseNumber, StringBuffer serr) ; }