Author: mes
Date: 2011-06-13 16:46:39 -0700 (Mon, 13 Jun 2011)
New Revision: 25738
Modified:
core3/event-impl/branches/nagling-events/impl/src/main/java/org/cytoscape/event/internal/CyEventHelperImpl.java
core3/event-impl/branches/nagling-events/impl/src/main/java/org/cytoscape/event/internal/CyListenerAdapter.java
core3/event-impl/branches/nagling-events/impl/src/main/java/org/cytoscape/event/internal/PayloadAccumulator.java
Log:
closer to working correctly
Modified:
core3/event-impl/branches/nagling-events/impl/src/main/java/org/cytoscape/event/internal/CyEventHelperImpl.java
===================================================================
---
core3/event-impl/branches/nagling-events/impl/src/main/java/org/cytoscape/event/internal/CyEventHelperImpl.java
2011-06-13 21:26:30 UTC (rev 25737)
+++
core3/event-impl/branches/nagling-events/impl/src/main/java/org/cytoscape/event/internal/CyEventHelperImpl.java
2011-06-13 23:46:39 UTC (rev 25738)
@@ -39,6 +39,7 @@
import org.cytoscape.event.CyEventHelper;
import java.util.Collection;
+import java.util.Collections;
import java.util.Map;
import java.util.HashMap;
import java.lang.reflect.Constructor;
@@ -60,13 +61,13 @@
public CyEventHelperImpl(final CyListenerAdapter normal) {
this.normal = normal;
- sourceAccMap = new
HashMap<Object,Map<Class<?>,PayloadAccumulator<?,?,?>>>();
+ sourceAccMap = Collections.synchronizedMap( new
HashMap<Object,Map<Class<?>,PayloadAccumulator<?,?,?>>>());
payloadEventMonitor =
Executors.newSingleThreadScheduledExecutor();
final Runnable firingAgent = new Runnable() {
public void run() {
- firePayloadEvents();
+ forceFirePayloadEvents();
}
};
payloadEventMonitor.scheduleAtFixedRate(firingAgent, 100, 100,
TimeUnit.MILLISECONDS);
@@ -74,6 +75,7 @@
@Override
public <E extends CyEvent<?>> void fireEvent(final E event) {
+ System.out.println("firing event: " + event);
normal.fireEvent(event);
}
@@ -96,6 +98,7 @@
@Override
public <S,P,E extends CyPayloadEvent<S,P>> void addEventPayload(S
source, P payload, Class<E> eventType) {
+ System.out.println("addEventPayload: " + source + " " +
payload + " " + eventType);
if ( payload == null || source == null || eventType == null) {
logger.warn("improperly specified payload event with
source: " + source +
" with payload: " + payload +
@@ -105,8 +108,9 @@
Map<Class<?>,PayloadAccumulator<?,?,?>> cmap =
sourceAccMap.get(source);
if ( cmap == null ) {
- cmap = new
HashMap<Class<?>,PayloadAccumulator<?,?,?>>();
+ cmap = Collections.synchronizedMap(new
HashMap<Class<?>,PayloadAccumulator<?,?,?>>());
sourceAccMap.put(source,cmap);
+ System.out.println(" adding source to map: " + source);
}
PayloadAccumulator<S,P,E> acc = (PayloadAccumulator<S,P,E>)
cmap.get(eventType);
@@ -115,22 +119,29 @@
try {
acc = new PayloadAccumulator<S,P,E>(source,
eventType);
cmap.put(eventType,acc);
+ System.out.println(" adding accumulator: " +
source + " " + eventType);
} catch (NoSuchMethodException nsme) {
logger.warn("Unable to add payload to event,
because of missing event constructor.", nsme);
return;
}
}
+ System.out.println(" addEventPayload: " + source + " " +
payload + " " + eventType);
acc.addPayload(payload);
}
- private void firePayloadEvents() {
+ public void forceFirePayloadEvents() {
+// System.out.println("forceFirePayloadEvents in thread: " +
Thread.currentThread());
for ( Object source : sourceAccMap.keySet() ) {
+// System.out.println(" examining source: " + source);
for ( PayloadAccumulator<?,?,?> acc :
sourceAccMap.get(source).values() ) {
+// System.out.println(" found accumulator: "
+ acc);
try {
CyPayloadEvent<?,?> event =
acc.newEventInstance( source );
- if ( event != null )
+ if ( event != null ) {
+ System.out.println("
-----------force firing event: " + event);
fireEvent(event);
+ }
} catch (Exception ie) {
logger.warn("Couldn't instantiate event
for source: " + source, ie);
}
Modified:
core3/event-impl/branches/nagling-events/impl/src/main/java/org/cytoscape/event/internal/CyListenerAdapter.java
===================================================================
---
core3/event-impl/branches/nagling-events/impl/src/main/java/org/cytoscape/event/internal/CyListenerAdapter.java
2011-06-13 21:26:30 UTC (rev 25737)
+++
core3/event-impl/branches/nagling-events/impl/src/main/java/org/cytoscape/event/internal/CyListenerAdapter.java
2011-06-13 23:46:39 UTC (rev 25738)
@@ -89,10 +89,10 @@
return;
}
- if ( event.synchronousOnly() )
+ // if ( event.synchronousOnly() )
fireSynchronousEvent(event,listenerClass,listeners);
- else
- fireAsynchronousEvent(event,listenerClass,listeners);
+ // else
+ // fireAsynchronousEvent(event,listenerClass,listeners);
}
Modified:
core3/event-impl/branches/nagling-events/impl/src/main/java/org/cytoscape/event/internal/PayloadAccumulator.java
===================================================================
---
core3/event-impl/branches/nagling-events/impl/src/main/java/org/cytoscape/event/internal/PayloadAccumulator.java
2011-06-13 21:26:30 UTC (rev 25737)
+++
core3/event-impl/branches/nagling-events/impl/src/main/java/org/cytoscape/event/internal/PayloadAccumulator.java
2011-06-13 23:46:39 UTC (rev 25738)
@@ -12,13 +12,26 @@
private List<P> payloadList;
private final Constructor<E> constructor;
+ private Class<?> sourceClass;
PayloadAccumulator(S source, Class<E> eventType) throws
NoSuchMethodException {
- constructor = eventType.getConstructor(source.getClass(),
Collection.class);
+ System.out.println(" payload accumulator: source.getClass(): "
+ source + " " + source.getClass());
+
+ for ( Constructor<?> cons : eventType.getConstructors() ) {
+ Class<?>[] params = cons.getParameterTypes();
+ if ( params.length == 2 && params[1] ==
Collection.class ) {
+ sourceClass = params[0];
+ }
+ }
+
+ if ( sourceClass == null )
+ throw new IllegalArgumentException("no valid source
class found!");
+
+ constructor = eventType.getConstructor(sourceClass,
Collection.class);
payloadList = new ArrayList<P>();
}
- E newEventInstance(Object source) throws InstantiationException,
IllegalAccessException, InvocationTargetException {
+ E newEventInstance(Object source) throws InstantiationException,
IllegalAccessException, InvocationTargetException, ClassCastException {
if ( source == null )
return null;
@@ -27,7 +40,7 @@
if ( coll == null )
return null;
- return constructor.newInstance( source, coll );
+ return constructor.newInstance( sourceClass.cast(source), coll
);
}
synchronized void addPayload(P t) {
--
You received this message because you are subscribed to the Google Groups
"cytoscape-cvs" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/cytoscape-cvs?hl=en.