1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.mal_lang.langspec.builders.step;
18
19 import java.util.List;
20 import java.util.Map;
21 import org.mal_lang.langspec.Asset;
22 import org.mal_lang.langspec.builders.AssetBuilder;
23 import org.mal_lang.langspec.builders.VariableBuilder;
24
25
26
27
28
29
30 public final class StepVariableBuilder extends StepReferenceBuilder {
31
32
33
34
35
36
37
38
39 public StepVariableBuilder(String name) {
40 super(name);
41 }
42
43 private static AssetBuilder getAssetBuilder(String assetName, List<AssetBuilder> assetBuilders) {
44 for (var assetBuilder : assetBuilders) {
45 if (assetBuilder.getName().equals(assetName)) {
46 return assetBuilder;
47 }
48 }
49 throw new IllegalStateException();
50 }
51
52 private static VariableBuilder getVariableBuilder(
53 String assetName, String variableName, List<AssetBuilder> assetBuilders) {
54 var assetBuilder = StepVariableBuilder.getAssetBuilder(assetName, assetBuilders);
55 for (var variableBuilder : assetBuilder.getVariables()) {
56 if (variableBuilder.getName().equals(variableName)) {
57 return variableBuilder;
58 }
59 }
60 var superAsset = assetBuilder.getSuperAsset();
61 if (superAsset != null) {
62 return StepVariableBuilder.getVariableBuilder(superAsset, variableName, assetBuilders);
63 }
64 throw new IllegalStateException();
65 }
66
67 @Override
68 public Asset getTarget(
69 Asset sourceAsset, Map<String, Asset> assets, List<AssetBuilder> assetBuilders) {
70 if (!sourceAsset.hasVariable(this.getName())) {
71 throw new IllegalArgumentException(
72 String.format("Variable %s.%s not found", sourceAsset.getName(), this.getName()));
73 }
74 return StepVariableBuilder.getVariableBuilder(
75 sourceAsset.getName(), this.getName(), assetBuilders)
76 .getStepExpression()
77 .getTarget(sourceAsset, assets, assetBuilders);
78 }
79 }