AttractionsParser.java

/**
* Copyright (c) 2012-2013 Nokia Corporation. All rights reserved.
* Nokia and Nokia Connecting People are registered trademarks of Nokia Corporation. 
* Oracle and Java are trademarks or registered trademarks of Oracle and/or its
* affiliates. Other product and company names mentioned herein may be trademarks
* or trade names of their respective owners. 
* See LICENSE.TXT for license information.
*/
package com.nokia.example.attractions.io;

import com.nokia.example.attractions.models.Guide;
import com.nokia.example.attractions.models.Attraction;
import java.util.Vector;
import org.xml.sax.Attributes;

/**
 * Parses the server attractions response.
 */
public final class AttractionsParser
    extends Parser {

    private final Guide guide;
    private final Vector attractions = new Vector();
    private Attraction attraction = null;

    /**
     * Constructor.
     * @param guide 
     */
    public AttractionsParser(Guide guide) {
        this.guide = guide;
    }

    public Vector getAttractions() {
        return attractions;
    }

    /**
     * @see Parser#startElement(java.lang.String, java.lang.String, java.lang.String, org.xml.sax.Attributes) 
     */
    public final void startElement(String uri, String localName, String qName,
        Attributes attributes) {
        super.startElement(uri, localName, qName, attributes);

        if (qName.equals("guide")) {
            for (int i = 0; i < attributes.getLength(); i++) {
                // Get names and values for each attribute
                String name = attributes.getQName(i);
                String value = attributes.getValue(i);
                if (name.equals("country")) {
                    guide.setCountry(value);
                }
                else if (name.equals("latitude")) {
                    guide.setLatitude(value);
                }
                else if (name.equals("longitude")) {
                    guide.setLongitude(value);
                }
                else if (name.equals("urlPrefix")) {
                    guide.setUrlPrefix(value);
                }
            }
        }
        else if (qName.equals("attraction")) {
            attraction = new Attraction();
            attraction.setGuide(guide);
            // Process each attribute
            for (int i = 0; i < attributes.getLength(); i++) {
                // Get names and values for each attribute
                String name = attributes.getQName(i);
                String value = attributes.getValue(i);
                if (name.equals("id")) {
                    attraction.setId(value);
                }
                else if (name.equals("name")) {
                    attraction.setName(value);
                }
                else if (name.equals("thumbnailUrl")) {
                    attraction.setThumbnailUrl(value);
                }
                else if (name.equals("type")) {
                    attraction.setType(value);
                }
            }
        }
    }

    /**
     * @see Parser#endElement(java.lang.String, java.lang.String, java.lang.String) 
     */
    public final void endElement(String uri, String localName, String qName) {
        //System.out.println("parsing </"+qName+">");
        String chars = getChars();
        if (qName.equals("attraction")) {
            attractions.addElement(attraction);
            attraction = null;
        }
        else if (qName.equals("street")) {
            attraction.setStreet(chars);
        }
        else if (qName.equals("latitude")) {
            attraction.setLatitude(chars);
        }
        else if (qName.equals("longitude")) {
            attraction.setLongitude(chars);
        }
        else if (qName.equals("imageUrl")) {
            attraction.setImageUrl(chars);
        }
        else if (qName.equals("description")) {
            attraction.setDescription(chars);
        }
    }
}