Author: michiel
Date: 2010-04-20 15:12:18 +0200 (Tue, 20 Apr 2010)
New Revision: 41973

Modified:
   
mmbase/branches/MMBase-1_9/core/src/main/java/org/mmbase/core/event/EventManager.java
   
mmbase/branches/MMBase-1_9/core/src/main/java/org/mmbase/core/event/SystemEvent.java
   
mmbase/branches/MMBase-1_9/core/src/main/java/org/mmbase/module/core/MMBaseContext.java
   
mmbase/branches/MMBase-1_9/core/src/main/java/org/mmbase/module/corebuilders/TypeRel.java
Log:
MMB-1653 (default searchdir)

Modified: 
mmbase/branches/MMBase-1_9/core/src/main/java/org/mmbase/core/event/EventManager.java
===================================================================
--- 
mmbase/branches/MMBase-1_9/core/src/main/java/org/mmbase/core/event/EventManager.java
       2010-04-20 13:11:39 UTC (rev 41972)
+++ 
mmbase/branches/MMBase-1_9/core/src/main/java/org/mmbase/core/event/EventManager.java
       2010-04-20 13:12:18 UTC (rev 41973)
@@ -30,7 +30,7 @@
  * @since   MMBase-1.8
  * @version $Id$
  */
-public class EventManager {
+public class EventManager implements SystemEventListener {
 
     private static final Logger log = 
Logging.getLoggerInstance(EventManager.class);
 
@@ -51,6 +51,7 @@
      * The collection of event brokers. There is one for every event type that 
can be sent/received
      */
     private final Set<EventBroker> eventBrokers = new 
CopyOnWriteArraySet<EventBroker>();
+    private final List<SystemEvent.Collectable> receivedSystemEvents = new 
ArrayList<SystemEvent.Collectable>();
 
     private long numberOfPropagatedEvents = 0;
     private long duration = 0;
@@ -62,7 +63,13 @@
         return eventManager;
     }
 
+    public synchronized void notify(SystemEvent se) {
+        if (se instanceof SystemEvent.Collectable) {
+            receivedSystemEvents.add((SystemEvent.Collectable) se);
+        }
+    }
 
+
     protected ResourceWatcher watcher = new ResourceWatcher() {
             public void onChange(String w) {
                 configure(w);
@@ -112,6 +119,7 @@
             log.fatal("No event brokers could not be found. This means that 
query-invalidation does not work correctly now. Proceeding anyway.");
             return;
         }
+        addEventListener(this);
     }
 
     /**
@@ -156,6 +164,11 @@
         while (i.hasNext()) {
             EventBroker broker = i.next();
             if (broker.addListener(listener)) {
+                if (listener instanceof SystemEventListener) {
+                    for (SystemEvent.Collectable se : receivedSystemEvents) {
+                        ((SystemEventListener) listener).notify(se);
+                    }
+                }
                 if (log.isDebugEnabled()) {
                     log.debug("listener " + listener + " added to broker " + 
broker );
                 }

Modified: 
mmbase/branches/MMBase-1_9/core/src/main/java/org/mmbase/core/event/SystemEvent.java
===================================================================
--- 
mmbase/branches/MMBase-1_9/core/src/main/java/org/mmbase/core/event/SystemEvent.java
        2010-04-20 13:11:39 UTC (rev 41972)
+++ 
mmbase/branches/MMBase-1_9/core/src/main/java/org/mmbase/core/event/SystemEvent.java
        2010-04-20 13:12:18 UTC (rev 41973)
@@ -25,16 +25,39 @@
     }
 
     /**
+     * A SystemEvent that is also Collectable will be collected by the 
EventManger and also issued to EventListeners which are added after the event
+     * happened.
+     */
+    public static abstract class  Collectable extends SystemEvent {
+    }
+
+    /**
      * Notifies that the local MMBase is now fully up and running
      */
-    public static class Up extends SystemEvent {
+    public static class Up extends Collectable {
     }
 
+
+    public static class ServletContext extends Collectable  {
+        private final javax.servlet.ServletContext servletContext;
+        public ServletContext(javax.servlet.ServletContext sc) {
+            servletContext = sc;
+        }
+        public javax.servlet.ServletContext getServletContext() {
+            return servletContext;
+        }
+    }
+
+
     static {
         SystemEventListener logger = new SystemEventListener() {
                 public void notify(SystemEvent s) {
                     LOG.service(" Received " + s);
                 }
+                @Override
+                public String toString() {
+                    return "SystemEventLogger";
+                }
             };
         EventManager.getInstance().addEventListener(logger);
     }

Modified: 
mmbase/branches/MMBase-1_9/core/src/main/java/org/mmbase/module/core/MMBaseContext.java
===================================================================
--- 
mmbase/branches/MMBase-1_9/core/src/main/java/org/mmbase/module/core/MMBaseContext.java
     2010-04-20 13:11:39 UTC (rev 41972)
+++ 
mmbase/branches/MMBase-1_9/core/src/main/java/org/mmbase/module/core/MMBaseContext.java
     2010-04-20 13:12:18 UTC (rev 41973)
@@ -14,6 +14,7 @@
 import javax.servlet.*;
 import java.text.DateFormat;
 
+import org.mmbase.core.event.*;
 import org.mmbase.core.util.DaemonTask;
 import org.mmbase.core.util.DaemonThread;
 import org.mmbase.util.ResourceLoader;
@@ -66,6 +67,8 @@
 
             // store the current context
             sx = servletContext;
+            EventManager.getInstance().propagateEvent(new 
SystemEvent.ServletContext(sx));
+
             // Get the user directory using the user.dir property.
             // default set to the startdir of the appserver
             userDir = sx.getInitParameter("user.dir");

Modified: 
mmbase/branches/MMBase-1_9/core/src/main/java/org/mmbase/module/corebuilders/TypeRel.java
===================================================================
--- 
mmbase/branches/MMBase-1_9/core/src/main/java/org/mmbase/module/corebuilders/TypeRel.java
   2010-04-20 13:11:39 UTC (rev 41972)
+++ 
mmbase/branches/MMBase-1_9/core/src/main/java/org/mmbase/module/corebuilders/TypeRel.java
   2010-04-20 13:12:18 UTC (rev 41973)
@@ -11,12 +11,12 @@
 
 import java.util.*;
 
+import javax.servlet.ServletContext;
 import org.mmbase.bridge.Field;
 import org.mmbase.util.*;
 import org.mmbase.module.core.*;
 import org.mmbase.core.CoreField;
-import org.mmbase.core.event.Event;
-import org.mmbase.core.event.NodeEvent;
+import org.mmbase.core.event.*;
 import org.mmbase.core.util.Fields;
 import org.mmbase.cache.*;
 import org.mmbase.storage.search.implementation.BasicRelationStep;
@@ -42,7 +42,7 @@
  * @see InsRel
  * @see org.mmbase.module.core.MMBase
  */
-public class TypeRel extends MMObjectBuilder {
+public class TypeRel extends MMObjectBuilder implements SystemEventListener {
 
     private static final Logger log = Logging.getLoggerInstance(TypeRel.class);
 
@@ -81,18 +81,32 @@
 
     public InverseTypeRelSet inverseTypeRelNodes; // for searching sources
 
+    private int defaultRelationStepDirection = RelationStep.DIRECTIONS_BOTH;
+
     public boolean init() {
         if (oType != -1) return true;
         super.init();
-        // during init not yet all builder are available so inhertiance is not
+        // during init not yet all builder are available so inheritance is not
         // yet possible
         // This means that calls to getAllowedRelations do not consider
         // inheritance during initializion of MMBase.
         // This occurs e.g. in one of the Community-builders.
         readCache(false);
+        EventManager.getInstance().addEventListener(this);
         return true;
     }
 
+    public void notify(SystemEvent se) {
+        if (se instanceof SystemEvent.ServletContext) {
+            ServletContext sx = ((SystemEvent.ServletContext) 
se).getServletContext();
+            String def = 
sx.getInitParameter("mmbase.defaultRelationStepDirection");
+            if (def != null && def.length() > 0) {
+                defaultRelationStepDirection = 
org.mmbase.bridge.util.Queries.getRelationStepDirection(def);
+                log.info("Found default relation step direction " + def);
+            }
+        }
+    }
+
     /**
      * The TypeRel cache contains all TypeRels MMObjectNodes. Called after 
init by MMBase, and when
      * something changes.
@@ -576,7 +590,9 @@
             if (sourceToDestination) {
                 // there is ALSO a typed relation from src to destination - 
make
                 // a more complex query
-                relationStep.setDirectionality(RelationStep.DIRECTIONS_BOTH);
+                // http://www.mmbase.org/jira/browse/MMB-1653
+
+                relationStep.setDirectionality(defaultRelationStepDirection);
             } else {
                 // there is ONLY a typed relation from destination to src -
                 // optimized query

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

Reply via email to