Guest User

AccountsSF2VertecRouteBuilder

a guest
Jan 21st, 2016
44
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5 4.16 KB | None | 0 0
  1. package com.unic.middleware.sfvertecint;
  2.  
  3. import org.apache.camel.Exchange;
  4. import org.apache.camel.builder.RouteBuilder;
  5. import org.apache.camel.component.http4.HttpMethods;
  6. import org.apache.camel.component.properties.PropertiesComponent;
  7. import org.apache.camel.model.ModelCamelContext;
  8. import org.apache.http.entity.ContentType;
  9. import org.w3c.dom.Document;
  10.  
  11. import java.text.DateFormat;
  12.  
  13. /**
  14.  * This class is a RouteBuilder that defines a route for the synchronization of Account objects from Salesforce to Vertec.
  15.  */
  16. public class AccountsSF2VertecRouteBuilder extends RouteBuilder {
  17.  
  18.     public static final String QUERY_STRING = "grant_type=password&client_id=3MVG9Rd3qC6oMalVBWZbGXyXMTFM4H8n0hJWpg3OSGdeyP9SVTWlWspAvR0B9SNRLoUurmzGd7gE0mY0EMMwF&client_secret=3215530657230029244&username=stephan.lengl@unic.com&password=Gr4bYour@ssasXzpkXeiH9EOmuaT6JLBPkB";
  19.  
  20.     @Override
  21.     public void configure() throws Exception {
  22.  
  23.         injectSalesforceProperties();
  24.  
  25.         // Schedule the synchronization to run every 15 minutes
  26.         from("timer:accountsFromSF2Vertec?period=15m")
  27.                 .routeId("accounts_sf2vertec_timer")
  28.                 .to("direct:authenticateAtSalesforce");
  29.  
  30.         // Authenticate at Salesforce via OAuth2
  31.         from("direct:authenticateAtSalesforce")
  32.                 .routeId("sfauth")
  33.                 .setHeader(Exchange.HTTP_METHOD, constant(HttpMethods.POST))
  34.                 .setHeader(Exchange.CONTENT_TYPE, constant(ContentType.APPLICATION_FORM_URLENCODED.getMimeType()))
  35.                 .setHeader(Exchange.HTTP_QUERY, simple("grant_type=password"
  36.                         + "&client_id={{salesforce.client_id}}"
  37.                         + "&client_secret={{salesforce.client_secret}}"
  38.                         + "&username={{salesforce.username}}"
  39.                         + "&password={{salesforce.password}}{{salesforce.security_token}}"))
  40.                 .setHeader("Accept", constant("application/xml"))
  41.                 .setBody(constant(""))
  42.                 .to("https4://login.salesforce.com/services/oauth2/token?")
  43.                 .to("direct:retrieveAccountIds");
  44.  
  45.         // Retrieve a list of new and update Account object ids from Salesforce
  46.         from("direct:retrieveAccountIds")
  47.                 .routeId("retrieveAccountIds")
  48.                 .streamCaching()
  49.                 .setProperty("salesforceAccessToken", xpath("//access_token/text()"))
  50.                 .setProperty("salesforceInstanceUrl", xpath("//instance_url/text()"))
  51.                 .setProperty("salesforceTokenType", xpath("//token_type/text()"))
  52.                 .setHeader(Exchange.HTTP_QUERY, simple("start=2016-01-10T00:00:00+00:00&end=2016-01-21T00:00:00+00:00"))
  53.                 .setHeader("Authorization", simple("${property.salesforceTokenType} ${property.salesforceAccessToken}"))
  54.                 .setHeader("Accept", constant("application/xml"))
  55.                 .to("https4:${property.salesforceInstanceUrl}/services/data/v{{salesforce.api_version}}/Account__c/updated")
  56.                 .to("direct:retrieveAccountDetails");
  57.  
  58.         // Query details of relevant accounts
  59.         from("direct:retrieveAccountDetails")
  60.                 .routeId("retrieveAccountDetails")
  61.                 .streamCaching()
  62.                 .setProperty("accountIdList", xpath("concat('''', string-join(//ids/text(), ''','''), '''')"))
  63.                 .setHeader(Exchange.HTTP_QUERY, simple("q=SELECT+Id,Name,LastModifiedDate,VertecObjectId+FROM+Account__c+WHERE+Id+IN+(${property.accountIdList})"))
  64.                 .setHeader("Authorization", simple("${property.salesforceTokenType} ${property.salesforceAccessToken}"))
  65.                 .setHeader("Accept", constant("application/xml"))
  66.                 .to("https4:${property.salesforceInstanceUrl}/services/data/v{{salesforce.api_version}}/query")
  67.                 .to("file:salesforce/accounts");
  68.     }
  69.  
  70.     private void injectSalesforceProperties() {
  71.         ModelCamelContext context = getContext();
  72.         PropertiesComponent salesforceProperties = context.getComponent("properties", PropertiesComponent.class);
  73.         salesforceProperties.setLocation("file:${karaf.home}/etc/salesforce.properties");
  74.  
  75.     }
  76. }
Add Comment
Please, Sign In to add comment