PDA

View Full Version : SOLUTION Configured operation needs to know enabledisable


aww
09-12-2002, 08:14
Here's my solution for an adapter configured operation that will publish a single document at a specific point in time. For example, daily at 09:00 and 15:00. The key is to keep a running calculation of when the next time to publish a document is. Then this is reset anytime the integration component or configured operation is saved (create, change, or enable). The publishDaily() method contains the decision logic.


import COM.activesw.adapter.devkit.AdapterDescriptor;
import COM.activesw.adapter.devkit.AdapterDescriptorFiller;
import COM.activesw.adapter.devkit.AdapterException;
import COM.activesw.adapter.devkit.AdapterScript01;
import COM.activesw.adapter.devkit.AdapterScriptAccess;
import COM.activesw.adapter.devkit.AdapterScriptLifecycle;
import COM.activesw.adapter.devkit.AdapterTransaction;
import COM.activesw.api.client.BrokerEvent;
import COM.activesw.api.client.BrokerException;
import COM.activesw.api.client.BrokerTypeDef;
import java.util.Calendar;

public final class Notification
implements AdapterScript01, AdapterDescriptorFiller, AdapterScriptLifecycle

{
/**
* script access variable for debugging
*/
private AdapterScriptAccess access;


/**
* Calendar array of times to publish document
*/
private Calendar[] nextDailyRuns;


/**
* String array of daily times in hours
*/
private String[] dailyHours;


/**
* String array of daily times in minutes
*/
private String[] dailyMinutes;


/* constructor */
public Notification()
{
}


/**
* Sets information about this operation
*
* @param d the descriptor to populate with custom information
* @exception AdapterException something went wrong
*/
public void fillAdapterDescriptor( AdapterDescriptor d ) throws AdapterException
{
// don't localize this setting
d.setDisplayName( "Point Notification" );

// create the control tab
d.createGroup( "Daily", new String[] { "dailyHours", "dailyMinutes" } );

// create the table for defining command to execute and arguments
d.createFieldMap( new String[] { "dailyHours", "dailyMinutes" }, true );

// allow only predefined hour values
d.setNamespace( "dailyHours", "dailyHours", null );

// allow only predefined minute values
d.setNamespace( "dailyMinutes", "dailyMinutes", null );

}

/**
* Executes the operation.
*
* @param adapterAccess access to the adapter
* @param transaction transaction context
* @param input the single input event
* @return the output event
* @exception AdapterException something went wrong
* @exception BrokerException something went wrong
*/
public BrokerEvent scriptInvoke( AdapterScriptAccess access, AdapterTransaction transaction )
throws BrokerException, AdapterException
{

// determine according to daily calculations
boolean publish = publishDaily();

// define the output event
BrokerEvent output = null;

// if to publish then instantiate the output document
if( publish )
// create the output event
output = access.newOutputEvent( transaction );


// return the event
return output;
}


/**
* Called immediate