Revision 1405 org.gvsig.tools/library/trunk/org.gvsig.tools/org.gvsig.tools.lib/src/main/java/org/gvsig/tools/dynobject/impl/DefaultDynObject.java
DefaultDynObject.java | ||
---|---|---|
25 | 25 |
|
26 | 26 |
import java.util.HashMap; |
27 | 27 |
import java.util.Map; |
28 |
import org.gvsig.tools.ToolsLocator; |
|
29 | 28 |
|
30 | 29 |
import org.gvsig.tools.dataTypes.CoercionException; |
31 | 30 |
import org.gvsig.tools.dynobject.DelegatedDynObject; |
32 | 31 |
import org.gvsig.tools.dynobject.DynClass; |
33 | 32 |
import org.gvsig.tools.dynobject.DynField; |
33 |
import org.gvsig.tools.dynobject.DynField_v2; |
|
34 | 34 |
import org.gvsig.tools.dynobject.DynMethod; |
35 | 35 |
import org.gvsig.tools.dynobject.DynObject; |
36 |
import org.gvsig.tools.dynobject.DynObjectManager; |
|
37 | 36 |
import org.gvsig.tools.dynobject.DynObjectRuntimeException; |
38 | 37 |
import org.gvsig.tools.dynobject.DynStruct; |
39 | 38 |
import org.gvsig.tools.dynobject.exception.DynFieldNotFoundException; |
... | ... | |
74 | 73 |
|
75 | 74 |
DynField field = dynClass.getDynField(name); |
76 | 75 |
if( field != null ) { |
76 |
if( field instanceof DynField_v2 && ((DynField_v2)field).isCalculated() ) { |
|
77 |
return ((DynField_v2)field).getCalculatedValue(this); |
|
78 |
} |
|
77 | 79 |
if( values.containsKey(name) ) { |
78 | 80 |
return values.get(name); |
79 | 81 |
} |
... | ... | |
210 | 212 |
this.delegateds = newValues; |
211 | 213 |
} |
212 | 214 |
|
213 |
public Object invokeDynMethod(String name, DynObject context) |
|
215 |
@Override |
|
216 |
public Object invokeDynMethod(String name, Object[] args) |
|
214 | 217 |
throws DynMethodException { |
215 |
throw new IllegalArgumentException("self required");
|
|
218 |
return this.invokeDynMethod(this, name, args);
|
|
216 | 219 |
} |
217 | 220 |
|
218 |
public Object invokeDynMethod(int code, DynObject context) throws DynMethodException { |
|
219 |
throw new IllegalArgumentException("self required"); |
|
221 |
@Override |
|
222 |
public Object invokeDynMethod(int code, Object[] args) throws DynMethodException { |
|
223 |
return this.invokeDynMethod(this, code, args); |
|
220 | 224 |
} |
221 |
|
|
222 |
public Object invokeDynMethod(Object self, String methodName,
|
|
223 |
DynObject context) throws DynMethodException {
|
|
225 |
|
|
226 |
@Override
|
|
227 |
public Object invokeDynMethod(Object self, String methodName, Object[] args) throws DynMethodException {
|
|
224 | 228 |
DynMethod method = this.dynClass.getDynMethod(methodName); |
225 |
if ( method == null ) {
|
|
226 |
if ( delegateds != null ) {
|
|
227 |
for ( int i = 0; i < delegateds.length; i++ ) {
|
|
228 |
try {
|
|
229 |
return delegateds[i].invokeDynMethod(methodName,
|
|
230 |
context);
|
|
231 |
} catch (DynMethodNotSupportedException e) {
|
|
232 |
// continue next delegated
|
|
233 |
}
|
|
229 |
if (method != null) {
|
|
230 |
return method.invoke((DynObject)self, args);
|
|
231 |
}
|
|
232 |
if ( delegateds != null ) {
|
|
233 |
for ( int i = 0; i < delegateds.length; i++ ) {
|
|
234 |
try {
|
|
235 |
return delegateds[i].invokeDynMethod(methodName,args);
|
|
236 |
} catch (DynMethodNotSupportedException e) {
|
|
237 |
// continue next delegated
|
|
234 | 238 |
} |
235 |
|
|
236 | 239 |
} |
237 |
throw new DynMethodNotSupportedException(methodName, self |
|
238 |
.getClass().getName()); |
|
239 |
|
|
240 | 240 |
} |
241 |
return method.invoke(self, context);
|
|
241 |
throw new DynMethodNotSupportedException(methodName, self.getClass().getName());
|
|
242 | 242 |
} |
243 | 243 |
|
244 |
public Object invokeDynMethod(Object self, int methodCode, DynObject context) throws DynMethodException { |
|
244 |
@Override |
|
245 |
public Object invokeDynMethod(Object self, int methodCode, Object[] args) throws DynMethodException { |
|
245 | 246 |
DynMethod method = this.dynClass.getDynMethod(methodCode); |
246 |
if ( method == null ) {
|
|
247 |
if ( delegateds != null ) {
|
|
248 |
for ( int i = 0; i < delegateds.length; i++ ) {
|
|
249 |
try {
|
|
250 |
return delegateds[i].invokeDynMethod(methodCode,
|
|
251 |
context);
|
|
252 |
} catch (DynMethodNotSupportedException e) {
|
|
253 |
// continue next delegated
|
|
254 |
}
|
|
247 |
if (method != null) {
|
|
248 |
return method.invoke((DynObject)self, args);
|
|
249 |
}
|
|
250 |
if ( delegateds != null ) {
|
|
251 |
for ( int i = 0; i < delegateds.length; i++ ) {
|
|
252 |
try {
|
|
253 |
return delegateds[i].invokeDynMethod(methodCode,args);
|
|
254 |
} catch (DynMethodNotSupportedException e) {
|
|
255 |
// continue next delegated
|
|
255 | 256 |
} |
256 |
throw new DynMethodNotSupportedException(methodCode, self |
|
257 |
.getClass().getName()); |
|
258 |
|
|
259 |
} else { |
|
260 |
throw new DynMethodNotSupportedException(methodCode, self |
|
261 |
.getClass().getName()); |
|
262 | 257 |
} |
263 | 258 |
} |
264 |
DynObjectManager manager = ToolsLocator.getDynObjectManager(); |
|
265 |
return manager.invokeDynMethod(self, methodCode, context); |
|
259 |
throw new DynMethodNotSupportedException(methodCode, self.getClass().getName()); |
|
266 | 260 |
} |
267 | 261 |
|
268 | 262 |
public void clear() { |
Also available in: Unified diff