/*
* 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 com.google.common.annotations.Beta;
import com.google.common.base.MoreObjects;
import com.google.common.base.Preconditions;
import javax.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:
* <ul>
* <li>treeType</li>
* <li>enable/disable unique indexes and unique constraint validation</li>
* <li>enable/disable mandatory nodes validation</li>
* </ul>
*
* TreeConfig can be easily extended in order to support further data tree
* configuration options, like following:
* <ul>
* <li>enable/disable case exclusion validation</li>
* <li>enable/disable other indexes</li>
* <li>other schema aware validation options</li>
* </ul>
*
* 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).build();
private final TreeType treeType;
private final 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 = Preconditions.checkNotNull(treeType);
this.rootPath = Preconditions.checkNotNull(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) {
Preconditions.checkNotNull(treeType);
switch (treeType) {
case CONFIGURATION:
return DEFAULT_CONFIGURATION;
case OPERATIONAL:
return DEFAULT_OPERATIONAL;
default:
return new DataTreeConfiguration(treeType, YangInstanceIdentifier.EMPTY, false, true);
}
}
public static class Builder implements org.opendaylight.yangtools.concepts.Builder<DataTreeConfiguration> {
private final TreeType treeType;
private YangInstanceIdentifier rootPath;
private boolean uniqueIndexes;
private boolean mandatoryNodesValidation;
public Builder(final TreeType treeType) {
this.treeType = Preconditions.checkNotNull(treeType);
this.rootPath = YangInstanceIdentifier.EMPTY;
}
public Builder setUniqueIndexes(final boolean uniqueIndexes) {
this.uniqueIndexes = uniqueIndexes;
return this;
}
public Builder setMandatoryNodesValidation(final boolean mandatoryNodesValidation) {
this.mandatoryNodesValidation = mandatoryNodesValidation;
return this;
}
public Builder setRootPath(final YangInstanceIdentifier rootPath) {
this.rootPath = rootPath.toOptimized();
return this;
}
@Override
public DataTreeConfiguration build() {
return new DataTreeConfiguration(treeType, rootPath, uniqueIndexes, mandatoryNodesValidation);
}
}
}