BUG-865: deprecate pre-Beryllium parser elements
[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 /**
27  * @deprecated Pre-Beryllium implementation, scheduled for removal.
28  */
29 @Deprecated
30 public final class NotificationBuilder extends AbstractDocumentedDataNodeContainerBuilder implements SchemaNodeBuilder,
31 AugmentationTargetBuilder {
32     private NotificationDefinitionImpl instance;
33     // SchemaNode args
34     private SchemaPath schemaPath;
35     // AugmentationTarget args
36     private final List<AugmentationSchema> augmentations = new ArrayList<>();
37     private final List<AugmentationSchemaBuilder> augmentationBuilders = new ArrayList<>();
38
39     NotificationBuilder(final String moduleName, final int line, final QName qname, final SchemaPath path) {
40         super(moduleName, line, qname);
41         this.schemaPath = Preconditions.checkNotNull(path, "Schema Path must not be null");
42     }
43
44     NotificationBuilder(final String moduleName, final int line, final QName qname, final SchemaPath path,
45             final NotificationDefinition base) {
46         super(moduleName, line, qname, path, base);
47         this.schemaPath = Preconditions.checkNotNull(path, "Schema Path must not be null");
48
49         addedUnknownNodes.addAll(BuilderUtils.wrapUnknownNodes(moduleName, line, base.getUnknownSchemaNodes(), path,
50                 qname));
51         augmentations.addAll(base.getAvailableAugmentations());
52
53     }
54
55     @Override
56     public NotificationDefinition build() {
57         if (!(getParent() instanceof ModuleBuilder)) {
58             throw new YangParseException(getModuleName(), getLine(),
59                     "Notification can be defined only under module (was " + getParent() + ")");
60         }
61         if (instance != null) {
62             return instance;
63         }
64         buildChildren();
65
66         instance = new NotificationDefinitionImpl(qname, schemaPath, this);
67
68         // AUGMENTATIONS
69         for (AugmentationSchemaBuilder builder : augmentationBuilders) {
70             augmentations.add(builder.build());
71         }
72         instance.augmentations = ImmutableSet.copyOf(augmentations);
73
74         // UNKNOWN NODES
75         for (UnknownSchemaNodeBuilder b : addedUnknownNodes) {
76             unknownNodes.add(b.build());
77         }
78         instance.unknownNodes = ImmutableList.copyOf(unknownNodes);
79
80         return instance;
81     }
82
83     @Override
84     public SchemaPath getPath() {
85         return schemaPath;
86     }
87
88     @Override
89     public void setPath(final SchemaPath path) {
90         this.schemaPath = path;
91     }
92
93     @Override
94     public void addAugmentation(final AugmentationSchemaBuilder augment) {
95         augmentationBuilders.add(augment);
96     }
97
98     @Override
99     public String toString() {
100         return "notification " + getQName().getLocalName();
101     }
102
103     @Override
104     protected String getStatementName() {
105         return "notification";
106     }
107
108 }