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