de.hdu.zimmerbelegung.model.BelegungKopf.java Source code

Java tutorial

Introduction

Here is the source code for de.hdu.zimmerbelegung.model.BelegungKopf.java

Source

/*******************************************************************************
 * Copyright (c) 2012 Stefan Feilmeier, Roland Khnel, Franz Wagner.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the GNU Public License v3.0
 * which accompanies this distribution, and is available at
 * http://www.gnu.org/licenses/gpl.html
 ******************************************************************************/
package de.hdu.zimmerbelegung.model;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OrderBy;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.joda.time.LocalDate;

import com.sun.istack.internal.NotNull;

import de.hdu.zimmerbelegung.helper.BelegungArt;

/**
 * @author Stefan Feilmeier, Roland Khnel, Franz Wagner
 */
@Entity
public class BelegungKopf {
    @OneToMany(targetEntity = Belegung.class, mappedBy = "belegungKopf", fetch = FetchType.EAGER)
    @Cascade({ CascadeType.SAVE_UPDATE })
    @OrderBy("datum")
    private List<Belegung> belegungen = new ArrayList<Belegung>();

    @ManyToOne(targetEntity = Gast.class, optional = false)
    @NotNull
    private Gast gastid;

    @Id
    @GeneratedValue
    private int id;

    /**
     * (default-) constructor for class BelegungKopf 
     */
    public BelegungKopf() {
        super();
    }

    /**
     * constructor for class BelegungKopf
     * @param gast creates a new BelegungKopf object with given Gast object 
     */
    public BelegungKopf(Gast gast) {
        gastid = gast;
    }

    /**
     * getArt
     * @return returns a object of type BelegungArt, for example "frei" or "reserviert" 
     */
    public BelegungArt getArt() {
        if (belegungen.size() > 0) {
            return belegungen.get(0).getArt();
        } else {
            return BelegungArt.RESERVIERUNG;
        }
    }

    /**
     * getBelegungen
     * @return returns a List of type Belegung 
     */
    public List<Belegung> getBelegungen() throws Exception {
        pruefeKonsistenz();
        return belegungen;
    }

    /**
     * getDatumBis
     * @return returns the date of the last booking or reservation
     */
    public LocalDate getDatumBis() {
        if (belegungen.size() > 0) {
            return belegungen.get(belegungen.size() - 1).getDatum();
        } else {
            return null;
        }
    }

    /**
     * getDatumVon
     * @return returns the date of the first booking or reservation
     */
    public LocalDate getDatumVon() {
        if (belegungen.size() > 0) {
            return belegungen.get(0).getDatum();
        } else {
            return null;
        }
    }

    /**
     * getGast
     * @return returns the Gast of the first booking or reservation, should be the same for all
     */
    public Gast getGast() {
        if (belegungen.size() > 0) {
            return belegungen.get(0).getGast();
        } else {
            return null;
        }
    }

    public Gast getGastid() {
        return gastid;
    }

    public int getId() {
        return id;
    }

    /**
     * getZimmer
     * @return returns the Zimmer of the first booking or reservation, should be the same for all
     */
    public Zimmer getZimmer() {
        if (belegungen.size() > 0) {
            return belegungen.get(0).getZimmer();
        } else {
            return null;
        }
    }

    /**
     * pruefeKonsistenz
     * checks, if all guests, rooms, type of booking and timespan is not interrupted 
     */
    private void pruefeKonsistenz() throws Exception {
        Gast gast = getGast();
        Zimmer zimmer = getZimmer();
        LocalDate datum = getDatumVon();
        BelegungArt art = getArt();
        for (Belegung belegung : belegungen) {
            if (!belegung.getGast().equals(gast))
                throw new Exception("Konsistenzfehler: Unterschiedliche Gste in Belegung [" + getId() + "/"
                        + belegung.getId() + "]");
            if (!belegung.getZimmer().equals(zimmer))
                throw new Exception("Konsistenzfehler: Unterschiedliche Zimmer in Belegung [" + getId() + "/"
                        + belegung.getId() + "]");
            if (!belegung.getDatum().isEqual(datum))
                throw new Exception("Konsistenzfehler: Zeitraum der Belegung ist nicht durchgngig [" + getId()
                        + "/" + belegung.getId() + "]");
            if (belegung.getArt() != art)
                throw new Exception("Konsistenzfehler: Art der Belegung ist nicht durchgngig [" + getId() + "/"
                        + belegung.getId() + "]");
            datum = datum.plusDays(1);
        }
    }

    public void setBelegungen(List<Belegung> belegungen) {
        this.belegungen = belegungen;
    }

    public void setGastid(Gast gastid) {
        this.gastid = gastid;
    }

}