2 * Copyright (c) 2017 Pantheon Technologies, s.r.o. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.path;
10 import static java.util.Objects.requireNonNull;
12 import org.opendaylight.yangtools.yang.model.api.PathExpression;
13 import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
14 import org.opendaylight.yangtools.yang.model.api.stmt.PathEffectiveStatement;
15 import org.opendaylight.yangtools.yang.model.api.stmt.PathStatement;
16 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
17 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
18 import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
20 public final class PathStatementSupport
21 extends AbstractStatementSupport<PathExpression, PathStatement, PathEffectiveStatement> {
22 private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(
23 YangStmtMapping.PATH).build();
24 private static final PathStatementSupport LENIENT_INSTANCE = new PathStatementSupport(
25 new PathExpressionParser.Lenient());
26 private static final PathStatementSupport STRICT_INSTANCE = new PathStatementSupport(
27 new PathExpressionParser());
29 private final PathExpressionParser parser;
31 private PathStatementSupport(final PathExpressionParser parser) {
32 super(YangStmtMapping.PATH);
33 this.parser = requireNonNull(parser);
36 public static PathStatementSupport lenientInstance() {
37 return LENIENT_INSTANCE;
40 public static PathStatementSupport strictInstance() {
41 return STRICT_INSTANCE;
45 public PathExpression parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
46 return parser.parseExpression(ctx, value);
50 public PathStatement createDeclared(final StmtContext<PathExpression, PathStatement, ?> ctx) {
51 return new PathStatementImpl(ctx);
55 public PathEffectiveStatement createEffective(
56 final StmtContext<PathExpression, PathStatement, PathEffectiveStatement> ctx) {
57 return new PathEffectiveStatementImpl(ctx);
61 protected SubstatementValidator getSubstatementValidator() {
62 return SUBSTATEMENT_VALIDATOR;