1 package cz.cuni.amis.pogamut.sposh.elements;
2
3 import java.util.AbstractList;
4 import java.util.ArrayList;
5 import java.util.List;
6
7
8
9
10
11
12
13
14
15 final public class FormalParameters extends AbstractList<FormalParameters.Parameter> {
16
17
18
19
20
21 FormalParameters(FormalParameters parameters) {
22 this.parameters = new ArrayList<Parameter>();
23 for (FormalParameters.Parameter param : parameters) {
24 this.add(param);
25 }
26 }
27
28
29
30
31
32
33
34
35
36
37 final public static class Parameter {
38
39 private final String name;
40 private Object defaultValue;
41
42
43
44
45
46
47 public Parameter(String name, Object defaultValue) {
48
49 assert name.startsWith("$");
50 assert !name.matches("\\s");
51 this.name = name;
52 this.defaultValue = defaultValue;
53 }
54
55
56
57
58 public String getName() {
59 return name;
60 }
61
62
63
64
65 public Object getDefaultValue() {
66 return defaultValue;
67 }
68
69
70
71
72
73 public void setDefaultValue(Object defaultValue) {
74 this.defaultValue = defaultValue;
75 }
76
77 @Override
78 public String toString() {
79 return getName() + "=" + Result.toLap(getDefaultValue());
80 }
81 }
82 private List<Parameter> parameters;
83
84 public FormalParameters() {
85 parameters = new ArrayList<Parameter>();
86 }
87
88 @Override
89 public Parameter get(int index) {
90 return parameters.get(index);
91 }
92
93 @Override
94 public int size() {
95 return parameters.size();
96 }
97
98 @Override
99 public Parameter set(int index, Parameter element) {
100 for (Parameter param : parameters) {
101 if (param.getName().equals(element.getName()) && !param.equals(element)) {
102 throw new IllegalArgumentException("Parameter with name \"" + element.getName() + "\" has already been specified in formal parameters.");
103 }
104 }
105 return parameters.set(index, element);
106 }
107
108 @Override
109 public void add(int index, Parameter element) {
110
111 for (Parameter param : parameters) {
112 if (param.getName().equals(element.getName())) {
113 throw new IllegalArgumentException("Parameter with name \"" + element.getName() + "\" has already been specified in formal parameters.");
114 }
115 }
116 parameters.add(index, element);
117 }
118
119 @Override
120 public Parameter remove(int index) {
121 return parameters.remove(index);
122 }
123
124
125
126
127
128
129
130 public boolean containsVariable(String variableName) {
131 for (FormalParameters.Parameter param : parameters) {
132 if (param.getName().equals(variableName)) {
133 return true;
134 }
135 }
136 return false;
137 }
138
139
140 @Override
141 public String toString() {
142 StringBuilder sb = new StringBuilder("");
143
144 for (int i=0; i<parameters.size();++i) {
145 String parameterString = parameters.get(i).toString();
146 if (i==0) {
147 sb.append(parameterString);
148 } else {
149 sb.append(", " + parameterString);
150 }
151 }
152 return sb.toString();
153 }
154 }