/*
* Created on 23.11.2004
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package kirjasto;
import org.nakedobjects.object.AbstractNakedObject;
import org.nakedobjects.object.Title;
import org.nakedobjects.object.collection.InternalCollection;
import org.nakedobjects.object.value.TextString;
import org.nakedobjects.object.value.WholeNumber;
/**
* @author mmhilleb
*
* Teos käsittää perustietoja, kuten nimi, tekijät,
* julkaisuvuosi... kaikkea sellaista,
* mitä ei kuitenkaan oikeasti jaksa täyttää.
*/
public class Teos extends AbstractNakedObject {
public static final long serialVersionUID = 1L;
private final TextString teoksenNimi;
private final WholeNumber julkaisuVuosi;
private final TextString isbn;
private final TextString tekijat;
private final WholeNumber sivumaara;
private final InternalCollection kommentit; // Kommentti kommentti;
private final InternalCollection niteet;
private int seuraavan_niteen_id;
// "Rakenteellinen" rakennin
public Teos() {
teoksenNimi = new TextString();
tekijat = new TextString();
julkaisuVuosi = new WholeNumber();
isbn = new TextString();
sivumaara = new WholeNumber();
niteet = new InternalCollection(Nide.class, this);
kommentit = new InternalCollection(Kommentti.class, this);
seuraavan_niteen_id = 0;
}
// "Toiminnallinen" rakennin
public void created() {
// aika vähäsesti toimintaa :)
}
public TextString getTeoksenNimi() {
return teoksenNimi;
}
/**
* todo: tee intiks
* @return
*/
public WholeNumber getJulkaisuVuosi() {
return julkaisuVuosi ;
}
/**
* @return Returns the isbn.
*/
public TextString getIsbn() {
return isbn;
}
/**
* @return Returns the sivumaara.
*/
public WholeNumber getSivumaara() {
return sivumaara;
}
/**
* @return Returns the tekijat.
*/
public TextString getTekijat() {
return tekijat;
}
// Yksinkertaisen otsikon rakentimet
public static String singularName() {
return "Teoksen tiedot";
}
public static String pluralName() {
return "Teokset";
}
public Title title() {
// erikoisemman otsikon rakennin
String kirjannimi = teoksenNimi.stringValue();
if (kirjannimi == null) kirjannimi = "Uusi kirja";
return new Title( kirjannimi + " Jonnen kirjastossa");
}
public InternalCollection getKommentit() {
//resolve(kommentti);
return kommentit;
}
/**
* Kommentin liittäminen teokseen
* @param uusKommentti
*/
public void associateKommentit(Kommentti uusKommentti) {
//kommentti = uusKommentti;
if (! uusKommentti.allowAssociation(this)) return;
kommentit.add(uusKommentti);
uusKommentti.associateOlio(this);
objectChanged();
}
/**
* Kommentin poistaminen kokoelmista.
* @param k
*/
public void dissociateKommentti(Kommentti k) {
if (kommentit.contains(k)) {
kommentit.remove(k);
k.dissociateOlio(this);
objectChanged();
}
}
/**
* Listataan teoksen niteet
* @return
*/
public InternalCollection getNiteet() {
return niteet;
}
/**
* Lisätään toksesta uusi nide
* @param n
*/
public void setNide(Nide n) {
n.setTeos(this);
if (! n.matchesTeos(this)) return; // vertailua ei pitäis tehdä näin
if (! niteet.contains(n)) { // lisätään nide kokoelmiin
niteet.add(n);
objectChanged();
}
}
/**
* Wrapperi tekniikan haluamasta nimestä omaan toteutukseen..
* @param n
*/
public void associateNiteet(Nide n) {
setNide(n);
}
/**
* Niteen poistaminen / poistuminen
*/
public void dissociateNiteet(Nide n) {
n.setTeos(null);
getNiteet().remove(n);
}
/**
* Palauttaa sueraavan id:n, jota nide voi käyttää itsensä
* "rekisteröintiin"
* @return
*/
public int getNextID() {
return ++this.seuraavan_niteen_id;
}
}