import static java.util.Objects.requireNonNull;
import com.google.common.annotations.Beta;
-import org.eclipse.jdt.annotation.NonNull;
+import java.util.Optional;
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.meta.ArgumentDefinition;
import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
private final Class<? extends EffectiveStatement<?, ?>> effectiveRepresentation;
private final Class<? extends DeclaredStatement<?>> declaredRepresentation;
private final QName statementName;
- private final QName argumentName;
+ private final ArgumentDefinition argumentDef;
OpenDaylightExtensionsStatements(final QName statementName, final String argumentName,
final Class<? extends DeclaredStatement<?>> declaredRepresentation,
final Class<? extends EffectiveStatement<?, ?>> effectiveRepresentation) {
this.statementName = statementName.intern();
- this.argumentName = QName.create(statementName, argumentName);
+ this.argumentDef = ArgumentDefinition.of(QName.create(statementName, argumentName).intern(), false);
this.declaredRepresentation = requireNonNull(declaredRepresentation);
this.effectiveRepresentation = requireNonNull(effectiveRepresentation);
}
}
@Override
- public @NonNull QName getArgumentName() {
- return argumentName;
+ public Optional<ArgumentDefinition> getArgumentDefinition() {
+ return Optional.of(argumentDef);
}
@Override
public Class<? extends EffectiveStatement<?, ?>> getEffectiveRepresentationClass() {
return effectiveRepresentation;
}
-
- @Override
- public boolean isArgumentYinElement() {
- return false;
- }
}
import com.google.common.annotations.Beta;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+import java.util.Optional;
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable;
import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.meta.ArgumentDefinition;
import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
}
@Override
- public @Nullable QName getArgumentName() {
- return argumentName;
+ public Optional<ArgumentDefinition> getArgumentDefinition() {
+ return ArgumentDefinition.ofNullable(argumentName, false);
}
@Override
public Class<? extends EffectiveStatement<?, ?>> getEffectiveRepresentationClass() {
return effectiveRepresentation;
}
-
- @Override
- public boolean isArgumentYinElement() {
- return false;
- }
}
import static java.util.Objects.requireNonNull;
+import java.util.Optional;
import org.eclipse.jdt.annotation.NonNullByDefault;
-import org.eclipse.jdt.annotation.Nullable;
import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.meta.ArgumentDefinition;
import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
}
@Override
- public @Nullable QName getArgumentName() {
- return null;
- }
-
- @Override
- public boolean isArgumentYinElement() {
- return false;
+ public Optional<ArgumentDefinition> getArgumentDefinition() {
+ return Optional.empty();
}
@Override
import static java.util.Objects.requireNonNull;
-import org.eclipse.jdt.annotation.NonNull;
+import java.util.Optional;
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.meta.ArgumentDefinition;
import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
private final Class<? extends EffectiveStatement<?, ?>> effectiveRepresentation;
private final Class<? extends DeclaredStatement<?>> declaredRepresentation;
private final QName statementName;
- private final QName argumentName;
+ private final ArgumentDefinition argumentDef;
MetadataStatements(final QName statementName, final String argumentName,
final Class<? extends DeclaredStatement<?>> declaredRepresentation,
final Class<? extends EffectiveStatement<?, ?>> effectiveRepresentation) {
this.statementName = statementName.intern();
- this.argumentName = QName.create(statementName, argumentName);
+ this.argumentDef = ArgumentDefinition.of(QName.create(statementName, argumentName).intern(), false);
this.declaredRepresentation = requireNonNull(declaredRepresentation);
this.effectiveRepresentation = requireNonNull(effectiveRepresentation);
}
@Override
- public @NonNull QName getArgumentName() {
- return argumentName;
- }
-
- @Override
- public boolean isArgumentYinElement() {
- return false;
+ public Optional<ArgumentDefinition> getArgumentDefinition() {
+ return Optional.of(argumentDef);
}
@Override
import static java.util.Objects.requireNonNull;
-import org.eclipse.jdt.annotation.NonNull;
+import java.util.Optional;
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.meta.ArgumentDefinition;
import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
private final Class<? extends EffectiveStatement<?, ?>> effectiveRepresentation;
private final Class<? extends DeclaredStatement<?>> declaredRepresentation;
private final QName statementName;
- private final QName argumentName;
+ private final ArgumentDefinition argumentDef;
YangDataStatements(final QName statementName, final String argumentName,
final Class<? extends DeclaredStatement<?>> declaredRepresentation,
final Class<? extends EffectiveStatement<?, ?>> effectiveRepresentation) {
this.statementName = statementName.intern();
- this.argumentName = QName.create(statementName, argumentName);
+ this.argumentDef = ArgumentDefinition.of(QName.create(statementName, argumentName).intern(), false);
this.declaredRepresentation = requireNonNull(declaredRepresentation);
this.effectiveRepresentation = requireNonNull(effectiveRepresentation);
}
@Override
- public @NonNull QName getArgumentName() {
- return argumentName;
- }
-
- @Override
- public boolean isArgumentYinElement() {
- return true;
+ public Optional<ArgumentDefinition> getArgumentDefinition() {
+ return Optional.of(argumentDef);
}
@Override
import static java.util.Objects.requireNonNull;
-import org.eclipse.jdt.annotation.NonNull;
+import java.util.Optional;
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.meta.ArgumentDefinition;
import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
private final Class<? extends EffectiveStatement<?, ?>> effectiveRepresentation;
private final Class<? extends DeclaredStatement<?>> declaredRepresentation;
private final QName statementName;
- private final QName argumentName;
+ private final ArgumentDefinition argumentDef;
SchemaMountStatements(final QName statementName, final String argumentName,
final Class<? extends DeclaredStatement<?>> declaredRepresentation,
final Class<? extends EffectiveStatement<?, ?>> effectiveRepresentation) {
this.statementName = statementName.intern();
- this.argumentName = QName.create(statementName, argumentName);
+ this.argumentDef = ArgumentDefinition.of(QName.create(statementName, argumentName), false);
this.declaredRepresentation = requireNonNull(declaredRepresentation);
this.effectiveRepresentation = requireNonNull(effectiveRepresentation);
}
@Override
- public @NonNull QName getArgumentName() {
- return argumentName;
- }
-
- @Override
- public boolean isArgumentYinElement() {
- return false;
+ public Optional<ArgumentDefinition> getArgumentDefinition() {
+ return Optional.of(argumentDef);
}
@Override
import com.google.common.annotations.Beta;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+import java.util.Optional;
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.common.YangConstants;
+import org.opendaylight.yangtools.yang.model.api.meta.ArgumentDefinition;
import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
}
@Override
- public @Nullable QName getArgumentName() {
- return argument;
+ public Optional<ArgumentDefinition> getArgumentDefinition() {
+ return ArgumentDefinition.ofNullable(argument, yinElement);
}
@Override
public Class<? extends EffectiveStatement<?, ?>> getEffectiveRepresentationClass() {
return effectiveType;
}
-
- @Override
- public boolean isArgumentYinElement() {
- return yinElement;
- }
}
--- /dev/null
+/*
+ * Copyright (c) 2019 PANTHEON.tech, s.r.o. 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.meta;
+
+import static java.util.Objects.requireNonNull;
+
+import com.google.common.annotations.Beta;
+import com.google.common.base.MoreObjects;
+import com.google.common.base.MoreObjects.ToStringHelper;
+import java.util.Optional;
+import org.eclipse.jdt.annotation.NonNullByDefault;
+import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.yangtools.yang.common.QName;
+
+/**
+ * Abstract utility class to handle StatementArgumentDefinition aspect of {@link StatementDefinition}. Most users should
+ * use this class or {@link DefaultStatementDefinition}.
+ */
+@Beta
+@NonNullByDefault
+public abstract class AbstractStatementDefinition implements StatementDefinition {
+ private final QName statementName;
+ private final @Nullable QName argumentName;
+ private final boolean yinElement;
+
+ protected AbstractStatementDefinition(final QName statementName) {
+ this(statementName, false, null);
+ }
+
+ protected AbstractStatementDefinition(final QName statementName, final boolean yinElement,
+ final @Nullable QName argumentName) {
+ this.statementName = requireNonNull(statementName);
+ this.yinElement = yinElement;
+ this.argumentName = argumentName;
+ }
+
+ @Override
+ public final QName getStatementName() {
+ return statementName;
+ }
+
+ @Override
+ public final Optional<ArgumentDefinition> getArgumentDefinition() {
+ return ArgumentDefinition.ofNullable(argumentName, yinElement);
+ }
+
+ @Override
+ public final String toString() {
+ return addToStringAttributes(MoreObjects.toStringHelper(this)).toString();
+ }
+
+ protected ToStringHelper addToStringAttributes(final ToStringHelper helper) {
+ helper.add("name", statementName);
+ if (argumentName != null) {
+ helper.add("argument", argumentName).add("yin-element", yinElement);
+ }
+ return helper;
+ }
+}
--- /dev/null
+/*
+ * Copyright (c) 2019 PANTHEON.tech, s.r.o. 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.meta;
+
+import static java.util.Objects.requireNonNull;
+
+import com.google.common.annotations.Beta;
+import com.google.common.base.MoreObjects;
+import java.util.Optional;
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.yangtools.concepts.Immutable;
+import org.opendaylight.yangtools.yang.common.QName;
+
+@Beta
+public abstract class ArgumentDefinition implements Immutable {
+ private static final class YinAttribute extends ArgumentDefinition {
+ YinAttribute(final QName argumentName) {
+ super(argumentName);
+ }
+
+ @Override
+ public boolean isYinElement() {
+ return false;
+ }
+ }
+
+ private static final class YinElement extends ArgumentDefinition {
+ YinElement(final QName argumentName) {
+ super(argumentName);
+ }
+
+ @Override
+ public boolean isYinElement() {
+ return true;
+ }
+ }
+
+ private final @NonNull QName argumentName;
+
+ ArgumentDefinition(final QName argumentName) {
+ this.argumentName = requireNonNull(argumentName);
+ }
+
+ public static @NonNull ArgumentDefinition of(final QName argumentName, final boolean yinElement) {
+ return yinElement ? new YinElement(argumentName) : new YinAttribute(argumentName);
+ }
+
+ public static @NonNull Optional<ArgumentDefinition> ofNullable(final @Nullable QName argumentName,
+ final boolean yinElement) {
+ return argumentName == null ? Optional.empty() : Optional.of(of(argumentName, yinElement));
+ }
+
+
+ public final @NonNull QName getArgumentName() {
+ return argumentName;
+ }
+
+ /**
+ * Returns true, if argument of statement is represented as value of YIN element. If argument of statement is
+ * represented as argument of YIN element, returns false.
+ *
+ * @return returns true, if statement argument is represented as value of YIN element, otherwise returns false.
+ */
+ public abstract boolean isYinElement();
+
+ @Override
+ public final int hashCode() {
+ return Boolean.hashCode(isYinElement()) * 31 + argumentName.hashCode();
+ }
+
+ @Override
+ public final boolean equals(final Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (!(obj instanceof ArgumentDefinition)) {
+ return false;
+ }
+ final ArgumentDefinition other = (ArgumentDefinition) obj;
+ return isYinElement() == other.isYinElement() && argumentName.equals(other.argumentName);
+ }
+
+ @Override
+ public final String toString() {
+ return MoreObjects.toStringHelper(ArgumentDefinition.class).add("argumentName", argumentName)
+ .add("yinElement", isYinElement()).toString();
+ }
+}
import static java.util.Objects.requireNonNull;
import com.google.common.annotations.Beta;
-import com.google.common.base.MoreObjects;
import com.google.common.base.MoreObjects.ToStringHelper;
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable;
@Beta
@NonNullByDefault
public final class DefaultStatementDefinition<A, D extends DeclaredStatement<A>, E extends EffectiveStatement<A, D>>
- implements StatementDefinition {
+ extends AbstractStatementDefinition {
private final Class<E> effectiveRepresentation;
private final Class<D> declaredRepresentation;
- private final QName statementName;
- private final @Nullable QName argumentName;
- private final boolean argumentYinElement;
DefaultStatementDefinition(final QName statementName, final Class<D> declaredRepresentation,
final Class<E> effectiveRepresentation, final boolean argumentYinElement,
final @Nullable QName argumentName) {
- this.statementName = requireNonNull(statementName);
+ super(statementName, argumentYinElement, argumentName);
this.declaredRepresentation = requireNonNull(declaredRepresentation);
this.effectiveRepresentation = requireNonNull(effectiveRepresentation);
- this.argumentYinElement = argumentYinElement;
- this.argumentName = argumentName;
checkArgument(declaredRepresentation.isInterface(), "Declared representation %s is not an interface",
declaredRepresentation);
argumentYinElement, requireNonNull(argumentName));
}
- @Override
- public QName getStatementName() {
- return statementName;
- }
-
- @Override
- public @Nullable QName getArgumentName() {
- return argumentName;
- }
-
@Override
public Class<? extends DeclaredStatement<?>> getDeclaredRepresentationClass() {
return declaredRepresentation;
}
@Override
- public boolean isArgumentYinElement() {
- return argumentYinElement;
- }
-
- @Override
- public String toString() {
- final ToStringHelper helper = MoreObjects.toStringHelper(this)
- .add("name", statementName)
+ protected ToStringHelper addToStringAttributes(final ToStringHelper helper) {
+ return super.addToStringAttributes(helper)
.add("declared", declaredRepresentation)
.add("effective", effectiveRepresentation);
- if (argumentName != null) {
- helper.add("argument", argumentName).add("yin-element", argumentYinElement);
- }
- return helper.toString();
}
}
*/
package org.opendaylight.yangtools.yang.model.api.meta;
+import java.util.Optional;
import org.eclipse.jdt.annotation.NonNull;
-import org.eclipse.jdt.annotation.Nullable;
import org.opendaylight.yangtools.concepts.Immutable;
import org.opendaylight.yangtools.yang.common.QName;
*
* @return argument name or null, if statement does not take argument.
*/
- // FIXME: 3.0.0: make this return an Optional<StatementArgumentDefinition>, which will include the boolean value
- // of isArgumentYinElement()
- @Nullable QName getArgumentName();
+ @NonNull Optional<ArgumentDefinition> getArgumentDefinition();
/**
* Returns class which represents declared version of statement associated with this definition. This class should
* @return class which represents effective version of statement associated with this definition
*/
@NonNull Class<? extends EffectiveStatement<?, ?>> getEffectiveRepresentationClass();
-
- /**
- * Returns true, if argument of statement is represented as value of yin element. If argument of statement is
- * represented as argument of yin element, returns false. If this statement does not have an argument, this method
- * returns false.
- *
- * @return returns true, if statement argument is represented as value of yin element, otherwise returns false.
- */
- // FIXME: 3.0.0: integrate this with getArgumentName()
- boolean isArgumentYinElement();
}
private static final Logger LOG = LoggerFactory.getLogger(YinDomSchemaSource.class);
private static final TransformerFactory TRANSFORMER_FACTORY = TransformerFactory.newInstance();
private static final QName REVISION_STMT = REVISION.getStatementName();
+ private static final String MODULE_ARG = MODULE.getArgumentDefinition().get().getArgumentName().getLocalName();
+ private static final String REVISION_ARG = REVISION.getArgumentDefinition().get().getArgumentName().getLocalName();
YinDomSchemaSource() {
// Prevent outside instantiation
checkArgument(root instanceof Element, "Root node %s is not an element", root);
final Element element = (Element)root;
- final Attr nameAttr = element.getAttributeNode(MODULE.getArgumentName().getLocalName());
+ final Attr nameAttr = element.getAttributeNode(MODULE_ARG);
checkArgument(nameAttr != null, "No %s name argument found in %s", element.getLocalName());
final NodeList revisions = element.getElementsByTagNameNS(REVISION_STMT.getNamespace().toString(),
}
final Element revisionStmt = (Element) revisions.item(0);
- final Attr dateAttr = revisionStmt.getAttributeNode(REVISION.getArgumentName().getLocalName());
+ final Attr dateAttr = revisionStmt.getAttributeNode(REVISION_ARG);
checkArgument(dateAttr != null, "No revision statement argument found in %s", revisionStmt);
final SourceIdentifier parsedId = RevisionSourceIdentifier.create(nameAttr.getValue(),
import java.util.Iterator;
import java.util.Map.Entry;
import java.util.NoSuchElementException;
+import java.util.Optional;
import java.util.Queue;
import javax.xml.XMLConstants;
import javax.xml.stream.XMLEventFactory;
import javax.xml.stream.events.StartElement;
import javax.xml.stream.events.XMLEvent;
import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.meta.ArgumentDefinition;
import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
final StatementDefinition def = root.statementDefinition();
final QName name = def.getStatementName();
+ final ArgumentDefinition arg = def.getArgumentDefinition().get();
events.add(eventFactory.createStartElement(XMLConstants.DEFAULT_NS_PREFIX, name.getNamespace().toString(),
- name.getLocalName(), singletonIterator(attribute(def.getArgumentName(), root.rawArgument())),
+ name.getLocalName(), singletonIterator(attribute(arg.getArgumentName(), root.rawArgument())),
transform(namespaceContext.prefixesAndNamespaces().entrySet().iterator(),
e -> eventFactory.createNamespace(e.getKey(), e.getValue())),
namespaceContext));
private void addStatement(final DeclaredStatement<?> statement) {
final StatementDefinition def = statement.statementDefinition();
final QName name = def.getStatementName();
- final QName argName = def.getArgumentName();
- if (argName != null) {
- if (def.isArgumentYinElement()) {
+ final Optional<ArgumentDefinition> optArgDef = def.getArgumentDefinition();
+ if (optArgDef.isPresent()) {
+ final ArgumentDefinition argDef = optArgDef.get();
+ final QName argName = argDef.getArgumentName();
+ if (argDef.isYinElement()) {
events.addAll(Arrays.asList(startElement(name), startElement(argName),
eventFactory.createCharacters(statement.rawArgument()), endElement(argName)));
} else {
}
if (InferenceException.throwIfNull(def, ref, "Statement %s does not have type mapping defined.", name)
- .hasArgument()) {
+ .getArgumentDefinition().isPresent()) {
SourceException.throwIfNull(argument, ref, "Statement %s requires an argument", name);
} else {
SourceException.throwIf(argument != null, ref, "Statement %s does not take argument", name);
import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.common.QNameModule;
+import org.opendaylight.yangtools.yang.model.api.meta.ArgumentDefinition;
import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.meta.IdentifierNamespace;
return support.getDeclaredRepresentationClass();
}
- public boolean hasArgument() {
- return support.getArgumentName() != null;
- }
-
- public boolean isArgumentYinElement() {
- return support.isArgumentYinElement();
+ public @NonNull Optional<ArgumentDefinition> getArgumentDefinition() {
+ return support.getArgumentDefinition();
}
public @NonNull QName getStatementName() {
return support.getStatementName();
}
- public QName getArgumentName() {
- return support.getArgumentName();
- }
-
@Override
public final String toString() {
return addToStringAttributes(MoreObjects.toStringHelper(this).omitNullValues()).toString();
import java.util.Optional;
import javax.xml.transform.TransformerException;
import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.meta.ArgumentDefinition;
import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier;
import org.opendaylight.yangtools.yang.model.repo.api.YinDomSchemaSource;
final StatementDefinition def = resumed.getDefinition();
ref = resumed.getSourceReference();
- argName = def.getArgumentName();
- if (argName != null) {
- allAttrs = def.isArgumentYinElement();
+ final Optional<ArgumentDefinition> optArgDef = def.getArgumentDefinition();
+ if (optArgDef.isPresent()) {
+ final ArgumentDefinition argDef = optArgDef.get();
+ argName = argDef.getArgumentName();
+ allAttrs = argDef.isYinElement();
allElements = !allAttrs;
} else {
+ argName = null;
allAttrs = false;
allElements = false;
}
}
final String argValue;
- argName = def.getArgumentName();
- if (argName != null) {
- allAttrs = def.isArgumentYinElement();
+ final Optional<ArgumentDefinition> optArgDef = def.getArgumentDefinition();
+ if (optArgDef.isPresent()) {
+ final ArgumentDefinition argDef = optArgDef.get();
+ argName = argDef.getArgumentName();
+ allAttrs = argDef.isYinElement();
allElements = !allAttrs;
argValue = getArgValue(element, argName, allAttrs);
SourceException.throwIfNull(argValue, ref, "Statement {} is missing mandatory argument %s",
def.getStatementName(), argName);
} else {
+ argName = null;
argValue = null;
allAttrs = false;
allElements = false;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.common.YangVersion;
import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
+import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
import org.opendaylight.yangtools.yang.model.api.stmt.UnresolvedNumber;
import org.opendaylight.yangtools.yang.model.util.RevisionAwareXPathImpl;
} else if ("false".equals(input)) {
return Boolean.FALSE;
} else {
+ final StatementDefinition def = ctx.getPublicDefinition();
throw new SourceException(ctx.getStatementSourceReference(),
"Invalid '%s' statement %s '%s', it can be either 'true' or 'false'",
- ctx.getPublicDefinition().getStatementName(), ctx.getPublicDefinition().getArgumentName(), input);
+ def.getStatementName(), def.getArgumentDefinition().get().getArgumentName(), input);
}
}
*/
package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.extension;
-import static java.util.Objects.requireNonNull;
-
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable;
import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.meta.AbstractStatementDefinition;
import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
-import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
import org.opendaylight.yangtools.yang.model.api.stmt.UnrecognizedEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.UnrecognizedStatement;
* to be declared in a model.
*/
@NonNullByDefault
-final class ModelDefinedStatementDefinition implements StatementDefinition {
- private final QName statementName;
- private final @Nullable QName argumentName;
- private final boolean yinElement;
+final class ModelDefinedStatementDefinition extends AbstractStatementDefinition {
+ ModelDefinedStatementDefinition(final QName statementName) {
+ super(statementName);
+ }
ModelDefinedStatementDefinition(final QName statementName, final @Nullable QName argumentName,
final boolean yinElement) {
- this.statementName = requireNonNull(statementName);
- this.argumentName = argumentName;
- this.yinElement = yinElement;
- }
-
- @Override
- public QName getStatementName() {
- return statementName;
- }
-
- @Override
- public @Nullable QName getArgumentName() {
- return argumentName;
+ super(statementName, yinElement, argumentName);
}
@Override
public Class<? extends EffectiveStatement<?, ?>> getEffectiveRepresentationClass() {
return UnrecognizedEffectiveStatement.class;
}
-
- @Override
- public boolean isArgumentYinElement() {
- return yinElement;
- }
}
import java.util.Optional;
import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.meta.ArgumentDefinition;
import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
import org.opendaylight.yangtools.yang.model.api.stmt.UnrecognizedStatement;
public Optional<StatementSupport<?, ?, ?>> getUnknownStatementDefinitionOf(
final StatementDefinition yangStmtDef) {
final QName baseQName = getStatementName();
- final QName argumentName = yangStmtDef.getArgumentName();
- return Optional.of(new ModelDefinedStatementSupport(new ModelDefinedStatementDefinition(
- QName.create(baseQName, yangStmtDef.getStatementName().getLocalName()),
- argumentName != null ? QName.create(baseQName, argumentName.getLocalName()) : null,
- yangStmtDef.isArgumentYinElement())));
+ final QName statementName = QName.create(baseQName, yangStmtDef.getStatementName().getLocalName());
+
+ final ModelDefinedStatementDefinition def;
+ final Optional<ArgumentDefinition> optArgDef = yangStmtDef.getArgumentDefinition();
+ if (optArgDef.isPresent()) {
+ final ArgumentDefinition argDef = optArgDef.get();
+ def = new ModelDefinedStatementDefinition(statementName, argDef.getArgumentName(), argDef.isYinElement());
+ } else {
+ def = new ModelDefinedStatementDefinition(statementName);
+ }
+ return Optional.of(new ModelDefinedStatementSupport(def));
}
}
\ No newline at end of file
import static java.util.Objects.requireNonNull;
import com.google.common.annotations.Beta;
+import java.util.Optional;
import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.meta.ArgumentDefinition;
import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
}
@Override
- public QName getArgumentName() {
- return argument;
+ public @NonNull Optional<ArgumentDefinition> getArgumentDefinition() {
+ return ArgumentDefinition.ofNullable(argument, yinElement);
}
@Override
public Class<? extends EffectiveStatement<?, ?>> getEffectiveRepresentationClass() {
return effectiveType;
}
-
- @Override
- public boolean isArgumentYinElement() {
- return yinElement;
- }
}
import org.eclipse.jdt.annotation.Nullable;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.common.QNameModule;
+import org.opendaylight.yangtools.yang.model.api.meta.ArgumentDefinition;
import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
}
@Override
- default QName getArgumentName() {
- return getPublicView().getArgumentName();
+ default @NonNull Optional<ArgumentDefinition> getArgumentDefinition() {
+ return getPublicView().getArgumentDefinition();
}
@Override
default Class<? extends EffectiveStatement<?,?>> getEffectiveRepresentationClass() {
return getPublicView().getEffectiveRepresentationClass();
}
-
- @Override
- default boolean isArgumentYinElement() {
- return getPublicView().isArgumentYinElement();
- }
}