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;
10 import com.google.common.base.Preconditions;
11 import com.google.common.collect.ImmutableList;
12 import com.google.common.collect.ImmutableSet;
14 import java.util.ArrayList;
15 import java.util.Date;
16 import java.util.List;
18 import org.opendaylight.yangtools.yang.common.QName;
19 import org.opendaylight.yangtools.yang.model.api.AugmentationSchema;
20 import org.opendaylight.yangtools.yang.model.api.NotificationDefinition;
21 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
22 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
23 import org.opendaylight.yangtools.yang.parser.builder.api.AugmentationSchemaBuilder;
24 import org.opendaylight.yangtools.yang.parser.builder.api.AugmentationTargetBuilder;
25 import org.opendaylight.yangtools.yang.parser.builder.api.SchemaNodeBuilder;
26 import org.opendaylight.yangtools.yang.parser.builder.api.UnknownSchemaNodeBuilder;
27 import org.opendaylight.yangtools.yang.parser.builder.util.AbstractDocumentedDataNodeContainer;
28 import org.opendaylight.yangtools.yang.parser.builder.util.AbstractDocumentedDataNodeContainerBuilder;
29 import org.opendaylight.yangtools.yang.parser.util.YangParseException;
31 public final class NotificationBuilder extends AbstractDocumentedDataNodeContainerBuilder implements SchemaNodeBuilder,
32 AugmentationTargetBuilder {
33 private NotificationDefinitionImpl instance;
35 private SchemaPath schemaPath;
36 // AugmentationTarget args
37 private final List<AugmentationSchema> augmentations = new ArrayList<>();
38 private final List<AugmentationSchemaBuilder> augmentationBuilders = new ArrayList<>();
40 NotificationBuilder(final String moduleName, final int line, final QName qname, final SchemaPath path) {
41 super(moduleName, line, qname);
42 this.schemaPath = Preconditions.checkNotNull(path, "Schema Path must not be null");
45 NotificationBuilder(final String moduleName, final int line, final QName qname, final SchemaPath path,
46 final NotificationDefinition base) {
47 super(moduleName, line, qname, path, base);
48 this.schemaPath = Preconditions.checkNotNull(path, "Schema Path must not be null");
50 URI ns = qname.getNamespace();
51 Date rev = qname.getRevision();
52 String pref = qname.getPrefix();
53 addedUnknownNodes.addAll(BuilderUtils.wrapUnknownNodes(moduleName, line, base.getUnknownSchemaNodes(), path,
56 augmentations.addAll(base.getAvailableAugmentations());
61 public NotificationDefinition build() {
62 if (!(getParent() instanceof ModuleBuilder)) {
63 throw new YangParseException(getModuleName(), getLine(),
64 "Notification can be defined only under module (was " + getParent() + ")");
66 if (instance != null) {
71 instance = new NotificationDefinitionImpl(qname, schemaPath, this);
74 for (AugmentationSchemaBuilder builder : augmentationBuilders) {
75 augmentations.add(builder.build());
77 instance.augmentations = ImmutableSet.copyOf(augmentations);
80 for (UnknownSchemaNodeBuilder b : addedUnknownNodes) {
81 unknownNodes.add(b.build());
83 instance.unknownNodes = ImmutableList.copyOf(unknownNodes);
89 public SchemaPath getPath() {
94 public void setPath(final SchemaPath path) {
95 this.schemaPath = path;
99 public void addAugmentation(final AugmentationSchemaBuilder augment) {
100 augmentationBuilders.add(augment);
104 public String toString() {
105 return "notification " + getQName().getLocalName();
109 protected String getStatementName() {
110 return "notification";
113 private static final class NotificationDefinitionImpl extends AbstractDocumentedDataNodeContainer implements
114 NotificationDefinition {
115 private final QName qname;
116 private final SchemaPath path;
117 private ImmutableSet<AugmentationSchema> augmentations;
118 private ImmutableList<UnknownSchemaNode> unknownNodes;
120 NotificationDefinitionImpl(final QName qname, final SchemaPath path, final NotificationBuilder builder) {
122 // TODO Auto-generated constructor stub
128 public QName getQName() {
133 public SchemaPath getPath() {
138 public Set<AugmentationSchema> getAvailableAugmentations() {
139 return augmentations;
143 public List<UnknownSchemaNode> getUnknownSchemaNodes() {
148 public int hashCode() {
149 final int prime = 31;
151 result = prime * result + ((qname == null) ? 0 : qname.hashCode());
152 result = prime * result + ((path == null) ? 0 : path.hashCode());
157 public boolean equals(final Object obj) {
164 if (getClass() != obj.getClass()) {
167 final NotificationDefinitionImpl other = (NotificationDefinitionImpl) obj;
169 if (other.qname != null) {
172 } else if (!qname.equals(other.qname)) {
176 if (other.path != null) {
179 } else if (!path.equals(other.path)) {
186 public String toString() {
187 StringBuilder sb = new StringBuilder(NotificationDefinitionImpl.class.getSimpleName());
188 sb.append("[qname=").append(qname).append(", path=").append(path).append("]");
189 return sb.toString();