1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 package org.nuiton.eugene.models.object.xml;
24
25 import com.google.common.collect.ImmutableSet;
26 import com.google.common.collect.Sets;
27 import org.nuiton.eugene.models.object.ObjectModelJavaModifier;
28 import org.nuiton.eugene.models.object.ObjectModelModifier;
29 import org.nuiton.eugene.models.object.ObjectModelOperation;
30 import org.nuiton.eugene.models.object.ObjectModelParameter;
31
32 import java.util.ArrayList;
33 import java.util.Collection;
34 import java.util.HashSet;
35 import java.util.Iterator;
36 import java.util.List;
37 import java.util.Set;
38
39
40
41
42
43
44
45
46 public class ObjectModelOperationImpl extends ObjectModelElementImpl implements ObjectModelOperation {
47
48 public static final ObjectModelJavaModifier DEFAULT_VISIBILITY = ObjectModelJavaModifier.PUBLIC;
49
50 protected ObjectModelParameter returnParameter;
51
52 protected String transactionLevel = "supports";
53
54 protected List<ObjectModelParameter> parameters = new ArrayList<>();
55
56 protected Set<String> exceptions = new HashSet<>();
57
58 protected String bodyCode = "";
59
60 private static Set<ObjectModelModifier> authorizedModifiers;
61
62 public ObjectModelOperationImpl() {
63 }
64
65 @Override
66 protected Set<ObjectModelModifier> getAuthorizedModifiers() {
67 if (authorizedModifiers == null) {
68
69
70
71 Set<ObjectModelModifier> modifiers = Sets.newHashSet(
72 (ObjectModelModifier) ObjectModelJavaModifier.ABSTRACT,
73 ObjectModelJavaModifier.STATIC,
74 ObjectModelJavaModifier.FINAL,
75 ObjectModelJavaModifier.SYNCHRONIZED,
76 ObjectModelJavaModifier.NATIVE,
77 ObjectModelJavaModifier.STRICTFP);
78 modifiers.addAll(ObjectModelJavaModifier.visibilityModifiers);
79 authorizedModifiers = ImmutableSet.copyOf(modifiers);
80 }
81 return authorizedModifiers;
82 }
83
84 public String toString() {
85 return getName() + "(" + parameters + ")" + "<<" + getStereotypes()
86 + ">> throws " + exceptions + " tagvalue: " + getTagValues();
87 }
88
89
90
91
92 public boolean equals(Object o) {
93 if (o instanceof ObjectModelOperation) {
94 ObjectModelOperation op = (ObjectModelOperation) o;
95 if (getName().equals(op.getName())
96 && getParameters().size() == op.getParameters().size()) {
97 for (Iterator<?> i = getParameters().iterator(), opi = op
98 .getParameters().iterator(); i.hasNext()
99 && opi.hasNext(); ) {
100 ObjectModelParameter p = (ObjectModelParameter) i.next();
101 ObjectModelParameter pop = (ObjectModelParameter) opi
102 .next();
103 if (!p.getType().equals(pop.getType())) {
104 return false;
105 }
106 }
107 return true;
108 }
109 }
110 return false;
111 }
112
113 public void addParameter(ObjectModelParameterImpl parameter) {
114
115
116 parameter.postInit();
117 parameter.setDeclaringElement(this);
118 parameters.add(parameter);
119
120 }
121
122 public void setVisibility(String visibility) {
123 ObjectModelModifier modifier = ObjectModelJavaModifier.fromVisibility(visibility);
124 removeModifiers(ObjectModelJavaModifier.visibilityModifiers);
125 if (modifier == null) {
126 modifier = DEFAULT_VISIBILITY;
127 }
128 addModifier(modifier);
129 }
130
131 public void setAbstract(boolean abstractz) {
132 addOrRemoveModifier(ObjectModelJavaModifier.ABSTRACT, abstractz);
133 }
134
135 public void setReturnParameter(ObjectModelParameterImpl returnParameter) {
136
137
138 returnParameter.postInit();
139 returnParameter.setDeclaringElement(this);
140 this.returnParameter = returnParameter;
141 }
142
143 public void setBodyCode(String bodyCode) {
144 this.bodyCode = bodyCode;
145 }
146
147
148
149
150
151
152 public void addBodyCode(String bodyCode) {
153 this.bodyCode += bodyCode;
154 }
155
156 @Override
157 public ObjectModelParameter getReturnParameter() {
158 return returnParameter;
159 }
160
161 @Override
162 public String getReturnType() {
163 if (returnParameter != null) {
164 return returnParameter.getType();
165 }
166 return "void";
167 }
168
169 @Override
170 public String getVisibility() {
171 String visibility = DEFAULT_VISIBILITY.toString();
172 if (modifiers.contains(ObjectModelJavaModifier.PRIVATE)) {
173 visibility = ObjectModelJavaModifier.PRIVATE.toString();
174 } else if (modifiers.contains(ObjectModelJavaModifier.PROTECTED)) {
175 visibility = ObjectModelJavaModifier.PROTECTED.toString();
176 }
177 if (modifiers.contains(ObjectModelJavaModifier.PACKAGE)) {
178 visibility = ObjectModelJavaModifier.PACKAGE.toString();
179 }
180 return visibility;
181 }
182
183
184
185
186
187
188 @Override
189 public boolean isAbstract() {
190 return modifiers.contains(ObjectModelJavaModifier.ABSTRACT);
191 }
192
193 @Override
194 public Collection<ObjectModelParameter> getParameters() {
195 return parameters;
196 }
197
198
199
200
201
202
203 public void addExceptionParameter(ObjectModelParameterImpl raisedParameter) {
204 raisedParameter.postInit();
205 raisedParameter.setDeclaringElement(this);
206
207 exceptions.add(raisedParameter.getType());
208 }
209
210 @Override
211 public Set<String> getExceptions() {
212 return exceptions;
213 }
214
215 @Override
216 public String getBodyCode() {
217 return bodyCode;
218 }
219
220 }