org.motechproject.mobile.omp.service.SMSMessagingServiceWorkerImpl.java Source code

Java tutorial

Introduction

Here is the source code for org.motechproject.mobile.omp.service.SMSMessagingServiceWorkerImpl.java

Source

/**
 * MOTECH PLATFORM OPENSOURCE LICENSE AGREEMENT
 *
 * Copyright (c) 2010-11 The Trustees of Columbia University in the City of
 * New York and Grameen Foundation USA.  All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * 1. Redistributions of source code must retain the above copyright notice,
 * this list of conditions and the following disclaimer.
 *
 * 2. Redistributions in binary form must reproduce the above copyright notice,
 * this list of conditions and the following disclaimer in the documentation
 * and/or other materials provided with the distribution.
 *
 * 3. Neither the name of Grameen Foundation USA, Columbia University, or
 * their respective contributors may be used to endorse or promote products
 * derived from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY GRAMEEN FOUNDATION USA, COLUMBIA UNIVERSITY
 * AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
 * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL GRAMEEN FOUNDATION
 * USA, COLUMBIA UNIVERSITY OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
 * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.motechproject.mobile.omp.service;

import org.apache.log4j.Logger;
import org.motechproject.mobile.core.model.GatewayRequest;
import org.motechproject.mobile.core.model.GatewayResponse;
import org.motechproject.mobile.core.model.MStatus;
import org.motechproject.mobile.core.util.MotechException;
import org.motechproject.mobile.omp.manager.GatewayManager;
import org.motechproject.mobile.omp.manager.GatewayMessageHandler;
import org.motechproject.ws.ContactNumberType;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 *
 * @author Henry Sampson
 */
public class SMSMessagingServiceWorkerImpl implements SMSMessagingServiceWorker {

    private CacheService cache;
    private GatewayManager gatewayManager;
    private static Logger logger = Logger.getLogger(SMSMessagingServiceWorkerImpl.class);

    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public Map<Boolean, Set<GatewayResponse>> sendMessage(GatewayRequest gatewayRequest) {
        logger.debug("Sending message to gateway");
        Set<GatewayResponse> responseList = null;
        Map<Boolean, Set<GatewayResponse>> result = new HashMap<Boolean, Set<GatewayResponse>>();
        try {
            if ((gatewayRequest.getRecipientsNumber() == null || gatewayRequest.getRecipientsNumber().isEmpty())
                    && !ContactNumberType.PUBLIC.toString()
                            .equals(gatewayRequest.getMessageRequest().getPhoneNumberType())) {
                gatewayRequest.setMessageStatus(MStatus.INVALIDNUM);
            } else {
                responseList = this.getGatewayManager().sendMessage(gatewayRequest);
                result.put(true, responseList);
                logger.debug(responseList);
                logger.debug("Updating message status");
                gatewayRequest.setResponseDetails(responseList);
                gatewayRequest.setMessageStatus(MStatus.SENT);
            }
        } catch (MotechException me) {
            logger.error("Error sending message", me);
            gatewayRequest.setMessageStatus(MStatus.SCHEDULED);

            GatewayMessageHandler orHandler = getGatewayManager().getMessageHandler();
            responseList = orHandler.parseMessageResponse(gatewayRequest,
                    "error: 901 - Cannot Connect to gateway | Details: " + me.getMessage());
            result.put(false, responseList);
        }
        this.getCache().mergeMessage(gatewayRequest);

        return result;
    }

    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void updateMessageStatus(GatewayResponse response) {
        if (response != null) {
            response.setResponseText(getGatewayManager().getMessageStatus(response));
            response.setMessageStatus(getGatewayManager().mapMessageStatus(response));

            getCache().saveResponse(response);
        }
    }

    /**
     * @return the cache
     */
    public CacheService getCache() {
        return cache;
    }

    /**
     * @param cache the cache to set
     */
    public void setCache(CacheService cache) {
        this.cache = cache;
    }

    /**
     * @return the gatewayManager
     */
    public GatewayManager getGatewayManager() {
        return gatewayManager;
    }

    /**
     * @param gatewayManager the gatewayManager to set
     */
    public void setGatewayManager(GatewayManager gatewayManager) {
        this.gatewayManager = gatewayManager;
    }
}