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.

Reply via email to