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 final public static class Parameter {
36
37 private final String name;
38 private Object defaultValue;
39
40
41
42
43
44
45 public Parameter(String name, Object defaultValue) {
46
47 assert name.startsWith("$");
48 assert !name.matches("\\s");
49 this.name = name;
50 this.defaultValue = defaultValue;
51 }
52
53
54
55
56 public String getName() {
57 return name;
58 }
59
60
61
62
63 public Object getDefaultValue() {
64 return defaultValue;
65 }
66
67
68
69
70
71 public void setDefaultValue(Object defaultValue) {
72 this.defaultValue = defaultValue;
73 }
74
75 @Override
76 public String toString() {
77 return getName() + "=" + Result.toLap(getDefaultValue());
78 }
79 }
80 private List<Parameter> parameters;
81
82 public FormalParameters() {
83 parameters = new ArrayList<Parameter>();
84 }
85
86 @Override
87 public Parameter get(int index) {
88 return parameters.get(index);
89 }
90
91 @Override
92 public int size() {
93 return parameters.size();
94 }
95
96 @Override
97 public Parameter set(int index, Parameter element) {
98 for (Parameter param : parameters) {
99 if (param.getName().equals(element.getName()) && !param.equals(element)) {
100 throw new IllegalArgumentException("Parameter with name \"" + element.getName() + "\" has already been specified in formal parameters.");
101 }
102 }
103 return parameters.set(index, element);
104 }
105
106 @Override
107 public void add(int index, Parameter element) {
108
109 for (Parameter param : parameters) {
110 if (param.getName().equals(element.getName())) {
111 throw new IllegalArgumentException("Parameter with name \"" + element.getName() + "\" has already been specified in formal parameters.");
112 }
113 }
114 parameters.add(index, element);
115 }
116
117 @Override
118 public Parameter remove(int index) {
119 return parameters.remove(index);
120 }
121
122
123
124
125
126
127
128 public boolean containsVariable(String variableName) {
129 for (FormalParameters.Parameter param : parameters) {
130 if (param.getName().equals(variableName)) {
131 return true;
132 }
133 }
134 return false;
135 }
136
137
138 @Override
139 public String toString() {
140 StringBuilder sb = new StringBuilder("");
141
142 for (int i=0; i<parameters.size();++i) {
143 String parameterString = parameters.get(i).toString();
144 if (i==0) {
145 sb.append(parameterString);
146 } else {
147 sb.append(", " + parameterString);
148 }
149 }
150 return sb.toString();
151 }
152 }