1   /*
2    * SPDX-FileCopyrightText: none
3    * SPDX-License-Identifier: CC0-1.0
4    */
5   
6   package dev.metaschema.core.model.constraint.impl;
7   
8   import dev.metaschema.core.datatype.markup.MarkupMultiline;
9   import dev.metaschema.core.metapath.IMetapathExpression;
10  import dev.metaschema.core.model.ISource;
11  import dev.metaschema.core.model.constraint.ILet;
12  import dev.metaschema.core.qname.IEnhancedQName;
13  import edu.umd.cs.findbugs.annotations.NonNull;
14  import edu.umd.cs.findbugs.annotations.Nullable;
15  
16  /**
17   * A variable assignment for use in Metaschema module constraints.
18   * <p>
19   * This class is immutable.
20   */
21  @SuppressWarnings("PMD.DataClass")
22  public class DefaultLet implements ILet {
23    @NonNull
24    private final IEnhancedQName name;
25    @NonNull
26    private final IMetapathExpression valueExpression;
27    @NonNull
28    private final ISource source;
29    @Nullable
30    private final MarkupMultiline remarks;
31  
32    /**
33     * Construct a new let statement.
34     *
35     * @param name
36     *          the variable name
37     * @param metapath
38     *          the Metapath expression used to query the value
39     * @param source
40     *          the source of the let statement
41     * @param remarks
42     *          remarks about the let statement
43     */
44    public DefaultLet(
45        @NonNull IEnhancedQName name,
46        @NonNull IMetapathExpression metapath,
47        @NonNull ISource source,
48        @Nullable MarkupMultiline remarks) {
49      this.name = name;
50      this.valueExpression = metapath;
51      this.source = source;
52      this.remarks = remarks;
53    }
54  
55    @Override
56    public IEnhancedQName getName() {
57      return name;
58    }
59  
60    @Override
61    public IMetapathExpression getValueExpression() {
62      return valueExpression;
63    }
64  
65    @Override
66    @NonNull
67    public ISource getSource() {
68      return source;
69    }
70  
71    @Override
72    public MarkupMultiline getRemarks() {
73      return remarks;
74    }
75  }