/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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 org.apache.camel.component.salesforce;
import org.apache.camel.AsyncCallback;
import org.apache.camel.Exchange;
import org.apache.camel.component.salesforce.api.SalesforceException;
import org.apache.camel.component.salesforce.internal.OperationName;
import org.apache.camel.component.salesforce.internal.PayloadFormat;
import org.apache.camel.component.salesforce.internal.processor.AnalyticsApiProcessor;
import org.apache.camel.component.salesforce.internal.processor.BulkApiProcessor;
import org.apache.camel.component.salesforce.internal.processor.CompositeApiProcessor;
import org.apache.camel.component.salesforce.internal.processor.JsonRestProcessor;
import org.apache.camel.component.salesforce.internal.processor.SalesforceProcessor;
import org.apache.camel.component.salesforce.internal.processor.XmlRestProcessor;
import org.apache.camel.impl.DefaultAsyncProducer;
import org.apache.camel.util.ServiceHelper;
/**
* The Salesforce producer.
*/
public class SalesforceProducer extends DefaultAsyncProducer {
private final SalesforceProcessor processor;
public SalesforceProducer(SalesforceEndpoint endpoint) throws SalesforceException {
super(endpoint);
final SalesforceEndpointConfig endpointConfig = endpoint.getConfiguration();
final PayloadFormat payloadFormat = endpointConfig.getFormat();
// check if its a Bulk Operation
final OperationName operationName = endpoint.getOperationName();
if (isBulkOperation(operationName)) {
processor = new BulkApiProcessor(endpoint);
} else if (isAnalyticsOperation(operationName)) {
processor = new AnalyticsApiProcessor(endpoint);
} else if (isCompositeOperation(operationName)) {
processor = new CompositeApiProcessor(endpoint);
} else {
// create an appropriate processor
if (payloadFormat == PayloadFormat.JSON) {
// create a JSON exchange processor
processor = new JsonRestProcessor(endpoint);
} else {
processor = new XmlRestProcessor(endpoint);
}
}
}
private boolean isBulkOperation(OperationName operationName) {
switch (operationName) {
case CREATE_JOB:
case GET_JOB:
case CLOSE_JOB:
case ABORT_JOB:
case CREATE_BATCH:
case GET_BATCH:
case GET_ALL_BATCHES:
case GET_REQUEST:
case GET_RESULTS:
case CREATE_BATCH_QUERY:
case GET_QUERY_RESULT_IDS:
case GET_QUERY_RESULT:
return true;
default:
return false;
}
}
private boolean isAnalyticsOperation(OperationName operationName) {
switch (operationName) {
case GET_RECENT_REPORTS:
case GET_REPORT_DESCRIPTION:
case EXECUTE_SYNCREPORT:
case EXECUTE_ASYNCREPORT:
case GET_REPORT_INSTANCES:
case GET_REPORT_RESULTS:
return true;
default:
return false;
}
}
private boolean isCompositeOperation(OperationName operationName) {
switch (operationName) {
case COMPOSITE_TREE:
case COMPOSITE_BATCH:
return true;
default:
return false;
}
}
@Override
public boolean process(Exchange exchange, AsyncCallback callback) {
log.debug("Processing {}",
((SalesforceEndpoint) getEndpoint()).getOperationName());
return processor.process(exchange, callback);
}
@Override
protected void doStart() throws Exception {
super.doStart();
// start Salesforce processor
ServiceHelper.startService(processor);
}
@Override
protected void doStop() throws Exception {
// stop Salesforce processor
ServiceHelper.stopService(processor);
super.doStop();
}
}