Bug 3874: Support of yang modeled AnyXML - XML deserialization
[yangtools.git] / yang / yang-parser-impl / src / main / java / org / opendaylight / yangtools / yang / parser / stmt / rfc6020 / effective / UnknownEffectiveStatementImpl.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
9 package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective;
10
11 import java.util.Objects;
12 import org.opendaylight.yangtools.yang.common.QName;
13 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
14 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
15 import org.opendaylight.yangtools.yang.model.api.stmt.UnknownStatement;
16 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
17 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils;
18
19 public final class UnknownEffectiveStatementImpl extends UnknownEffectiveStatementBase<String> {
20
21     private final QName maybeQNameArgument;
22     private final SchemaPath path;
23
24     public UnknownEffectiveStatementImpl(final StmtContext<String, UnknownStatement<String>, ?> ctx) {
25         super(ctx);
26
27         // FIXME: Remove following section after fixing 4380
28         final UnknownSchemaNode original = ctx.getOriginalCtx() == null ? null : (UnknownSchemaNode) ctx
29                 .getOriginalCtx().buildEffective();
30         if (original != null) {
31             this.maybeQNameArgument = original.getQName();
32         } else {
33             QName maybeQNameArgumentInit = null;
34             try {
35                 maybeQNameArgumentInit = Utils.qNameFromArgument(ctx, argument());
36             } catch (IllegalArgumentException e) {
37                 maybeQNameArgumentInit = getNodeType();
38             }
39             this.maybeQNameArgument = maybeQNameArgumentInit;
40         }
41         path = ctx.getParentContext().getSchemaPath().get().createChild(maybeQNameArgument);
42     }
43
44     @Override
45     public QName getQName() {
46         return maybeQNameArgument;
47     }
48
49     @Override
50     public SchemaPath getPath() {
51         return path;
52     }
53
54     @Override
55     public int hashCode() {
56         final int prime = 31;
57         int result = 1;
58         result = prime * result + Objects.hashCode(maybeQNameArgument);
59         result = prime * result + Objects.hashCode(path);
60         result = prime * result + Objects.hashCode(getNodeType());
61         result = prime * result + Objects.hashCode(getNodeParameter());
62         return result;
63     }
64
65     @Override
66     public boolean equals(final Object obj) {
67         if (this == obj) {
68             return true;
69         }
70         if (obj == null) {
71             return false;
72         }
73         if (getClass() != obj.getClass()) {
74             return false;
75         }
76         UnknownEffectiveStatementImpl other = (UnknownEffectiveStatementImpl) obj;
77         if (!Objects.equals(maybeQNameArgument, other.maybeQNameArgument)) {
78             return false;
79         }
80         if (!Objects.equals(path, other.path)) {
81             return false;
82         }
83         if (!Objects.equals(getNodeType(), other.getNodeType())) {
84             return false;
85         }
86         if (!Objects.equals(getNodeParameter(), other.getNodeParameter())) {
87             return false;
88         }
89         return true;
90     }
91 }