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