annotate etl/src/main/java/org/dive4elements/river/etl/aft/Notification.java @ 9801:1d7a72a50183 3.2.x tip

Assume Compose V2, consistently
author Tom Gottfried <tom@intevation.de>
date Thu, 23 Nov 2023 10:14:13 +0100
parents 0a5239a1e46e
children
rev   line source
5841
8bd9b551456c Added header to Java files in ETL process.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
1 /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
8bd9b551456c Added header to Java files in ETL process.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
2 * Software engineering by Intevation GmbH
8bd9b551456c Added header to Java files in ETL process.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
3 *
5991
6f80d5f375fd Removed trailing whitespace.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5841
diff changeset
4 * This file is Free Software under the GNU AGPL (>=v3)
5841
8bd9b551456c Added header to Java files in ETL process.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
5 * and comes with ABSOLUTELY NO WARRANTY! Check out the
5991
6f80d5f375fd Removed trailing whitespace.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5841
diff changeset
6 * documentation coming with Dive4Elements River for details.
5841
8bd9b551456c Added header to Java files in ETL process.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
7 */
8bd9b551456c Added header to Java files in ETL process.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
8
5826
9438e9259213 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5825
diff changeset
9 package org.dive4elements.river.etl.aft;
4095
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
10
5826
9438e9259213 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5825
diff changeset
11 import org.dive4elements.river.etl.utils.XML;
4095
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
12
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
13 import java.io.IOException;
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
14 import java.io.InputStream;
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
15 import java.io.OutputStream;
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
16
4772
f939e1e6cfa4 Sorted imports.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4110
diff changeset
17 import java.net.HttpURLConnection;
4095
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
18 import java.net.URL;
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
19 import java.net.URLConnection;
4772
f939e1e6cfa4 Sorted imports.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4110
diff changeset
20
9726
0a5239a1e46e Upgrade to Log4j 2
Tom Gottfried <tom@intevation.de>
parents: 5991
diff changeset
21 import org.apache.logging.log4j.Logger;
0a5239a1e46e Upgrade to Log4j 2
Tom Gottfried <tom@intevation.de>
parents: 5991
diff changeset
22 import org.apache.logging.log4j.LogManager;
4095
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
23
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
24 import org.w3c.dom.Document;
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
25 import org.w3c.dom.Node;
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
26 import org.w3c.dom.NodeList;
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
27
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
28 public class Notification
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
29 {
9726
0a5239a1e46e Upgrade to Log4j 2
Tom Gottfried <tom@intevation.de>
parents: 5991
diff changeset
30 private static Logger log = LogManager.getLogger(Notification.class);
4095
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
31
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
32 protected Document message;
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
33
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
34 public Notification() {
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
35 }
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
36
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
37 public Notification(Document message) {
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
38 this.message = message;
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
39 }
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
40
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
41 public Notification(Node message) {
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
42 this(wrap(message));
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
43 }
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
44
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
45 public static Document wrap(Node node) {
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
46 Document document = XML.newDocument();
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
47
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
48 // Send first element as message.
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
49 // Fall back to root node.
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
50 Node toImport = node;
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
51
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
52 NodeList children = node.getChildNodes();
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
53 for (int i = 0, N = children.getLength(); i < N; ++i) {
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
54 Node child = children.item(i);
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
55 if (child.getNodeType() == Node.ELEMENT_NODE) {
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
56 toImport = child;
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
57 break;
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
58 }
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
59 }
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
60
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
61 toImport = document.importNode(toImport, true);
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
62 document.appendChild(toImport);
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
63 document.normalizeDocument();
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
64 return document;
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
65 }
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
66
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
67 public Document sendPOST(URL url) {
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
68
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
69 OutputStream out = null;
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
70 InputStream in = null;
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
71 Document result = null;
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
72
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
73 try {
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
74 URLConnection ucon = url.openConnection();
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
75
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
76 if (!(ucon instanceof HttpURLConnection)) {
4110
06891562e633 Extracted and documented the error messages of the process.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4095
diff changeset
77 log.warn("NOTIFY: '" + url + "' is not an HTTP(S) connection.");
4095
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
78 return null;
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
79 }
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
80
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
81 HttpURLConnection con = (HttpURLConnection)ucon;
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
82
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
83 con.setRequestMethod("POST");
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
84 con.setDoInput(true);
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
85 con.setDoOutput(true);
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
86 con.setUseCaches(false);
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
87 con.setRequestProperty("Content-Type", "text/xml");
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
88
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
89 out = con.getOutputStream();
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
90 XML.toStream(message, out);
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
91 out.flush();
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
92 in = con.getInputStream();
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
93 result = XML.parseDocument(in);
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
94 }
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
95 catch (IOException ioe) {
4110
06891562e633 Extracted and documented the error messages of the process.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4095
diff changeset
96 log.error("NOTIFY: Sending message to '" + url + "' failed.", ioe);
4095
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
97 }
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
98 finally {
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
99 if (out != null) {
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
100 try { out.close(); } catch (IOException ioe) {}
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
101 }
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
102 if (in != null) {
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
103 try { in.close(); } catch (IOException ioe) {}
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
104 }
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
105 }
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
106
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
107 return result;
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
108 }
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
109 }
da9df3641578 Send XML messages via HTTP POST around if the FLYS database has changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
110 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org