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.controller.yang.parser.builder.impl;
10 import java.util.ArrayList;
11 import java.util.Collections;
12 import java.util.List;
14 import org.opendaylight.controller.yang.model.api.Deviation;
15 import org.opendaylight.controller.yang.model.api.Deviation.Deviate;
16 import org.opendaylight.controller.yang.model.api.SchemaPath;
17 import org.opendaylight.controller.yang.model.api.UnknownSchemaNode;
18 import org.opendaylight.controller.yang.parser.builder.api.Builder;
19 import org.opendaylight.controller.yang.parser.util.YangModelBuilderUtil;
20 import org.opendaylight.controller.yang.parser.util.YangParseException;
22 public final class DeviationBuilder implements Builder {
23 private final DeviationImpl instance;
24 private final int line;
25 private final List<UnknownSchemaNodeBuilder> addedUnknownNodes = new ArrayList<UnknownSchemaNodeBuilder>();
27 DeviationBuilder(final String targetPathStr, final int line) {
29 final SchemaPath targetPath = YangModelBuilderUtil
30 .parseAugmentPath(targetPathStr);
31 instance = new DeviationImpl(targetPath);
35 public Deviation build() {
37 List<UnknownSchemaNode> unknownNodes = new ArrayList<UnknownSchemaNode>();
38 for (UnknownSchemaNodeBuilder b : addedUnknownNodes) {
39 unknownNodes.add(b.build());
41 instance.setUnknownSchemaNodes(unknownNodes);
47 public int getLine() {
52 public void addUnknownSchemaNode(UnknownSchemaNodeBuilder unknownNode) {
53 addedUnknownNodes.add(unknownNode);
56 public void setDeviate(final String deviate) {
57 if ("not-supported".equals(deviate)) {
58 instance.setDeviate(Deviate.NOT_SUPPORTED);
59 } else if ("add".equals(deviate)) {
60 instance.setDeviate(Deviate.ADD);
61 } else if ("replace".equals(deviate)) {
62 instance.setDeviate(Deviate.REPLACE);
63 } else if ("delete".equals(deviate)) {
64 instance.setDeviate(Deviate.DELETE);
66 throw new YangParseException(line,
67 "Unsupported type of 'deviate' statement: " + deviate);
71 public void setReference(final String reference) {
72 instance.setReference(reference);
75 private final class DeviationImpl implements Deviation {
76 private final SchemaPath targetPath;
77 private Deviate deviate;
78 private String reference;
79 private List<UnknownSchemaNode> unknownNodes = Collections.emptyList();
81 private DeviationImpl(final SchemaPath targetPath) {
82 this.targetPath = targetPath;
86 public SchemaPath getTargetPath() {
91 public Deviate getDeviate() {
95 private void setDeviate(final Deviate deviate) {
96 this.deviate = deviate;
100 public String getReference() {
104 private void setReference(final String reference) {
105 this.reference = reference;
108 public List<UnknownSchemaNode> getUnknownSchemaNodes() {
112 private void setUnknownSchemaNodes(List<UnknownSchemaNode> unknownSchemaNodes) {
113 if (unknownSchemaNodes != null) {
114 this.unknownNodes = unknownSchemaNodes;
119 public int hashCode() {
120 final int prime = 31;
122 result = prime * result
123 + ((targetPath == null) ? 0 : targetPath.hashCode());
124 result = prime * result
125 + ((deviate == null) ? 0 : deviate.hashCode());
126 result = prime * result
127 + ((reference == null) ? 0 : reference.hashCode());
132 public boolean equals(Object obj) {
139 if (getClass() != obj.getClass()) {
142 DeviationImpl other = (DeviationImpl) obj;
143 if (targetPath == null) {
144 if (other.targetPath != null) {
147 } else if (!targetPath.equals(other.targetPath)) {
150 if (deviate == null) {
151 if (other.deviate != null) {
154 } else if (!deviate.equals(other.deviate)) {
157 if (reference == null) {
158 if (other.reference != null) {
161 } else if (!reference.equals(other.reference)) {
168 public String toString() {
169 StringBuilder sb = new StringBuilder(
170 DeviationImpl.class.getSimpleName());
172 sb.append("targetPath=" + targetPath);
173 sb.append(", deviate=" + deviate);
174 sb.append(", reference=" + reference);
176 return sb.toString();