View Javadoc
1   /*
2    * Copyright 2020-2022 Foreseeti AB <https://foreseeti.com>
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *     http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  
17  package org.mal_lang.langspec.builders;
18  
19  import static java.util.Objects.requireNonNull;
20  
21  import jakarta.json.JsonObject;
22  import java.util.ArrayList;
23  import java.util.List;
24  import org.mal_lang.langspec.builders.step.StepExpressionBuilder;
25  
26  /**
27   * A builder for creating {@link org.mal_lang.langspec.Steps} objects.
28   *
29   * @since 1.0.0
30   */
31  public final class StepsBuilder {
32    private final boolean overrides;
33    private final ArrayList<StepExpressionBuilder> stepExpressions = new ArrayList<>();
34  
35    /**
36     * Constructs a new {@code StepsBuilder} object.
37     *
38     * @param overrides whether this {@code StepsBuilder} overrides
39     * @since 1.0.0
40     */
41    public StepsBuilder(boolean overrides) {
42      this.overrides = overrides;
43    }
44  
45    /**
46     * Returns whether this {@code StepsBuilder} object overrides.
47     *
48     * @return whether this {@code StepsBuilder} object overrides
49     * @since 1.0.0
50     */
51    public boolean overrides() {
52      return this.overrides;
53    }
54  
55    /**
56     * Returns a list of all step expressions in this {@code StepsBuilder} object.
57     *
58     * @return a list of all step expressions in this {@code StepsBuilder} object
59     * @since 1.0.0
60     */
61    public List<StepExpressionBuilder> getStepExpressions() {
62      return List.copyOf(this.stepExpressions);
63    }
64  
65    /**
66     * Adds a step expression to this {@code StepsBuilder} object.
67     *
68     * @param stepExpression the step expression to add
69     * @return this {@code StepsBuilder} object
70     * @throws java.lang.NullPointerException if {@code stepExpression} is {@code null}
71     * @since 1.0.0
72     */
73    public StepsBuilder addStepExpression(StepExpressionBuilder stepExpression) {
74      this.stepExpressions.add(requireNonNull(stepExpression));
75      return this;
76    }
77  
78    /**
79     * Creates a new {@code StepsBuilder} from a {@link jakarta.json.JsonObject}.
80     *
81     * @param jsonSteps the {@link jakarta.json.JsonObject}
82     * @return a new {@code StepsBuilder}
83     * @throws java.lang.NullPointerException if {@code jsonSteps} is {@code null}
84     * @since 1.0.0
85     */
86    public static StepsBuilder fromJson(JsonObject jsonSteps) {
87      requireNonNull(jsonSteps);
88      var builder = new StepsBuilder(jsonSteps.getBoolean("overrides"));
89      for (var jsonStepExpression : jsonSteps.getJsonArray("stepExpressions")) {
90        builder.addStepExpression(StepExpressionBuilder.fromJson(jsonStepExpression.asJsonObject()));
91      }
92      return builder;
93    }
94  }