YANGTOOLS-706: Retrofit EffectiveStatement interfaces into parser
[yangtools.git] / yang / yang-parser-impl / src / main / java / org / opendaylight / yangtools / yang / parser / stmt / rfc6020 / effective / AnyxmlEffectiveStatementImpl.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.parser.stmt.rfc6020.effective;
9
10 import java.util.Objects;
11 import java.util.Optional;
12 import org.opendaylight.yangtools.yang.common.QName;
13 import org.opendaylight.yangtools.yang.model.api.AnyXmlSchemaNode;
14 import org.opendaylight.yangtools.yang.model.api.DerivableSchemaNode;
15 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
16 import org.opendaylight.yangtools.yang.model.api.stmt.AnyxmlEffectiveStatement;
17 import org.opendaylight.yangtools.yang.model.api.stmt.AnyxmlStatement;
18 import org.opendaylight.yangtools.yang.model.api.stmt.MandatoryEffectiveStatement;
19 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
20
21 public class AnyxmlEffectiveStatementImpl extends AbstractEffectiveDataSchemaNode<AnyxmlStatement>
22         implements AnyxmlEffectiveStatement, AnyXmlSchemaNode, DerivableSchemaNode {
23
24     private final AnyXmlSchemaNode original;
25     private final boolean mandatory;
26
27     public AnyxmlEffectiveStatementImpl(
28             final StmtContext<QName, AnyxmlStatement, EffectiveStatement<QName, AnyxmlStatement>> ctx) {
29         super(ctx);
30         this.original = (AnyXmlSchemaNode) ctx.getOriginalCtx().map(StmtContext::buildEffective).orElse(null);
31         final MandatoryEffectiveStatement mandatoryStmt = firstEffective(MandatoryEffectiveStatement.class);
32         mandatory = mandatoryStmt == null ? false : mandatoryStmt.argument().booleanValue();
33     }
34
35     @Override
36     public boolean isMandatory() {
37         return mandatory;
38     }
39
40     @Override
41     public Optional<AnyXmlSchemaNode> getOriginal() {
42         return Optional.ofNullable(original);
43     }
44
45     @Override
46     public int hashCode() {
47         final int prime = 31;
48         int result = 1;
49         result = prime * result + Objects.hashCode(getQName());
50         result = prime * result + Objects.hashCode(getPath());
51         return result;
52     }
53
54     @Override
55     public boolean equals(final Object obj) {
56         if (this == obj) {
57             return true;
58         }
59         if (obj == null) {
60             return false;
61         }
62         if (getClass() != obj.getClass()) {
63             return false;
64         }
65
66         AnyxmlEffectiveStatementImpl other = (AnyxmlEffectiveStatementImpl) obj;
67         return Objects.equals(getQName(), other.getQName()) && Objects.equals(getPath(), other.getPath());
68     }
69
70     @Override
71     public String toString() {
72         return AnyxmlEffectiveStatementImpl.class.getSimpleName() + "["
73                 + "qname=" + getQName()
74                 + ", path=" + getPath()
75                 + "]";
76     }
77 }