From d46392d74641f5450d27857a41dd4d163b408ac3 Mon Sep 17 00:00:00 2001
From: Pawel GUTOWSKI <Pawel.GUTOWSKI@ext.ec.europa.eu>
Date: Tue, 27 Feb 2018 14:11:47 +0100
Subject: [PATCH] EDELIVERY-1856 Added ServiceGroup references validation

---
 .../smp/validation/ServiceGroupValidator.java  |  7 +++++++
 .../validation/ServiceGroupValidatorTest.java  | 18 ++++++++++++++++++
 2 files changed, 25 insertions(+)

diff --git a/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/validation/ServiceGroupValidator.java b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/validation/ServiceGroupValidator.java
index 3b0e28d7a..5c6173f83 100644
--- a/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/validation/ServiceGroupValidator.java
+++ b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/validation/ServiceGroupValidator.java
@@ -17,6 +17,7 @@ import eu.europa.ec.edelivery.smp.error.exceptions.BadRequestException;
 import eu.europa.ec.smp.api.Identifiers;
 import org.oasis_open.docs.bdxr.ns.smp._2016._05.ParticipantIdentifierType;
 import org.oasis_open.docs.bdxr.ns.smp._2016._05.ServiceGroup;
+import org.oasis_open.docs.bdxr.ns.smp._2016._05.ServiceMetadataReferenceCollectionType;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
 
@@ -24,6 +25,7 @@ import java.util.regex.Pattern;
 import java.util.regex.PatternSyntaxException;
 
 import static eu.europa.ec.edelivery.smp.error.ErrorBusinessCode.WRONG_FIELD;
+import static org.springframework.util.CollectionUtils.isEmpty;
 
 
 /**
@@ -55,6 +57,11 @@ public class ServiceGroupValidator {
         if (!schemaPattern.matcher(scheme).matches()) {
             throw new BadRequestException(WRONG_FIELD, "Service Group scheme does not match allowed pattern: " + schemaPattern.pattern());
         }
+
+        ServiceMetadataReferenceCollectionType references = serviceGroup.getServiceMetadataReferenceCollection();
+        if (references != null && !isEmpty(references.getServiceMetadataReferences())) {
+            throw new BadRequestException(WRONG_FIELD, "ServiceMetadataReferenceCollection must be empty");
+        }
     }
 
 }
diff --git a/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/validation/ServiceGroupValidatorTest.java b/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/validation/ServiceGroupValidatorTest.java
index 981aa7c63..6c4f3ce4e 100644
--- a/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/validation/ServiceGroupValidatorTest.java
+++ b/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/validation/ServiceGroupValidatorTest.java
@@ -18,8 +18,11 @@ import org.junit.Before;
 import org.junit.Test;
 import org.oasis_open.docs.bdxr.ns.smp._2016._05.ParticipantIdentifierType;
 import org.oasis_open.docs.bdxr.ns.smp._2016._05.ServiceGroup;
+import org.oasis_open.docs.bdxr.ns.smp._2016._05.ServiceMetadataReferenceCollectionType;
+import org.oasis_open.docs.bdxr.ns.smp._2016._05.ServiceMetadataReferenceType;
 
 import static eu.europa.ec.smp.api.Identifiers.asString;
+import static java.util.Arrays.asList;
 
 /**
  * Created by gutowpa on 02/08/2017.
@@ -68,4 +71,19 @@ public class ServiceGroupValidatorTest {
 
         validator.validate(asString(id), sg);
     }
+
+    @Test(expected = BadRequestException.class)
+    public void testServiceGroupWithReference() throws Throwable {
+        //given
+        ServiceMetadataReferenceType ref = new ServiceMetadataReferenceType("http://poland.pl");
+        ServiceMetadataReferenceCollectionType references = new ServiceMetadataReferenceCollectionType(asList(ref));
+
+        ParticipantIdentifierType id = new ParticipantIdentifierType("urn:poland:ncpb", "correct-scheme-ok");
+        ServiceGroup sg = new ServiceGroup();
+        sg.setServiceMetadataReferenceCollection(references);
+        sg.setParticipantIdentifier(id);
+
+        //when-then
+        validator.validate(asString(id), sg);
+    }
 }
-- 
GitLab