/** @author BEDTACI / A32BO2 
 * Tárgy:	Programozási nyelvek II. Java (BSc)
 * Oktató:	Németh Boldizsár
 * Feladat:	Elso ZH - Könyvtár
 * Határido:	2015-11-06, 20:00:00
 * Hátralévo ido:	01:21:36
*/
package konyvtar;
import java.util.Arrays;
/** Valósítsuk meg a konyvtar.Konyv osztályt,
 * amelynek az a feladata, hogy ábrázolja a 
 * könyvek adatait.
 */
public class Konyv{
	private String cim; //Két adattagja van: a cim, amely egy szöveg, és 
	private String[] kategoriak; //a kategoriak, amely szövegek egy tetszolegesen hosszú, de nem dinamikusan növekvo tömbje.

	/** Az osztály egyik konstruktora két paramétert vár:
	 * a könyv címét és kategóriáit, és egyszeruen tárolja ezeket el.
	 */
	public Konyv(String c, String[] kat){
		cim=c;
		kategoriak=new String[kat.length];
		int i=0;
		for(String k : kat){
			kategoriak[i]=k;
			i++;
		}
	}

	/** A második konstruktor a könyv adatait egyetlen szövegként kapja meg:
	 * a cím és a kategóriák. Ez utóbbiak vesszokkel vannak elválasztva.
	 * Ha nincsenek kategóriák, akkor a szöveg nem tartalmaz vesszot.
	 * A konstruktor bontsa szét a szöveget, és töltse fel az adattagokat.
	 */
	public Konyv(String str){
		String[] s = str.split(",");
		cim=s[0];
		kategoriak=new String[s.length-1];
		for(int i=0;i<s.length-1;i++){
			kategoriak[i]=s[i+1];
		}
	}

	/** Legyen egy osztályszintu javaKonyv nevu könyv típusú adattag,
	 * amelynek a címe legyen Java, és két kategóriája legyen:
	 * java és programozas.
	 */
	public static Konyv javaKonyv=new Konyv("Java", new String[]{"java", "programozas"});
	
	/** Az adattagokhoz tartozzanak ,,getter'' és ,,setter'' muveletek.
	 * Ezek a muveletek és a konstruktorok ne szivárogtassák ki a belso állapotot:
	 * a tömb adattagok másolatait adják ki/állítsák be az adattagba,
	 * ne egyszeruen a tömb referenciáját.
	 */
	public String getCim(){
		return cim;
	}

	public String[] getKategoriak(){
		return kategoriak.clone();
		//3ICE: Arrays.copyOf(kategoriak); nincs String-hez, csak alaptípusokhoz.
		//System.arraycopy... lenne még egy alternatíva.
	}

	public void setCim(String c){
		cim=c;
	}

	public void setKategoriak(String[] ks){
		kategoriak=ks.clone();
	}

	/** Tartalmazzon az osztály saját toString megvalósítást.
	 * Az eredmény legyen "Konyv[Nev1, [katA, katB, katC, katD]",
	 * ha a könyv címe Nev1, a kategóriái pedig katA, katB, katC és katD.
	 */
	@Override
	public String toString(){
		return "Konyv["+cim+", "+Arrays.toString(kategoriak)+"]";
	}
	
	/** Legyen egy hasKategoria függvénye,
	 * amely megkapja szövegesen egy kategória nevét,
	 * és visszatér azzal, hogy a könyv a kategóriába tartozik-e vagy sem.
	 */
	public boolean hasKategoria(String k){
		for(String s : kategoriak){
			if(s.equals(k)){
				return true;
			}
		}
		return false;
	}
}