Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.unic.middleware.sfvertecint;
- import org.apache.camel.Exchange;
- import org.apache.camel.builder.RouteBuilder;
- import org.apache.camel.component.http4.HttpMethods;
- import org.apache.camel.component.properties.PropertiesComponent;
- import org.apache.camel.model.ModelCamelContext;
- import org.apache.http.entity.ContentType;
- import org.w3c.dom.Document;
- import java.text.DateFormat;
- /**
- * This class is a RouteBuilder that defines a route for the synchronization of Account objects from Salesforce to Vertec.
- */
- public class AccountsSF2VertecRouteBuilder extends RouteBuilder {
- public static final String QUERY_STRING = "grant_type=password&client_id=3MVG9Rd3qC6oMalVBWZbGXyXMTFM4H8n0hJWpg3OSGdeyP9SVTWlWspAvR0B9SNRLoUurmzGd7gE0mY0EMMwF&client_secret=3215530657230029244&username=stephan.lengl@unic.com&password=Gr4bYour@ssasXzpkXeiH9EOmuaT6JLBPkB";
- @Override
- public void configure() throws Exception {
- injectSalesforceProperties();
- // Schedule the synchronization to run every 15 minutes
- from("timer:accountsFromSF2Vertec?period=15m")
- .routeId("accounts_sf2vertec_timer")
- .to("direct:authenticateAtSalesforce");
- // Authenticate at Salesforce via OAuth2
- from("direct:authenticateAtSalesforce")
- .routeId("sfauth")
- .setHeader(Exchange.HTTP_METHOD, constant(HttpMethods.POST))
- .setHeader(Exchange.CONTENT_TYPE, constant(ContentType.APPLICATION_FORM_URLENCODED.getMimeType()))
- .setHeader(Exchange.HTTP_QUERY, simple("grant_type=password"
- + "&client_id={{salesforce.client_id}}"
- + "&client_secret={{salesforce.client_secret}}"
- + "&username={{salesforce.username}}"
- + "&password={{salesforce.password}}{{salesforce.security_token}}"))
- .setHeader("Accept", constant("application/xml"))
- .setBody(constant(""))
- .to("https4://login.salesforce.com/services/oauth2/token?")
- .to("direct:retrieveAccountIds");
- // Retrieve a list of new and update Account object ids from Salesforce
- from("direct:retrieveAccountIds")
- .routeId("retrieveAccountIds")
- .streamCaching()
- .setProperty("salesforceAccessToken", xpath("//access_token/text()"))
- .setProperty("salesforceInstanceUrl", xpath("//instance_url/text()"))
- .setProperty("salesforceTokenType", xpath("//token_type/text()"))
- .setHeader(Exchange.HTTP_QUERY, simple("start=2016-01-10T00:00:00+00:00&end=2016-01-21T00:00:00+00:00"))
- .setHeader("Authorization", simple("${property.salesforceTokenType} ${property.salesforceAccessToken}"))
- .setHeader("Accept", constant("application/xml"))
- .to("https4:${property.salesforceInstanceUrl}/services/data/v{{salesforce.api_version}}/Account__c/updated")
- .to("direct:retrieveAccountDetails");
- // Query details of relevant accounts
- from("direct:retrieveAccountDetails")
- .routeId("retrieveAccountDetails")
- .streamCaching()
- .setProperty("accountIdList", xpath("concat('''', string-join(//ids/text(), ''','''), '''')"))
- .setHeader(Exchange.HTTP_QUERY, simple("q=SELECT+Id,Name,LastModifiedDate,VertecObjectId+FROM+Account__c+WHERE+Id+IN+(${property.accountIdList})"))
- .setHeader("Authorization", simple("${property.salesforceTokenType} ${property.salesforceAccessToken}"))
- .setHeader("Accept", constant("application/xml"))
- .to("https4:${property.salesforceInstanceUrl}/services/data/v{{salesforce.api_version}}/query")
- .to("file:salesforce/accounts");
- }
- private void injectSalesforceProperties() {
- ModelCamelContext context = getContext();
- PropertiesComponent salesforceProperties = context.getComponent("properties", PropertiesComponent.class);
- salesforceProperties.setLocation("file:${karaf.home}/etc/salesforce.properties");
- }
- }
Add Comment
Please, Sign In to add comment