package camelinaction;
import java.util.Map;
import org.apache.camel.Consumer;
import org.apache.camel.Processor;
import org.apache.camel.Producer;
import org.apache.camel.spi.Metadata;
import org.apache.camel.spi.UriEndpoint;
import org.apache.camel.spi.UriPath;
import org.apache.camel.util.component.AbstractApiEndpoint;
import org.apache.camel.util.component.ApiMethod;
import org.apache.camel.util.component.ApiMethodPropertiesHelper;
import camelinaction.api.HiWorldFileHello;
import camelinaction.api.HiWorldJavadocHello;
import camelinaction.internal.HiWorldApiCollection;
import camelinaction.internal.HiWorldApiName;
import camelinaction.internal.HiWorldConstants;
import camelinaction.internal.HiWorldPropertiesHelper;
/**
* Represents a HiWorld endpoint.
*/
@UriEndpoint(scheme = "hiworld", title = "HiWorld", syntax="hiworld:name", consumerClass = HiWorldConsumer.class, label = "HiWorld")
public class HiWorldEndpoint extends AbstractApiEndpoint<HiWorldApiName, HiWorldConfiguration> {
@UriPath @Metadata(required = "true")
private String name;
// TODO create and manage API proxy
private Object apiProxy;
public HiWorldEndpoint(String uri, HiWorldComponent component,
HiWorldApiName apiName, String methodName, HiWorldConfiguration endpointConfiguration) {
super(uri, component, apiName, methodName, HiWorldApiCollection.getCollection().getHelper(apiName), endpointConfiguration);
}
public Producer createProducer() throws Exception {
return new HiWorldProducer(this);
}
public Consumer createConsumer(Processor processor) throws Exception {
// make sure inBody is not set for consumers
if (inBody != null) {
throw new IllegalArgumentException("Option inBody is not supported for consumer endpoint");
}
final HiWorldConsumer consumer = new HiWorldConsumer(this, processor);
// also set consumer.* properties
configureConsumer(consumer);
return consumer;
}
@Override
protected ApiMethodPropertiesHelper<HiWorldConfiguration> getPropertiesHelper() {
return HiWorldPropertiesHelper.getHelper();
}
protected String getThreadProfileName() {
return HiWorldConstants.THREAD_PROFILE_NAME;
}
@Override
protected void afterConfigureProperties() {
// TODO create API proxy, set connection properties, etc.
switch (apiName) {
case HELLO_FILE:
apiProxy = new HiWorldFileHello();
break;
case HELLO_JAVADOC:
apiProxy = new HiWorldJavadocHello();
break;
default:
throw new IllegalArgumentException("Invalid API name " + apiName);
}
}
@Override
public Object getApiProxy(ApiMethod method, Map<String, Object> args) {
return apiProxy;
}
/**
* Some description of this option, and what it does
*/
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
}