Advertisement
Guest User

Untitled

a guest
Mar 23rd, 2017
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.85 KB | None | 0 0
  1. package receiver.multi;
  2.  
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.FileNotFoundException;
  6. import java.io.IOException;
  7. import java.io.InputStream;
  8. import java.sql.Connection;
  9. import java.sql.DriverManager;
  10. import java.sql.ResultSet;
  11. import java.sql.SQLException;
  12. import java.sql.Statement;
  13. import java.util.Properties;
  14.  
  15. import com.amazonaws.auth.AWSCredentials;
  16.  
  17. import org.json.JSONException;
  18. import org.json.JSONObject;
  19. import com.amazonaws.services.sqs.AmazonSQS;
  20. import com.amazonaws.services.sqs.model.DeleteMessageRequest;
  21. import com.amazonaws.services.sqs.model.Message;
  22. import com.amazonaws.services.sqs.model.ReceiveMessageRequest;
  23. import com.amazonaws.services.sqs.model.ReceiveMessageResult;
  24. import com.aspose.words.Document;
  25.  
  26. import common.AwsClientProvider;
  27. import com.amazonaws.AmazonClientException;
  28. import com.amazonaws.AmazonServiceException;
  29. import com.amazonaws.auth.PropertiesCredentials;
  30. import com.amazonaws.auth.profile.ProfileCredentialsProvider;
  31. import com.amazonaws.regions.Region;
  32. import com.amazonaws.regions.Regions;
  33. import com.amazonaws.services.s3.AmazonS3;
  34. import com.amazonaws.services.s3.AmazonS3Client;
  35. import com.amazonaws.services.s3.AmazonS3ClientBuilder;
  36. import com.amazonaws.services.s3.model.GetObjectRequest;
  37. import com.amazonaws.services.s3.model.ObjectMetadata;
  38. import com.amazonaws.services.s3.model.PutObjectRequest;
  39. import com.amazonaws.services.s3.internal.ServiceUtils;
  40.  
  41. public class Worker implements Runnable {
  42.  
  43.  
  44. //private static final String QUEUE = "MyDevlop2";
  45.  
  46. private static final String localFile = null;
  47.  
  48. private String command;
  49.  
  50. public Worker(String s) {
  51. this.command = s;
  52. }
  53.  
  54. @Override
  55. public void run() {
  56.  
  57. Properties prop = new Properties();
  58. InputStream input = null;
  59.  
  60. try {
  61. input = new FileInputStream("config.properties");
  62. } catch (FileNotFoundException e2) {
  63. // TODO Auto-generated catch block
  64. e2.printStackTrace();
  65. }
  66.  
  67. // Load Config and Define Variables
  68. try {
  69. prop.load(input);
  70. } catch (IOException e1) {
  71. // TODO Auto-generated catch block
  72. e1.printStackTrace();
  73. }
  74.  
  75. // DB Settings
  76. String dbhost = prop.getProperty("dbhost");
  77. String dbport = prop.getProperty("dbport");
  78. String dbname = prop.getProperty("dbname");
  79. String dbuser = prop.getProperty("dbuser");
  80. String dbpass = prop.getProperty("dbpass");
  81.  
  82. // App Settings
  83. // local Temp save dir for input docx
  84. String docxdir = prop.getProperty("docxdir");
  85.  
  86. // S3 Bucket where DOCX is pulled from
  87. String inputdocxs3bucket = prop.getProperty("inputdocxs3bucket");
  88.  
  89. // SQS Message Queue (fifo) name for DOCX2PDF msg received for
  90. // processing
  91. String queue = prop.getProperty("sqsinputqueue");
  92.  
  93. // local Temp output save dir for output pdf
  94. String pdfdir = prop.getProperty("pdfdir");
  95.  
  96. // S3 Bucket where rendered PDF is pushed to
  97. String outputpdfs3bucket = prop.getProperty("outputpdfs3bucket");
  98.  
  99. // SQS Message Queue (fifo) name for PDF2TIF engine generation message
  100. String sqsoutputqueue = prop.getProperty("sqsoutputqueue");
  101.  
  102.  
  103.  
  104.  
  105.  
  106.  
  107.  
  108.  
  109. System.out.println(Thread.currentThread().getName()
  110. + " Start. Command = " + command);
  111.  
  112. AmazonSQS sqs = AwsClientProvider.createSQSClient();
  113.  
  114. String queueUrl = sqs.createQueue(QUEUE).getQueueUrl();
  115. ReceiveMessageRequest request = new ReceiveMessageRequest(QUEUE)
  116. .withQueueUrl(queueUrl);
  117. request.setVisibilityTimeout(5);
  118.  
  119. boolean queueExists = true;
  120. while (queueExists) {
  121. ReceiveMessageResult result = sqs.receiveMessage(request);
  122. if (result.getMessages().isEmpty()) {
  123. queueExists = false;
  124. } else {
  125. result.getMessages().stream().forEach(s -> {
  126. System.out.println("[" + s.getBody() + "]");
  127. processMessage (sqs, s);
  128. deleteMessage(sqs, s);
  129.  
  130. });
  131. }
  132. }
  133.  
  134. System.out.println(Thread.currentThread().getName() + " End.");
  135. }
  136.  
  137. public void processMessage(AmazonSQS sqs, Message message) {
  138. Properties prop = new Properties();
  139. InputStream input = null;
  140.  
  141. String docFile = null;
  142.  
  143. try {
  144. input = new FileInputStream("config.properties");
  145. } catch (FileNotFoundException e2) {
  146. // TODO Auto-generated catch block
  147. e2.printStackTrace();
  148. }
  149.  
  150. // Load Config and Define Variables
  151. try {
  152. prop.load(input);
  153. } catch (IOException e1) {
  154. // TODO Auto-generated catch block
  155. e1.printStackTrace();
  156. }
  157.  
  158. // DB Settings
  159. String dbhost = prop.getProperty("dbhost");
  160. String dbport = prop.getProperty("dbport");
  161. String dbname = prop.getProperty("dbname");
  162. String dbuser = prop.getProperty("dbuser");
  163. String dbpass = prop.getProperty("dbpass");
  164.  
  165. // local Temp save dir for input docx
  166. String docxDir = prop.getProperty("docxdir");
  167.  
  168. // S3 Bucket where DOCX is pulled from
  169. String inputDocxS3bucket = prop.getProperty("inputdocxs3bucket");
  170.  
  171. // SQS Message Queue (fifo) name for DOCX2PDF msg received for
  172. // processing
  173. String sqsInput = prop.getProperty("sqsinputqueue");
  174.  
  175. // local Temp output save dir for output pdf
  176. String pdfDir = prop.getProperty("pdfdir");
  177.  
  178. // S3 Bucket where rendered PDF is pushed to
  179. String outputpdfs3bucket = prop.getProperty("outputpdfs3bucket");
  180.  
  181. // SQS Message Queue (fifo) name for PDF2TIF engine generation message
  182. String sqsoutputqueue = prop.getProperty("sqsoutputqueue");
  183.  
  184.  
  185.  
  186. for (;;){
  187.  
  188. AWSCredentials credentials = null;
  189.  
  190. JSONObject JSONRecID = new JSONObject(message.getBody());
  191. String recid = JSONRecID.getString("RecID");
  192. System.out.println("Parsed RecID: " + JSONRecID.getString("RecID"));
  193.  
  194. //db
  195. Connection con = null;
  196. Statement st = null;
  197. ResultSet rs = null;
  198.  
  199. String dburl = ("jdbc:mysql://" + dbhost + ":" + dbport + "/" + dbname);
  200.  
  201. try {
  202. con = DriverManager.getConnection(dburl, dbuser, dbpass);
  203. System.out
  204. .println("[OPENED] database for reading on CON for Thread: " + Thread.currentThread().getName());
  205. st = con.createStatement();
  206. rs = st.executeQuery(
  207. "SELECT RecID, DocxURL from MailMergeLists where RecID=" + JSONRecID.getString("RecID") + " LIMIT 1");
  208. while (rs.next()) {
  209. System.out.print(rs.getInt(1));
  210. System.out.print(": ");
  211. System.out.println(rs.getString(2));
  212. docFile = rs.getString(2);
  213. // remove /bucketname/ from db value for input file name
  214. docFile = docFile.substring(docFile.indexOf("t/") + 2);
  215. System.out.print("[DOCNAME]: " + docFile);
  216. System.out.print("");
  217.  
  218.  
  219. //Region usWest2 = Region.getRegion(Regions.US_WEST_2);
  220. credentials = new ProfileCredentialsProvider("default").getCredentials();
  221. File localFile = new File(docxDir + '/' + docFile);
  222. String docFilePath = (docxDir + '/' + docFile);
  223. AmazonS3 s3Client = new AmazonS3Client();
  224. //Region usWest2 = Region.getRegion(Regions.null);
  225. //s3Client.setRegion(usWest2);
  226.  
  227. ObjectMetadata object = s3Client.getObject(new GetObjectRequest(inputDocxS3bucket, docFile), localFile);
  228. convertMessage (docFilePath, docFile, recid, docxDir, pdfDir, s3Client, dburl, dbuser, dbpass );
  229.  
  230. }
  231. con.close();
  232. System.out.println("[CLOSED] database for reading on CON for Thread: " + Thread.currentThread().getName());
  233.  
  234.  
  235. // Returns back after each function back to super class for deleteMessage call
  236. return;
  237.  
  238. } catch (SQLException e1) {
  239. // TODO Auto-generated catch block
  240. e1.printStackTrace();
  241. }
  242.  
  243.  
  244.  
  245.  
  246. }
  247.  
  248.  
  249.  
  250. }
  251.  
  252. private void convertMessage (String docFilePath, String docFile, String recid, String docxDir, String pdfDir, AmazonS3 s3Client, String dburl, String dbuser, String dbpass) {
  253. System.out.println("[--CONVERTING----------------------------]");
  254. System.out.println("[DOC LOCAL]" + docFilePath);
  255. System.out.println("[DOC FILE]" + docFile);
  256. System.out.println("[REC ID]" + recid);
  257.  
  258.  
  259. // Convert and save to PDF
  260. // Remove .docx extension for file saving
  261. String pdfFile = docFile.substring(0, docFile.length() - 4);
  262. pdfFile = pdfFile + "pdf";
  263. Document doc = null;
  264.  
  265. try {
  266. doc = new Document(docxDir + "/" + docFile);
  267. doc.save(pdfDir + "/" + pdfFile);
  268.  
  269. // Delete DOC File from Local System
  270. File docxdel = new File("/" + docxDir + "/" + docFile);
  271. docxdel.delete();
  272.  
  273. } catch (JSONException e) {
  274. // TODO Auto-generated catch block
  275. e.printStackTrace();
  276. } catch (Exception e) {
  277. // TODO Auto-generated catch block
  278. e.printStackTrace();
  279. }
  280.  
  281. sendToS3 (pdfDir, pdfFile, s3Client, dburl, dbuser, dbpass, recid);
  282. return;
  283. // System.out.println("Document Generated for: " + pdfFile);
  284. // System.out.println("Uploading: " + pdfFile + " to PDF S3 bucket /" + outputpdfs3bucket);
  285. // System.out.println("recid:" + recid);
  286. }
  287.  
  288.  
  289.  
  290. private void sendToS3 (String pdfDir, String pdfFile, AmazonS3 s3Client, String dburl, String dbuser, String dbpass, String recid) {
  291. try {
  292. String s3PutName = (pdfDir + "/" + pdfFile);
  293. File file = new File(s3PutName);
  294. s3Client.putObject(new PutObjectRequest("bkhome", pdfFile, file));
  295. System.out.println("[UPLOAD OBJECT} Uploading to S3: " + s3PutName + "\n");
  296.  
  297.  
  298.  
  299. } catch (AmazonServiceException ase) {
  300. System.out.println("Caught an AmazonServiceException, which " + "means your request made it "
  301. + "to Amazon S3, but was rejected with an error response" + " for some reason.");
  302. System.out.println("Error Message: " + ase.getMessage());
  303. System.out.println("HTTP Status Code: " + ase.getStatusCode());
  304. System.out.println("AWS Error Code: " + ase.getErrorCode());
  305. System.out.println("Error Type: " + ase.getErrorType());
  306. System.out.println("Request ID: " + ase.getRequestId());
  307. } catch (AmazonClientException ace) {
  308. System.out.println("Caught an AmazonClientException, which " + "means the client encountered "
  309. + "an internal error while trying to " + "communicate with S3, "
  310. + "such as not being able to access the network.");
  311. System.out.println("Error Message: " + ace.getMessage());
  312. }
  313. // Delete Local PDF
  314. File pdfdel = new File(pdfDir + "/" + pdfFile);
  315. pdfdel.delete();
  316.  
  317. System.out.println("BEFORE NEXT CALL");
  318. System.out.println("dburl: " +dburl);
  319. System.out.println("dbuser: " +dbuser);
  320. System.out.println("dbpass: " +dbpass);
  321. System.out.println("recid: " +recid);
  322. System.out.println("pdffile: " +pdfFile);
  323.  
  324. updateDB(dburl, dbuser, dbpass, recid, pdfFile);
  325. return;
  326.  
  327. }
  328.  
  329.  
  330. private void updateDB (String dburl, String dbuser, String dbpass, String recid, String pdfFile) {
  331.  
  332. System.out.println("AFTER NEXT CALL");
  333. System.out.println("dburl: " +dburl);
  334. System.out.println("dbuser: " +dbuser);
  335. System.out.println("dbpass: " +dbpass);
  336. System.out.println("recid: " +recid);
  337. System.out.println("pdffile: " +pdfFile);
  338.  
  339. try {
  340. Connection conb = null;
  341. Statement stb = null;
  342. conb = DriverManager.getConnection(dburl, dbuser, dbpass);
  343. System.out.println(
  344. "Connecting database for reading on CON B for Thread: " + Thread.currentThread().getName());
  345. stb = conb.createStatement();
  346. stb.executeUpdate("Update MailMergeLists set OriginalDoc='/" + "bkhome" + "/" + pdfFile
  347. + "' where RecID=" + recid);
  348. System.out.println("[PDF DB UPDATE] Location updated: " + recid);
  349. conb.close();
  350. System.out.println("[MYSQL] Update connection closed.");
  351. } catch (SQLException e1) {
  352. // TODO Auto-generated catch block
  353. e1.printStackTrace();
  354. }
  355. // returns to superclass to delete sqs
  356. return;
  357.  
  358. }
  359.  
  360. private void deleteMessage(AmazonSQS sqs, Message message) {
  361.  
  362.  
  363. DeleteMessageRequest deleteRequest = new DeleteMessageRequest();
  364. deleteRequest.setQueueUrl(sqs.createQueue(QUEUE).getQueueUrl());
  365. deleteRequest.setReceiptHandle(message.getReceiptHandle());
  366. sqs.deleteMessage(deleteRequest);
  367. System.out.println("[MSG] Deleted Messaged: "+message.getReceiptHandle());
  368. }
  369. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement