Fix sonar warnings
[yangtools.git] / yang / yang-data-impl / src / main / java / org / opendaylight / yangtools / yang / data / impl / leafref / QNameWithPredicateBuilder.java
1 /**
2  * Copyright (c) 2015 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.data.impl.leafref;
9
10 import java.util.LinkedList;
11 import java.util.List;
12 import org.opendaylight.yangtools.yang.common.QNameModule;
13
14 class QNameWithPredicateBuilder {
15
16     private List<QNamePredicate> qnamePredicates;
17     private QNameModule moduleQname;
18     private String localName;
19
20     public static final QNameWithPredicateBuilder UP_PARENT_BUILDER = new QNameWithPredicateBuilder(
21             null, "..") {
22         @Override
23         public QNameWithPredicate build() {
24             return QNameWithPredicate.UP_PARENT;
25         }
26     };
27
28     public QNameWithPredicateBuilder(final QNameModule moduleQname, final String localName) {
29         this.moduleQname = moduleQname;
30         this.localName = localName;
31         this.qnamePredicates = new LinkedList<>();
32     }
33
34     public QNameWithPredicate build() {
35         final QNameWithPredicateImpl qNameWithPredicateImpl = new QNameWithPredicateImpl(
36                 moduleQname, localName, qnamePredicates);
37
38         this.qnamePredicates = new LinkedList<>();
39
40         return qNameWithPredicateImpl;
41     }
42
43     public List<QNamePredicate> getQNamePredicates() {
44         return qnamePredicates;
45     }
46
47     public void addQNamePredicate(final QNamePredicate qnamePredicate) {
48         qnamePredicates.add(qnamePredicate);
49     }
50
51     public QNameModule getModuleQname() {
52         return moduleQname;
53     }
54
55     public void setModuleQname(final QNameModule moduleQname) {
56         this.moduleQname = moduleQname;
57     }
58
59     public String getLocalName() {
60         return localName;
61     }
62
63     public void setLocalName(final String localName) {
64         this.localName = localName;
65     }
66
67     // FIXME: check also predicates ...
68     @Override
69     public boolean equals(final Object obj) {
70         if (this == obj) {
71             return true;
72         }
73         if (!(obj instanceof QNameWithPredicateBuilder)) {
74             return false;
75         }
76         final QNameWithPredicateBuilder other = (QNameWithPredicateBuilder) obj;
77         if (localName == null) {
78             if (other.localName != null) {
79                 return false;
80             }
81         } else if (!localName.equals(other.localName)) {
82             return false;
83         }
84         return moduleQname.equals(other.moduleQname);
85     }
86
87     @Override
88     public String toString() {
89         final StringBuilder sb = new StringBuilder();
90
91         if (moduleQname != null) {
92             sb.append("(" + moduleQname.getNamespace());
93             sb.append("?revision=" + moduleQname.getRevision());
94             sb.append(")");
95         }
96
97         sb.append(localName);
98
99         for (final QNamePredicate predicate : qnamePredicates) {
100             sb.append(predicate);
101         }
102
103         return sb.toString();
104     }
105 }