package javacodebook.misc.jni_date;

import java.util.*;
/**
 * Eine Klasse Date, bei der das Datum gesetzt werden kann
 * @author  Mark Donnermeyer
 */
public abstract class SystemClock {
    
    /**
     * Instanz der Klasse in Abhängig vom Betriebssystem 
     * erzeugen.
     */
    public static SystemClock getInstance() throws UnsupportedOperationException {
        String os = System.getProperty("os.name");
        System.out.println(os);
        if (os.toLowerCase().startsWith("windows"))
            return new WinClock();
        else
            throw new UnsupportedOperationException("Unsupported OS!");
    }
    
    /**
     * Das Datum neu setzen.
     */
    public void resetClock(java.util.Date date) {
        Calendar cal = new GregorianCalendar();
        cal.setTime(date);
        int year   = cal.get(Calendar.YEAR);
        int month  = cal.get(Calendar.MONTH)+1;
        int day    = cal.get(Calendar.DAY_OF_MONTH);
        int hour   = cal.get(Calendar.HOUR_OF_DAY);
        int minute = cal.get(Calendar.MINUTE);
        int second = cal.get(Calendar.SECOND);
        resetClockImpl(year, month, day, hour, minute, second);
    }
    
    /** 
     Die - betriebssystem-abhängige - Methode zum Setzen des Datums
     */
    public abstract void resetClockImpl(int year, int month,  int day, 
                                      int hour, int minute, int second);
}


