You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by tc...@apache.org on 2005/10/06 15:25:30 UTC
svn commit: r306637 -
/cocoon/trunk/src/java/org/apache/cocoon/components/treeprocessor/TreeProcessor.java
Author: tcurdt
Date: Thu Oct 6 06:25:18 2005
New Revision: 306637
URL: http://svn.apache.org/viewcvs?rev=306637&view=rev
Log:
started refactoring
Modified:
cocoon/trunk/src/java/org/apache/cocoon/components/treeprocessor/TreeProcessor.java
Modified: cocoon/trunk/src/java/org/apache/cocoon/components/treeprocessor/TreeProcessor.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/java/org/apache/cocoon/components/treeprocessor/TreeProcessor.java?rev=306637&r1=306636&r2=306637&view=diff
==============================================================================
--- cocoon/trunk/src/java/org/apache/cocoon/components/treeprocessor/TreeProcessor.java (original)
+++ cocoon/trunk/src/java/org/apache/cocoon/components/treeprocessor/TreeProcessor.java Thu Oct 6 06:25:18 2005
@@ -16,6 +16,7 @@
package org.apache.cocoon.components.treeprocessor;
import java.io.File;
+import java.io.IOException;
import java.net.URL;
import java.util.Collections;
import java.util.HashMap;
@@ -37,6 +38,7 @@
import org.apache.avalon.framework.service.ServiceManager;
import org.apache.avalon.framework.service.Serviceable;
import org.apache.avalon.framework.thread.ThreadSafe;
+import org.apache.cocoon.ProcessingException;
import org.apache.cocoon.Processor;
import org.apache.cocoon.components.ContextHelper;
import org.apache.cocoon.components.classloader.ClassLoaderFactory;
@@ -63,6 +65,7 @@
import org.apache.excalibur.source.Source;
import org.apache.excalibur.source.SourceResolver;
import org.apache.regexp.RE;
+import org.xml.sax.SAXException;
/**
* Interpreted tree-traversal implementation of a pipeline assembly language.
@@ -561,6 +564,69 @@
}
+ private Configuration createSitemapProgram(Source source) throws ProcessingException, SAXException, IOException {
+ NamespacedSAXConfigurationHandler handler = new NamespacedSAXConfigurationHandler();
+ AnnotationsFilter annotationsFilter = new AnnotationsFilter(handler);
+ SourceUtil.toSAX(source, annotationsFilter);
+ return handler.getConfiguration();
+ }
+
+ private void subscribeListeners(Map listerens, ConcreteTreeProcessor processor) {
+ if (getLogger().isDebugEnabled()) {
+ getLogger().debug("setting up listeners " + listerens);
+ }
+ for (final Iterator it = listerens.values().iterator(); it.hasNext();) {
+ final NotifyingListener newListener = (NotifyingListener) it.next();
+
+ newListener.setNotificationListener(processor);
+
+ fam.subscribe(newListener);
+ }
+ }
+
+ private void unsubscribeListeners(Map listerens) {
+ if (listerens != null && listerens.size() > 0) {
+ if (getLogger().isDebugEnabled()) {
+ getLogger().debug("unsubscribing " + listerens + " from fam");
+ }
+ for (final Iterator it = listerens.values().iterator(); it.hasNext();) {
+ final FilesystemAlterationListener oldListener = (FilesystemAlterationListener) it.next();
+ fam.unsubscribe(oldListener);
+ }
+ }
+ }
+
+ private void waitForInitialCompilation(Map listeners) throws Exception {
+ if (listeners.size() > 0) {
+ // wait for the new ones to complete for the first time
+ for (final Iterator it = listeners.values().iterator(); it.hasNext();) {
+ final NotifyingListener newListener = (NotifyingListener) it.next();
+ if (getLogger().isDebugEnabled()) {
+ getLogger().debug("waiting for initial compilation");
+ }
+ newListener.waitForFirstCheck();
+ }
+ }
+ }
+
+ private void provideClasses(Map listeners, ClassLoader classloader) {
+ for (final Iterator it = listeners.values().iterator(); it.hasNext();) {
+ final NotifyingListener newListener = (NotifyingListener) it.next();
+
+ if (newListener instanceof ResourceStoringListener) {
+ ResourceStoringListener l = (ResourceStoringListener)newListener;
+ if (classloader instanceof ReloadingClassLoaderFactory.DefaultClassLoader) {
+ if (getLogger().isDebugEnabled()) {
+ getLogger().debug("adding store " + l.getStore() + " to classloader");
+ }
+ ReloadingClassLoaderFactory.DefaultClassLoader cl = (ReloadingClassLoaderFactory.DefaultClassLoader) classloader;
+ cl.addResourceStore(l.getStore());
+ }
+ }
+ }
+ }
+
+
/**
* Build the concrete processor (i.e. loads the sitemap). Should be called
* only by setupProcessor();
@@ -603,11 +669,7 @@
try {
- // Build a namespace-aware configuration object
- NamespacedSAXConfigurationHandler handler = new NamespacedSAXConfigurationHandler();
- AnnotationsFilter annotationsFilter = new AnnotationsFilter(handler);
- SourceUtil.toSAX(this.source, annotationsFilter);
- Configuration sitemapProgram = handler.getConfiguration();
+ Configuration sitemapProgram = createSitemapProgram(this.source);
newLastModified = this.source.getLastModified();
newProcessor = createConcreteTreeProcessor();
@@ -622,52 +684,18 @@
Thread.currentThread().setContextClassLoader(classloader);
newListeners = createClasspathListeners(oldListeners, classpathConfig);
+
newProcessor.setClasspathListeners(newListeners);
- if (getLogger().isDebugEnabled()) {
- getLogger().debug("setting up listeners " + newListeners);
- }
- for (final Iterator it = newListeners.values().iterator(); it.hasNext();) {
- final NotifyingListener newListener = (NotifyingListener) it.next();
-
- newListener.setNotificationListener(newProcessor);
-
- fam.subscribe(newListener);
-
- if (newListener instanceof ResourceStoringListener) {
- ResourceStoringListener l = (ResourceStoringListener)newListener;
- if (classloader instanceof ReloadingClassLoaderFactory.DefaultClassLoader) {
- if (getLogger().isDebugEnabled()) {
- getLogger().debug("adding store " + l.getStore() + " to classloader");
- }
- ReloadingClassLoaderFactory.DefaultClassLoader cl = (ReloadingClassLoaderFactory.DefaultClassLoader) classloader;
- cl.addResourceStore(l.getStore());
- }
- }
- }
+ subscribeListeners(newListeners, newProcessor);
+
+ provideClasses(newListeners, classloader);
}
- if (oldListeners != null && oldListeners.size() > 0) {
- if (getLogger().isDebugEnabled()) {
- getLogger().debug("unsubscribing " + oldListeners + " from fam");
- }
- for (final Iterator it = oldListeners.values().iterator(); it.hasNext();) {
- final FilesystemAlterationListener oldListener = (FilesystemAlterationListener) it.next();
- fam.unsubscribe(oldListener);
- }
- }
+ unsubscribeListeners(oldListeners);
+
+ waitForInitialCompilation(newListeners);
-
- if (newListeners.size() > 0) {
- // wait for the new ones to complete for the first time
- for (final Iterator it = newListeners.values().iterator(); it.hasNext();) {
- final NotifyingListener newListener = (NotifyingListener) it.next();
- if (getLogger().isDebugEnabled()) {
- getLogger().debug("waiting for initial compilation");
- }
- newListener.waitForFirstCheck();
- }
- }
// Get the treebuilder that can handle this version of the sitemap.
TreeBuilder treeBuilder = getTreeBuilder(sitemapProgram);