/* * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ package org.opendaylight.yangtools.yang.data.api.schema.tree; import static java.util.Objects.requireNonNull; import com.google.common.annotations.Beta; import com.google.common.base.MoreObjects; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.concepts.Immutable; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; /** * DataTree configuration class. * *
* TreeConfig supports currently the following options: *
* TreeConfig can be easily extended in order to support further data tree * configuration options, like following: *
* This can be useful when strict validation is not required or useful for some
* reasons.
*/
@Beta
public class DataTreeConfiguration implements Immutable {
public static final DataTreeConfiguration DEFAULT_CONFIGURATION = new Builder(TreeType.CONFIGURATION)
.setMandatoryNodesValidation(true).build();
public static final DataTreeConfiguration DEFAULT_OPERATIONAL = new Builder(TreeType.OPERATIONAL)
.setMandatoryNodesValidation(true).build();
private final @NonNull TreeType treeType;
private final @NonNull YangInstanceIdentifier rootPath;
private final boolean uniqueIndexes;
private final boolean mandatoryNodesValidation;
DataTreeConfiguration(final TreeType treeType, final YangInstanceIdentifier rootPath, final boolean uniqueIndexes,
final boolean mandatoryNodesValidation) {
this.treeType = requireNonNull(treeType);
this.rootPath = requireNonNull(rootPath);
this.uniqueIndexes = uniqueIndexes;
this.mandatoryNodesValidation = mandatoryNodesValidation;
}
public @NonNull YangInstanceIdentifier getRootPath() {
return rootPath;
}
public @NonNull TreeType getTreeType() {
return treeType;
}
public boolean isUniqueIndexEnabled() {
return uniqueIndexes;
}
public boolean isMandatoryNodesValidationEnabled() {
return mandatoryNodesValidation;
}
@Override
public String toString() {
return MoreObjects.toStringHelper(this).add("type", treeType).add("root", rootPath)
.add("mandatory", mandatoryNodesValidation)
.add("unique", uniqueIndexes).toString();
}
public static DataTreeConfiguration getDefault(final TreeType treeType) {
switch (requireNonNull(treeType)) {
case CONFIGURATION:
return DEFAULT_CONFIGURATION;
case OPERATIONAL:
return DEFAULT_OPERATIONAL;
default:
return new DataTreeConfiguration(treeType, YangInstanceIdentifier.empty(), false, true);
}
}
public static Builder builder(final TreeType treeType) {
return new Builder(treeType);
}
public Builder copyBuilder() {
return new Builder(treeType)
.setMandatoryNodesValidation(isMandatoryNodesValidationEnabled())
.setUniqueIndexes(isUniqueIndexEnabled())
.setRootPath(getRootPath());
}
public static class Builder implements org.opendaylight.yangtools.concepts.Builder