package org.opendaylight.yangtools.yang.model.api.stmt;
import com.google.common.annotations.Beta;
+import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
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.type.PatternConstraint;
@Beta
public interface PatternEffectiveStatement extends EffectiveStatement<PatternConstraint, PatternStatement> {
-
+ @Override
+ default StatementDefinition statementDefinition() {
+ return YangStmtMapping.PATTERN;
+ }
}
import java.util.Optional;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
+import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
import org.opendaylight.yangtools.yang.model.api.type.PatternConstraint;
public interface PatternStatement extends ConstrainedDocumentedDeclaredStatement<PatternConstraint> {
+ @Override
+ default StatementDefinition statementDefinition() {
+ return YangStmtMapping.PATTERN;
+ }
+
default @NonNull PatternConstraint getValue() {
// FIXME: YANGTOOLS-908: verifyNotNull() should not be needed here
return verifyNotNull(argument());
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
@Beta
+@Deprecated(forRemoval = true)
+//FIXME: 6.0.0: remove this class
public abstract class AbstractConstraintEffectiveStatement<A, D extends DeclaredStatement<A>> extends
AbstractEffectiveDocumentedNode<A, D> implements ConstraintMetaDefinition {
private final String errorAppTag;
}
}
+ /**
+ * A building block on top of {@link Default}, which adds an explicit argument value, which is not related to the
+ * context. This is mostly useful when the effective argument value reflects additional statements and similar.
+ *
+ * @param <A> Argument type ({@link Void} if statement does not have argument.)
+ * @param <D> Class representing declared version of this statement.
+ */
+ public abstract static class DefaultWithArgument<A, D extends DeclaredStatement<A>> extends Default<A, D> {
+ public abstract static class WithSubstatements<A, D extends DeclaredStatement<A>>
+ extends DefaultWithArgument<A, D> {
+ private final @NonNull Object substatements;
+
+ protected WithSubstatements(final D declared, final A argument,
+ final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
+ super(declared, argument);
+ this.substatements = maskList(substatements);
+ }
+
+ @Override
+ public final ImmutableList<? extends EffectiveStatement<?, ?>> effectiveSubstatements() {
+ return unmaskList(substatements);
+ }
+ }
+
+ private final A argument;
+
+ protected DefaultWithArgument(final D declared, final A argument) {
+ super(declared);
+ this.argument = argument;
+ }
+
+ @Override
+ public final A argument() {
+ return argument;
+ }
+ }
+
/**
* Stateful version of {@link WithSchemaTree}. Schema tree namespace is eagerly instantiated (and checked).
*
*/
package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.pattern;
-import java.util.Optional;
+import com.google.common.collect.ImmutableList;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
+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.stmt.DescriptionEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.ErrorAppTagEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.ErrorMessageEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.ModifierEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.PatternEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.PatternStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.type.ModifierKind;
import org.opendaylight.yangtools.yang.model.api.type.PatternConstraint;
import org.opendaylight.yangtools.yang.model.util.RegexUtils;
-import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseStatementSupport;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
abstract class AbstractPatternStatementSupport
- extends AbstractStatementSupport<PatternConstraint, PatternStatement, PatternEffectiveStatement> {
+ extends BaseStatementSupport<PatternConstraint, PatternStatement, PatternEffectiveStatement> {
private static final Logger LOG = LoggerFactory.getLogger(AbstractPatternStatementSupport.class);
AbstractPatternStatementSupport() {
return null;
}
- return new PatternConstraintImpl(pattern, value, Optional.empty(), Optional.empty());
+ return new PatternConstraintImpl(pattern, value);
}
@Override
- public final PatternStatement createDeclared(final StmtContext<PatternConstraint, PatternStatement, ?> ctx) {
- return new PatternStatementImpl(ctx);
+ protected final PatternStatement createDeclared(final StmtContext<PatternConstraint, PatternStatement, ?> ctx,
+ final ImmutableList<? extends DeclaredStatement<?>> substatements) {
+ return new RegularPatternStatement(ctx, substatements);
}
@Override
- public final PatternEffectiveStatement createEffective(
- final StmtContext<PatternConstraint, PatternStatement, PatternEffectiveStatement> ctx) {
- return new PatternEffectiveStatementImpl(ctx);
+ protected final PatternStatement createEmptyDeclared(
+ final StmtContext<PatternConstraint, PatternStatement, ?> ctx) {
+ return new EmptyPatternStatement(ctx);
}
-}
\ No newline at end of file
+
+ @Override
+ protected final PatternEffectiveStatement createEffective(
+ final StmtContext<PatternConstraint, PatternStatement, PatternEffectiveStatement> ctx,
+ final PatternStatement declared, final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
+ final String description = findFirstArgument(substatements, DescriptionEffectiveStatement.class, null);
+ final String reference = findFirstArgument(substatements, ReferenceEffectiveStatement.class, null);
+ final String errorAppTag = findFirstArgument(substatements, ErrorAppTagEffectiveStatement.class, null);
+ final String errorMessage = findFirstArgument(substatements, ErrorMessageEffectiveStatement.class, null);
+ final ModifierKind modifier = findFirstArgument(substatements, ModifierEffectiveStatement.class, null);
+
+ if (description == null && reference == null && errorAppTag == null && errorMessage == null
+ && modifier == null) {
+ // No customization, just use declared statement for the actual value
+ return new SimplePatternEffectiveStatement(declared, substatements);
+ }
+
+ return new RegularPatternEffectiveStatement(declared, new PatternConstraintImpl(declared.argument(),
+ description, reference, errorAppTag, errorMessage, modifier), substatements);
+ }
+
+ @Override
+ protected final PatternEffectiveStatement createEmptyEffective(
+ final StmtContext<PatternConstraint, PatternStatement, PatternEffectiveStatement> ctx,
+ final PatternStatement declared) {
+ return new EmptyPatternEffectiveStatement(declared);
+ }
+}
--- /dev/null
+/*
+ * Copyright (c) 2020 PANTHEON.tech, s.r.o. 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.parser.rfc7950.stmt.pattern;
+
+import org.opendaylight.yangtools.yang.model.api.stmt.PatternEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.PatternStatement;
+import org.opendaylight.yangtools.yang.model.api.type.PatternConstraint;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredEffectiveStatement.DefaultArgument;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.ConstraintMetaDefinitionMixin;
+
+final class EmptyPatternEffectiveStatement extends DefaultArgument<PatternConstraint, PatternStatement>
+ implements PatternEffectiveStatement, ConstraintMetaDefinitionMixin<PatternConstraint, PatternStatement> {
+ EmptyPatternEffectiveStatement(final PatternStatement declared) {
+ super(declared);
+ }
+}
/*
- * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved.
+ * Copyright (c) 2020 PANTHEON.tech, s.r.o. 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,
import org.opendaylight.yangtools.yang.model.api.stmt.PatternStatement;
import org.opendaylight.yangtools.yang.model.api.type.PatternConstraint;
-import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredStatement.WithArgument;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
-public class PatternStatementImpl extends AbstractDeclaredStatement<PatternConstraint> implements PatternStatement {
- protected PatternStatementImpl(final StmtContext<PatternConstraint, PatternStatement, ?> context) {
+final class EmptyPatternStatement extends WithArgument<PatternConstraint> implements PatternStatement {
+ EmptyPatternStatement(final StmtContext<PatternConstraint, ?, ?> context) {
super(context);
}
}
import org.opendaylight.yangtools.yang.model.api.type.PatternConstraint;
final class PatternConstraintImpl implements PatternConstraint, Immutable {
-
private final String regEx;
private final String rawRegEx;
private final String description;
private final String errorMessage;
private final ModifierKind modifier;
- PatternConstraintImpl(final String regex, final String rawRegex,
- final Optional<String> description, final Optional<String> reference) {
- this(regex, rawRegex, description.orElse(null), reference.orElse(null), null, null, null);
- }
-
- PatternConstraintImpl(final String regex, final String rawRegex, final String description,
+ private PatternConstraintImpl(final String regex, final String rawRegex, final String description,
final String reference, final String errorAppTag, final String errorMessage, final ModifierKind modifier) {
this.regEx = requireNonNull(regex, "regex must not be null");
this.rawRegEx = requireNonNull(rawRegex, "raw regex must not be null");
this.modifier = modifier;
}
+ PatternConstraintImpl(final String regex, final String rawRegex) {
+ this(regex, rawRegex, null, null, null, null, null);
+ }
+
+ PatternConstraintImpl(final PatternConstraint original, final String description, final String reference,
+ final String errorAppTag, final String errorMessage, final ModifierKind modifier) {
+ this(original.getJavaPatternString(), original.getRegularExpressionString(), description, reference,
+ errorAppTag, errorMessage, modifier);
+ }
+
@Override
public String getJavaPatternString() {
return regEx;
+++ /dev/null
-/*
- * 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.parser.rfc7950.stmt.pattern;
-
-import org.opendaylight.yangtools.yang.model.api.stmt.PatternEffectiveStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.PatternStatement;
-import org.opendaylight.yangtools.yang.model.api.type.PatternConstraint;
-import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractConstraintEffectiveStatement;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
-
-final class PatternEffectiveStatementImpl
- extends AbstractConstraintEffectiveStatement<PatternConstraint, PatternStatement>
- implements PatternEffectiveStatement {
- PatternEffectiveStatementImpl(final StmtContext<PatternConstraint, PatternStatement, ?> ctx) {
- super(ctx);
- }
-
- @Override
- protected PatternConstraint createConstraints(final PatternConstraint argument) {
- if (!isCustomizedStatement()) {
- return argument;
- }
-
- return new PatternConstraintImpl(argument.getJavaPatternString(),
- argument.getRegularExpressionString(),
- getDescription().orElse(null), getReference().orElse(null), getErrorAppTag().orElse(null),
- getErrorMessage().orElse(null), getModifier());
- }
-}
--- /dev/null
+/*
+ * Copyright (c) 2020 PANTHEON.tech, s.r.o. 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.parser.rfc7950.stmt.pattern;
+
+import com.google.common.collect.ImmutableList;
+import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.PatternEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.PatternStatement;
+import org.opendaylight.yangtools.yang.model.api.type.PatternConstraint;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredEffectiveStatement.DefaultWithArgument.WithSubstatements;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.ConstraintMetaDefinitionMixin;
+
+final class RegularPatternEffectiveStatement extends WithSubstatements<PatternConstraint, PatternStatement>
+ implements PatternEffectiveStatement, ConstraintMetaDefinitionMixin<PatternConstraint, PatternStatement> {
+ RegularPatternEffectiveStatement(final PatternStatement declared, final PatternConstraint argument,
+ final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
+ super(declared, argument, substatements);
+ }
+}
--- /dev/null
+/*
+ * Copyright (c) 2020 PANTHEON.tech, s.r.o. 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.parser.rfc7950.stmt.pattern;
+
+import com.google.common.collect.ImmutableList;
+import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.PatternStatement;
+import org.opendaylight.yangtools.yang.model.api.type.PatternConstraint;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredStatement.WithArgument.WithSubstatements;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+
+final class RegularPatternStatement extends WithSubstatements<PatternConstraint> implements PatternStatement {
+ RegularPatternStatement(final StmtContext<PatternConstraint, ?, ?> context,
+ final ImmutableList<? extends DeclaredStatement<?>> substatements) {
+ super(context, substatements);
+ }
+}
--- /dev/null
+/*
+ * Copyright (c) 2020 PANTHEON.tech, s.r.o. 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.parser.rfc7950.stmt.pattern;
+
+import com.google.common.collect.ImmutableList;
+import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.PatternEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.PatternStatement;
+import org.opendaylight.yangtools.yang.model.api.type.PatternConstraint;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredEffectiveStatement.DefaultArgument.WithSubstatements;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.ConstraintMetaDefinitionMixin;
+
+final class SimplePatternEffectiveStatement extends WithSubstatements<PatternConstraint, PatternStatement>
+ implements PatternEffectiveStatement, ConstraintMetaDefinitionMixin<PatternConstraint, PatternStatement> {
+
+ SimplePatternEffectiveStatement(final PatternStatement declared,
+ final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
+ super(declared, substatements);
+ }
+}