fb1b7af7c76592c9efc6c4fcf8c5cf8e729f8386
[yangtools.git] / yang / yang-parser-impl / src / main / java / org / opendaylight / yangtools / yang / parser / builder / impl / NotificationBuilder.java
1 /*
2  * Copyright (c) 2013 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.parser.builder.impl;
9
10 import com.google.common.base.Preconditions;
11 import com.google.common.collect.ImmutableList;
12 import com.google.common.collect.ImmutableSet;
13 import java.util.ArrayList;
14 import java.util.List;
15 import org.opendaylight.yangtools.yang.common.QName;
16 import org.opendaylight.yangtools.yang.model.api.AugmentationSchema;
17 import org.opendaylight.yangtools.yang.model.api.NotificationDefinition;
18 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
19 import org.opendaylight.yangtools.yang.parser.builder.api.AugmentationSchemaBuilder;
20 import org.opendaylight.yangtools.yang.parser.builder.api.AugmentationTargetBuilder;
21 import org.opendaylight.yangtools.yang.parser.builder.api.SchemaNodeBuilder;
22 import org.opendaylight.yangtools.yang.parser.builder.api.UnknownSchemaNodeBuilder;
23 import org.opendaylight.yangtools.yang.parser.builder.util.AbstractDocumentedDataNodeContainerBuilder;
24 import org.opendaylight.yangtools.yang.parser.util.YangParseException;
25
26 public final class NotificationBuilder extends AbstractDocumentedDataNodeContainerBuilder implements SchemaNodeBuilder,
27 AugmentationTargetBuilder {
28     private NotificationDefinitionImpl instance;
29     // SchemaNode args
30     private SchemaPath schemaPath;
31     // AugmentationTarget args
32     private final List<AugmentationSchema> augmentations = new ArrayList<>();
33     private final List<AugmentationSchemaBuilder> augmentationBuilders = new ArrayList<>();
34
35     NotificationBuilder(final String moduleName, final int line, final QName qname, final SchemaPath path) {
36         super(moduleName, line, qname);
37         this.schemaPath = Preconditions.checkNotNull(path, "Schema Path must not be null");
38     }
39
40     NotificationBuilder(final String moduleName, final int line, final QName qname, final SchemaPath path,
41             final NotificationDefinition base) {
42         super(moduleName, line, qname, path, base);
43         this.schemaPath = Preconditions.checkNotNull(path, "Schema Path must not be null");
44
45         addedUnknownNodes.addAll(BuilderUtils.wrapUnknownNodes(moduleName, line, base.getUnknownSchemaNodes(), path,
46                 qname));
47         augmentations.addAll(base.getAvailableAugmentations());
48
49     }
50
51     @Override
52     public NotificationDefinition build() {
53         if (!(getParent() instanceof ModuleBuilder)) {
54             throw new YangParseException(getModuleName(), getLine(),
55                     "Notification can be defined only under module (was " + getParent() + ")");
56         }
57         if (instance != null) {
58             return instance;
59         }
60         buildChildren();
61
62         instance = new NotificationDefinitionImpl(qname, schemaPath, this);
63
64         // AUGMENTATIONS
65         for (AugmentationSchemaBuilder builder : augmentationBuilders) {
66             augmentations.add(builder.build());
67         }
68         instance.augmentations = ImmutableSet.copyOf(augmentations);
69
70         // UNKNOWN NODES
71         for (UnknownSchemaNodeBuilder b : addedUnknownNodes) {
72             unknownNodes.add(b.build());
73         }
74         instance.unknownNodes = ImmutableList.copyOf(unknownNodes);
75
76         return instance;
77     }
78
79     @Override
80     public SchemaPath getPath() {
81         return schemaPath;
82     }
83
84     @Override
85     public void setPath(final SchemaPath path) {
86         this.schemaPath = path;
87     }
88
89     @Override
90     public void addAugmentation(final AugmentationSchemaBuilder augment) {
91         augmentationBuilders.add(augment);
92     }
93
94     @Override
95     public String toString() {
96         return "notification " + getQName().getLocalName();
97     }
98
99     @Override
100     protected String getStatementName() {
101         return "notification";
102     }
103
104 }