Merge LSO Legato work onto dev/nitrogen
[unimgr.git] / impl / src / main / java / org / opendaylight / unimgr / mef / nrp / impl / DefaultValidator.java
index 62fe7ab644223f820f3020683ec7107a50cc7606..82ac13636ccebc7acf467a9e477b8f196ad891ba 100644 (file)
@@ -9,20 +9,30 @@
 package org.opendaylight.unimgr.mef.nrp.impl;
 
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
 import org.opendaylight.unimgr.mef.nrp.api.RequestValidator;
 import org.opendaylight.unimgr.mef.nrp.common.NrpDao;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev180307.LocalClass;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev180307.CreateConnectivityServiceInput;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev180307.UpdateConnectivityServiceInput;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev180307.connectivity.context.ConnectivityService;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev180307.update.connectivity.service.input.EndPoint;
+import org.opendaylight.yangtools.yang.data.api.schema.tree.TreeType;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
+import javax.annotation.Nonnull;
+import java.util.HashSet;
 import java.util.Optional;
+import java.util.Set;
 
 /**
  * @author bartosz.michalik@amartus.com
  */
 public class DefaultValidator implements RequestValidator {
 
+    private static final Logger log = LoggerFactory.getLogger(DefaultValidator.class);
+
     private final  DataBroker dataBroker;
 
     public DefaultValidator(DataBroker dataBroker) {
@@ -31,9 +41,46 @@ public class DefaultValidator implements RequestValidator {
 
     @Override
     public ValidationResult checkValid(CreateConnectivityServiceInput input) {
+        log.debug("Validation for requrst started");
+        ValidationResult fromInput= verifyPayloadCorrect(input);
+
+        ValidationResult fromState = validateState(input);
+
+
+
+        return fromState.merge(fromInput);
+    }
+
+    @Nonnull protected  ValidationResult validateState(CreateConnectivityServiceInput input) {
+        // simple usecase to validate port based service
+        // more complex implementation could use caching techniques
+        //TODO implement
+
         return new ValidationResult();
     }
 
+    @Nonnull protected ValidationResult verifyPayloadCorrect(CreateConnectivityServiceInput input) {
+
+        ValidationResult validationResult = new ValidationResult();
+
+        if(input.getEndPoint() == null || input.getEndPoint().isEmpty()) {
+            validationResult.problem("No endpoints specified for a connectivity service");
+        } else {
+
+            Set<String> allItems = new HashSet<>();
+            Optional<String> firstDuplicate = input.getEndPoint().stream()
+                    .filter(e -> e.getLocalId() != null)
+                    .map(LocalClass::getLocalId)
+                    .filter(s -> !allItems.add(s))
+                    .findFirst();
+            firstDuplicate.ifPresent(s -> validationResult.problem("A duplicate endpoint id: " + s));
+        }
+
+
+
+        return validationResult;
+    }
+
     @Override
     public ValidationResult checkValid(UpdateConnectivityServiceInput input) {
         ConnectivityService cs = new NrpDao(dataBroker.newReadOnlyTransaction()).getConnectivityService(input.getServiceIdOrName());