/* * Copyright (c) 2015 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.model.api; import com.google.common.annotations.Beta; import com.google.common.base.Preconditions; import javax.annotation.Nonnull; import javax.annotation.Nullable; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.YangConstants; import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; import org.opendaylight.yangtools.yang.model.api.stmt.AnyxmlStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ArgumentStatement; import org.opendaylight.yangtools.yang.model.api.stmt.AugmentStatement; import org.opendaylight.yangtools.yang.model.api.stmt.BaseStatement; import org.opendaylight.yangtools.yang.model.api.stmt.BelongsToStatement; import org.opendaylight.yangtools.yang.model.api.stmt.BitStatement; import org.opendaylight.yangtools.yang.model.api.stmt.CaseStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ChoiceStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ConfigStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ContactStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ContainerStatement; import org.opendaylight.yangtools.yang.model.api.stmt.DefaultStatement; import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement; import org.opendaylight.yangtools.yang.model.api.stmt.DeviateStatement; import org.opendaylight.yangtools.yang.model.api.stmt.DeviationStatement; import org.opendaylight.yangtools.yang.model.api.stmt.EnumStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ErrorAppTagStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ErrorMessageStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ExtensionStatement; import org.opendaylight.yangtools.yang.model.api.stmt.FeatureStatement; import org.opendaylight.yangtools.yang.model.api.stmt.FractionDigitsStatement; import org.opendaylight.yangtools.yang.model.api.stmt.GroupingStatement; import org.opendaylight.yangtools.yang.model.api.stmt.IdentityStatement; import org.opendaylight.yangtools.yang.model.api.stmt.IfFeatureStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ImportStatement; import org.opendaylight.yangtools.yang.model.api.stmt.IncludeStatement; import org.opendaylight.yangtools.yang.model.api.stmt.InputStatement; import org.opendaylight.yangtools.yang.model.api.stmt.KeyStatement; import org.opendaylight.yangtools.yang.model.api.stmt.LeafListStatement; import org.opendaylight.yangtools.yang.model.api.stmt.LeafStatement; import org.opendaylight.yangtools.yang.model.api.stmt.LengthStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ListStatement; import org.opendaylight.yangtools.yang.model.api.stmt.MandatoryStatement; import org.opendaylight.yangtools.yang.model.api.stmt.MaxElementsStatement; import org.opendaylight.yangtools.yang.model.api.stmt.MinElementsStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ModuleStatement; import org.opendaylight.yangtools.yang.model.api.stmt.MustStatement; import org.opendaylight.yangtools.yang.model.api.stmt.NamespaceStatement; import org.opendaylight.yangtools.yang.model.api.stmt.NotificationStatement; import org.opendaylight.yangtools.yang.model.api.stmt.OrderedByStatement; import org.opendaylight.yangtools.yang.model.api.stmt.OrganizationStatement; import org.opendaylight.yangtools.yang.model.api.stmt.OutputStatement; import org.opendaylight.yangtools.yang.model.api.stmt.PathStatement; import org.opendaylight.yangtools.yang.model.api.stmt.PatternStatement; import org.opendaylight.yangtools.yang.model.api.stmt.PositionStatement; import org.opendaylight.yangtools.yang.model.api.stmt.PrefixStatement; import org.opendaylight.yangtools.yang.model.api.stmt.PresenceStatement; import org.opendaylight.yangtools.yang.model.api.stmt.RangeStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement; import org.opendaylight.yangtools.yang.model.api.stmt.RefineStatement; import org.opendaylight.yangtools.yang.model.api.stmt.RequireInstanceStatement; import org.opendaylight.yangtools.yang.model.api.stmt.RevisionDateStatement; import org.opendaylight.yangtools.yang.model.api.stmt.RevisionStatement; import org.opendaylight.yangtools.yang.model.api.stmt.RpcStatement; import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement; import org.opendaylight.yangtools.yang.model.api.stmt.SubmoduleStatement; import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement; import org.opendaylight.yangtools.yang.model.api.stmt.TypedefStatement; import org.opendaylight.yangtools.yang.model.api.stmt.UniqueStatement; import org.opendaylight.yangtools.yang.model.api.stmt.UnitsStatement; import org.opendaylight.yangtools.yang.model.api.stmt.UsesStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ValueStatement; import org.opendaylight.yangtools.yang.model.api.stmt.WhenStatement; import org.opendaylight.yangtools.yang.model.api.stmt.YangVersionStatement; import org.opendaylight.yangtools.yang.model.api.stmt.YinElementStatement; @Beta public enum Rfc6020Mapping implements StatementDefinition { Anyxml(AnyxmlStatement.class, "anyxml", "name"), Argument(ArgumentStatement.class, "argument", "name"), Augment(AugmentStatement.class, "augment", "target-node"), Base(BaseStatement.class, "base", "name"), BelongsTo(BelongsToStatement.class, "belongs-to", "module"), Bit(BitStatement.class, "bit", "name"), Case(CaseStatement.class, "case", "name"), Choice(ChoiceStatement.class, "choice", "name"), Config(ConfigStatement.class, "config", "value"), Contact(ContactStatement.class, "contact", "text", true), Container(ContainerStatement.class, "container", "name"), Default(DefaultStatement.class, "default", "value"), Description(DescriptionStatement.class, "description", "text", true), Deviate(DeviateStatement.class, "deviate", "value"), Deviation(DeviationStatement.class, "deviation", "target-node"), Enum(EnumStatement.class, "enum", "name"), ErrorAppTag(ErrorAppTagStatement.class, "error-app-tag", "value"), ErrorMessage(ErrorMessageStatement.class, "error-message", "value", true), Extension(ExtensionStatement.class, "extension", "name"), Feature(FeatureStatement.class, "feature", "name"), FractionDigits(FractionDigitsStatement.class, "fraction-digits", "value"), Grouping(GroupingStatement.class, "grouping", "name"), Identity(IdentityStatement.class, "identity", "name"), IfFeature(IfFeatureStatement.class, "if-feature", "name"), Import(ImportStatement.class, "import", "module"), Include(IncludeStatement.class, "include", "module"), Input(InputStatement.class, "input"), Key(KeyStatement.class, "key", "value"), Leaf(LeafStatement.class, "leaf", "name"), LeafList(LeafListStatement.class, "leaf-list", "name"), Length(LengthStatement.class, "length", "value"), List(ListStatement.class, "list", "name"), Mandatory(MandatoryStatement.class, "mandatory", "value"), MaxElements(MaxElementsStatement.class, "max-elements", "value"), MinElements(MinElementsStatement.class, "min-elements", "value"), Module(ModuleStatement.class, "module", "name"), Must(MustStatement.class, "must", "condition"), Namespace(NamespaceStatement.class, "namespace", "uri"), Notification(NotificationStatement.class, "notification", "name"), OrderedBy(OrderedByStatement.class, "ordered-by", "value"), Organization(OrganizationStatement.class, "organization", "text", true), Output(OutputStatement.class, "output"), Path(PathStatement.class, "path", "value"), Pattern(PatternStatement.class, "pattern", "value"), Position(PositionStatement.class, "position", "value"), Prefix(PrefixStatement.class, "prefix", "value"), Presence(PresenceStatement.class, "presence", "value"), Range(RangeStatement.class, "range", "value"), Reference(ReferenceStatement.class, "reference", "text", true), Refine(RefineStatement.class, "refine", "target-node"), RequireInstance(RequireInstanceStatement.class, "require-instance", "value"), Revision(RevisionStatement.class, "revision", "date"), RevisionDate(RevisionDateStatement.class, "revision-date", "date"), Rpc(RpcStatement.class, "rpc", "name"), Status(StatusStatement.class, "status", "value"), Submodule(SubmoduleStatement.class, "submodule", "name"), Type(TypeStatement.class, "type", "name"), Typedef(TypedefStatement.class, "typedef", "name"), Unique(UniqueStatement.class, "unique", "tag"), Units(UnitsStatement.class, "units", "name"), Uses(UsesStatement.class, "uses", "name"), Value(ValueStatement.class, "value", "value"), When(WhenStatement.class, "when", "condition"), YangVersion(YangVersionStatement.class, "yang-version", "value"), YinElement(YinElementStatement.class, "yin-element", "value"); private final @Nonnull Class> type; private final @Nonnull QName name; private final @Nullable QName argument; private final boolean yinElement; private Rfc6020Mapping(Class> clz, final String nameStr) { type = Preconditions.checkNotNull(clz); name = yinQName(nameStr); argument = null; yinElement = false; } private Rfc6020Mapping(Class> clz, final String nameStr, final String argumentStr) { type = Preconditions.checkNotNull(clz); name = yinQName(nameStr); argument = yinQName(argumentStr); this.yinElement = false; } private Rfc6020Mapping(Class> clz, final String nameStr, final String argumentStr, final boolean yinElement) { type = Preconditions.checkNotNull(clz); name = yinQName(nameStr); argument = yinQName(argumentStr); this.yinElement = yinElement; } private static QName yinQName(String nameStr) { return QName.cachedReference(QName.create(YangConstants.RFC6020_YIN_MODULE, nameStr)); } @Override public QName getStatementName() { return name; } @Override public QName getArgumentName() { return argument; } @Override public Class> getDeclaredRepresentationClass() { return type; } @Override public Class> getEffectiveRepresentationClass() { // FIXME: Add support once these interfaces are defined. throw new UnsupportedOperationException("Not defined yet."); } public boolean isArgumentYinElement() { return yinElement; } }