2 * Copyright (c) 2015 CableLabs and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
9 package org.opendaylight.controller.packetcable.provider.validation;
11 import static com.google.common.base.Preconditions.checkNotNull;
13 import com.google.common.collect.Maps;
15 import java.util.NoSuchElementException;
16 import javax.annotation.Nonnull;
17 import org.opendaylight.yangtools.yang.binding.DataObject;
18 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
19 import org.slf4j.Logger;
20 import org.slf4j.LoggerFactory;
23 * Validates restconf data that is supplied by users
27 public class DataValidator {
28 private static final Logger logger = LoggerFactory.getLogger(DataValidator.class);
30 private final ValidatorProvider validatorProvider;
32 public DataValidator(@Nonnull final ValidatorProvider validatorProvider) {
33 this.validatorProvider = checkNotNull(validatorProvider);
36 public Map<InstanceIdentifier<?>, ValidationException> validate(
37 @Nonnull final Map<InstanceIdentifier<?>, DataObject> dataObjectMap,
38 @Nonnull final Validator.Extent extent) {
39 checkNotNull(dataObjectMap);
41 Map<InstanceIdentifier<?>, ValidationException> exceptionMap = Maps.newHashMap();
43 for (Map.Entry<InstanceIdentifier<?>, DataObject> entry : dataObjectMap.entrySet()) {
44 final InstanceIdentifier<?> iid = entry.getKey();
45 final DataObject data = entry.getValue();
48 validate(iid, data, extent);
49 } catch (ValidationException e) {
50 exceptionMap.put(iid, e);
51 logger.debug("invalid data: {}", data, e);
52 } catch (NoSuchElementException e) {
53 logger.error("Unable to find validator for data: {}", data, e);
60 public void validate(@Nonnull InstanceIdentifier<?> iid, @Nonnull final DataObject dataObject,
61 @Nonnull final Validator.Extent extent) throws ValidationException {
63 checkNotNull(dataObject);
64 validatorProvider.validate(iid.getTargetType(), dataObject, extent);
67 public <T extends DataObject> Map<InstanceIdentifier<T>, ValidationException> validateOneType(
68 @Nonnull final Map<InstanceIdentifier<T>, T> dataObjectMap, @Nonnull final Validator.Extent extent) {
69 checkNotNull(dataObjectMap);
71 Map<InstanceIdentifier<T>, ValidationException> exceptionMap = Maps.newHashMap();
73 for (Map.Entry<InstanceIdentifier<T>, T> entry : dataObjectMap.entrySet()) {
74 final InstanceIdentifier<T> iid = entry.getKey();
75 final T data = entry.getValue();
78 validate(iid, data, extent);
79 } catch (ValidationException e) {
80 exceptionMap.put(iid, e);
81 logger.debug("invalid data: {}", data, e);
82 } catch (NoSuchElementException e) {
83 logger.error("Unable to find validator for data: {}", data, e);