Author: michiel
Date: 2010-04-02 18:06:53 +0200 (Fri, 02 Apr 2010)
New Revision: 41744

Added:
   mmbase/trunk/utils/src/main/java/org/mmbase/core/event/IdEvent.java
   mmbase/trunk/utils/src/main/java/org/mmbase/core/event/IdEventBroker.java
   mmbase/trunk/utils/src/main/java/org/mmbase/core/event/IdEventListener.java
   mmbase/trunk/utils/src/main/java/org/mmbase/core/event/LocalEvent.java
   
mmbase/trunk/utils/src/main/java/org/mmbase/core/event/UnsupportedEventException.java
   mmbase/trunk/utils/src/main/java/org/mmbase/core/event/WeakEventBroker.java
Log:
moved some more event stuff from core

Copied: mmbase/trunk/utils/src/main/java/org/mmbase/core/event/IdEvent.java 
(from rev 41739, 
mmbase/trunk/core/src/main/java/org/mmbase/core/event/IdEvent.java)
===================================================================
--- mmbase/trunk/utils/src/main/java/org/mmbase/core/event/IdEvent.java         
                (rev 0)
+++ mmbase/trunk/utils/src/main/java/org/mmbase/core/event/IdEvent.java 
2010-04-02 16:06:53 UTC (rev 41744)
@@ -0,0 +1,41 @@
+/*
+ * This software is OSI Certified Open Source Software.
+ * OSI Certified is a certification mark of the Open Source Initiative. The
+ * license (Mozilla version 1.0) can be read at the MMBase site. See
+ * http://www.MMBase.org/license
+ */
+package org.mmbase.core.event;
+
+
+/**
+ * Very generic event type, which only adds an 'id' property. This can be used 
for events on all
+ * kind of objects which are somehow identified by an ID. Of course, the 
default event types like
+ * 'NEW', 'CHANGE' and 'DELETE' can very well make sense.
+ *
+ * @author  Michiel Meeuwissen
+ * @since   MMBase-1.8
+ * @version $Id$
+ */
+public class IdEvent extends Event  {
+
+
+    private static final long serialVersionUID = 1L;
+
+    private final String id;
+
+
+    public IdEvent(String machineName, int type, String id) {
+        super(machineName, type);
+        this.id = id;
+    }
+
+
+    public String getId() {
+        return id;
+    }
+
+    public String toString() {
+        return id + " " + eventType;
+    }
+
+}

Copied: 
mmbase/trunk/utils/src/main/java/org/mmbase/core/event/IdEventBroker.java (from 
rev 41739, 
mmbase/trunk/core/src/main/java/org/mmbase/core/event/IdEventBroker.java)
===================================================================
--- mmbase/trunk/utils/src/main/java/org/mmbase/core/event/IdEventBroker.java   
                        (rev 0)
+++ mmbase/trunk/utils/src/main/java/org/mmbase/core/event/IdEventBroker.java   
2010-04-02 16:06:53 UTC (rev 41744)
@@ -0,0 +1,47 @@
+/*
+ * This software is OSI Certified Open Source Software.
+ * OSI Certified is a certification mark of the Open Source Initiative. The
+ * license (Mozilla version 1.0) can be read at the MMBase site. See
+ * http://www.MMBase.org/license
+ */
+package org.mmbase.core.event;
+
+/**
+ * This class is the event broker implementation for the NodeEvent
+ *
+ * @author Michiel Meeuwissen
+ * @since MMBase-1.8
+ * @version $Id$
+ */
+public class IdEventBroker extends AbstractEventBroker {
+
+
+    // javadoc inherited
+    public boolean canBrokerForListener(EventListener listener) {
+        return listener instanceof IdEventListener;
+    }
+
+    // javadoc inherited
+    public boolean canBrokerForEvent(Event event) {
+        return event instanceof IdEvent;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see event.AbstractEventBroker#notifyEventListeners()
+     */
+    protected void notifyEventListener(Event event, EventListener listener) {
+        IdEvent ne = (IdEvent) event; //!!!!!
+        IdEventListener nel = (IdEventListener) listener;
+        nel.notify(ne);
+    }
+
+    /* (non-Javadoc)
+     * @see org.mmbase.core.event.AbstractEventBroker#toString()
+     */
+    public String toString() {
+        return "IdEvent Broker";
+    }
+
+}

Copied: 
mmbase/trunk/utils/src/main/java/org/mmbase/core/event/IdEventListener.java 
(from rev 41739, 
mmbase/trunk/core/src/main/java/org/mmbase/core/event/IdEventListener.java)
===================================================================
--- mmbase/trunk/utils/src/main/java/org/mmbase/core/event/IdEventListener.java 
                        (rev 0)
+++ mmbase/trunk/utils/src/main/java/org/mmbase/core/event/IdEventListener.java 
2010-04-02 16:06:53 UTC (rev 41744)
@@ -0,0 +1,18 @@
+/*
+ * This software is OSI Certified Open Source Software.
+ * OSI Certified is a certification mark of the Open Source Initiative. The
+ * license (Mozilla version 1.0) can be read at the MMBase site. See
+ * http://www.MMBase.org/license
+ */
+package org.mmbase.core.event;
+
+/**
+ * This is the listener interface for id events
+ * 
+ * @author Michiel Meeuwissen
+ * @since MMBase-1.8
+ * @version $Id$
+ */
+public interface IdEventListener extends EventListener {
+    public void notify(IdEvent event);
+}

Copied: mmbase/trunk/utils/src/main/java/org/mmbase/core/event/LocalEvent.java 
(from rev 41739, 
mmbase/trunk/core/src/main/java/org/mmbase/core/event/LocalEvent.java)
===================================================================
--- mmbase/trunk/utils/src/main/java/org/mmbase/core/event/LocalEvent.java      
                        (rev 0)
+++ mmbase/trunk/utils/src/main/java/org/mmbase/core/event/LocalEvent.java      
2010-04-02 16:06:53 UTC (rev 41744)
@@ -0,0 +1,24 @@
+/*
+ * This software is OSI Certified Open Source Software.
+ * OSI Certified is a certification mark of the Open Source Initiative. The
+ * license (Mozilla version 1.0) can be read at the MMBase site. See
+ * http://www.MMBase.org/license
+ */
+package org.mmbase.core.event;
+
+
+/**
+ * An event that does not need broadcasting to other servers
+ *
+ * @author  Michiel Meeuwissen
+ * @since   MMBase-1.9.3
+ * @version $Id: LocalEvent.java 41369 2010-03-15 20:54:45Z michiel $
+ */
+public abstract class LocalEvent extends Event {
+
+    private static final long serialVersionUID = 1L;
+    public LocalEvent() {
+        super(null, TYPE_UNSPECIFIED);
+    }
+
+}

Copied: 
mmbase/trunk/utils/src/main/java/org/mmbase/core/event/UnsupportedEventException.java
 (from rev 41739, 
mmbase/trunk/core/src/main/java/org/mmbase/core/event/UnsupportedEventException.java)
===================================================================
--- 
mmbase/trunk/utils/src/main/java/org/mmbase/core/event/UnsupportedEventException.java
                               (rev 0)
+++ 
mmbase/trunk/utils/src/main/java/org/mmbase/core/event/UnsupportedEventException.java
       2010-04-02 16:06:53 UTC (rev 41744)
@@ -0,0 +1,20 @@
+/*
+This software is OSI Certified Open Source Software.
+OSI Certified is a certification mark of the Open Source Initiative.
+
+The license (Mozilla version 1.0) can be read at the MMBase site.
+See http://www.MMBase.org/license
+
+*/
+package org.mmbase.core.event;
+
+/**
+ * @author Ernst Bunders
+ * @since 1.8
+ * @version $Id$
+ *
+ */
+public class UnsupportedEventException extends Exception {
+
+
+}

Copied: 
mmbase/trunk/utils/src/main/java/org/mmbase/core/event/WeakEventBroker.java 
(from rev 41739, 
mmbase/trunk/core/src/main/java/org/mmbase/core/event/WeakEventBroker.java)
===================================================================
--- mmbase/trunk/utils/src/main/java/org/mmbase/core/event/WeakEventBroker.java 
                        (rev 0)
+++ mmbase/trunk/utils/src/main/java/org/mmbase/core/event/WeakEventBroker.java 
2010-04-02 16:06:53 UTC (rev 41744)
@@ -0,0 +1,72 @@
+/*
+ * This software is OSI Certified Open Source Software.
+ * OSI Certified is a certification mark of the Open Source Initiative. The
+ * license (Mozilla version 1.0) can be read at the MMBase site. See
+ * http://www.MMBase.org/license
+ */
+package org.mmbase.core.event;
+
+import java.util.*;
+
+import org.mmbase.util.logging.Logger;
+import org.mmbase.util.logging.Logging;
+
+/**
+ * An EventBroker which administrates the listeners in a {...@link 
java.util.WeakHashMap}. This means
+ * that such listeners can be garbage collected, even if they are still 
brokered.
+ *
+ * @author Michiel Meeuwissen
+ * @since MMBase-1.8.5
+ * @version $Id$
+ */
+public abstract class WeakEventBroker extends EventBroker {
+
+    private static final Logger log = 
Logging.getLoggerInstance(WeakEventBroker.class);
+
+    private final Map<EventListener, Boolean> listeners = new 
WeakHashMap<EventListener, Boolean>();
+
+    protected Collection<EventListener> backing() {
+        return listeners.keySet();
+    }
+
+    public synchronized boolean addListener(EventListener listener) {
+        if (canBrokerForListener(listener)) {
+            if (listeners.containsKey(listener)) {
+                return false;
+            } else {
+                listeners.put(listener, null);
+                return true;
+            }
+        } else {
+            log.warn("Ignored listener for" + getClass() + " because it cannot 
broker for that.");
+        }
+        return false;
+    }
+
+    public synchronized void removeListener(EventListener listener) {
+        if (! listeners.remove(listener)) {
+            log.warn("Tried to remove " + listener + " from " + getClass()+ " 
but it was not found. Ignored.");
+        }
+
+    }
+    /**
+     * Only adds synchronization, because backing is not concurrency proof.
+     */
+    public synchronized void notifyForEvent(Event event) {
+        super.notifyForEvent(event);
+    }
+
+    public String toString(){
+        return "Weak Event Broker";
+    }
+
+
+    public static void main(String[] argv) {
+        Map<Object, Object> weakSet = new WeakHashMap<Object, Object>();
+        weakSet.put(new Object(), null);
+        System.out.println("set " + weakSet.keySet());
+        Runtime.getRuntime().gc();
+        System.out.println("set " + weakSet.keySet());
+    }
+
+}

_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to