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 java.util.regex.Pattern;
9   
10  import dev.metaschema.core.datatype.markup.MarkupMultiline;
11  import dev.metaschema.core.metapath.IMetapathExpression;
12  import dev.metaschema.core.model.constraint.IIndexConstraint;
13  import dev.metaschema.core.model.constraint.IIndexHasKeyConstraint;
14  import dev.metaschema.core.model.constraint.IKeyField;
15  import dev.metaschema.core.model.constraint.IUniqueConstraint;
16  import edu.umd.cs.findbugs.annotations.NonNull;
17  import edu.umd.cs.findbugs.annotations.Nullable;
18  
19  /**
20   * The default implementation of an index that can support the
21   * {@link IIndexConstraint}, {@link IIndexHasKeyConstraint}, and
22   * {@link IUniqueConstraint}.
23   */
24  public class DefaultKeyField implements IKeyField {
25  
26    @Nullable
27    private final Pattern pattern;
28    @NonNull
29    private final IMetapathExpression target;
30    @Nullable
31    private final MarkupMultiline remarks;
32  
33    /**
34     * Construct a new key field based on the provided target. An optional pattern
35     * can be used to extract a portion of the resulting key value.
36     *
37     * @param target
38     *          a Metapath expression identifying the target of the key field
39     * @param pattern
40     *          an optional used to extract a portion of the resulting key value
41     * @param remarks
42     *          optional remarks describing the intent of the constraint
43     */
44    public DefaultKeyField(
45        @NonNull IMetapathExpression target,
46        @Nullable Pattern pattern,
47        @Nullable MarkupMultiline remarks) {
48      this.pattern = pattern;
49      this.target = target;
50      this.remarks = remarks;
51    }
52  
53    @Override
54    public Pattern getPattern() {
55      return pattern;
56    }
57  
58    @Override
59    public IMetapathExpression getTarget() {
60      return target;
61    }
62  
63    @Override
64    public MarkupMultiline getRemarks() {
65      return remarks;
66    }
67  }