aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/at/gv/egiz/moazs/preprocess
diff options
context:
space:
mode:
authorChristof Rabensteiner <christof.rabensteiner@iaik.tugraz.at>2019-07-16 14:33:26 +0200
committerChristof Rabensteiner <christof.rabensteiner@iaik.tugraz.at>2019-07-16 14:33:26 +0200
commit8f3b805a558c4ed454db2b691032cea800d7b6dd (patch)
tree524a2c90e76bc52a5c90de3e2a54ebb679328cb7 /src/main/java/at/gv/egiz/moazs/preprocess
parentd9e5864f48d261c06de1f1d34000ff6156155569 (diff)
downloadmoa-zs-8f3b805a558c4ed454db2b691032cea800d7b6dd.tar.gz
moa-zs-8f3b805a558c4ed454db2b691032cea800d7b6dd.tar.bz2
moa-zs-8f3b805a558c4ed454db2b691032cea800d7b6dd.zip
Implement ForwardResponseToService Sink And All Its Implications
MZS Schema Change: - Add configuration for ForwardResponseToServiceSink (add parameters in mzs:DeliveryRequest/Config) - Add sink configuration in application.yaml, convert from Spring Environment to ConfigType, and merge ConfigTypes. - Validate sink configuration completeness. Contract added: - Add contract mzs2app.wsdl: This contract specifies how mzs:DeliveryRequestStatus' and mzs:DeliveryNotifications are forwarded to the sender application. - Implement "ForwardResponseToService" Sink. - Add and implement MsgResponse.sendToMzsClient() : This is a somewhat unfortunate solution because, intuitively, sending should be done by it's caller, the "ForwardResponseToService"-sink. However, this solution prevents differences between msg:DeliveryRequestStatus and msg:DeliveryNotification (and code that needs to handle differences, i.e. sending) from sprawling outside of the respective MsgResponse derivatives. We move the entire "send" process into MsgResponse to prevent a hard-to-maintain "if type == notification then do x else to y" construct in ForwardResponseToServiceSink. Otherwise, introducing the MsgResponse wrapper was pointless.
Diffstat (limited to 'src/main/java/at/gv/egiz/moazs/preprocess')
-rw-r--r--src/main/java/at/gv/egiz/moazs/preprocess/ConfigUtil.java52
-rw-r--r--src/main/java/at/gv/egiz/moazs/preprocess/MzsDeliveryRequestValidator.java42
2 files changed, 75 insertions, 19 deletions
diff --git a/src/main/java/at/gv/egiz/moazs/preprocess/ConfigUtil.java b/src/main/java/at/gv/egiz/moazs/preprocess/ConfigUtil.java
index b69b828..a3329cd 100644
--- a/src/main/java/at/gv/egiz/moazs/preprocess/ConfigUtil.java
+++ b/src/main/java/at/gv/egiz/moazs/preprocess/ConfigUtil.java
@@ -9,6 +9,7 @@ import java.util.Map;
import static at.gv.zustellung.app2mzs.xsd.ClientType.clientTypeBuilder;
import static at.gv.zustellung.app2mzs.xsd.ConfigType.configTypeBuilder;
+import static at.gv.zustellung.app2mzs.xsd.ForwardResponseToServiceType.forwardResponseToServiceTypeBuilder;
import static at.gv.zustellung.app2mzs.xsd.KeyStoreType.keyStoreTypeBuilder;
import static at.gv.zustellung.app2mzs.xsd.MsgResponseSinksType.msgResponseSinksTypeBuilder;
import static at.gv.zustellung.app2mzs.xsd.SSLType.SSLTypeBuilder;
@@ -35,8 +36,10 @@ public class ConfigUtil {
public static final String MSG_RESPONSE_SINKS_KEY = "msg-response-sinks";
public static final String LOG_RESPONSE_KEY = "log-response";
public static final String SAVE_RESPONSE_TO_FILE_KEY = "save-response-to-file";
- public static final String SAVE_RESPONSE_TO_FILE_ACTIVE_KEY = "active";
+ public static final String ACTIVE_KEY = "active";
public static final String SAVE_RESPONSE_TO_FILE_PATH_KEY = "path";
+ public static final String FORWARD_RESPONSE_TO_SERVICE_KEY = "forward-response-to-service";
+ public static final String MZS_CLIENT_KEY = "mzs-client";
/**
@@ -136,18 +139,20 @@ public class ConfigUtil {
var logResponse = booleanOrNull(params.get(LOG_RESPONSE_KEY));
- var saveResponseParams = filterMapByPrefix(params, SAVE_RESPONSE_TO_FILE_KEY);
- var saveResponse = buildSaveResponse(saveResponseParams);
+ var saveResponse = buildSaveResponse(filterMapByPrefix(params, SAVE_RESPONSE_TO_FILE_KEY));
+
+ var forwardResponse = buildForwardResponse(filterMapByPrefix(params, FORWARD_RESPONSE_TO_SERVICE_KEY));
return msgResponseSinksTypeBuilder()
.withLogResponse(logResponse)
.withSaveResponseToFile(saveResponse)
+ .withForwardResponseToService(forwardResponse)
.build();
}
private SaveResponseToFileType buildSaveResponse(Map<String, String> params) {
- var isActive = booleanOrNull(params.get(SAVE_RESPONSE_TO_FILE_ACTIVE_KEY));
+ var isActive = booleanOrNull(params.get(ACTIVE_KEY));
var path = params.get(SAVE_RESPONSE_TO_FILE_PATH_KEY);
return saveResponseToFileTypeBuilder()
@@ -156,6 +161,20 @@ public class ConfigUtil {
.build();
}
+ private ForwardResponseToServiceType buildForwardResponse(Map<String, String> params) {
+
+ var isActive = booleanOrNull(params.get(ACTIVE_KEY));
+ var mzsClientParams = filterMapByPrefix(params, MZS_CLIENT_KEY);
+ ClientType mzsClient = mzsClientParams.isEmpty()
+ ? null : buildClient(mzsClientParams);
+
+ return forwardResponseToServiceTypeBuilder()
+ .withActive(isActive)
+ .withMzsClient(mzsClient)
+ .build();
+ }
+
+
private Boolean booleanOrNull(String value) {
return value == null ? null : Boolean.getBoolean(value);
}
@@ -261,14 +280,18 @@ public class ConfigUtil {
var builder = msgResponseSinksTypeBuilder(fallback);
- if (primary.isLogResponse() != null) {
+ if (primary.isLogResponse() != null) {
builder.withLogResponse(primary.isLogResponse());
}
- if (primary.getSaveResponseToFile() != null) {
+ if (primary.getSaveResponseToFile() != null) {
builder.withSaveResponseToFile(merge(primary.getSaveResponseToFile(), fallback.getSaveResponseToFile()));
}
+ if (primary.getForwardResponseToService() != null) {
+ builder.withForwardResponseToService(merge(primary.getForwardResponseToService(), fallback.getForwardResponseToService()));
+ }
+
return builder.build();
}
@@ -287,6 +310,23 @@ public class ConfigUtil {
}
return builder.build();
+ }
+
+ private ForwardResponseToServiceType merge(ForwardResponseToServiceType primary, ForwardResponseToServiceType fallback) {
+
+ if (fallback == null) return primary;
+
+ var builder = forwardResponseToServiceTypeBuilder(fallback);
+
+ if (primary.isActive() != null) {
+ builder.withActive(primary.isActive());
+ }
+
+ if (primary.getMzsClient() != null) {
+ builder.withMzsClient(merge(primary.getMzsClient(), fallback.getMzsClient()));
+ }
+
+ return builder.build();
}
diff --git a/src/main/java/at/gv/egiz/moazs/preprocess/MzsDeliveryRequestValidator.java b/src/main/java/at/gv/egiz/moazs/preprocess/MzsDeliveryRequestValidator.java
index 8f9cd27..2c2fc36 100644
--- a/src/main/java/at/gv/egiz/moazs/preprocess/MzsDeliveryRequestValidator.java
+++ b/src/main/java/at/gv/egiz/moazs/preprocess/MzsDeliveryRequestValidator.java
@@ -1,9 +1,6 @@
package at.gv.egiz.moazs.preprocess;
-import at.gv.zustellung.app2mzs.xsd.ClientType;
-import at.gv.zustellung.app2mzs.xsd.ConfigType;
-import at.gv.zustellung.app2mzs.xsd.DeliveryRequestType;
-import at.gv.zustellung.app2mzs.xsd.KeyStoreType;
+import at.gv.zustellung.app2mzs.xsd.*;
import org.springframework.lang.Nullable;
import org.springframework.stereotype.Component;
@@ -19,8 +16,6 @@ public class MzsDeliveryRequestValidator {
return !request.getConfig().isPerformQueryPersonRequest() ||
(request.getTnvzMetaData() != null
&& request.getSender().getCorporateBody() != null);
-
-
}
/**
@@ -33,7 +28,8 @@ public class MzsDeliveryRequestValidator {
return profile != null
&& profile.isPerformQueryPersonRequest() != null
&& isTVNZClientConfigured(profile.getTNVZClient(), profile.isPerformQueryPersonRequest())
- && isMSGClientConfigured(profile.getMSGClient());
+ && isClientConfigured(profile.getMSGClient())
+ && areSinksConfigured(profile.getMsgResponseSinks());
}
private boolean isTVNZClientConfigured(ClientType tnvzClient, Boolean isPerformQueryPersonRequest) {
@@ -44,12 +40,12 @@ public class MzsDeliveryRequestValidator {
&& isSSLConfigured(tnvzClient));
}
- private boolean isMSGClientConfigured(ClientType msgClientParams) {
- return msgClientParams != null
- && msgClientParams.getURL() != null
- && isSSLConfigured(msgClientParams)
- && msgClientParams.getReceiveTimeout() != null
- && msgClientParams.getConnectionTimeout() != null;
+ private boolean isClientConfigured(ClientType clientParams) {
+ return clientParams != null
+ && clientParams.getURL() != null
+ && isSSLConfigured(clientParams)
+ && clientParams.getReceiveTimeout() != null
+ && clientParams.getConnectionTimeout() != null;
}
private boolean isSSLConfigured(ClientType clientParams) {
@@ -71,4 +67,24 @@ public class MzsDeliveryRequestValidator {
&& "JKS".equals(trustStore.getFileType())
&& trustStore.getFileName() != null);
}
+
+ private boolean areSinksConfigured(MsgResponseSinksType sinks) {
+ return sinks != null
+ && sinks.isLogResponse() != null
+ && isSaveResponseToFileConfigured(sinks.getSaveResponseToFile())
+ && isForwardResponseToServiceConfigured(sinks.getForwardResponseToService());
+ }
+
+ private boolean isSaveResponseToFileConfigured(SaveResponseToFileType fileSink) {
+ return fileSink != null
+ && (!fileSink.isActive() || fileSink.getPath() != null);
+ }
+
+ private boolean isForwardResponseToServiceConfigured(ForwardResponseToServiceType forwardSink) {
+ return forwardSink != null
+ && (!forwardSink.isActive() || isClientConfigured(forwardSink.getMzsClient()));
+ }
+
+
+
}