7eebba0e016f1d6e452f88fa53e2260ec0f777c7
[yangtools.git] / yang / yang-parser-impl / src / main / java / org / opendaylight / yangtools / yang / parser / stmt / rfc6020 / RefineStatementImpl.java
1 /*
2  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8
9 package org.opendaylight.yangtools.yang.parser.stmt.rfc6020;
10
11 import static org.opendaylight.yangtools.yang.parser.spi.SubstatementValidator.MAX;
12
13 import javax.annotation.Nullable;
14 import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping;
15 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
16 import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement;
17 import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement;
18 import org.opendaylight.yangtools.yang.model.api.stmt.RefineStatement;
19 import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
20 import org.opendaylight.yangtools.yang.parser.spi.SubstatementValidator;
21 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
22 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
23 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
24 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.RefineEffectiveStatementImpl;
25
26 public class RefineStatementImpl extends AbstractDeclaredStatement<SchemaNodeIdentifier> implements RefineStatement {
27     private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(Rfc6020Mapping
28             .REFINE)
29             .add(Rfc6020Mapping.DEFAULT, 0, 1)
30             .add(Rfc6020Mapping.DESCRIPTION, 0, 1)
31             .add(Rfc6020Mapping.REFERENCE, 0, 1)
32             .add(Rfc6020Mapping.CONFIG, 0, 1)
33             .add(Rfc6020Mapping.MANDATORY, 0, 1)
34             .add(Rfc6020Mapping.PRESENCE, 0, 1)
35             .add(Rfc6020Mapping.MUST, 0, MAX)
36             .add(Rfc6020Mapping.MIN_ELEMENTS, 0, 1)
37             .add(Rfc6020Mapping.MAX_ELEMENTS, 0, 1)
38             .build(SubstatementValidator.SpecialCase.NOTNULL);
39
40     protected RefineStatementImpl(final StmtContext<SchemaNodeIdentifier, RefineStatement, ?> context) {
41         super(context);
42     }
43
44     public static class Definition extends
45             AbstractStatementSupport<SchemaNodeIdentifier, RefineStatement, EffectiveStatement<SchemaNodeIdentifier, RefineStatement>> {
46
47         public Definition() {
48             super(Rfc6020Mapping.REFINE);
49         }
50
51         @Override
52         public SchemaNodeIdentifier parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
53             return Utils.nodeIdentifierFromPath(ctx, value);
54         }
55
56         @Override
57         public RefineStatement createDeclared(final StmtContext<SchemaNodeIdentifier, RefineStatement, ?> ctx) {
58             return new RefineStatementImpl(ctx);
59         }
60
61         @Override
62         public EffectiveStatement<SchemaNodeIdentifier, RefineStatement> createEffective(
63                 final StmtContext<SchemaNodeIdentifier, RefineStatement, EffectiveStatement<SchemaNodeIdentifier, RefineStatement>> ctx) {
64             return new RefineEffectiveStatementImpl(ctx);
65         }
66
67         @Override
68         public void onFullDefinitionDeclared(StmtContext.Mutable<SchemaNodeIdentifier, RefineStatement,
69                 EffectiveStatement<SchemaNodeIdentifier, RefineStatement>> stmt) {
70             super.onFullDefinitionDeclared(stmt);
71             SUBSTATEMENT_VALIDATOR.validate(stmt);
72         }
73     }
74
75     @Override
76     public String getTargetNode() {
77         return rawArgument();
78     }
79
80     @Nullable
81     @Override
82     public DescriptionStatement getDescription() {
83         return firstDeclared(DescriptionStatement.class);
84     }
85
86     @Nullable
87     @Override
88     public ReferenceStatement getReference() {
89         return firstDeclared(ReferenceStatement.class);
90     }
91 }