
import java.applet.Applet;
import netscape.javascript.*;
import java.text.*;
import java.util.*;
import java.awt.Graphics;

/**
 * Cookies aus einem Applet heraus speichern und lesen.
 * Benutzt die LiveConnect-API von Netscape.
 * @author Mark Donnermeyer
 */
public class CookieApplet extends Applet
{ 
    // Das Format, in dem das Ablaufdatum eines Cookies gespeichert
    // werden muss.
    private static final String COOKIE_DATES = "EE, dd-MMM-yy HH:mm:ss zz";
    // Der Name des Cookies.
    String name = "cookie";
    
    public void init () 
    { 
        try {
            // Ein neues Cookie mit einer Lebensdauer von 1 Std.
            Date expires = new Date(System.currentTimeMillis() + 1000*60*60);
            String value = "Der Wert, der aus dem Cookie kam.";

            // Cookie setzen.
            setCookie(name, value, expires);
        }
        catch (Exception e) {
        }
    } 
    
    public void paint(Graphics g) {
        // Den Inhalt des Cookies schreiben
        try {
            g.drawString("Wert: " + getCookie(name), 10, 10);
        }
        catch (JSException ex) {
            g.drawString("Fehler: " + ex.getMessage(), 10, 10);
        }
        
    }

    /**
     * Ein Cookie mit seinem Namen, seinem Wert und einem
     * Ablaufdatum erstellen. Wenn das Ablaufdatum in der
     * Vergangenheit liegt, dann wird das Cookie gelöscht.
     */
    private void setCookie(String name, String value, Date expires) throws JSException {
        // Das richtige Format und die richtige Zeitzone für das
        // Cookie setzen.
        DateFormat format;
        format = new SimpleDateFormat(COOKIE_DATES, new Locale("en", "US"));
        format.setTimeZone(TimeZone.getTimeZone("GMT"));
        String cookie = name +"=" + value + "; expires=" + format.format(expires);
        System.out.println("Cookie: " + cookie);

        // Cookie speichern
        JSObject window = JSObject.getWindow(this); 
        JSObject document = (JSObject )window.getMember("document");
        document.setMember("cookie", cookie); 
    }

    /**
     * Ein Cookie auslesen. Das Cookie wird aus der Liste
     * der Cookies ausgeschnitten.
     */
    private String getCookie(String name) throws JSException {
        String cookie = getCookies();
        String search = name + "=";
        if (cookie.length() > 0) {
            int off = cookie.indexOf(search);
            if (off != -1) {
                off += search.length();
                int end = cookie.indexOf(";", off);
                if (end == -1) end = cookie.length();
                    return cookie.substring(off,end);
            }
        }
        return "";
    }

    /**
     * Alle Cookies auslesen
     */
    private String getCookies() throws JSException {
        JSObject window = JSObject.getWindow(this); 
        JSObject document = (JSObject )window.getMember("document");
        String myCookies = (String) document.getMember("cookie"); 
        return myCookies;
    }
    
} 

