
/*
 * $Id: ClockingEntry.java,v 1.2 2003/06/16 13:31:27 tbayer Exp $
 *
 * Copyright (c) 2002 Orientation in Objects GmbH
 * Weinheimer Str. 68, D - 68309 Mannheim, Germany
 * All rights reserved.
 *
 * Reverse Engineering, Aendern und Erweitern dieser Software ist nur
 * mit ausdruecklicher schriftlicher Genehmigung von Orientation in
 * Objects gestattet.
 */

/*
   $Log: ClockingEntry.java,v $
   Revision 1.2  2003/06/16 13:31:27  tbayer
   Umstellung auf JDK 1.4 Homepage

   Revision 1.1  2002/04/03 14:47:10  tbayer
   *** empty log message ***

 */
package de.oio.zeiterfassung.midp;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;

import java.util.Calendar;
import java.util.Date;

/**
 * Klasse zur Speicherung eines Stechuhreintrags (ClockingEntry).
 *
 * @author $Author: tbayer $
 * @version $Revision: 1.2 $<br/>
 * $Date: 2003/06/16 13:31:27 $<br/>
 */
public class ClockingEntry {

    private boolean isInEntry;
    private long    timeMillis;

    private ClockingEntry(boolean isInEntry, long currentTimeMillis) {
        this.isInEntry  = isInEntry;
        this.timeMillis = currentTimeMillis;
    }

    public static ClockingEntry getInClockingEntry() {
        return new ClockingEntry(true, System.currentTimeMillis());
    }

    public static ClockingEntry getOutClockingEntry() {
        return new ClockingEntry(false, System.currentTimeMillis());
    }

    public boolean isInEntry() {
        return isInEntry;
    }

    public boolean isOutEntry() {
        return !isInEntry;
    }

    public long getTime() {
        return timeMillis;
    }

    public String toString() {

        Calendar calendar = Calendar.getInstance();

        calendar.setTime(new Date(getTime()));

        return (isInEntry
                ? "IN: "
                : "OUT: ") + calendar.toString();
    }

    public byte[] toByteArray() throws IOException {

        ByteArrayOutputStream bout = new ByteArrayOutputStream();
        DataOutputStream      dout = new DataOutputStream(bout);

        dout.writeBoolean(isInEntry());
        dout.writeLong(getTime());
        dout.flush();

        return bout.toByteArray();
    }

    public static ClockingEntry getInstanceFromByteArray(byte[] data) throws IOException {

        ByteArrayInputStream bin = new ByteArrayInputStream(data);
        DataInputStream      din = new DataInputStream(bin);

        return new ClockingEntry(din.readBoolean(), din.readLong());
    }
}    // ClockingEntry


