Bug 2366 - Effective statements impl for new yang parser.
[yangtools.git] / yang / yang-parser-impl / src / test / java / org / opendaylight / yangtools / yang / stmt / test / augment / TestAugmentSource.java
1 package org.opendaylight.yangtools.yang.stmt.test.augment;
2
3 import static org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping.AUGMENT;
4 import static org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping.IMPORT;
5 import static org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping.MODULE;
6 import static org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping.NAMESPACE;
7 import static org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping.PREFIX;
8
9 import java.util.Arrays;
10
11 import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping;
12 import org.opendaylight.yangtools.yang.model.api.meta.StatementSource;
13 import org.opendaylight.yangtools.yang.parser.spi.source.PrefixToModule;
14 import org.opendaylight.yangtools.yang.parser.spi.source.QNameToStatementDefinition;
15 import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
16 import org.opendaylight.yangtools.yang.parser.spi.source.StatementSourceReference;
17 import org.opendaylight.yangtools.yang.parser.spi.source.StatementStreamSource;
18 import org.opendaylight.yangtools.yang.parser.spi.source.StatementWriter;
19
20 public class TestAugmentSource implements StatementStreamSource {
21
22     private static final String NS_PREFIX = "urn:org:opendaylight:yangtools:test:";
23
24     private final String name;
25     private final String augment;
26     private final java.util.List<String> imports;
27     private StatementWriter writer;
28     private StatementSourceReference REF = new StatementSourceReference() {
29
30         @Override
31         public StatementSource getStatementSource() {
32             return StatementSource.DECLARATION;
33         }
34     };
35
36     public TestAugmentSource(String name, String augment, String... imports) {
37         this.name = name;
38         this.augment = augment;
39         this.imports = Arrays.asList(imports);
40     }
41
42     @Override
43     public void writeFull(StatementWriter writer, QNameToStatementDefinition stmtDef, PrefixToModule prefixes)
44             throws SourceException {
45         this.writer = writer;
46         header();
47         extensions();
48         body();
49         end();
50     }
51
52     @Override
53     public void writeLinkage(StatementWriter writer, QNameToStatementDefinition stmtDef) throws SourceException {
54         this.writer = writer;
55         header().end();
56     }
57
58     @Override
59     public void writeLinkageAndStatementDefinitions(StatementWriter writer, QNameToStatementDefinition stmtDef,
60                                                     PrefixToModule prefixes) throws SourceException {
61         this.writer = writer;
62         header();
63         extensions();
64         end();
65     }
66
67     protected void extensions() throws SourceException {
68
69     }
70
71     protected void body() throws SourceException {
72
73         stmt(AUGMENT).arg(augment);
74         end();
75     }
76
77     TestAugmentSource header() throws SourceException {
78
79         stmt(MODULE).arg(name);
80         {
81             stmt(NAMESPACE).arg(getNamespace()).end();
82             stmt(PREFIX).arg(name).end();
83         }
84
85         for (String impEntry : imports) {
86
87             stmt(IMPORT).arg(impEntry);
88             {
89                 stmt(PREFIX).arg(impEntry).end();
90             }
91             end();
92         }
93
94         return this;
95     }
96
97     private String getNamespace() {
98         return NS_PREFIX + name;
99     }
100
101     protected TestAugmentSource arg(String arg) throws SourceException {
102         writer.argumentValue(arg, REF);
103         return this;
104     }
105
106     protected TestAugmentSource stmt(Rfc6020Mapping stmt) throws SourceException {
107         writer.startStatement(stmt.getStatementName(), REF);
108         return this;
109     }
110
111     protected TestAugmentSource end() throws SourceException {
112         writer.endStatement(REF);
113         return this;
114     }
115 }