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) {
@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());