Removing duplicate literal
[yangtools.git] / yang / yang-parser-impl / src / test / java / org / opendaylight / yangtools / yang / stmt / test / ImportBasicTestStatementSource.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 package org.opendaylight.yangtools.yang.stmt.test;
9
10 import static org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping.CONTAINER;
11 import static org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping.IMPORT;
12 import static org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping.MODULE;
13 import static org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping.NAMESPACE;
14 import static org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping.PREFIX;
15 import static org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping.REVISION;
16 import static org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping.REVISION_DATE;
17 import java.util.Arrays;
18 import java.util.List;
19 import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping;
20 import org.opendaylight.yangtools.yang.model.api.meta.StatementSource;
21 import org.opendaylight.yangtools.yang.parser.spi.source.PrefixToModule;
22 import org.opendaylight.yangtools.yang.parser.spi.source.QNameToStatementDefinition;
23 import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
24 import org.opendaylight.yangtools.yang.parser.spi.source.StatementSourceReference;
25 import org.opendaylight.yangtools.yang.parser.spi.source.StatementStreamSource;
26 import org.opendaylight.yangtools.yang.parser.spi.source.StatementWriter;
27
28 class ImportBasicTestStatementSource implements StatementStreamSource {
29
30     private static final String NS_PREFIX = "urn:org:opendaylight:yangtools:test:";
31
32     private final String name;
33     private final List<String> imports;
34     private StatementWriter writer;
35     private final StatementSourceReference REF = new StatementSourceReference() {
36
37         @Override
38         public StatementSource getStatementSource() {
39             return StatementSource.DECLARATION;
40         }
41     };
42
43
44     public ImportBasicTestStatementSource(final String name, final String... imports) {
45         this.name = name;
46         this.imports = Arrays.asList(imports);
47     }
48
49     @Override
50     public void writeFull(final StatementWriter writer, final QNameToStatementDefinition stmtDef, final PrefixToModule prefixes)
51             throws SourceException {
52         this.writer = writer;
53         header();
54         extensions();
55         body();
56         end();
57
58     }
59
60
61
62     @Override
63     public void writeLinkage(final StatementWriter writer, final QNameToStatementDefinition stmtDef) throws SourceException {
64         this.writer = writer;
65         header().end();
66     }
67
68     @Override
69     public void writeLinkageAndStatementDefinitions(final StatementWriter writer, final QNameToStatementDefinition stmtDef,
70             final PrefixToModule prefixes) throws SourceException {
71         this.writer = writer;
72         header();
73         extensions();
74         end();
75
76     }
77
78     protected void extensions() throws SourceException {
79
80     }
81
82     protected void body() throws SourceException {
83 //        stmt(YangVersion).arg("1");end();
84 //        stmt(Description).arg("Here goes description of this module");end();
85 //        stmt(Contact).arg("Here goes our address...");end();
86 //
87 //        stmt(Revision).arg("2015-03-12");
88 //            stmt(Description).arg("This revision brings this and that...");end();
89 //            stmt(Reference).arg("Learn more here...");end();
90 //        end();
91
92         stmt(CONTAINER).arg(name+":my-container-with-prefix");
93 //            stmt(Leaf).arg("MyContainerLeaf");
94 //                stmt(Type).arg("string");end();
95 //                stmt(Config).arg("TRUE");end();
96 //            end();
97 //            stmt(Choice).arg("choose-your-destiny");
98 //                stmt(Default).arg("destiny-one");end();
99 //                stmt(Case).arg("destiny-one");
100 //                    stmt(Leaf).arg("destiny-one-leaf");end();
101 //                end();
102 //                stmt(Case).arg("destiny-two");
103 //                    stmt(Mandatory).arg("true");
104 //                    stmt(Container).arg("InnerContainer");
105 //                        stmt(Leaf).arg("leaf-of-deep");end();
106 //                    end();
107 //                end();
108 //            end();
109 //            stmt(Container).arg("MyContainerInContainer");
110 //                stmt(Must).arg("xpath expression");
111 //                stmt(Leaf).arg("MyContainerInContainerLeaf");
112 //                    stmt(Type).arg("string");end();
113 //                end();
114 //                stmt(Deviation).arg("/tst:test/tst:element");
115 //                    stmt(Deviate).arg("add");end();
116 //                end();
117 //            end();
118         end();
119         stmt(CONTAINER).arg("my-container-without-prefix").end();
120
121         int i = 0;
122         for(String imp : imports)  {
123             i++;
124             stmt(CONTAINER).arg(imp+":my-container-with-imported-prefix"+i).end();
125         }
126
127     }
128
129     ImportBasicTestStatementSource header() throws SourceException {
130         stmt(MODULE).arg(name); {
131             stmt(NAMESPACE).arg(getNamespace()).end();
132             stmt(PREFIX).arg(name).end();
133             stmt(REVISION).arg("2000-01-01").end();
134             for(String imp : imports)  {
135                 stmt(IMPORT).arg(imp);
136                     stmt(PREFIX).arg(imp).end();
137                     stmt(REVISION_DATE).arg("2000-01-01").end();
138                 end();
139             }
140         }
141         return this;
142     }
143
144     private String getNamespace() {
145         return NS_PREFIX + name;
146     }
147
148     protected ImportBasicTestStatementSource arg(final String arg) throws SourceException {
149         writer.argumentValue(arg, REF);
150         return this;
151     }
152
153     protected ImportBasicTestStatementSource stmt(final Rfc6020Mapping stmt) throws SourceException {
154         writer.startStatement(stmt.getStatementName(), REF);
155         return this;
156     }
157
158     protected ImportBasicTestStatementSource end() throws SourceException {
159         writer.endStatement(REF);
160         return this;
161     }
162 }