package org.springframework.prospring.ticket.domain;

import java.util.*;

/**
 * Reprezentuje strukturę cen dla konkretnego przedstawienia. Struktura cen przechowuje
 * grupy cenowe, z których każda określa cenę miejsc należących do konkretnej kategorii.
 */
public class PriceStructure {

    // identyfikators struktury cen.
    private long id;

    // nazwa struktury cen.
    private String name;

    // grupy cenowe należące do tej struktury cen.
    private Set priceBands;

    /**
     * Pusty konstruktor wymagany przez specyfikację javabean.
     */
    public PriceStructure() {
        priceBands = new HashSet();
    }

    /**
     * Konstruktor - tworzy nową strukturę cen o podanej nazwie.
     * @param name Nazwa struktury cen.
     */
    public PriceStructure(String name) {
        priceBands = new HashSet();
        this.name = name;
    }

    /**
     * Zwraca identyfikator struktury cen.
     * @return Identyfikator struktury cen.
     */
    public long getId() {
        return id;
    }

    /**
     * Ustawia identyfikator struktury cen.
     * @param id Identyfikator struktury cen.
     */
    public void setId(long id) {
        this.id = id;
    }

    /**
     * Zwraca nazwę struktury cen.
     * @return Nazwa struktury cen.
     */
    public String getName() {
        return name;
    }

    /**
     * Ustawia nazwę struktury cen.
     * @param name Nazwa struktury cen.
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * Zwraca grupy cenowe należące do tej struktury cen.
     * @return Grupy cenowe należące do tej struktury cen.
     */
    public Set getPriceBands() {
        return priceBands;
    }

    /**
     * Ustawia grupy cenowe należące do tej struktury cen.
     * @param priceBands Grupy cenowe należące do tej struktury cen.
     */
    public void setPriceBands(Set priceBands) {
        this.priceBands = priceBands;
    }

    /**
     * Dodaje nową grupę cenową do tej struktury cen.
     * @param priceBand Grupa cenowa którą należy dodać do tej struktury cen.
     */
    public void addPriceBand(PriceBand priceBand) {
        priceBands.add(priceBand);
    }

    /**
     * Usuwa przekazaną grupę cenową z tej struktury cen.
     * @param priceBand Grupa cenowa jaką należy usunąć ze struktury cen.
     */
    public void removePriceBand(PriceBand priceBand) {
        priceBands.remove(priceBand);
    }

}
