org.openiot.gsn.http.rest.PushDelivery.java Source code

Java tutorial

Introduction

Here is the source code for org.openiot.gsn.http.rest.PushDelivery.java

Source

/**
*    Copyright (c) 2011-2014, OpenIoT
*   
*    This file is part of OpenIoT.
*
*    OpenIoT is free software: you can redistribute it and/or modify
*    it under the terms of the GNU Lesser General Public License as published by
*    the Free Software Foundation, version 3 of the License.
*
*    OpenIoT is distributed in the hope that it will be useful,
*    but WITHOUT ANY WARRANTY; without even the implied warranty of
*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*    GNU Lesser General Public License for more details.
*
*    You should have received a copy of the GNU Lesser General Public License
*    along with OpenIoT.  If not, see <http://www.gnu.org/licenses/>.
*
*     Contact: OpenIoT mailto: info@openiot.eu
 * @author Ali Salehi
 * @author Mehdi Riahi
 * @author Timotee Maret
*/

package org.openiot.gsn.http.rest;

import org.openiot.gsn.beans.DataField;
import org.openiot.gsn.beans.StreamElement;

import java.io.IOException;
import java.io.Writer;
import java.util.ArrayList;

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import org.apache.log4j.Logger;

import com.thoughtworks.xstream.XStream;

public class PushDelivery implements DeliverySystem {

    public static final String NOTIFICATION_ID_KEY = "notification-id";

    public static final String LOCAL_CONTACT_POINT = "local-contact-point";

    public static final String DATA = "data";

    private XStream xstream = StreamElement4Rest.getXstream();

    private boolean isClosed = false;

    private static transient Logger logger = Logger.getLogger(PushDelivery.class);

    private HttpPut httpPut;

    private DefaultHttpClient httpclient = new DefaultHttpClient();

    private Writer writer;

    private double notificationId;

    public PushDelivery(String deliveryContactPoint, double notificaitonId, Writer writer) {
        httpPut = new HttpPut(deliveryContactPoint);

        this.writer = writer;
        this.notificationId = notificaitonId;
    }

    public void writeStructure(DataField[] fields) throws IOException {
        String xml = xstream.toXML(fields);
        if (writer == null)
            throw new RuntimeException("The writer structue is null.");
        writer.write(xml);
        writer = null;
    }

    public boolean writeStreamElement(StreamElement se) {
        String xml = xstream.toXML(new StreamElement4Rest(se));
        boolean success = sendData(xml);
        //      boolean success =true;
        isClosed = !success;
        return success;
    }

    public boolean writeKeepAliveStreamElement() {
        return true;
    }

    public void close() {
        httpclient.getConnectionManager().shutdown();
        isClosed = true;
    }

    public boolean isClosed() {
        return isClosed;
    }

    private boolean sendData(String xml) {
        try {
            ArrayList<NameValuePair> postParameters = new ArrayList<NameValuePair>();
            postParameters
                    .add(new BasicNameValuePair(PushDelivery.NOTIFICATION_ID_KEY, Double.toString(notificationId)));
            postParameters.add(new BasicNameValuePair(PushDelivery.DATA, xml));

            httpPut.setEntity(new UrlEncodedFormEntity(postParameters, HTTP.UTF_8));

            HttpResponse response = httpclient.execute(httpPut);

            int statusCode = response.getStatusLine().getStatusCode();
            response.getEntity().getContent().close(); // releasing the connection to the http client's pool
            if (statusCode != RestStreamHanlder.SUCCESS_200) {
                return false;
            }
            return true;
        } catch (Exception e) {
            logger.warn(e.getMessage(), e);
            return false;
        }

    }

    @Override
    public boolean equals(Object o) {
        if (this == o)
            return true;
        if (o == null || getClass() != o.getClass())
            return false;
        PushDelivery that = (PushDelivery) o;
        if (Double.compare(that.notificationId, notificationId) != 0)
            return false;
        if (httpPut != null ? !httpPut.getURI().equals(that.httpPut.getURI()) : that.httpPut != null)
            return false;
        return true;
    }

    @Override
    public int hashCode() {
        int result;
        long temp;
        result = httpPut != null ? httpPut.getURI().hashCode() : 0;
        temp = notificationId != +0.0d ? Double.doubleToLongBits(notificationId) : 0L;
        result = 31 * result + (int) (temp ^ (temp >>> 32));
        return result;
    }
}