Merge branch 'DEVELOP'
diff --git a/SAMO-Interface/src/main/java/org/eclipse/openk/gridfailureinformation/samointerface/dtos/ForeignFailureDataDto.java b/SAMO-Interface/src/main/java/org/eclipse/openk/gridfailureinformation/samointerface/dtos/ForeignFailureDataDto.java
index fb596bf..0733732 100644
--- a/SAMO-Interface/src/main/java/org/eclipse/openk/gridfailureinformation/samointerface/dtos/ForeignFailureDataDto.java
+++ b/SAMO-Interface/src/main/java/org/eclipse/openk/gridfailureinformation/samointerface/dtos/ForeignFailureDataDto.java
@@ -30,6 +30,14 @@
 @Data
 public class ForeignFailureDataDto implements Serializable {
 
+    private boolean isAutopublish;
+
+    private boolean isOnceOnlyImport;
+
+    private boolean isExcludeEquals;
+
+    private boolean isExcludeAlreadyEdited;
+
     @NotNull
     private boolean isPlanned;
 
diff --git a/SAMO-Interface/src/main/java/org/eclipse/openk/gridfailureinformation/samointerface/service/ImportService.java b/SAMO-Interface/src/main/java/org/eclipse/openk/gridfailureinformation/samointerface/service/ImportService.java
index e652684..b8a7acf 100644
--- a/SAMO-Interface/src/main/java/org/eclipse/openk/gridfailureinformation/samointerface/service/ImportService.java
+++ b/SAMO-Interface/src/main/java/org/eclipse/openk/gridfailureinformation/samointerface/service/ImportService.java
@@ -24,6 +24,7 @@
 import org.eclipse.openk.gridfailureinformation.samointerface.exceptions.InternalServerErrorException;
 import org.eclipse.openk.gridfailureinformation.samointerface.mapper.SAMOMapper;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.boot.context.properties.EnableConfigurationProperties;
 import org.springframework.messaging.MessageChannel;
@@ -45,6 +46,15 @@
     @Autowired
     SAMOMapper samoMapper;
 
+    @Value("${gridFailureInformation.autopublish:false}")
+    private boolean autopublish;
+    @Value("${gridFailureInformation.onceOnlyImport:false}")
+    private boolean onceOnlyImport;
+    @Value("${gridFailureInformation.excludeEquals:true}")
+    private boolean excludeEquals;
+    @Value("${gridFailureInformation.excludeAlreadyEdited:true}")
+    private boolean excludeAlreadyEdited;
+
     public void importSAMOOutage(String samoOutageJson) {
         try {
             SAMOOutage samoOutage = objectMapper.readValue(samoOutageJson, SAMOOutage.class);
@@ -69,6 +79,10 @@
 
     private ForeignFailureDataDto createForeignFailureData(SAMOOutage samoOutage) {
         ForeignFailureDataDto foreignFailureDataDto = samoMapper.toForeignFailureDataDto(samoOutage);
+        foreignFailureDataDto.setAutopublish(autopublish);
+        foreignFailureDataDto.setOnceOnlyImport(onceOnlyImport);
+        foreignFailureDataDto.setExcludeEquals(excludeEquals);
+        foreignFailureDataDto.setExcludeAlreadyEdited(excludeAlreadyEdited);
         foreignFailureDataDto.setBranch(Constants.BRANCH_ELECTRICITY); //fixme klärung: logik einbauen
         foreignFailureDataDto.setPlanned(false); //fixme klärung
         return foreignFailureDataDto;
diff --git a/SAMO-Interface/src/main/resources/application.yml b/SAMO-Interface/src/main/resources/application.yml
index 824c904..fba97c3 100644
--- a/SAMO-Interface/src/main/resources/application.yml
+++ b/SAMO-Interface/src/main/resources/application.yml
@@ -46,6 +46,12 @@
   directory: /opt/transfer/SAMOInterfaceDEVsftpTest/
   fileFilter: '*.json'
   cron: 0/10 * * ? * * # Check for new file in directory every 'cron' time
+  
+gridFailureInformation:
+  autopublish: false
+  onceOnlyImport: false
+  excludeEquals: true
+  excludeAlreadyEdited: false
 ---
 
 spring:
diff --git a/SAMO-Interface/src/main/resources/application_localdev.yml b/SAMO-Interface/src/main/resources/application_localdev.yml
index cc1bc56..35c8064 100644
--- a/SAMO-Interface/src/main/resources/application_localdev.yml
+++ b/SAMO-Interface/src/main/resources/application_localdev.yml
@@ -36,7 +36,10 @@
       tracking-modes: cookie
 
 gridFailureInformation:
-  maxListSize: 2000
+  autopublish: false
+  onceOnlyImport: false
+  excludeEquals: true
+  excludeAlreadyEdited: true
 
 logging.level.org.eclipse.openk.gridfailureinformation.jobs.stoerauskunftinterface.api.StoerauskunftApi: DEBUG
 
diff --git a/SARIS-Interface/sonar-project.properties b/SARIS-Interface/sonar-project.properties
index 7e18aae..525d25e 100644
--- a/SARIS-Interface/sonar-project.properties
+++ b/SARIS-Interface/sonar-project.properties
@@ -10,10 +10,10 @@
  
 sonar.sourceEncoding=UTF-8
 sonar.sources=src/main
-sonar.exclusions=**/model/*.java,**/viewmodel/*.java,**/dtos/*.java, **/RabbitMqConfig.java
+sonar.exclusions=**/model/*.java,**/viewmodel/*.java,**/dtos/*.java, **/RabbitMqConfig.java, **/WebServiceMessageSenderWithAuth.java
 sonar.tests=src/test
 #sonar.test.inclusions=**/*.spec.ts
-sonar.test.exclusions=**/model/**,**/viewmodel/**,**/dtos/*.java, **/RabbitMqConfig.java
+sonar.test.exclusions=**/model/**,**/viewmodel/**,**/dtos/*.java, **/RabbitMqConfig.java, **/WebServiceMessageSenderWithAuth.java
 #sonar.ts.tslintconfigpath=tslint.json
 
 sonar.typescript.lcov.reportPaths=coverage/lcov.info
\ No newline at end of file
diff --git a/SARIS-Interface/src/main/java/org/eclipse/openk/gridfailureinformation/sarisinterface/config/ImportSchedulerConfig.java b/SARIS-Interface/src/main/java/org/eclipse/openk/gridfailureinformation/sarisinterface/config/ImportSchedulerConfig.java
index e744cf3..6b278b6 100644
--- a/SARIS-Interface/src/main/java/org/eclipse/openk/gridfailureinformation/sarisinterface/config/ImportSchedulerConfig.java
+++ b/SARIS-Interface/src/main/java/org/eclipse/openk/gridfailureinformation/sarisinterface/config/ImportSchedulerConfig.java
@@ -26,7 +26,7 @@
     private String cronExpression;
 
     @Bean
-    public void logConfigLdap() {
+    public void logConfigScheduler() {
         log.info(SCHEDULER_NAME + " is enabled with cron expression: " + cronExpression);
     }
 
diff --git a/SARIS-Interface/src/main/java/org/eclipse/openk/gridfailureinformation/sarisinterface/config/rabbitMq/RabbitMqConfig.java b/SARIS-Interface/src/main/java/org/eclipse/openk/gridfailureinformation/sarisinterface/config/rabbitmq/RabbitMqConfig.java
similarity index 95%
rename from SARIS-Interface/src/main/java/org/eclipse/openk/gridfailureinformation/sarisinterface/config/rabbitMq/RabbitMqConfig.java
rename to SARIS-Interface/src/main/java/org/eclipse/openk/gridfailureinformation/sarisinterface/config/rabbitmq/RabbitMqConfig.java
index 5884433..2dd2644 100644
--- a/SARIS-Interface/src/main/java/org/eclipse/openk/gridfailureinformation/sarisinterface/config/rabbitMq/RabbitMqConfig.java
+++ b/SARIS-Interface/src/main/java/org/eclipse/openk/gridfailureinformation/sarisinterface/config/rabbitmq/RabbitMqConfig.java
@@ -1,4 +1,4 @@
-package org.eclipse.openk.gridfailureinformation.sarisinterface.config.rabbitMq;
+package org.eclipse.openk.gridfailureinformation.sarisinterface.config.rabbitmq;
 
 import lombok.Data;
 import lombok.extern.log4j.Log4j2;
@@ -32,7 +32,7 @@
     private RabbitTemplate rabbitTemplate;
 
     @Autowired
-    private RabbitMqProperties rabbitMqProperties;
+    private org.eclipse.openk.gridfailureinformation.sarisinterface.config.rabbitmq.RabbitMqProperties rabbitMqProperties;
 
     @Bean
     public MessageChannel failureImportChannel() {
diff --git a/SARIS-Interface/src/main/java/org/eclipse/openk/gridfailureinformation/sarisinterface/config/rabbitMq/RabbitMqProperties.java b/SARIS-Interface/src/main/java/org/eclipse/openk/gridfailureinformation/sarisinterface/config/rabbitmq/RabbitMqProperties.java
similarity index 97%
rename from SARIS-Interface/src/main/java/org/eclipse/openk/gridfailureinformation/sarisinterface/config/rabbitMq/RabbitMqProperties.java
rename to SARIS-Interface/src/main/java/org/eclipse/openk/gridfailureinformation/sarisinterface/config/rabbitmq/RabbitMqProperties.java
index cac6c93..a129a1a 100644
--- a/SARIS-Interface/src/main/java/org/eclipse/openk/gridfailureinformation/sarisinterface/config/rabbitMq/RabbitMqProperties.java
+++ b/SARIS-Interface/src/main/java/org/eclipse/openk/gridfailureinformation/sarisinterface/config/rabbitmq/RabbitMqProperties.java
@@ -1,4 +1,4 @@
-package org.eclipse.openk.gridfailureinformation.sarisinterface.config.rabbitMq;
+package org.eclipse.openk.gridfailureinformation.sarisinterface.config.rabbitmq;
 
 import lombok.Getter;
 import lombok.Setter;
diff --git a/SARIS-Interface/src/main/java/org/eclipse/openk/gridfailureinformation/sarisinterface/constants/Constants.java b/SARIS-Interface/src/main/java/org/eclipse/openk/gridfailureinformation/sarisinterface/constants/Constants.java
index 3ca592e..bc05ff9 100644
--- a/SARIS-Interface/src/main/java/org/eclipse/openk/gridfailureinformation/sarisinterface/constants/Constants.java
+++ b/SARIS-Interface/src/main/java/org/eclipse/openk/gridfailureinformation/sarisinterface/constants/Constants.java
@@ -13,9 +13,6 @@
  *******************************************************************************
 */
 package org.eclipse.openk.gridfailureinformation.sarisinterface.constants;
-
-import org.apache.tomcat.jni.OS;
-
 public final class Constants {
 
     public static final String SRC_SARIS = "SARIS";
diff --git a/SARIS-Interface/src/main/java/org/eclipse/openk/gridfailureinformation/sarisinterface/controller/ImportController.java b/SARIS-Interface/src/main/java/org/eclipse/openk/gridfailureinformation/sarisinterface/controller/ImportController.java
index 02ab067..bb064ac 100644
--- a/SARIS-Interface/src/main/java/org/eclipse/openk/gridfailureinformation/sarisinterface/controller/ImportController.java
+++ b/SARIS-Interface/src/main/java/org/eclipse/openk/gridfailureinformation/sarisinterface/controller/ImportController.java
@@ -26,7 +26,10 @@
 import org.eclipse.openk.gridfailureinformation.sarisinterface.wsdl.ViewGeplanteVU;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseStatus;
+import org.springframework.web.bind.annotation.RestController;
 
 import java.util.List;
 
@@ -50,8 +53,8 @@
     @ResponseStatus(HttpStatus.OK)
     public void importUserNotification() {
       importService.importForeignFailures(Constants.SARIS_ELECTRICITY_BRANCH_ID);
-      importService.importForeignFailures(Constants.SARIS_GAS_BRANCH_ID);
-      importService.importForeignFailures(Constants.SARIS_WATER_BRANCH_ID);
+      /*importService.importForeignFailures(Constants.SARIS_GAS_BRANCH_ID);
+      importService.importForeignFailures(Constants.SARIS_WATER_BRANCH_ID);*/
     }
 
     @GetMapping("/response-test")
diff --git a/SARIS-Interface/src/main/java/org/eclipse/openk/gridfailureinformation/sarisinterface/dtos/ForeignFailureDataDto.java b/SARIS-Interface/src/main/java/org/eclipse/openk/gridfailureinformation/sarisinterface/dtos/ForeignFailureDataDto.java
index 4f4b79e..2202cbf 100644
--- a/SARIS-Interface/src/main/java/org/eclipse/openk/gridfailureinformation/sarisinterface/dtos/ForeignFailureDataDto.java
+++ b/SARIS-Interface/src/main/java/org/eclipse/openk/gridfailureinformation/sarisinterface/dtos/ForeignFailureDataDto.java
@@ -32,6 +32,12 @@
 
     private boolean isAutopublish;
 
+    private boolean isOnceOnlyImport;
+
+    private boolean isExcludeEquals;
+
+    private boolean isExcludeAlreadyEdited;
+
     @NotNull
     private boolean isPlanned;
 
diff --git a/SARIS-Interface/src/main/java/org/eclipse/openk/gridfailureinformation/sarisinterface/service/ImportService.java b/SARIS-Interface/src/main/java/org/eclipse/openk/gridfailureinformation/sarisinterface/service/ImportService.java
index 7b28384..a77ce54 100644
--- a/SARIS-Interface/src/main/java/org/eclipse/openk/gridfailureinformation/sarisinterface/service/ImportService.java
+++ b/SARIS-Interface/src/main/java/org/eclipse/openk/gridfailureinformation/sarisinterface/service/ImportService.java
@@ -16,9 +16,9 @@
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 import lombok.extern.log4j.Log4j2;
+import org.eclipse.openk.gridfailureinformation.sarisinterface.constants.Constants;
 import org.eclipse.openk.gridfailureinformation.sarisinterface.dtos.ForeignFailureDataDto;
 import org.eclipse.openk.gridfailureinformation.sarisinterface.dtos.ForeignFailureMessageDto;
-import org.eclipse.openk.gridfailureinformation.sarisinterface.constants.Constants;
 import org.eclipse.openk.gridfailureinformation.sarisinterface.exceptions.InternalServerErrorException;
 import org.eclipse.openk.gridfailureinformation.sarisinterface.mapper.SARISMapper;
 import org.eclipse.openk.gridfailureinformation.sarisinterface.wsdl.ArrayOfViewGeplanteVU;
@@ -59,16 +59,24 @@
 
     @Value("${gridFailureInformation.autopublish:false}")
     private boolean autopublish;
+    @Value("${gridFailureInformation.onceOnlyImport:false}")
+    private boolean onceOnlyImport;
+    @Value("${gridFailureInformation.excludeEquals:true}")
+    private boolean excludeEquals;
+    @Value("${gridFailureInformation.excludeAlreadyEdited:true}")
+    private boolean excludeAlreadyEdited;
 
     public void importForeignFailures(int sarisSparteId) {
 
-//       GetAktuelleGVUsInfoAllgemeinResponse sarisResponse = sarisWebservice.getAktuelleGVU(sarisSparteId, false);
+//        GetAktuelleGVUsInfoAllgemeinResponse sarisResponse = sarisWebservice.getAktuelleGVU(sarisSparteId, false);
 
-       GetAktuelleGVUsInfoAllgemeinResponse sarisResponse = getMockedSarisResponse("sarisRealMockResponse.xml");
+        GetAktuelleGVUsInfoAllgemeinResponse sarisResponse = getMockedSarisResponse("sarisRealMockResponse.xml");
 
-        ArrayOfViewGeplanteVU getAktuelleGVUsInfoAllgemeinResult = sarisResponse.getGetAktuelleGVUsInfoAllgemeinResult();
+        ArrayOfViewGeplanteVU getAktuelleGVUsInfoAllgemeinResult =
+                sarisResponse.getGetAktuelleGVUsInfoAllgemeinResult();
         if (getAktuelleGVUsInfoAllgemeinResult != null) {
-            List<ViewGeplanteVU> viewGeplanteVU = sarisResponse.getGetAktuelleGVUsInfoAllgemeinResult().getViewGeplanteVU();
+            List<ViewGeplanteVU> viewGeplanteVU =
+                    sarisResponse.getGetAktuelleGVUsInfoAllgemeinResult().getViewGeplanteVU();
             List<ForeignFailureMessageDto> messageDtoList = new ArrayList<>();
 
             for (ViewGeplanteVU geplanteVU : viewGeplanteVU) {
@@ -108,6 +116,9 @@
         ForeignFailureDataDto foreignFailureDataDto = sarisMapper.toForeignFailureDataDto(viewGeplanteVU);
         foreignFailureDataDto.setPlanned(true);
         foreignFailureDataDto.setAutopublish(autopublish);
+        foreignFailureDataDto.setOnceOnlyImport(onceOnlyImport);
+        foreignFailureDataDto.setExcludeEquals(excludeEquals);
+        foreignFailureDataDto.setExcludeAlreadyEdited(excludeAlreadyEdited);
         return foreignFailureDataDto;
     }
 
diff --git a/SARIS-Interface/src/main/java/org/eclipse/openk/gridfailureinformation/sarisinterface/service/WebServiceMessageSenderWithAuth.java b/SARIS-Interface/src/main/java/org/eclipse/openk/gridfailureinformation/sarisinterface/service/WebServiceMessageSenderWithAuth.java
index c0e5ac4..a243544 100644
--- a/SARIS-Interface/src/main/java/org/eclipse/openk/gridfailureinformation/sarisinterface/service/WebServiceMessageSenderWithAuth.java
+++ b/SARIS-Interface/src/main/java/org/eclipse/openk/gridfailureinformation/sarisinterface/service/WebServiceMessageSenderWithAuth.java
@@ -1,15 +1,11 @@
 package org.eclipse.openk.gridfailureinformation.sarisinterface.service;
 
 import lombok.extern.log4j.Log4j2;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.stereotype.Service;
 import org.springframework.ws.transport.http.HttpUrlConnectionMessageSender;
 
 import java.io.IOException;
 import java.net.HttpURLConnection;
+import java.nio.charset.StandardCharsets;
 import java.util.Base64;
 
 @Log4j2
@@ -29,9 +25,8 @@
             throws IOException {
         Base64.Encoder enc = Base64.getEncoder();
         String userpassword = user +":"+ password;
-        String encodedAuthorization = enc.encodeToString(userpassword.getBytes());
-        connection.setRequestProperty("Authorization", "Basic " + encodedAuthorization);
-
+        String encodedAuthorization = enc.encodeToString(userpassword.getBytes(StandardCharsets.UTF_8));
+        connection.setRequestProperty("Authorization", "Basic " + encodedAuthorization); // NOSONAR Basic Authorization is used on the server side of this interface
         super.prepareConnection(connection);
     }
 }
diff --git a/SARIS-Interface/src/main/resources/Stoerungenservice.wsdl b/SARIS-Interface/src/main/resources/Stoerungenservice.wsdl
index f08b388..a4960ca 100644
--- a/SARIS-Interface/src/main/resources/Stoerungenservice.wsdl
+++ b/SARIS-Interface/src/main/resources/Stoerungenservice.wsdl
@@ -1,5 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?>
-<wsdl:definitions xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="http://tempuri.org/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:s1="http://tempuri.org/AbstractTypes" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" targetNamespace="http://tempuri.org/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
+<wsdl:definitions xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="http://tempuri.org/"
+				  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
+				  xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
+				  targetNamespace="http://tempuri.org/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
 	<wsdl:types>
 		<s:schema elementFormDefault="qualified" targetNamespace="http://tempuri.org/">
 			<s:element name="GetAktuelleGVUsInfoAllgemein">
diff --git a/SARIS-Interface/src/main/resources/application.yml b/SARIS-Interface/src/main/resources/application.yml
index a3eef9e..566947e 100644
--- a/SARIS-Interface/src/main/resources/application.yml
+++ b/SARIS-Interface/src/main/resources/application.yml
@@ -53,10 +53,11 @@
     month: 2
     year: 2020
     
-    
-    
 gridFailureInformation:
   autopublish: false
+  onceOnlyImport: false
+  excludeEquals: true
+  excludeAlreadyEdited: true
 
 security.endpoint:
   user: ${GFI_MANUAL_ENDPOINTS_USERNAME}
diff --git a/SARIS-Interface/src/main/resources/application_localdev.yml b/SARIS-Interface/src/main/resources/application_localdev.yml
index 221bef8..3eb7c08 100644
--- a/SARIS-Interface/src/main/resources/application_localdev.yml
+++ b/SARIS-Interface/src/main/resources/application_localdev.yml
@@ -55,9 +55,14 @@
   scheduling-import:
     enabled: false
     cron: 0 */15 * ? * *
+  testIntegration:
+    day: 11
+    month: 2
+    year: 2020
     
 gridFailureInformation:
   autopublish: false
+  onceOnlyImport: false
 
 security.endpoint:
   user: ${GFI_MANUAL_ENDPOINTS_USERNAME}
@@ -78,6 +83,10 @@
 #    importkey: sitImportExchange.failureImportKey_localdev_simon
 
     # Importkanal
-    importExchange: sitImportExchange
-    importQueue: sitImportQueue
-    importkey: sitImportExchange.failureImportKey
+#    importExchange: sitImportExchange
+#    importQueue: sitImportQueue
+#    importkey: sitImportExchange.failureImportKey
+
+    importExchange: sitImportExchange_localdev
+    importQueue: sitImportQueue_localdev
+    importkey: sitImportExchange.failureImportKey_localdev
\ No newline at end of file
diff --git a/SARIS-Interface/src/main/resources/countries.wsdl b/SARIS-Interface/src/main/resources/countries.wsdl
deleted file mode 100644
index 8b56dcc..0000000
--- a/SARIS-Interface/src/main/resources/countries.wsdl
+++ /dev/null
@@ -1,72 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?><wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:sch="http://spring.io/guides/gs-producing-web-service" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://spring.io/guides/gs-producing-web-service" targetNamespace="http://spring.io/guides/gs-producing-web-service">
-  <wsdl:types>
-    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://spring.io/guides/gs-producing-web-service">
-
-    <xs:element name="getCountryRequest">
-        <xs:complexType>
-            <xs:sequence>
-                <xs:element name="name" type="xs:string"/>
-            </xs:sequence>
-        </xs:complexType>
-    </xs:element>
-
-    <xs:element name="getCountryResponse">
-        <xs:complexType>
-            <xs:sequence>
-                <xs:element name="country" type="tns:country"/>
-            </xs:sequence>
-        </xs:complexType>
-    </xs:element>
-
-    <xs:complexType name="country">
-        <xs:sequence>
-            <xs:element name="name" type="xs:string"/>
-            <xs:element name="population" type="xs:int"/>
-            <xs:element name="capital" type="xs:string"/>
-            <xs:element name="currency" type="tns:currency"/>
-        </xs:sequence>
-    </xs:complexType>
-
-    <xs:simpleType name="currency">
-        <xs:restriction base="xs:string">
-            <xs:enumeration value="GBP"/>
-            <xs:enumeration value="EUR"/>
-            <xs:enumeration value="PLN"/>
-        </xs:restriction>
-    </xs:simpleType>
-</xs:schema>
-  </wsdl:types>
-  <wsdl:message name="getCountryResponse">
-    <wsdl:part element="tns:getCountryResponse" name="getCountryResponse">
-    </wsdl:part>
-  </wsdl:message>
-  <wsdl:message name="getCountryRequest">
-    <wsdl:part element="tns:getCountryRequest" name="getCountryRequest">
-    </wsdl:part>
-  </wsdl:message>
-  <wsdl:portType name="CountriesPort">
-    <wsdl:operation name="getCountry">
-      <wsdl:input message="tns:getCountryRequest" name="getCountryRequest">
-    </wsdl:input>
-      <wsdl:output message="tns:getCountryResponse" name="getCountryResponse">
-    </wsdl:output>
-    </wsdl:operation>
-  </wsdl:portType>
-  <wsdl:binding name="CountriesPortSoap11" type="tns:CountriesPort">
-    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
-    <wsdl:operation name="getCountry">
-      <soap:operation soapAction=""/>
-      <wsdl:input name="getCountryRequest">
-        <soap:body use="literal"/>
-      </wsdl:input>
-      <wsdl:output name="getCountryResponse">
-        <soap:body use="literal"/>
-      </wsdl:output>
-    </wsdl:operation>
-  </wsdl:binding>
-  <wsdl:service name="CountriesPortService">
-    <wsdl:port binding="tns:CountriesPortSoap11" name="CountriesPortSoap11">
-      <soap:address location="http://localhost:8080/ws"/>
-    </wsdl:port>
-  </wsdl:service>
-</wsdl:definitions>
\ No newline at end of file
diff --git a/SARIS-Interface/src/test/java/org/eclipse/openk/gridfailureinformation/sarisinterface/config/TestConfiguration.java b/SARIS-Interface/src/test/java/org/eclipse/openk/gridfailureinformation/sarisinterface/config/TestConfiguration.java
index 68162c0..f30151a 100644
--- a/SARIS-Interface/src/test/java/org/eclipse/openk/gridfailureinformation/sarisinterface/config/TestConfiguration.java
+++ b/SARIS-Interface/src/test/java/org/eclipse/openk/gridfailureinformation/sarisinterface/config/TestConfiguration.java
@@ -18,7 +18,7 @@
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.rabbitmq.client.Channel;
 import org.eclipse.openk.gridfailureinformation.sarisinterface.SarisInterfaceApplication;
-import org.eclipse.openk.gridfailureinformation.sarisinterface.config.rabbitMq.RabbitMqConfig;
+import org.eclipse.openk.gridfailureinformation.sarisinterface.config.rabbitmq.RabbitMqConfig;
 import org.eclipse.openk.gridfailureinformation.sarisinterface.mapper.SARISMapperImpl;
 import org.springframework.amqp.rabbit.annotation.EnableRabbit;
 import org.springframework.amqp.rabbit.connection.Connection;
@@ -29,7 +29,6 @@
 import org.springframework.boot.test.context.ConfigFileApplicationContextInitializer;
 import org.springframework.context.annotation.Bean;
 import org.springframework.messaging.MessageChannel;
-import org.springframework.test.context.ActiveProfiles;
 import org.springframework.test.context.ContextConfiguration;
 import org.springframework.test.context.TestPropertySource;
 
diff --git a/SARIS-Interface/src/test/java/org/eclipse/openk/gridfailureinformation/sarisinterface/controller/ImportControllerTest.java b/SARIS-Interface/src/test/java/org/eclipse/openk/gridfailureinformation/sarisinterface/controller/ImportControllerTest.java
index 375b766..da52550 100644
--- a/SARIS-Interface/src/test/java/org/eclipse/openk/gridfailureinformation/sarisinterface/controller/ImportControllerTest.java
+++ b/SARIS-Interface/src/test/java/org/eclipse/openk/gridfailureinformation/sarisinterface/controller/ImportControllerTest.java
@@ -19,6 +19,7 @@
 import org.eclipse.openk.gridfailureinformation.sarisinterface.service.ImportService;
 import org.eclipse.openk.gridfailureinformation.sarisinterface.service.SarisWebservice;
 import org.eclipse.openk.gridfailureinformation.sarisinterface.support.MockDataHelper;
+import org.eclipse.openk.gridfailureinformation.sarisinterface.wsdl.GetAktuelleGVUsInfoAllgemeinResponse;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
@@ -29,9 +30,11 @@
 import org.springframework.test.context.ActiveProfiles;
 import org.springframework.test.web.servlet.MockMvc;
 
+import static org.mockito.ArgumentMatchers.anyBoolean;
 import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
 import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
 import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
@@ -69,4 +72,31 @@
 
         verify(importService, times(0)).importForeignFailures(anyInt());
     }
+
+    @Test
+    @WithMockUser(value = "mockedUser")
+    public void shouldCallResponseTest() throws Exception {
+
+        GetAktuelleGVUsInfoAllgemeinResponse mockedSarisResponse = MockDataHelper.getMockedSarisResponse(
+                "sarisRealMockResponse.xml");
+
+        when(sarisWebservice.getAktuelleGVU(anyInt(), anyBoolean())).thenReturn(mockedSarisResponse);
+
+        mockMvc.perform(get("/saris/response-test"))
+                .andExpect(status().is2xxSuccessful());
+
+        verify(sarisWebservice, times(1)).getAktuelleGVU( anyInt(), anyBoolean());
+    }
+
+    @Test
+    @WithMockUser(value = "mockedUser")
+    public void shouldCallResponseTest2() throws Exception {
+
+        when(sarisWebservice.getAktuelleGVU(anyInt(), anyBoolean())).thenReturn(new GetAktuelleGVUsInfoAllgemeinResponse());
+
+        mockMvc.perform(get("/saris/response-test"))
+                .andExpect(status().is2xxSuccessful());
+
+        verify(sarisWebservice, times(1)).getAktuelleGVU( anyInt(), anyBoolean());
+    }
 }
\ No newline at end of file
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/ImportService.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/ImportService.java
index 98cfb1e..204b858 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/ImportService.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/ImportService.java
@@ -14,6 +14,8 @@
  */
 package org.eclipse.openk.gridfailureinformation.service;
 
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import lombok.extern.log4j.Log4j2;
 import org.apache.commons.lang.StringUtils;
 import org.eclipse.openk.gridfailureinformation.bpmn.impl.GfiProcessState;
@@ -32,11 +34,13 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.Assert;
 import org.springframework.validation.annotation.Validated;
 
 import java.math.BigDecimal;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Objects;
 import java.util.Optional;
 import java.util.UUID;
 
@@ -72,6 +76,9 @@
     @Autowired
     ProcessHelper processHelper;
 
+    @Autowired
+    ObjectMapper objectMapper;
+
     public boolean validateAndImport(ImportDataDto importDataDto) {
         ForeignFailureDataDto foreignFailureDataDto = importDataValidator.readSafeForeignFailureInfo(importDataDto);
 
@@ -107,7 +114,8 @@
             }
 
             FailureInformationDto retVal = failureInformationService.insertFailureInfo(failureInformationDto, gfiProcessState);
-            log.info("External failure information [MetaId: " + importDataDto.getMetaId() + "] from " + importDataDto.getSource() + " imported (inserted).");
+            log.info("External failure information [MetaId: " + importDataDto.getMetaId() + "] from "
+                    + importDataDto.getSource() + " imported (inserted).");
 
             if (foreignFailureDataDto.isAutopublish()) {
                 failureInformationService.insertPublicationChannelForFailureInfo(retVal.getUuid(), Constants.PUBLICATION_CHANNEL_OWNDMZ, true);
@@ -117,6 +125,13 @@
             return retVal;
         } else {
 
+            if (foreignFailureDataDto.isOnceOnlyImport()) {
+                log.debug("External failure information [MetaId: " + importDataDto.getMetaId() + "] from "
+                        + importDataDto.getSource() + " won't be imported because it has already been imported" +
+                        " once and flag isOnceOnlyImport is true.");
+                return null;
+            }
+
             UUID statusInternIdExistingDto = existingDto.getStatusInternId();
 
             //When status of already existing failureinformation completed or canceled do not update but log it.
@@ -128,8 +143,32 @@
                 return null;
             }
 
+            FailureInformationDto existingDtoClone = null;
+            try {
+                existingDtoClone = objectMapper
+                        .readValue(objectMapper.writeValueAsString(existingDto), FailureInformationDto.class);
+            } catch (JsonProcessingException e) {
+                log.error("Error parsing object (JSON)", e);
+            }
+
             FailureInformationDto updatedDto = setUpdateFromForeignDto(importDataDto, foreignFailureDataDto, existingDto);
 
+            //Is the content of the new failureinformation different compared to the already existing one
+            if (foreignFailureDataDto.isExcludeEquals() && updatedDto.equals(existingDtoClone)){
+                log.debug("External failure information [MetaId: " + importDataDto.getMetaId() + "] from "
+                        + importDataDto.getSource() + " hasn't changed, no update will be executed.");
+                return null;
+            }
+
+
+            Assert.notNull(existingDtoClone, "existingDtoClone was null");
+            //Don't update if the failureinformation was already edited by an user
+            if (foreignFailureDataDto.isExcludeAlreadyEdited() && !Objects.equals(updatedDto.getModUser(), existingDtoClone.getModUser())){
+                log.debug("External failure information [MetaId: " + importDataDto.getMetaId() + "] from "
+                        + importDataDto.getSource() + " has already been edited in SIT by an user, no update will be executed.");
+                return null;
+            }
+
             if(!foreignFailureDataDto.isAutopublish() && statusInternIdExistingDto.equals(
                     statusService.getStatusFromId(GfiProcessState.QUALIFIED.getStatusValue()).getUuid()
             )) {
@@ -138,8 +177,9 @@
                 );
             } else {
                 if (foreignFailureDataDto.isAutopublish()) {
-                    processHelper.resetPublishedStateForChannels(updatedDto);
-                    log.info("Autopublish for external failure information [" + importDataDto.getMetaId() + "] from " + importDataDto.getSource() + " is true, current status remains unchanged.");
+                    processHelper.resetPublishedStateForChannels(updatedDto); //FIXME richtig?
+                    log.info("Autopublish for external failure information [MetaId: " + importDataDto.getMetaId() + "] from "
+                            + importDataDto.getSource() + " is true, current status remains unchanged.");
                 }
             }
 
@@ -156,11 +196,13 @@
 
         setFromForeignDto(importDataDto, foreignFailureDataDto, failureInformationDto);
         failureInformationDto.setCreateUser(importDataDto.getSource());
+        failureInformationDto.setModUser(importDataDto.getSource());
         return failureInformationDto;
     }
 
     private FailureInformationDto setUpdateFromForeignDto(ImportDataDto importDataDto, ForeignFailureDataDto foreignFailureDataDto, FailureInformationDto failureInformationDto) {
         setFromForeignDto(importDataDto, foreignFailureDataDto, failureInformationDto);
+        failureInformationDto.setModUser(importDataDto.getSource());
         return failureInformationDto;
     }
 
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/viewmodel/FailureInformationDto.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/viewmodel/FailureInformationDto.java
index 11ae178..529ae1d 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/viewmodel/FailureInformationDto.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/viewmodel/FailureInformationDto.java
@@ -17,12 +17,15 @@
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import lombok.Data;
+import org.apache.commons.lang.builder.EqualsBuilder;
+import org.apache.commons.lang.builder.HashCodeBuilder;
 
 import java.io.Serializable;
 import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.Objects;
 import java.util.UUID;
 
 @Data
@@ -102,4 +105,21 @@
 
     private List<ArrayList<BigDecimal>> addressPolygonPoints;
     private List<UUID> stationIds;
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+
+        if (!(o instanceof FailureInformationDto)) return false;
+
+        FailureInformationDto that = (FailureInformationDto) o;
+
+        return new EqualsBuilder().append(isPlanned, that.isPlanned).append(uuid, that.uuid).append(title,
+                that.title).append(description, that.description).append(versionNumber, that.versionNumber).append(responsibility, that.responsibility).append(voltageLevel, that.voltageLevel).append(pressureLevel, that.pressureLevel).append(failureBegin, that.failureBegin).append(failureEndPlanned, that.failureEndPlanned).append(failureEndResupplied, that.failureEndResupplied).append(internalRemark, that.internalRemark).append(postcode, that.postcode).append(city, that.city).append(district, that.district).append(street, that.street).append(housenumber, that.housenumber).append(stationId, that.stationId).append(stationDescription, that.stationDescription).append(stationCoords, that.stationCoords).append(freetextPostcode, that.freetextPostcode).append(freetextCity, that.freetextCity).append(freetextDistrict, that.freetextDistrict).append(longitude, that.longitude).append(latitude, that.latitude).append(objectReferenceExternalSystem, that.objectReferenceExternalSystem).append(publicationStatus, that.publicationStatus).append(publicationFreetext, that.publicationFreetext).append(condensed, that.condensed).append(condensedCount, that.condensedCount).append(faultLocationArea, that.faultLocationArea).append(createUser, that.createUser).append(modUser, that.modUser).append(failureClassificationId, that.failureClassificationId).append(failureClassification, that.failureClassification).append(failureTypeId, that.failureTypeId).append(failureType, that.failureType).append(statusInternId, that.statusInternId).append(statusIntern, that.statusIntern).append(statusExtern, that.statusExtern).append(branchId, that.branchId).append(branch, that.branch).append(branchDescription, that.branchDescription).append(radiusId, that.radiusId).append(radius, that.radius).append(expectedReasonId, that.expectedReasonId).append(expectedReasonText, that.expectedReasonText).append(failureInformationCondensedId, that.failureInformationCondensedId).append(addressPolygonPoints, that.addressPolygonPoints).append(stationIds, that.stationIds).isEquals();
+    }
+
+    @Override
+    public int hashCode() {
+        return new HashCodeBuilder(17, 37).append(uuid).append(title).append(description).append(versionNumber).append(responsibility).append(voltageLevel).append(pressureLevel).append(failureBegin).append(failureEndPlanned).append(failureEndResupplied).append(internalRemark).append(postcode).append(city).append(district).append(street).append(housenumber).append(stationId).append(stationDescription).append(stationCoords).append(freetextPostcode).append(freetextCity).append(freetextDistrict).append(longitude).append(latitude).append(objectReferenceExternalSystem).append(publicationStatus).append(publicationFreetext).append(condensed).append(condensedCount).append(faultLocationArea).append(createUser).append(modUser).append(failureClassificationId).append(failureClassification).append(isPlanned).append(failureTypeId).append(failureType).append(statusInternId).append(statusIntern).append(statusExtern).append(branchId).append(branch).append(branchDescription).append(radiusId).append(radius).append(expectedReasonId).append(expectedReasonText).append(failureInformationCondensedId).append(addressPolygonPoints).append(stationIds).toHashCode();
+    }
 }
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/viewmodel/ForeignFailureDataDto.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/viewmodel/ForeignFailureDataDto.java
index a1846d3..1971e55 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/viewmodel/ForeignFailureDataDto.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/viewmodel/ForeignFailureDataDto.java
@@ -32,6 +32,12 @@
 
     private boolean isAutopublish;
 
+    private boolean isOnceOnlyImport;
+
+    private boolean isExcludeEquals;
+
+    private boolean isExcludeAlreadyEdited;
+
     @NotNull
     private boolean isPlanned;