/*
 * $Id: VKCUserDocMail
 *
 * Copyright (c) Siemens AG 2008 
 *           (c) Universität Paderborn 2008 
 * Licensed under EUPL 1.1. 
 *
 * $Log: VKCUserDocMail.java,v $
 * Revision 1.13  2008/02/12 09:39:47  korowa
 * + Eine Möglichkeit für den Benutzer hinzugefügt die Emailsart auszuwählen (HTML oder Plaintext)
 * + Betreff für den Messenger der als Emailsubject bei Benachrichtigung übers erscheinen von VKC Dokumenten verschickt wird.
 *
 * Revision 1.12  2007/08/08 12:14:50  marbobo
 * + License-Funktionalität komplett umgeschrieben
 * + Bugfix bzgl. Beschreibungsfelder von Entitäten
 * + Bugfix mailing
 *
 * Revision 1.11  2007/06/29 13:40:19  marbobo
 * + Bugfix (Vermeiden von doppel Benachrichtigungen)
 *
 * Revision 1.10  2004/08/20 12:38:47  koppy
 * + relQuery
 *
 * Revision 1.9  2004/07/20 08:18:23  jonyp
 * added copyright info + cvs log
 *
 */
package vkc.db.entities;

import java.sql.Timestamp;

/**
 * Klasse stellt eine UserDocMail im VKC-System dar
 * 
 * @author jonyP
 */
public class VKCUserDocMail implements java.io.Serializable {
    public static final int NOT_PROCESSED = 0;
    public static final int PROCESSED = 1;
    public static final int PROCESSED2 = 2;
    
    private static final long oneDayMillis = 24L * 60L * 60L * 1000L;

    private Integer udmId = null;

    private VKCUser user = null;

    private VKCDocument document = null;

    private VKCDocument relDoc = null;

    private VKCSearchQuery relQuery = null;

    private Timestamp sendOn = null;

    private Integer processed = new Integer(NOT_PROCESSED);

    private Timestamp wasSendAt = null;
    
    private String subject = null;

    public VKCUserDocMail() {
    }

    public VKCUserDocMail(VKCUser user, VKCDocument document) {
        this.user = user;
        this.document = document;
    }

    public void setUdmId(Integer Id) {
        this.udmId = Id;
    }

    public Integer getUdmId() {
        return this.udmId;
    }

    public void setUser(VKCUser user) {
        this.user = user;
    }

    public VKCUser getUser() {
        return this.user;
    }

    public void setDocument(VKCDocument document) {
        this.document = document;
    }

    public VKCDocument getDocument() {
        return this.document;
    }

    public void setSendOn(Timestamp sendOn) {
        this.sendOn = sendOn;
    }

    public Timestamp getSendOn() {
        return this.sendOn;
    }

    public void setWasSendAt(Timestamp sendAt) {
        this.wasSendAt = sendAt;
    }

    public Timestamp getWasSendAt() {
        return this.wasSendAt;
    }

    public Integer getProcessed() {
        return processed;
    }

    public int getProcessedIntValue() {
        return processed == null ? -1 : processed.intValue();
    }

    public boolean isTimeToDelete() {
        boolean delete = getProcessedIntValue() == PROCESSED2 && getWasSendAt() != null; 
        
        if (delete && (System.currentTimeMillis() - getWasSendAt().getTime()) >= oneDayMillis) {
            return true;
        }

        return false;
    }

    public void setProcessed(Integer processed) {
        this.processed = processed;
    }

    public VKCDocument getRelDoc() {
        return relDoc;
    }

    public void setRelDoc(VKCDocument document) {
        relDoc = document;
    }

    public boolean isTimeToSetInvalid() {
        boolean setInvalid = getUser() != null && getWasSendAt() != null;
        
        if (setInvalid && (System.currentTimeMillis() - getWasSendAt().getTime()) > (getUser().getMessagingTimePeriod().longValue() * 60L * 1000L)) {
            return true;
        }

        return false;
    }

    public VKCSearchQuery getRelQuery() {
        return relQuery;
    }

    public void setRelQuery(VKCSearchQuery relQuery) {
        this.relQuery = relQuery;
    }

    public String getSubject() {
        return subject;
    }

    public void setSubject(String subject) {
        this.subject = subject;
    }
}