NetworkOperation.java

/*
 * Copyright © 2012 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.network;

import java.io.ByteArrayInputStream;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.InputSource;
import org.xml.sax.helpers.DefaultHandler;

/**
 * Abstract class for network operations.
 * @author user
 */
public abstract class NetworkOperation {

    public static final int METHOD_GET = 1;
    public static final int METHOD_POST = 2;

    /**
     * Parses XML using a given event handler.
     * @param response XML to be parsed
     * @param handler Event handler
     * @throws ParseError
     */
    protected void parse(String response, DefaultHandler handler)
        throws ParseException {
        try {
            SAXParserFactory factory = SAXParserFactory.newInstance();
            SAXParser parser = factory.newSAXParser();
            InputSource source =
                new InputSource(
                new ByteArrayInputStream(response.getBytes()));
            parser.parse(source, handler);
        }
        catch (Exception e) {
            throw new ParseException(e.getMessage());
        }
    }

    /**
     * Starts the operation in asynchronous manner.
     */
    public abstract void start();

    /**
     * HTTP method the operation uses.
     * @return METHOD_GET or METHOD_POST
     */
    public int getMethod() {
        return METHOD_GET;
    }

    /**
     * Url for the operation.
     * @return url
     */
    public abstract String getUrl();

    /**
     * Request data.
     * @return data
     */
    public String getData() {
        return "";
    }

    /**
     * Content type for the request data.
     * @return content type
     */
    public String getContentType() {
        return "application/x-www-form-urlencoded";
    }

    /**
     * Default implementation for interface callback.
     * @param response
     */
    public void networkHttpPostResponse(String response) {
        System.out.println("Post response IGNORED");
    }

    /**
     * Default implementation for interface callback.
     * @param data
     */
    public void networkHttpGetResponse(byte[] data) {
        System.out.println("Get response IGNORED");
    }
}