//
// Copyright (c)1998-2011 Pearson Education, Inc. or its affiliate(s).
// All rights reserved.
//
package openadk.library;
/**
* The Publisher interface is implemented by classes that respond to queries (SIF_Requests).<p>
*
* Implement the Publisher interface on a class that is capable of responding
* to SIF_Requests for one or more SIF Data Objects, then register your class
* with a Topic or Zone by calling the <code>Topic.setPublisher</code> or
* <code>Zone.setPublisher</code> methods. SIF_Request messages received by
* the ADK are then dispatched to your Publisher for processing.<p>
*
* @author Eric Petersen
* @version 1.0
*/
public interface Publisher
{
/**
* Respond to a SIF_Request received from a zone.<p>
*
* The implementation should evaluate the supplied Query to build a set
* of SIFDataObjects that satisfy the conditions and field restrictions
* placed on the query. To return these objects to the ZIS, repeatedly
* call the <code>DataObjectOutputStream.write( SIFDataObject )</code>
* method.<p>
*
* The ADK returns the results of the request to the requestor by sending
* one or more SIF_Response messages. This is handled in a separate thread
* managed by the framework. If the number of SIFDataObjects passed to the
* output stream is too large to fit into a single SIF_Response message,
* the ADK handles breaking it up into multiple packets. The result data
* may be temporarily stored on disk until all packets can be returned to
* the ZIS.<p>
*
* @param out The output stream to send SIFDataObject results to
* @param query The query conditions
* @param zone The zone this SIF_Request was received on
* @param info Provides protocol-specific information about the message.
* @throws ADKException
*/
public void onRequest( DataObjectOutputStream out, Query query, Zone zone, MessageInfo info )
throws ADKException;
}