/*
* Copyright 2012 Nodeable Inc
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.streamreduce.core.service;
import com.streamreduce.OutboundStorageException;
import com.streamreduce.core.model.Connection;
import com.streamreduce.core.model.messages.SobaMessage;
import net.sf.json.JSONObject;
public interface OutboundStorageService {
/**
* <p>Routes a raw message to any outbound configurations defined on the passed in connection whose datatypes
* include {@link com.streamreduce.core.model.OutboundDataType#RAW} and if the passed in connection belongs to an
* account that has an active subscription or is otherwise allowed to send outbound messages. </p>
*
* <p>If a connection does not have a subscription, is not configured to send outbound, or contains no
* outboundConfigurations whose datatypes include {@link com.streamreduce.core.model.OutboundDataType#RAW} then
* this method is a noop.</p>
*
* <p>This method does not imply synchronous sending of the payload and may delay sending the payload.</p>
*
* @param jsonObject The payload to send outbound.
* @param connection The connection the passed in jsonObject should be processed outbound for.
* @return The number of times the passed in jsonObject was processed to be sent outbound.
* @throws OutboundStorageException if there was a fatal error that kept the payload from being processed to send
* outbound.
*/
int sendRawMessage(JSONObject jsonObject, Connection connection) throws OutboundStorageException;
/**
* <p>Routes a {@link SobaMessage} to any outbound configurations defined on the passed in connection whose
* datatypes match the type of SobaMessage passed in and if the passed in connection belongs to an
* account that has an active subscription or is otherwise allowed to send outbound messages. </p>
*
* <p>If a connection does not have a subscription, is not configured to send outbound, or contains no
* outboundConfigurations whose datatypes that are appropriate to the type of SobaMessage passed in, this method
* is a noop.</p>
*
* <p>A SobaMessage that returns {@link com.streamreduce.core.model.messages.MessageType#NODEBELLY} from
* {@link com.streamreduce.core.model.messages.SobaMessage#getType()} will be processed to send outbound for any
* OutboundConfigurations whose whose datatypes include {@link com.streamreduce.core.model.OutboundDataType#INSIGHT}.
* All other MessageTypes will be processed to send outbound for OutboundConfigurations whose whose datatypes
* include {@link com.streamreduce.core.model.OutboundDataType#PROCESSED}.</p>
*
* <p>This method does not imply synchronous sending of the payload and may delay sending the payload.</p>
*
* @param sobaMessage The SobaMessage to send outbound.
* @param connection The connection the passed in sobaMessage should be processed outbound for.
* @return The number of times the passed in sobaMessage was processed to be sent outbound.
* @throws OutboundStorageException if there was a fatal error that kept the payload from being processed to send
* outbound.
*/
int sendSobaMessage(SobaMessage sobaMessage, Connection connection) throws OutboundStorageException;
/**
* Overloaded version of
* {@link OutboundStorageService#sendSobaMessage(com.streamreduce.core.model.messages.SobaMessage, com.streamreduce.core.model.Connection)}
* that looks up the Connection to be used by inspecting the passed in sobaMessage.
*
* @param sobaMessage The SobaMessage to send outbound.
* @return The number of times the passed in sobaMessage was processed to be sent outbound.
* @throws OutboundStorageException if there was a fatal error that kept the payload from being processed to send
* outbound.
*/
int sendSobaMessage(SobaMessage sobaMessage) throws OutboundStorageException;
}