import org.xml.sax.*;
import org.xml.sax.helpers.DefaultHandler;

public class MyHandler extends DefaultHandler
{
    private SAXBooks books; 
    private boolean readingAutor;
    private boolean readingTytuł;
    private boolean readingCena;

    public SAXBooks getKsiążki()
    {
        return this.książki;
    }

    public void startElement( String uri,
                              String nazwa_lokalna,
                              String nazwa_kwalifikowana,
                              Attributes atrybuty )
    {
        System.out.println( "Znaleziony element: " + nazwa_kwalifikowana );
        if( nazwa_kwalifikowana.equalsIgnoreCase( "książki" ) )
        {
            książki = new SAXBooks();
        }
        else if( nazwa_kwalifikowana.equalsIgnoreCase( "książka" ) )
        {
            SAXBook książka = new SAXBook();
            for( int i=0; i<atrybuty.getLength(); i++ )
            {
                if( atrybuty.getQName( i ).equalsIgnoreCase( "kategoria" ) )
                {
                     książka.setKategoria( atrybuty.getValue( i ) );
                }
            }
            książki.addKsiążka( książka );
        }
        else if( nazwa_kwalifikowana.equalsIgnoreCase( "autor" ) )
        {
            this.readingAutor = true;
        }
        else if( nazwa_kwalifikowana.equalsIgnoreCase( "tytuł" ) )
        {
            this.readingTytuł = true;
        }
        else if( nazwa_kwalifikowana.equalsIgnoreCase( "cena" ) )
        {
            this.readingCena = true;
        }
        else
        {
            System.out.println( "Nieznany element: " + nazwa_kwalifikowana );
        }
    }

    public void startDocument() 
    {
        System.out.println( "Rozpoczęte..." );
    }

    public void endDocument() 
    {
        System.out.println( "Zakończone..." );
    }
    
    public void characters( char[] ch,
                            int start,
                            int długość )
    {
String znaki = new String( ch, start, długość).trim();
        if( znaki.length() == 0 )
        {
            return;
        }

        SAXBook książka = książki.getOstatnia();
        if( readingAutor )
        {
            książka.setAutor( znaki ); 
        }
        else if( readingTytuł )
        {
            książka.setTytuł( znaki ); 
        }
        else if( readingCena )
        {
            książka.setCena( Float.parseFloat( znaki ) );
        }
    }
                
    public void endElement( String uri,
                            String nazwa_lokalna,
                            String nazwa_kwalifikowana )
    {
        System.out.println( "Ostatni element: " + nazwa_kwalifikowana );
        if( nazwa_kwalifikowana.equalsIgnoreCase( "autor" ) )
        {
            this.readingAutor = false;
        }
        else if( nazwa_kwalifikowana.equalsIgnoreCase( "tytuł" ) )
        {
            this.readingTytuł = false;
        }
        else if( nazwa_kwalifikowana.equalsIgnoreCase( "cena" ) )
        {
            this.readingCena = false;
        }
    }
}
