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