Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package receiver.multi;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.IOException;
- import java.io.InputStream;
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.sql.Statement;
- import java.util.Properties;
- import com.amazonaws.auth.AWSCredentials;
- import org.json.JSONException;
- import org.json.JSONObject;
- import com.amazonaws.services.sqs.AmazonSQS;
- import com.amazonaws.services.sqs.model.DeleteMessageRequest;
- import com.amazonaws.services.sqs.model.Message;
- import com.amazonaws.services.sqs.model.ReceiveMessageRequest;
- import com.amazonaws.services.sqs.model.ReceiveMessageResult;
- import com.aspose.words.Document;
- import common.AwsClientProvider;
- import com.amazonaws.AmazonClientException;
- import com.amazonaws.AmazonServiceException;
- import com.amazonaws.auth.PropertiesCredentials;
- import com.amazonaws.auth.profile.ProfileCredentialsProvider;
- import com.amazonaws.regions.Region;
- import com.amazonaws.regions.Regions;
- import com.amazonaws.services.s3.AmazonS3;
- import com.amazonaws.services.s3.AmazonS3Client;
- import com.amazonaws.services.s3.AmazonS3ClientBuilder;
- import com.amazonaws.services.s3.model.GetObjectRequest;
- import com.amazonaws.services.s3.model.ObjectMetadata;
- import com.amazonaws.services.s3.model.PutObjectRequest;
- import com.amazonaws.services.s3.internal.ServiceUtils;
- public class Worker implements Runnable {
- //private static final String QUEUE = "MyDevlop2";
- private static final String localFile = null;
- private String command;
- public Worker(String s) {
- this.command = s;
- }
- @Override
- public void run() {
- Properties prop = new Properties();
- InputStream input = null;
- try {
- input = new FileInputStream("config.properties");
- } catch (FileNotFoundException e2) {
- // TODO Auto-generated catch block
- e2.printStackTrace();
- }
- // Load Config and Define Variables
- try {
- prop.load(input);
- } catch (IOException e1) {
- // TODO Auto-generated catch block
- e1.printStackTrace();
- }
- // DB Settings
- String dbhost = prop.getProperty("dbhost");
- String dbport = prop.getProperty("dbport");
- String dbname = prop.getProperty("dbname");
- String dbuser = prop.getProperty("dbuser");
- String dbpass = prop.getProperty("dbpass");
- // App Settings
- // local Temp save dir for input docx
- String docxdir = prop.getProperty("docxdir");
- // S3 Bucket where DOCX is pulled from
- String inputdocxs3bucket = prop.getProperty("inputdocxs3bucket");
- // SQS Message Queue (fifo) name for DOCX2PDF msg received for
- // processing
- String queue = prop.getProperty("sqsinputqueue");
- // local Temp output save dir for output pdf
- String pdfdir = prop.getProperty("pdfdir");
- // S3 Bucket where rendered PDF is pushed to
- String outputpdfs3bucket = prop.getProperty("outputpdfs3bucket");
- // SQS Message Queue (fifo) name for PDF2TIF engine generation message
- String sqsoutputqueue = prop.getProperty("sqsoutputqueue");
- System.out.println(Thread.currentThread().getName()
- + " Start. Command = " + command);
- AmazonSQS sqs = AwsClientProvider.createSQSClient();
- String queueUrl = sqs.createQueue(QUEUE).getQueueUrl();
- ReceiveMessageRequest request = new ReceiveMessageRequest(QUEUE)
- .withQueueUrl(queueUrl);
- request.setVisibilityTimeout(5);
- boolean queueExists = true;
- while (queueExists) {
- ReceiveMessageResult result = sqs.receiveMessage(request);
- if (result.getMessages().isEmpty()) {
- queueExists = false;
- } else {
- result.getMessages().stream().forEach(s -> {
- System.out.println("[" + s.getBody() + "]");
- processMessage (sqs, s);
- deleteMessage(sqs, s);
- });
- }
- }
- System.out.println(Thread.currentThread().getName() + " End.");
- }
- public void processMessage(AmazonSQS sqs, Message message) {
- Properties prop = new Properties();
- InputStream input = null;
- String docFile = null;
- try {
- input = new FileInputStream("config.properties");
- } catch (FileNotFoundException e2) {
- // TODO Auto-generated catch block
- e2.printStackTrace();
- }
- // Load Config and Define Variables
- try {
- prop.load(input);
- } catch (IOException e1) {
- // TODO Auto-generated catch block
- e1.printStackTrace();
- }
- // DB Settings
- String dbhost = prop.getProperty("dbhost");
- String dbport = prop.getProperty("dbport");
- String dbname = prop.getProperty("dbname");
- String dbuser = prop.getProperty("dbuser");
- String dbpass = prop.getProperty("dbpass");
- // local Temp save dir for input docx
- String docxDir = prop.getProperty("docxdir");
- // S3 Bucket where DOCX is pulled from
- String inputDocxS3bucket = prop.getProperty("inputdocxs3bucket");
- // SQS Message Queue (fifo) name for DOCX2PDF msg received for
- // processing
- String sqsInput = prop.getProperty("sqsinputqueue");
- // local Temp output save dir for output pdf
- String pdfDir = prop.getProperty("pdfdir");
- // S3 Bucket where rendered PDF is pushed to
- String outputpdfs3bucket = prop.getProperty("outputpdfs3bucket");
- // SQS Message Queue (fifo) name for PDF2TIF engine generation message
- String sqsoutputqueue = prop.getProperty("sqsoutputqueue");
- for (;;){
- AWSCredentials credentials = null;
- JSONObject JSONRecID = new JSONObject(message.getBody());
- String recid = JSONRecID.getString("RecID");
- System.out.println("Parsed RecID: " + JSONRecID.getString("RecID"));
- //db
- Connection con = null;
- Statement st = null;
- ResultSet rs = null;
- String dburl = ("jdbc:mysql://" + dbhost + ":" + dbport + "/" + dbname);
- try {
- con = DriverManager.getConnection(dburl, dbuser, dbpass);
- System.out
- .println("[OPENED] database for reading on CON for Thread: " + Thread.currentThread().getName());
- st = con.createStatement();
- rs = st.executeQuery(
- "SELECT RecID, DocxURL from MailMergeLists where RecID=" + JSONRecID.getString("RecID") + " LIMIT 1");
- while (rs.next()) {
- System.out.print(rs.getInt(1));
- System.out.print(": ");
- System.out.println(rs.getString(2));
- docFile = rs.getString(2);
- // remove /bucketname/ from db value for input file name
- docFile = docFile.substring(docFile.indexOf("t/") + 2);
- System.out.print("[DOCNAME]: " + docFile);
- System.out.print("");
- //Region usWest2 = Region.getRegion(Regions.US_WEST_2);
- credentials = new ProfileCredentialsProvider("default").getCredentials();
- File localFile = new File(docxDir + '/' + docFile);
- String docFilePath = (docxDir + '/' + docFile);
- AmazonS3 s3Client = new AmazonS3Client();
- //Region usWest2 = Region.getRegion(Regions.null);
- //s3Client.setRegion(usWest2);
- ObjectMetadata object = s3Client.getObject(new GetObjectRequest(inputDocxS3bucket, docFile), localFile);
- convertMessage (docFilePath, docFile, recid, docxDir, pdfDir, s3Client, dburl, dbuser, dbpass );
- }
- con.close();
- System.out.println("[CLOSED] database for reading on CON for Thread: " + Thread.currentThread().getName());
- // Returns back after each function back to super class for deleteMessage call
- return;
- } catch (SQLException e1) {
- // TODO Auto-generated catch block
- e1.printStackTrace();
- }
- }
- }
- private void convertMessage (String docFilePath, String docFile, String recid, String docxDir, String pdfDir, AmazonS3 s3Client, String dburl, String dbuser, String dbpass) {
- System.out.println("[--CONVERTING----------------------------]");
- System.out.println("[DOC LOCAL]" + docFilePath);
- System.out.println("[DOC FILE]" + docFile);
- System.out.println("[REC ID]" + recid);
- // Convert and save to PDF
- // Remove .docx extension for file saving
- String pdfFile = docFile.substring(0, docFile.length() - 4);
- pdfFile = pdfFile + "pdf";
- Document doc = null;
- try {
- doc = new Document(docxDir + "/" + docFile);
- doc.save(pdfDir + "/" + pdfFile);
- // Delete DOC File from Local System
- File docxdel = new File("/" + docxDir + "/" + docFile);
- docxdel.delete();
- } catch (JSONException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- sendToS3 (pdfDir, pdfFile, s3Client, dburl, dbuser, dbpass, recid);
- return;
- // System.out.println("Document Generated for: " + pdfFile);
- // System.out.println("Uploading: " + pdfFile + " to PDF S3 bucket /" + outputpdfs3bucket);
- // System.out.println("recid:" + recid);
- }
- private void sendToS3 (String pdfDir, String pdfFile, AmazonS3 s3Client, String dburl, String dbuser, String dbpass, String recid) {
- try {
- String s3PutName = (pdfDir + "/" + pdfFile);
- File file = new File(s3PutName);
- s3Client.putObject(new PutObjectRequest("bkhome", pdfFile, file));
- System.out.println("[UPLOAD OBJECT} Uploading to S3: " + s3PutName + "\n");
- } catch (AmazonServiceException ase) {
- System.out.println("Caught an AmazonServiceException, which " + "means your request made it "
- + "to Amazon S3, but was rejected with an error response" + " for some reason.");
- System.out.println("Error Message: " + ase.getMessage());
- System.out.println("HTTP Status Code: " + ase.getStatusCode());
- System.out.println("AWS Error Code: " + ase.getErrorCode());
- System.out.println("Error Type: " + ase.getErrorType());
- System.out.println("Request ID: " + ase.getRequestId());
- } catch (AmazonClientException ace) {
- System.out.println("Caught an AmazonClientException, which " + "means the client encountered "
- + "an internal error while trying to " + "communicate with S3, "
- + "such as not being able to access the network.");
- System.out.println("Error Message: " + ace.getMessage());
- }
- // Delete Local PDF
- File pdfdel = new File(pdfDir + "/" + pdfFile);
- pdfdel.delete();
- System.out.println("BEFORE NEXT CALL");
- System.out.println("dburl: " +dburl);
- System.out.println("dbuser: " +dbuser);
- System.out.println("dbpass: " +dbpass);
- System.out.println("recid: " +recid);
- System.out.println("pdffile: " +pdfFile);
- updateDB(dburl, dbuser, dbpass, recid, pdfFile);
- return;
- }
- private void updateDB (String dburl, String dbuser, String dbpass, String recid, String pdfFile) {
- System.out.println("AFTER NEXT CALL");
- System.out.println("dburl: " +dburl);
- System.out.println("dbuser: " +dbuser);
- System.out.println("dbpass: " +dbpass);
- System.out.println("recid: " +recid);
- System.out.println("pdffile: " +pdfFile);
- try {
- Connection conb = null;
- Statement stb = null;
- conb = DriverManager.getConnection(dburl, dbuser, dbpass);
- System.out.println(
- "Connecting database for reading on CON B for Thread: " + Thread.currentThread().getName());
- stb = conb.createStatement();
- stb.executeUpdate("Update MailMergeLists set OriginalDoc='/" + "bkhome" + "/" + pdfFile
- + "' where RecID=" + recid);
- System.out.println("[PDF DB UPDATE] Location updated: " + recid);
- conb.close();
- System.out.println("[MYSQL] Update connection closed.");
- } catch (SQLException e1) {
- // TODO Auto-generated catch block
- e1.printStackTrace();
- }
- // returns to superclass to delete sqs
- return;
- }
- private void deleteMessage(AmazonSQS sqs, Message message) {
- DeleteMessageRequest deleteRequest = new DeleteMessageRequest();
- deleteRequest.setQueueUrl(sqs.createQueue(QUEUE).getQueueUrl());
- deleteRequest.setReceiptHandle(message.getReceiptHandle());
- sqs.deleteMessage(deleteRequest);
- System.out.println("[MSG] Deleted Messaged: "+message.getReceiptHandle());
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement