/** * Constructor. * * @param fastMethod is the method to use to retrieve a value from the object * @param index is tge index within the array to get the property from * @param eventAdapterService factory for event beans and event types */ public ArrayFastPropertyGetter( FastMethod fastMethod, int index, EventAdapterService eventAdapterService) { super(eventAdapterService, fastMethod.getReturnType().getComponentType(), null); this.index = index; this.fastMethod = fastMethod; if (index < 0) { throw new IllegalArgumentException("Invalid negative index value"); } }
/** * Ctor. * * @param eventAdapterService for generating event beans * @param method the method to invoke * @param useMapType is true to indicate that Map-events are generated * @param eventType is the event type to use */ public MethodPollingExecStrategy( EventAdapterService eventAdapterService, FastMethod method, boolean useMapType, EventType eventType) { this.eventAdapterService = eventAdapterService; this.method = method; this.isArray = method.getReturnType().isArray(); this.useMapType = useMapType; this.eventType = eventType; }
public Object getValue(Object instance) { try { if (getter != null) { return getter.invoke(instance, new Object[] {}); } return field.get(instance); } catch (Exception e) { // todo is it good? throw new RuntimeException(e); } }
public void setValue(Object instance, Object newValue) { try { if (setter != null) { setter.invoke(instance, new Object[] {newValue}); return; } field.set(instance, newValue); } catch (Exception e) { // todo impl is is good? throw new RuntimeException(e); } }
private Object getBeanPropInternal(Object object, int index) throws PropertyAccessException { try { Object value = fastMethod.invoke(object, null); if (Array.getLength(value) <= index) { return null; } return Array.get(value, index); } catch (ClassCastException e) { throw new PropertyAccessException("Mismatched getter instance to event bean type"); } catch (InvocationTargetException e) { throw new PropertyAccessException(e); } }
public List<EventBean> poll(Object[] lookupValues) { List<EventBean> rowResult = null; try { Object invocationResult = method.invoke(null, lookupValues); if (invocationResult != null) { if (isArray) { int length = Array.getLength(invocationResult); if (length > 0) { rowResult = new ArrayList<EventBean>(); for (int i = 0; i < length; i++) { Object value = Array.get(invocationResult, i); if (value == null) { log.warn( "Expected non-null return result from method '" + method.getName() + "', but received null value"); continue; } EventBean theEvent; if (useMapType) { if (!(value instanceof Map)) { log.warn( "Expected Map-type return result from method '" + method.getName() + "', but received type '" + value.getClass() + "'"); continue; } Map mapValues = (Map) value; theEvent = eventAdapterService.adapterForTypedMap(mapValues, eventType); } else { theEvent = eventAdapterService.adapterForBean(value); } rowResult.add(theEvent); } } } else { rowResult = new LinkedList<EventBean>(); EventBean theEvent; if (useMapType) { if (!(invocationResult instanceof Map)) { log.warn( "Expected Map-type return result from method '" + method.getName() + "', but received type '" + invocationResult.getClass() + "'"); } else { Map mapValues = (Map) invocationResult; theEvent = eventAdapterService.adapterForTypedMap(mapValues, eventType); rowResult.add(theEvent); } } else { theEvent = eventAdapterService.adapterForBean(invocationResult); rowResult.add(theEvent); } } } } catch (InvocationTargetException ex) { throw new EPException( "Method '" + method.getName() + "' of class '" + method.getJavaMethod().getDeclaringClass().getName() + "' reported an exception: " + ex.getTargetException(), ex.getTargetException()); } return rowResult; }
public String toString() { return "ArrayFastPropertyGetter " + " fastMethod=" + fastMethod.toString() + " index=" + index; }
protected void handleSignalInternal(EPDataFlowSignal signal) throws InvocationTargetException { fastMethod.invoke(target, new Object[] {signal}); }