1   /*
2    * SPDX-FileCopyrightText: none
3    * SPDX-License-Identifier: CC0-1.0
4    */
5   
6   package gov.nist.secauto.metaschema.core.metapath.function;
7   
8   import gov.nist.secauto.metaschema.core.metapath.type.ISequenceType;
9   import gov.nist.secauto.metaschema.core.qname.IEnhancedQName;
10  
11  import java.util.Objects;
12  
13  import edu.umd.cs.findbugs.annotations.NonNull;
14  
15  class ArgumentImpl implements IArgument {
16    @NonNull
17    private final IEnhancedQName name;
18    @NonNull
19    private final ISequenceType sequenceType;
20  
21    protected ArgumentImpl(@NonNull IEnhancedQName name, @NonNull ISequenceType sequenceType) {
22      this.name = name;
23      this.sequenceType = sequenceType;
24    }
25  
26    @Override
27    public IEnhancedQName getName() {
28      return name;
29    }
30  
31    @Override
32    public ISequenceType getSequenceType() {
33      return sequenceType;
34    }
35  
36    @SuppressWarnings("null")
37    @Override
38    public String toSignature() {
39      StringBuilder builder = new StringBuilder();
40  
41      // name
42      builder.append(getName().toEQName())
43          .append(" as ")
44          .append(getSequenceType().toSignature());
45  
46      return builder.toString();
47    }
48  
49    @Override
50    public int hashCode() {
51      return Objects.hash(name, sequenceType);
52    }
53  
54    @Override
55    public boolean equals(Object obj) {
56      if (this == obj) {
57        return true; // NOPMD - readability
58      }
59      if (obj == null || getClass() != obj.getClass()) {
60        return false; // NOPMD - readability
61      }
62      ArgumentImpl other = (ArgumentImpl) obj;
63      return Objects.equals(name, other.name) && Objects.equals(sequenceType, other.sequenceType);
64    }
65  }