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