2 * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
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
8 package org.opendaylight.yangtools.yang.parser.builder.impl;
11 import java.util.ArrayList;
12 import java.util.Date;
13 import java.util.List;
16 import org.opendaylight.yangtools.yang.common.QName;
17 import org.opendaylight.yangtools.yang.model.api.AugmentationSchema;
18 import org.opendaylight.yangtools.yang.model.api.NotificationDefinition;
19 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
20 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
21 import org.opendaylight.yangtools.yang.parser.builder.api.AugmentationSchemaBuilder;
22 import org.opendaylight.yangtools.yang.parser.builder.api.AugmentationTargetBuilder;
23 import org.opendaylight.yangtools.yang.parser.builder.api.SchemaNodeBuilder;
24 import org.opendaylight.yangtools.yang.parser.builder.api.UnknownSchemaNodeBuilder;
25 import org.opendaylight.yangtools.yang.parser.builder.util.AbstractDocumentedDataNodeContainer;
26 import org.opendaylight.yangtools.yang.parser.builder.util.AbstractDocumentedDataNodeContainerBuilder;
27 import org.opendaylight.yangtools.yang.parser.util.YangParseException;
29 import com.google.common.base.Preconditions;
30 import com.google.common.collect.ImmutableList;
31 import com.google.common.collect.ImmutableSet;
33 public final class NotificationBuilder extends AbstractDocumentedDataNodeContainerBuilder implements SchemaNodeBuilder,
34 AugmentationTargetBuilder {
35 private NotificationDefinitionImpl instance;
37 private SchemaPath schemaPath;
38 // AugmentationTarget args
39 private final List<AugmentationSchema> augmentations = new ArrayList<>();
40 private final List<AugmentationSchemaBuilder> augmentationBuilders = new ArrayList<>();
42 NotificationBuilder(final String moduleName, final int line, final QName qname, final SchemaPath path) {
43 super(moduleName, line, qname);
44 this.schemaPath = Preconditions.checkNotNull(path, "Schema Path must not be null");
47 NotificationBuilder(final String moduleName, final int line, final QName qname, final SchemaPath path,
48 final NotificationDefinition base) {
49 super(moduleName, line, qname, path, base);
50 this.schemaPath = Preconditions.checkNotNull(path, "Schema Path must not be null");
52 URI ns = qname.getNamespace();
53 Date rev = qname.getRevision();
54 String pref = qname.getPrefix();
55 addedUnknownNodes.addAll(BuilderUtils.wrapUnknownNodes(moduleName, line, base.getUnknownSchemaNodes(), path,
58 augmentations.addAll(base.getAvailableAugmentations());
63 public NotificationDefinition build() {
64 if (!(getParent() instanceof ModuleBuilder)) {
65 throw new YangParseException(getModuleName(), getLine(),
66 "Notification can be defined only under module (was " + getParent() + ")");
68 if (instance != null) {
73 instance = new NotificationDefinitionImpl(qname, schemaPath, this);
76 for (AugmentationSchemaBuilder builder : augmentationBuilders) {
77 augmentations.add(builder.build());
79 instance.augmentations = ImmutableSet.copyOf(augmentations);
82 for (UnknownSchemaNodeBuilder b : addedUnknownNodes) {
83 unknownNodes.add(b.build());
85 instance.unknownNodes = ImmutableList.copyOf(unknownNodes);
91 public SchemaPath getPath() {
96 public void setPath(final SchemaPath path) {
97 this.schemaPath = path;
101 public void addAugmentation(final AugmentationSchemaBuilder augment) {
102 augmentationBuilders.add(augment);
106 public String toString() {
107 return "notification " + getQName().getLocalName();
111 protected String getStatementName() {
112 return "notification";
115 private static final class NotificationDefinitionImpl extends AbstractDocumentedDataNodeContainer implements
116 NotificationDefinition {
117 private final QName qname;
118 private final SchemaPath path;
119 private ImmutableSet<AugmentationSchema> augmentations;
120 private ImmutableList<UnknownSchemaNode> unknownNodes;
122 NotificationDefinitionImpl(final QName qname, final SchemaPath path, final NotificationBuilder builder) {
124 // TODO Auto-generated constructor stub
130 public QName getQName() {
135 public SchemaPath getPath() {
140 public Set<AugmentationSchema> getAvailableAugmentations() {
141 return augmentations;
145 public List<UnknownSchemaNode> getUnknownSchemaNodes() {
150 public int hashCode() {
151 final int prime = 31;
153 result = prime * result + ((qname == null) ? 0 : qname.hashCode());
154 result = prime * result + ((path == null) ? 0 : path.hashCode());
159 public boolean equals(final Object obj) {
166 if (getClass() != obj.getClass()) {
169 final NotificationDefinitionImpl other = (NotificationDefinitionImpl) obj;
171 if (other.qname != null) {
174 } else if (!qname.equals(other.qname)) {
178 if (other.path != null) {
181 } else if (!path.equals(other.path)) {
188 public String toString() {
189 StringBuilder sb = new StringBuilder(NotificationDefinitionImpl.class.getSimpleName());
190 sb.append("[qname=" + qname + ", path=" + path + "]");
191 return sb.toString();