<?php

/**
 *
 * @author Peter Csubak (chuby)
 * @copyright Peter Csubak (chuby)
 */
class Event{

	private $name;
	private $sender; //csak objektum lehet, nem ártna checkolni sem beállításkor
	private $lock;
	
	/**
	 * Alap konstruktor, létrehoz egy Event típusú példányt, és annak lockolását üres-string-re 
	 * állítja.
	 */
	public function __construct(){
		$this->lock = "";
	}
	
	/**
	 * Az esemény nevét adja vissza. (Általában az események nevét nem használjuk, de 
	 * egyelőre nem lesz deprecated, egészen az első publikus beta lezárásáig)
	 * @return string Az esemény neve. 
	 */
	public function getName(){
		return $this->name;
	}
	
	/**
	 * Beállítja az esemény nevét. (Általában az események nevét nem használjuk, de 
	 * egyelőre nem lesz deprecated, egészen az első publikus beta lezárásáig)
	 * @param string $name Az esemény neve.
	 */
	public function setName($name){
		$this->name = $name;
	}
	
	/**
	 * Lekérdezi az esemény forrásául szolgáló küldőt. (A küldőt az az objektum reprezentálja,
	 * amelyik az eseményt kiváltja, vagy amelyik objektumhoz eredetileg tartoik. - Nyilván
	 * ez utóbbi eset akkor áll fent, ha a kiváltó nem a rendszeren belülről származik, például
	 * Ajax események esetén.)
	 * @return object A küldő objektum referenciája.
	 */
	public function getSender(){
		return $this->sender;
	}
	
	/**
	 * Beállítja az esemény forrásául szolgáló küldőt. (A küldőt az az objektum reprezentálja,
	 * amelyik az eseményt kiváltja, vagy amelyik objektumhoz eredetileg tartoik. - Nyilván
	 * ez utóbbi eset akkor áll fent, ha a kiváltó nem a rendszeren belülről származik, például
	 * Ajax események esetén.) (Ajax események esetén ezzel az AjaxConnector foglalkozik.)
	 * @param object $sender A küldő objektum referenciája.
	 */
	public function setSender($sender){
		$this->sender = $sender;
	}
	
	/**
	 * Beállítja az esemény zárolását. A zárolás az eseményszórásban résztvevő címzettek szűkításáre
	 * szolgál. Ezeket az eseményeket csak azok a metódusok kapják meg, amelyeknek van hozzá kulcsuk.
	 * A zárak ellenőrzésével az EventHandler foglalkozik.
	 * @param string $lock Az esemény zárja. (Lényeges, hogy string kompatibilis legyen, mert a kulcsok
	 * megadhatóak kell legyenek annotációkban is.) 
	 */
	public function setLock($lock){
		$this->lock = $lock;
	}
	
	/**
	 * Eldönti, hogy az adott kulcs illik-e az esemény zárolásához. Amennyiben az esemény zárolása
	 * üres-string, akkor a bármilyen kulcsal, és kulcs nélkül is "illeszkedni fog". (Ezt a metódust
	 * az EventHandler használja.)
	 * @param string $key A zárolás feloldásához használni kívánt kulcs. (Kötelezően string kompatibilisnek
	 * kell lennie.)  
	 * @return boolean Amennyiben a megadott kulcs illeszkedik, vagy az eseménynek nincs zárolása (üres-string)
	 * akkor igaz érték, minden más esetben pedig hamis.
	 * TODO Javítani a dokumentációt!!!
	 */
	public function isUnlocking($key){
		//return (($this->lock == "") || ($this->lock == $key));
		return $this->lock == $key;
	}
	
}
?>