/*
 * Created on 30.11.2004
 * $Id: KirjastoStories.java,v 1.4 2004/12/07 10:24:22 mttuomai Exp $
 */
package acceptance;

import kirjasto.Kommentti;
import kirjasto.Laina;
import kirjasto.Lainaaja;
import kirjasto.Nide;
import kirjasto.Teos;

import org.nakedobjects.object.NakedObject;
import org.nakedobjects.object.ObjectStoreException;
import org.nakedobjects.testing.AbstractView;
import org.nakedobjects.testing.AcceptanceTest;
import org.nakedobjects.testing.ClassView;
import org.nakedobjects.testing.View;

/**
 * @author ji
 */
public class KirjastoStories extends AcceptanceTest {

        private ClassView lainat;
        private ClassView lainaajat;
        private ClassView niteet;

        /**
         * 
         * @param name
         */
        public KirjastoStories(String name) {
                super(name);
        }

        /*
         * @see org.nakedobjects.testing.AcceptanceTest#runStories()
         */
        public void runStories() {
                story1Lainaus();
                story2Palautus();
                story3Tiedustelu();
                story4Tilauspyyntö();
        }

        /*
         * @see org.nakedobjects.testing.AcceptanceTest#setUp()
         */
        public void setUp() {
                registerClass(Kommentti.class);
                registerClass(Laina.class);
                registerClass(Lainaaja.class);
                registerClass(Nide.class);
                registerClass(Teos.class);

                /* story2 */
                lainaajat = getClassView("Lainaajat");
                View nasu = lainaajat.newInstance();
                nasu.fieldEntry("Etunimi", "Nasu");
                nasu.checkTitle("Nasu ");

                ClassView teokset = getClassView("Teokset");
                View suuretSeikkailut = teokset.newInstance();
                suuretSeikkailut.fieldEntry("Teoksen Nimi", "Suuret seikkailut");

                niteet = getClassView("Niteet");
                View nasunNide = niteet.newInstance();
                suuretSeikkailut.drop("Niteet", nasunNide.drag());

                lainat = getClassView("Lainat");
                View nasunLaina = lainat.newInstance();
                nasunLaina.drop("Lainaaja", nasu.drag());
                nasunLaina.drop("Nide", nasunNide.drag());

                /* story1 */

                View mehilaiset = teokset.newInstance();
                mehilaiset.fieldEntry("Teoksen Nimi", "Mehiläiset ja minä");

                View mehilaisNide = niteet.newInstance();
                mehilaiset.drop("Niteet", mehilaisNide.drag());
        }

        // TODO Huomio! Tarinat saattaa olla puutteellisia.

        public void story1Lainaus() {
                story("Nalle Puh, uusi asiakas, lainaa kirjan 'Mehiläiset ja minä'");

                step("Rekisteröidään Puh uudeksi asiakkaaksi.");
                View puh = lainaajat.newInstance();
                puh.fieldEntry("Etunimi", "Nalle");
                puh.fieldEntry("Sukunimi", "Puh");
                step("Etsitään kirjan tiedot.");
                View nide = niteet.findInstance("Mehiläiset ja minä _ 1");
                step("Lainataan kirja.");
                View laina = lainat.newInstance();
                laina.drop("Lainaaja", puh.drag());
                laina.drop("Nide", nide.drag());
        }

        public void story2Palautus() {
                story("Nasu palauttaa kirjan 'Suuret seikkailut'.");
                step("Etsitään lainaus.");

                /* FIXME seuraava rivi ei jostain syystä enää toimi */
                //View lainaus = lainat.findInstance("Nasu  Suuret seikkailut _ 1");
                step("Merkitään kirja palautetuksi.");
                /* FIXME miten laina tuhotaan? */
                //lainaus.rightClick("Destroy object");
                //lainaus.removeReference("Nide");
                //lainaus.checkField("Nide", (NakedObject) null);
        }

        public void story3Tiedustelu() {
                story("Valkoinen Kani pyytää selvittämään kaikki hänellä lainassa"
                                + " olevat kirjat, koska hän ei kiireissään muista niitä,"
                                + " ja palautuspäiväkin alkaa hurjaa vauhtia lähetä.");
                step("Etsitään Valkoisen Kanin tiedot.");
                step("Näytetään kaikki hänen lainat.");
        }

        public void story4Tilauspyyntö() {
                story("Irvikissa ehdottaa kirjan 'Valkoinen hymy -- sinä ja"
                                + " hammashoito' hankkimista kirjastoon.");
        }

        public static void main(String[] args) {
                KirjastoStories ks = new KirjastoStories("Kirjaston käyttäjätarinat");
                ks.start();
        }
}