/**
* This file was automatically generated by the Mule Development Kit
*/
package org.mule.modules;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Timer;
import java.util.TimerTask;
import net.sf.ehcache.Ehcache;
import net.sf.ehcache.Element;
import org.mule.api.annotations.Configurable;
import org.mule.api.annotations.Connector;
import org.mule.api.annotations.Processor;
import org.mule.api.annotations.Source;
import org.mule.api.annotations.Transformer;
import org.mule.api.annotations.param.Default;
import org.mule.api.annotations.param.InboundHeaders;
import org.mule.api.annotations.param.InvocationHeaders;
import org.mule.api.annotations.param.Optional;
import org.mule.api.annotations.param.Payload;
import org.mule.api.callback.SourceCallback;
import org.mule.tck.testmodels.fruit.Apple;
import org.mule.tck.testmodels.fruit.Banana;
import org.mule.tck.testmodels.fruit.Fruit;
import org.mule.tck.testmodels.fruit.FruitBowl;
//<start id="lis_13_connector-annotation"/>
@Connector//<co id="lis_13_connector-annotation-1_co"/>
(name="myconn",
friendlyName="MyConnector",
schemaVersion="1.0-SNAPSHOT")
public class MyConnConnector//<end id="lis_13_connector-annotation"/>
{
//<start id="lis_13_connector-config"/>
@Configurable
private String parameterOne;
@Configurable
private String parameterTwo;
//<end id="lis_13_connector-config"/>
public String getParameterOne() {
return parameterOne;
}
public void setParameterOne(String parameterOne) {
this.parameterOne = parameterOne;
}
public String getParameterTwo() {
return parameterTwo;
}
public void setParameterTwo(String parameterTwo) {
this.parameterTwo = parameterTwo;
}
//<start id="lis_13_processor-annotation"/>
@Processor
public void myMethod() {
// business logic
}
//<end id="lis_13_processor-annotation"/>
//<start id="lis_13_optional-annotation"/>
@Processor
public void myMethodWithDefaultArg(
String requiredParam,
@Optional @Default("1") int optionalParam) {
// business logic
}
//<end id="lis_13_optional-annotation"/>
//<start id="lis_13_payload-annotation"/>
@Processor
public String myMethodSetPayload() {
return "I'm a String that will become payload";
}
//<end id="lis_13_payload-annotation"/>
//<start id="lis_13_payload-annotation"/>
@Processor
public String myMethodWithPayload(
@Payload String payload,
@InboundHeaders("MULE_*") Map<?,?> muleHeaders,
@InvocationHeaders("header1, optionalHeader2?")
Map<?,?> otherHeaders) {
return "I'm a String that will become payload";
}
//<end id="lis_13_payload-annotation"/>
private Ehcache cache;
public void setCache(final Ehcache cache)//<co id="lis_12_interceptor_cache-6"/>
{
this.cache = cache;
}
//<start id="lis_13_intercepting-processor"/>
@Processor(intercepting=true)//<co id="lis_13_intercepting-processor-1_co"/>
public Object process(SourceCallback afterChain,//<co id="lis_13_intercepting-processor-2_co"/>
@Payload Object payload) throws Exception {
Object key = payload;
Element cachedElement = cache.get(key);
if (cachedElement != null) {
return cachedElement.getObjectValue();
}
// we don't synchronize so several threads can compete to fill
// the cache for the same key: this is rare enough to be
// acceptable
Object result = afterChain.process();//<co id="lis_13_intercepting-processor-3_co"/>
cache.put(new Element(key, result));
return result;
}
//<end id="lis_13_intercepting-processor"/>
//<start id="lis_13_transformer"/>
@Transformer(sourceTypes = { Object[].class })
public static List transformArrayToList(@Payload Object[] payload) {
return Arrays.asList(payload);
}
//<end id="lis_13_transformer"/>
//<start id="lis_13_transformer-sourcetypes"/>
@Transformer(sourceTypes = { Apple.class, Banana.class })
public static FruitBowl transformFruitToBowl(@Payload Fruit payload) {
FruitBowl bowl = new FruitBowl();
bowl.addFruit(payload);
return bowl;
}
//<end id="lis_13_transformer-sourcetypes"/>
//<start id="lis_13_source"/>
@Source
public void subscribeTopic(
int interval,
final SourceCallback callback) {
TimerTask task = new TimerTask() {
public void run() {
try {
callback.process();//<co id="lis_13_source_1"/>
} catch (Exception e) {
// Process error
}
}
};
Timer timer = new Timer();
timer.schedule(task, interval);
}
//<end id="lis_13_source"/>
@Processor()
public String myProcessor(String content) throws Exception {
return "Another string";
}
}