notify-dpml AT lists.ibiblio.org
Subject: DPML Notify
List archive
r978 - in trunk/main: central/src/docs/metro/runtime/controller depot/library/common/etc/test/dpml metro/exec/src/main/net/dpml/metro/exec metro/model/src/main/net/dpml/metro metro/part/api/src/main/net/dpml/part metro/part/api/src/main/net/dpml/part/local metro/part/api/src/main/net/dpml/part/remote metro/part/content/src/main/net/dpml/part/content metro/part/test/src/test/net/dpml/test/part metro/runtime/src/main/net/dpml/metro/runtime metro/station/api/src/main/net/dpml/station metro/station/console/src/main/net/dpml/station/console metro/station/server/src/main/net/dpml/station/server metro/test/src/test/net/dpml/metro/runtime/test metro/tools/src/main/net/dpml/metro/tools planet/http/demo/src/test/net/dpml/http
- From: mcconnell at BerliOS <mcconnell AT mail.berlios.de>
- To: notify-dpml AT lists.ibiblio.org
- Subject: r978 - in trunk/main: central/src/docs/metro/runtime/controller depot/library/common/etc/test/dpml metro/exec/src/main/net/dpml/metro/exec metro/model/src/main/net/dpml/metro metro/part/api/src/main/net/dpml/part metro/part/api/src/main/net/dpml/part/local metro/part/api/src/main/net/dpml/part/remote metro/part/content/src/main/net/dpml/part/content metro/part/test/src/test/net/dpml/test/part metro/runtime/src/main/net/dpml/metro/runtime metro/station/api/src/main/net/dpml/station metro/station/console/src/main/net/dpml/station/console metro/station/server/src/main/net/dpml/station/server metro/test/src/test/net/dpml/metro/runtime/test metro/tools/src/main/net/dpml/metro/tools planet/http/demo/src/test/net/dpml/http
- Date: Thu, 26 Jan 2006 06:56:07 +0100
Author: mcconnell
Date: 2006-01-26 06:55:27 +0100 (Thu, 26 Jan 2006)
New Revision: 978
Added:
trunk/main/metro/part/api/src/main/net/dpml/part/Component.java
trunk/main/metro/part/api/src/main/net/dpml/part/ContextEvent.java
trunk/main/metro/part/api/src/main/net/dpml/part/ContextListener.java
trunk/main/metro/part/api/src/main/net/dpml/part/Controller.java
trunk/main/metro/part/api/src/main/net/dpml/part/ControllerContext.java
trunk/main/metro/part/api/src/main/net/dpml/part/ControllerContextEvent.java
trunk/main/metro/part/api/src/main/net/dpml/part/ControllerContextListener.java
trunk/main/metro/part/api/src/main/net/dpml/part/InitialContext.java
trunk/main/metro/part/api/src/main/net/dpml/part/LocalEventProducer.java
trunk/main/metro/part/api/src/main/net/dpml/part/Model.java
trunk/main/metro/part/api/src/main/net/dpml/part/ModelEvent.java
trunk/main/metro/part/api/src/main/net/dpml/part/ModelException.java
trunk/main/metro/part/api/src/main/net/dpml/part/ModelListener.java
trunk/main/metro/part/api/src/main/net/dpml/part/Provider.java
trunk/main/metro/part/api/src/main/net/dpml/part/Service.java
trunk/main/metro/part/api/src/main/net/dpml/part/UnknownPartException.java
Removed:
trunk/main/metro/part/api/src/main/net/dpml/part/local/Controller.java
trunk/main/metro/part/api/src/main/net/dpml/part/local/ControllerContext.java
trunk/main/metro/part/api/src/main/net/dpml/part/local/ControllerContextEvent.java
trunk/main/metro/part/api/src/main/net/dpml/part/local/ControllerContextListener.java
trunk/main/metro/part/api/src/main/net/dpml/part/local/InitialContext.java
trunk/main/metro/part/api/src/main/net/dpml/part/local/LocalEventProducer.java
trunk/main/metro/part/api/src/main/net/dpml/part/local/UnknownPartException.java
trunk/main/metro/part/api/src/main/net/dpml/part/remote/Component.java
trunk/main/metro/part/api/src/main/net/dpml/part/remote/ContextEvent.java
trunk/main/metro/part/api/src/main/net/dpml/part/remote/ContextListener.java
trunk/main/metro/part/api/src/main/net/dpml/part/remote/Model.java
trunk/main/metro/part/api/src/main/net/dpml/part/remote/ModelEvent.java
trunk/main/metro/part/api/src/main/net/dpml/part/remote/ModelException.java
trunk/main/metro/part/api/src/main/net/dpml/part/remote/ModelListener.java
trunk/main/metro/part/api/src/main/net/dpml/part/remote/Provider.java
trunk/main/metro/part/api/src/main/net/dpml/part/remote/Service.java
Modified:
trunk/main/central/src/docs/metro/runtime/controller/index.xml
trunk/main/depot/library/common/etc/test/dpml/module.xml
trunk/main/metro/exec/src/main/net/dpml/metro/exec/AbstractAdapter.java
trunk/main/metro/exec/src/main/net/dpml/metro/exec/ApplicationHandler.java
trunk/main/metro/exec/src/main/net/dpml/metro/exec/ComponentAdapter.java
trunk/main/metro/model/src/main/net/dpml/metro/ComponentModel.java
trunk/main/metro/model/src/main/net/dpml/metro/ValidationException.java
trunk/main/metro/part/api/src/main/net/dpml/part/ComponentOperations.java
trunk/main/metro/part/content/src/main/net/dpml/part/content/PartContentHandler.java
trunk/main/metro/part/test/src/test/net/dpml/test/part/PartLoadingTestCase.java
trunk/main/metro/runtime/src/main/net/dpml/metro/runtime/ComponentController.java
trunk/main/metro/runtime/src/main/net/dpml/metro/runtime/CompositionController.java
trunk/main/metro/runtime/src/main/net/dpml/metro/runtime/DefaultComponentHandler.java
trunk/main/metro/runtime/src/main/net/dpml/metro/runtime/DefaultComponentModel.java
trunk/main/metro/runtime/src/main/net/dpml/metro/runtime/DefaultContextModel.java
trunk/main/metro/runtime/src/main/net/dpml/metro/runtime/DefaultPartsManager.java
trunk/main/metro/runtime/src/main/net/dpml/metro/runtime/DefaultProvider.java
trunk/main/metro/runtime/src/main/net/dpml/metro/runtime/DefaultService.java
trunk/main/metro/runtime/src/main/net/dpml/metro/runtime/PartsInvocationHandler.java
trunk/main/metro/station/api/src/main/net/dpml/station/Application.java
trunk/main/metro/station/api/src/main/net/dpml/station/Callback.java
trunk/main/metro/station/console/src/main/net/dpml/station/console/StationPlugin.java
trunk/main/metro/station/server/src/main/net/dpml/station/server/RemoteApplication.java
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/AppTestCase.java
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/CategoriesTestCase.java
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/ComponentModelTestCase.java
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/CompositeTestCase.java
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/ConfigTestCase.java
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/ContextModelTestCase.java
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/ContextTestCase.java
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/DefaultComponentHandlerTestCase.java
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/DisposalTestCase.java
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/HardCollectionPolicyTestCase.java
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/LifecycleTestCase.java
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/NullTestCase.java
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/ObserverTestCase.java
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/ParamsTestCase.java
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/PartsTestCase.java
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/ProviderTestCase.java
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/SingletonProviderTestCase.java
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/StateTestCase.java
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/TransientProviderTestCase.java
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/WeakCollectionPolicyTestCase.java
trunk/main/metro/tools/src/main/net/dpml/metro/tools/ClassLoaderBuilderTask.java
trunk/main/metro/tools/src/main/net/dpml/metro/tools/PartDataType.java
trunk/main/planet/http/demo/src/test/net/dpml/http/HttpTestCase.java
Log:
consolidate part api now that internal management concerns have been moved
out of the picture
Modified: trunk/main/central/src/docs/metro/runtime/controller/index.xml
===================================================================
--- trunk/main/central/src/docs/metro/runtime/controller/index.xml
2006-01-26 05:12:05 UTC (rev 977)
+++ trunk/main/central/src/docs/metro/runtime/controller/index.xml
2006-01-26 05:55:27 UTC (rev 978)
@@ -19,7 +19,7 @@
</p>
<p>A reference to the default controller is resolved using the
- <tt>net.dpml.part.local.Controller</tt> interface:</p>
+ <tt>net.dpml.part.Controller</tt> interface:</p>
<pre>Controller controller = <font
color="darkred">Controller.STANDARD</font>;</pre>
Modified: trunk/main/depot/library/common/etc/test/dpml/module.xml
===================================================================
--- trunk/main/depot/library/common/etc/test/dpml/module.xml 2006-01-26
05:12:05 UTC (rev 977)
+++ trunk/main/depot/library/common/etc/test/dpml/module.xml 2006-01-26
05:55:27 UTC (rev 978)
@@ -151,7 +151,7 @@
<types>
<type id="plugin" alias="true">
<property name="project.plugin.class"
- value="net.dpml.part.local.PartManager"/>
+ value="net.dpml.part.PartManager"/>
</type>
<type id="jar"/>
</types>
Modified:
trunk/main/metro/exec/src/main/net/dpml/metro/exec/AbstractAdapter.java
===================================================================
--- trunk/main/metro/exec/src/main/net/dpml/metro/exec/AbstractAdapter.java
2006-01-26 05:12:05 UTC (rev 977)
+++ trunk/main/metro/exec/src/main/net/dpml/metro/exec/AbstractAdapter.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -22,10 +22,10 @@
import java.rmi.server.UnicastRemoteObject;
import java.lang.reflect.InvocationTargetException;
-import net.dpml.part.remote.Component;
+import net.dpml.part.Component;
import net.dpml.part.ControlException;
-import net.dpml.part.remote.Provider;
-import net.dpml.part.remote.Service;
+import net.dpml.part.Provider;
+import net.dpml.part.Service;
import net.dpml.part.ServiceNotFoundException;
import net.dpml.transit.Logger;
Modified:
trunk/main/metro/exec/src/main/net/dpml/metro/exec/ApplicationHandler.java
===================================================================
---
trunk/main/metro/exec/src/main/net/dpml/metro/exec/ApplicationHandler.java
2006-01-26 05:12:05 UTC (rev 977)
+++
trunk/main/metro/exec/src/main/net/dpml/metro/exec/ApplicationHandler.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -26,7 +26,7 @@
import java.util.Iterator;
import java.util.Set;
-import net.dpml.part.remote.Component;
+import net.dpml.part.Component;
import net.dpml.station.Station;
import net.dpml.station.Callback;
Modified:
trunk/main/metro/exec/src/main/net/dpml/metro/exec/ComponentAdapter.java
===================================================================
--- trunk/main/metro/exec/src/main/net/dpml/metro/exec/ComponentAdapter.java
2006-01-26 05:12:05 UTC (rev 977)
+++ trunk/main/metro/exec/src/main/net/dpml/metro/exec/ComponentAdapter.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -34,13 +34,13 @@
import net.dpml.part.ControlException;
import net.dpml.part.ServiceNotFoundException;
-import net.dpml.part.local.Controller;
-import net.dpml.part.local.ControllerContext;
-import net.dpml.part.local.InitialContext;
-import net.dpml.part.remote.Component;
-import net.dpml.part.remote.Provider;
-import net.dpml.part.remote.Model;
-import net.dpml.part.remote.Service;
+import net.dpml.part.Controller;
+import net.dpml.part.ControllerContext;
+import net.dpml.part.InitialContext;
+import net.dpml.part.Component;
+import net.dpml.part.Provider;
+import net.dpml.part.Model;
+import net.dpml.part.Service;
import net.dpml.metro.ComponentManager;
import net.dpml.metro.ContextManager;
Modified: trunk/main/metro/model/src/main/net/dpml/metro/ComponentModel.java
===================================================================
--- trunk/main/metro/model/src/main/net/dpml/metro/ComponentModel.java
2006-01-26 05:12:05 UTC (rev 977)
+++ trunk/main/metro/model/src/main/net/dpml/metro/ComponentModel.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -20,7 +20,7 @@
import java.rmi.RemoteException;
-import net.dpml.part.remote.Model;
+import net.dpml.part.Model;
/**
* The ComponentModel interface defines the remotely accessible aspects of a
component
Modified:
trunk/main/metro/model/src/main/net/dpml/metro/ValidationException.java
===================================================================
--- trunk/main/metro/model/src/main/net/dpml/metro/ValidationException.java
2006-01-26 05:12:05 UTC (rev 977)
+++ trunk/main/metro/model/src/main/net/dpml/metro/ValidationException.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -21,7 +21,7 @@
import java.io.Serializable;
import java.net.URI;
-import net.dpml.part.remote.ModelException;
+import net.dpml.part.ModelException;
/**
* Exception that describes a series of validation issues.
Copied: trunk/main/metro/part/api/src/main/net/dpml/part/Component.java (from
rev 977,
trunk/main/metro/part/api/src/main/net/dpml/part/remote/Component.java)
===================================================================
--- trunk/main/metro/part/api/src/main/net/dpml/part/remote/Component.java
2006-01-26 05:12:05 UTC (rev 977)
+++ trunk/main/metro/part/api/src/main/net/dpml/part/Component.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2005-2006 Stephen J. McConnell
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied.
+ *
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package net.dpml.part;
+
+import java.rmi.Remote;
+
+/**
+ * The Component represents a remote interface to a runtime component type.
+ *
+ * @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
+ * @version @PROJECT-VERSION@
+ */
+public interface Component extends Remote, ComponentOperations
+{
+}
+
Modified:
trunk/main/metro/part/api/src/main/net/dpml/part/ComponentOperations.java
===================================================================
--- trunk/main/metro/part/api/src/main/net/dpml/part/ComponentOperations.java
2006-01-26 05:12:05 UTC (rev 977)
+++ trunk/main/metro/part/api/src/main/net/dpml/part/ComponentOperations.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -18,13 +18,9 @@
package net.dpml.part;
-import java.rmi.RemoteException;
import java.lang.reflect.InvocationTargetException;
+import java.rmi.RemoteException;
-import net.dpml.part.remote.Component;
-import net.dpml.part.remote.Service;
-import net.dpml.part.remote.Provider;
-
/**
* The ComponentOperations represents the set of operations shared between
* local and remote component users.
Copied: trunk/main/metro/part/api/src/main/net/dpml/part/ContextEvent.java
(from rev 976,
trunk/main/metro/part/api/src/main/net/dpml/part/remote/ContextEvent.java)
===================================================================
--- trunk/main/metro/part/api/src/main/net/dpml/part/remote/ContextEvent.java
2006-01-26 04:10:09 UTC (rev 976)
+++ trunk/main/metro/part/api/src/main/net/dpml/part/ContextEvent.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -0,0 +1,93 @@
+/*
+ * Copyright 2005 Stephen J. McConnell.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied.
+ *
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package net.dpml.part;
+
+import java.util.EventObject;
+
+/**
+ * Event triggered as a result of change to the value of a context entry.
+ *
+ * @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
+ * @version @PROJECT-VERSION@
+ */
+public class ContextEvent extends EventObject
+{
+ /**
+ * Serial version identifier.
+ */
+ static final long serialVersionUID = 1L;
+
+ private final String m_key;
+ private final Object m_from;
+ private final Object m_to;
+
+ /**
+ * Construct a new <code>ContextEvent</code>.
+ *
+ * @param source the source provider
+ * @param key the context entry key
+ * @param from the original value
+ * @param to the new value
+ */
+ public ContextEvent( final Provider source, String key, Object from,
Object to )
+ {
+ super( source );
+
+ m_key = key;
+ m_from = from;
+ m_to = to;
+ }
+
+ /**
+ * Return the feature name.
+ * @return the name of the modified feature
+ */
+ public String getKey()
+ {
+ return m_key;
+ }
+
+ /**
+ * Return the old value.
+ * @return the original value
+ */
+ public Object getOldValue()
+ {
+ return m_from;
+ }
+
+ /**
+ * Return the new value.
+ * @return the new current value
+ */
+ public Object getNewValue()
+ {
+ return m_to;
+ }
+
+ /**
+ * Return the component model that initiating the event.
+ * @return the source model
+ */
+ public Provider getProvider()
+ {
+ return (Provider) super.getSource();
+ }
+}
+
Copied: trunk/main/metro/part/api/src/main/net/dpml/part/ContextListener.java
(from rev 976,
trunk/main/metro/part/api/src/main/net/dpml/part/remote/ContextListener.java)
===================================================================
---
trunk/main/metro/part/api/src/main/net/dpml/part/remote/ContextListener.java
2006-01-26 04:10:09 UTC (rev 976)
+++ trunk/main/metro/part/api/src/main/net/dpml/part/ContextListener.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2005 Stephen J. McConnell.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied.
+ *
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package net.dpml.part;
+
+import java.rmi.Remote;
+import java.rmi.RemoteException;
+import java.util.EventListener;
+
+/**
+ * Interface implementated by local listeners to context entry changes.
+ *
+ * @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
+ * @version @PROJECT-VERSION@
+ */
+public interface ContextListener extends EventListener, Remote
+{
+ /**
+ * Notify the listener of a change to a context entry.
+ *
+ * @param event the context change event
+ * @exception RemoteException if a remote transport error occurs
+ */
+ void entryChanged( final ContextEvent event ) throws RemoteException;
+}
+
Copied: trunk/main/metro/part/api/src/main/net/dpml/part/Controller.java
(from rev 976,
trunk/main/metro/part/api/src/main/net/dpml/part/local/Controller.java)
===================================================================
--- trunk/main/metro/part/api/src/main/net/dpml/part/local/Controller.java
2006-01-26 04:10:09 UTC (rev 976)
+++ trunk/main/metro/part/api/src/main/net/dpml/part/Controller.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -0,0 +1,101 @@
+/*
+ * Copyright (c) 2005 Stephen J. McConnell
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied.
+ *
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package net.dpml.part;
+
+import java.io.IOException;
+import java.net.URI;
+
+/**
+ * The Controller interface defines the a contract for an object that
provides generalized
+ * part loading.
+ *
+ * @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
+ * @version @PROJECT-VERSION@
+ */
+public interface Controller
+{
+ /**
+ * Static default controller.
+ */
+ static final Controller STANDARD = InitialContext.createController();
+
+ /**
+ * Returns the identity of the object implementing this interface.
+ * @return a uri identifying the object
+ */
+ URI getURI();
+
+ /**
+ * Load a directive from serialized form.
+ *
+ * @param uri the directive uri
+ * @return the directive
+ * @exception ControlException if a direction construction error ocurrs
+ * @exception IOException if an I/O error occurs
+ */
+ Directive loadDirective( URI uri ) throws ControlException, IOException;
+
+ /**
+ * Create and return a new management context using the supplied part
+ * as the inital management state.
+ *
+ * @param directive the part data structure
+ * @return the management context
+ * @exception ControlException if a part related error occurs
+ */
+ Model createModel( Directive directive ) throws ControlException;
+
+ /**
+ * Create and return a new management context using the supplied
directive uri.
+ *
+ * @param uri a uri identifying a deployment directive
+ * @return the management context model
+ * @exception ControlException if an error occurs
+ * @exception IOException if an I/O error occurs
+ */
+ Model createModel( URI uri ) throws ControlException, IOException;
+
+ /**
+ * Create and return a remote reference to a component handler.
+ * @param uri a uri identifying a deployment directive
+ * @return the component handler
+ * @exception Exception if an error occurs
+ */
+ Component createComponent( URI uri ) throws Exception;
+
+ /**
+ * Create and return a remote reference to a component handler.
+ * @param model the management context
+ * @return the component handler
+ * @exception Exception if a component construction error occurs
+ */
+ Component createComponent( Model model ) throws Exception;
+
+ /**
+ * Create a classloader using the supplied anchor classloader and
+ * component directive.
+ *
+ * @param anchor the anchor classloader
+ * @param model a component model
+ * @return the classloader
+ * @exception ControlException if a part related error occurs
+ */
+ ClassLoader createClassLoader( ClassLoader anchor, Model model ) throws
ControlException;
+
+}
Copied:
trunk/main/metro/part/api/src/main/net/dpml/part/ControllerContext.java (from
rev 976,
trunk/main/metro/part/api/src/main/net/dpml/part/local/ControllerContext.java)
===================================================================
---
trunk/main/metro/part/api/src/main/net/dpml/part/local/ControllerContext.java
2006-01-26 04:10:09 UTC (rev 976)
+++ trunk/main/metro/part/api/src/main/net/dpml/part/ControllerContext.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -0,0 +1,72 @@
+/*
+ * Copyright (c) 2005 Stephen J. McConnell
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied.
+ *
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package net.dpml.part;
+
+import java.io.File;
+
+import net.dpml.transit.Logger;
+
+/**
+ * The ControllerContext declares the runtime context that a controller
+ * is established within. Controller implementations will typically receive
+ * be bsupplied with a context object as a constructor argument.
+ *
+ * @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
+ * @version @PROJECT-VERSION@
+ */
+public interface ControllerContext
+{
+ /**
+ * Return the assigned logging channel.
+ *
+ * @return the logging channel
+ */
+ Logger getLogger();
+
+ /**
+ * Return the root working directory.
+ *
+ * @return directory representing the root of the working directory
hierachy
+ */
+ File getWorkingDirectory();
+
+ /**
+ * Return the root temporary directory.
+ *
+ * @return directory representing the root of the temporary directory
hierachy.
+ */
+ File getTempDirectory();
+
+ /**
+ * Add the supplied controller context listener to the controller
context. A
+ * controller implementation should not maintain strong references to
supplied
+ * listeners.
+ *
+ * @param listener the controller context listener to add
+ */
+ void addControllerContextListener( ControllerContextListener listener );
+
+ /**
+ * Remove the supplied controller context listener from the controller
context.
+ *
+ * @param listener the controller context listener to remove
+ */
+ void removeControllerContextListener( ControllerContextListener listener
);
+
+}
Copied:
trunk/main/metro/part/api/src/main/net/dpml/part/ControllerContextEvent.java
(from rev 976,
trunk/main/metro/part/api/src/main/net/dpml/part/local/ControllerContextEvent.java)
===================================================================
---
trunk/main/metro/part/api/src/main/net/dpml/part/local/ControllerContextEvent.java
2006-01-26 04:10:09 UTC (rev 976)
+++
trunk/main/metro/part/api/src/main/net/dpml/part/ControllerContextEvent.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -0,0 +1,83 @@
+/*
+ * Copyright (c) 2005 Stephen J. McConnell
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied.
+ *
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package net.dpml.part;
+
+import java.io.File;
+import java.util.EventObject;
+
+/**
+ * The ControllerContextEvent is an abstract base class for working and
+ * temporty directory change notification events.
+ *
+ * @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
+ * @version @PROJECT-VERSION@
+ */
+public abstract class ControllerContextEvent extends EventObject
+{
+ /**
+ * Serial version identifier.
+ */
+ static final long serialVersionUID = 1L;
+
+ private ControllerContext m_context;
+ private File m_old;
+ private File m_new;
+
+ /**
+ * Creation of a new controller context event object.
+ *
+ * @param source the controller context initiating the event
+ * @param oldDir the original directory value
+ * @param newDir the new directory value
+ */
+ public ControllerContextEvent( ControllerContext source, File oldDir,
File newDir )
+ {
+ super( source );
+ m_context = source;
+ m_old = oldDir;
+ m_new = newDir;
+ }
+
+ /**
+ * Return the controller context that this event is related to.
+ * @return the controller context
+ */
+ public ControllerContext getContext()
+ {
+ return m_context;
+ }
+
+ /**
+ * Return the old directory value.
+ * @return the directory
+ */
+ public File getOldDirectory()
+ {
+ return m_old;
+ }
+
+ /**
+ * Return the new directory value.
+ * @return the directory
+ */
+ public File getNewDirectory()
+ {
+ return m_new;
+ }
+}
Copied:
trunk/main/metro/part/api/src/main/net/dpml/part/ControllerContextListener.java
(from rev 976,
trunk/main/metro/part/api/src/main/net/dpml/part/local/ControllerContextListener.java)
===================================================================
---
trunk/main/metro/part/api/src/main/net/dpml/part/local/ControllerContextListener.java
2006-01-26 04:10:09 UTC (rev 976)
+++
trunk/main/metro/part/api/src/main/net/dpml/part/ControllerContextListener.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2005 Stephen J. McConnell
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied.
+ *
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package net.dpml.part;
+
+import java.util.EventListener;
+
+/**
+ * An interface implementation by controller concerned with or responsible
+ * for handling changes in a local runtime directory context.
+ *
+ * @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
+ * @version @PROJECT-VERSION@
+ */
+public interface ControllerContextListener extends EventListener
+{
+ /**
+ * Notify the listener that the working directory has changed.
+ *
+ * @param event the change event
+ */
+ void workingDirectoryChanged( ControllerContextEvent event );
+
+ /**
+ * Notify the listener that the temporary directory has changed.
+ *
+ * @param event the change event
+ */
+ void tempDirectoryChanged( ControllerContextEvent event );
+
+ /**
+ * Notify listeners of the disposal of the controller.
+ * @param event the context event
+ */
+ void controllerDisposal( ControllerContextEvent event );
+}
Copied: trunk/main/metro/part/api/src/main/net/dpml/part/InitialContext.java
(from rev 976,
trunk/main/metro/part/api/src/main/net/dpml/part/local/InitialContext.java)
===================================================================
---
trunk/main/metro/part/api/src/main/net/dpml/part/local/InitialContext.java
2006-01-26 04:10:09 UTC (rev 976)
+++ trunk/main/metro/part/api/src/main/net/dpml/part/InitialContext.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -0,0 +1,493 @@
+/*
+ * Copyright (c) 2005 Stephen J. McConnell
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied.
+ *
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package net.dpml.part;
+
+import java.io.File;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
+import java.net.URI;
+import java.util.EventObject;
+import java.util.EventListener;
+
+import net.dpml.transit.Logger;
+import net.dpml.transit.Transit;
+import net.dpml.transit.Repository;
+import net.dpml.transit.monitor.LoggingAdapter;
+
+/**
+ * The CompositionControllerContext class wraps a ContentModel and supplies
convinience
+ * operations that translate ContentModel properties and events to type-safe
values used
+ * in the conposition controller.
+ *
+ * @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
+ * @version @PROJECT-VERSION@
+ */
+public final class InitialContext extends LocalEventProducer
+ implements ControllerContext, Disposable
+{
+
//----------------------------------------------------------------------------
+ // static
+
//----------------------------------------------------------------------------
+
+ /**
+ * Create the default controller using the default initial context.
+ * The default context and associated controller disposal will be
triggered
+ * on JVM shutdown.
+ *
+ * @return the default controller
+ */
+ public static Controller createController()
+ {
+ return createController( null );
+ }
+
+ /**
+ * Create the default controller. Controller disposal is the
responsiblity
+ * of the client application.
+ *
+ * @param context the controller context
+ * @return the controller
+ */
+ public static Controller createController( final InitialContext context )
+ {
+ ControllerInvocationHandler handler =
+ new ControllerInvocationHandler( context );
+ return (Controller) Proxy.newProxyInstance(
+ Controller.class.getClassLoader(), new Class[]{Controller.class},
handler );
+ }
+
+ /**
+ * Internal invocation handler that delays controller instantiation
+ * until a request against the controller is made by a client.
+ */
+ private static final class ControllerInvocationHandler implements
InvocationHandler
+ {
+ private InitialContext m_context;
+ private Controller m_controller;
+
+ private ControllerInvocationHandler( InitialContext context )
+ {
+ m_context = context;
+ }
+
+ /**
+ * Invoke the specified method on underlying object.
+ * This is called by the proxy object.
+ *
+ * @param proxy the proxy object
+ * @param method the method invoked on proxy object
+ * @param args the arguments supplied to method
+ * @return the return value of method
+ * @throws Throwable if an error occurs
+ */
+ public Object invoke(
+ final Object proxy, final Method method, final Object[] args )
throws Throwable
+ {
+ Controller controller = getController();
+ return method.invoke( controller, args );
+ }
+
+ private synchronized Controller getController()
+ {
+ if( null != m_controller )
+ {
+ return m_controller;
+ }
+ else
+ {
+ m_controller = InitialContext.newController( m_context );
+ return m_controller;
+ }
+ }
+ }
+
+ private static URI getControllerURI() throws Exception
+ {
+ String spec =
+ System.getProperty(
+ "dpml.part.controller.uri",
+ "@PART-HANDLER-URI@" );
+ return new URI( spec );
+ }
+
+ /**
+ * Construct a controller.
+ * @param context the controller context
+ * @return the controller
+ */
+ private static Controller newController( final InitialContext context )
+ {
+ InitialContext control = context;
+ if( null == control )
+ {
+ control = new InitialContext();
+ Runtime.getRuntime().addShutdownHook( new ContextShutdownHook(
control ) );
+ }
+
+ try
+ {
+ URI uri = getControllerURI();
+ ClassLoader classloader = InitialContext.class.getClassLoader();
+ Repository repository = Transit.getInstance().getRepository();
+ Class c = repository.getPluginClass( classloader, uri );
+ Constructor constructor = c.getConstructor( new
Class[]{ControllerContext.class} );
+ Controller controller = (Controller) constructor.newInstance(
new Object[]{control} );
+ return controller;
+ }
+ catch( Throwable e )
+ {
+ final String error =
+ "Internal error while attempting to establish the standard
controller.";
+ throw new RuntimeException( error, e );
+ }
+ }
+
+
//----------------------------------------------------------------------------
+ // state
+
//----------------------------------------------------------------------------
+
+ /**
+ * Working directory.
+ */
+ private File m_work;
+
+ /**
+ * Temp directory.
+ */
+ private File m_temp;
+
+ /**
+ * The assigned logging channel.
+ */
+ private Logger m_logger;
+
+
//----------------------------------------------------------------------------
+ // constructor
+
//----------------------------------------------------------------------------
+
+ /**
+ * Creation of a new <tt>InitialContext</tt>.
+ */
+ public InitialContext()
+ {
+ this( new LoggingAdapter( "metro" ), null, null );
+ }
+
+ /**
+ * Creation of a new <tt>InitialContext</tt>.
+ * @param logger the assigned logging channel
+ */
+ public InitialContext( Logger logger )
+ {
+ this( logger, null, null );
+ }
+
+ /**
+ * Creation of a new <tt>InitialContext</tt>.
+ * @param logger the assigned logging channel
+ * @param work the working directory
+ * @param temp the temporary directory
+ */
+ public InitialContext( Logger logger, File work, File temp )
+ {
+ super( new LoggingAdapter( "metro.context" ) );
+
+ m_logger = logger;
+
+ if( null == work )
+ {
+ String path = System.getProperty( "user.dir" );
+ m_work = new File( path );
+ }
+ else
+ {
+ m_work = work;
+ }
+
+ if( null == temp )
+ {
+ String path = System.getProperty( "java.io.tmpdir" );
+ m_temp = new File( path );
+ }
+ else
+ {
+ m_temp = temp;
+ }
+ }
+
+
//----------------------------------------------------------------------------
+ // Disposable
+
//----------------------------------------------------------------------------
+
+ /**
+ * Initiate disposal.
+ */
+ public void dispose()
+ {
+ getInternalLogger().debug( "initiating context disposal" );
+ ControllerDisposalEvent event = new ControllerDisposalEvent( this );
+ enqueueEvent( event, false );
+ super.dispose();
+ getInternalLogger().debug( "disposed" );
+ }
+
+
//----------------------------------------------------------------------------
+ // ControllerContext
+
//----------------------------------------------------------------------------
+
+ /**
+ * Return the assigned logging channel
+ * @return the logging channel
+ */
+ public Logger getLogger()
+ {
+ return m_logger;
+ }
+
+ /**
+ * Return the root working directory.
+ *
+ * @return directory representing the root of the working directory
hierachy
+ */
+ public File getWorkingDirectory()
+ {
+ synchronized( getLock() )
+ {
+ return m_work;
+ }
+ }
+
+ /**
+ * Set the root working directory.
+ *
+ * @param dir the root of the working directory hierachy
+ */
+ public void setWorkingDirectory( File dir )
+ {
+ synchronized( getLock() )
+ {
+ m_work = dir;
+ }
+ }
+
+ /**
+ * Return the root temporary directory.
+ *
+ * @return directory representing the root of the temporary directory
hierachy.
+ */
+ public File getTempDirectory()
+ {
+ synchronized( getLock() )
+ {
+ return m_temp;
+ }
+ }
+
+ /**
+ * Add the supplied controller context listener to the controller
context. A
+ * controller implementation should not maintain strong references to
supplied
+ * listeners.
+ *
+ * @param listener the controller context listener to add
+ */
+ public void addControllerContextListener( ControllerContextListener
listener )
+ {
+ addListener( listener );
+ }
+
+ /**
+ * Remove the supplied controller context listener from the controller
context.
+ *
+ * @param listener the controller context listener to remove
+ */
+ public void removeControllerContextListener( ControllerContextListener
listener )
+ {
+ removeListener( listener );
+ }
+
+
//----------------------------------------------------------------------------
+ // impl
+
//----------------------------------------------------------------------------
+
+ /**
+ * Process a context related event.
+ * @param event the event to process
+ */
+ protected void processEvent( EventObject event )
+ {
+ if( event instanceof WorkingDirectoryChangeEvent )
+ {
+ processWorkingDirectoryChangeEvent(
(WorkingDirectoryChangeEvent) event );
+ }
+ else if( event instanceof TempDirectoryChangeEvent )
+ {
+ processTempDirectoryChangeEvent( (TempDirectoryChangeEvent)
event );
+ }
+ else if( event instanceof ControllerDisposalEvent )
+ {
+ processControllerDisposalEvent( (ControllerDisposalEvent) event
);
+ }
+ }
+
+ private void processWorkingDirectoryChangeEvent(
WorkingDirectoryChangeEvent event )
+ {
+ EventListener[] listeners = super.listeners();
+ for( int i=0; i<listeners.length; i++ )
+ {
+ EventListener eventListener = listeners[i];
+ if( eventListener instanceof ControllerContextListener )
+ {
+ ControllerContextListener listener =
(ControllerContextListener) eventListener;
+ try
+ {
+ listener.workingDirectoryChanged( event );
+ }
+ catch( Throwable e )
+ {
+ final String error =
+ "ControllerContextListener working dir change
notification error.";
+ getInternalLogger().error( error, e );
+ }
+ }
+ }
+ }
+
+ private void processTempDirectoryChangeEvent( TempDirectoryChangeEvent
event )
+ {
+ EventListener[] listeners = super.listeners();
+ for( int i=0; i<listeners.length; i++ )
+ {
+ EventListener eventListener = listeners[i];
+ if( eventListener instanceof ControllerContextListener )
+ {
+ ControllerContextListener listener =
(ControllerContextListener) eventListener;
+ try
+ {
+ listener.tempDirectoryChanged( event );
+ }
+ catch( Throwable e )
+ {
+ final String error =
+ "ControllerContextListener temp dir change
notification error.";
+ getInternalLogger().error( error, e );
+ }
+ }
+ }
+ }
+
+ private void processControllerDisposalEvent( ControllerDisposalEvent
event )
+ {
+ EventListener[] listeners = super.listeners();
+ for( int i=0; i<listeners.length; i++ )
+ {
+ EventListener eventListener = listeners[i];
+ if( eventListener instanceof ControllerContextListener )
+ {
+ ControllerContextListener listener =
(ControllerContextListener) eventListener;
+ try
+ {
+ listener.controllerDisposal( event );
+ }
+ catch( Throwable e )
+ {
+ final String error =
+ "ControllerContextListener disposal notification
error.";
+ getInternalLogger().error( error, e );
+ }
+ }
+ }
+ }
+
+
//----------------------------------------------------------------------------
+ // static (private)
+
//----------------------------------------------------------------------------
+
+ /**
+ * Working directory change event impl.
+ */
+ private static class WorkingDirectoryChangeEvent extends
ControllerContextEvent
+ {
+ public WorkingDirectoryChangeEvent(
+ ControllerContext source, File oldDir, File newDir )
+ {
+ super( source, oldDir, newDir );
+ }
+ }
+
+ /**
+ * Temp directory change event impl.
+ */
+ private static class TempDirectoryChangeEvent extends
ControllerContextEvent
+ {
+ public TempDirectoryChangeEvent(
+ ControllerContext source, File oldDir, File newDir )
+ {
+ super( source, oldDir, newDir );
+ }
+ }
+
+ /**
+ * Disposal event.
+ */
+ private static class ControllerDisposalEvent extends
ControllerContextEvent
+ {
+ public ControllerDisposalEvent( ControllerContext source )
+ {
+ super( source, null, null );
+ }
+ }
+
+ /**
+ * Internal utility class to handle context disposal on JVM shutdown.
+ */
+ private static class ContextShutdownHook extends Thread
+ {
+ private InitialContext m_context;
+
+ /**
+ * Creation of a new initial context shutdown hook.
+ * @param context the initional context to be shutdown on JVM shutdown
+ */
+ ContextShutdownHook( InitialContext context )
+ {
+ m_context = context;
+ }
+
+ /**
+ * Execute context disposal.
+ */
+ public void run()
+ {
+ try
+ {
+ m_context.dispose();
+ }
+ catch( Throwable e )
+ {
+ boolean ignorable = true;
+ }
+ finally
+ {
+ System.runFinalization();
+ }
+ }
+ }
+}
Copied:
trunk/main/metro/part/api/src/main/net/dpml/part/LocalEventProducer.java
(from rev 976,
trunk/main/metro/part/api/src/main/net/dpml/part/local/LocalEventProducer.java)
===================================================================
---
trunk/main/metro/part/api/src/main/net/dpml/part/local/LocalEventProducer.java
2006-01-26 04:10:09 UTC (rev 976)
+++ trunk/main/metro/part/api/src/main/net/dpml/part/LocalEventProducer.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -0,0 +1,316 @@
+/*
+ * Copyright 2005 Stephen J. McConnell.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied.
+ *
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package net.dpml.part;
+
+import java.util.EventObject;
+import java.util.EventListener;
+import java.util.List;
+import java.util.LinkedList;
+import java.util.Map;
+import java.util.WeakHashMap;
+
+import net.dpml.transit.Logger;
+
+/**
+ * A abstract base class that established an event queue and handles event
dispatch
+ * operations for listeners declared in a class extending this base class.
+ *
+ * @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
+ * @version @PROJECT-VERSION@
+ */
+abstract class LocalEventProducer
+{
+
//----------------------------------------------------------------------------
+ // state
+
//----------------------------------------------------------------------------
+
+ /**
+ * Weak hashmap of event listeners.
+ */
+ private Map m_listeners = new WeakHashMap();
+
+ /**
+ * Logging channel.
+ */
+ private Logger m_logger;
+
+ /**
+ * Internal synchronization lock.
+ */
+ private final Object m_lock = new Object();
+
+
//----------------------------------------------------------------------------
+ // constructor
+
//----------------------------------------------------------------------------
+
+ /**
+ * Creation of a new local event producer.
+ * @param logger the assigned logging channel
+ */
+ LocalEventProducer( Logger logger )
+ {
+ m_logger = logger;
+ }
+
+
//----------------------------------------------------------------------------
+ // implementation
+
//----------------------------------------------------------------------------
+
+ /**
+ * Return the internal context logging channel.
+ * @return the logging channel
+ */
+ protected Logger getInternalLogger()
+ {
+ return m_logger;
+ }
+
+ /**
+ * Return the synchronization lock.
+ * @return the lock
+ */
+ protected Object getLock()
+ {
+ return m_lock;
+ }
+
+ /**
+ * Dispose of the event producer.
+ */
+ void dispose()
+ {
+ m_logger.debug( "context event channel disposal" );
+ synchronized( getLock() )
+ {
+ if( null != m_EVENT_DISPATCH_THREAD )
+ {
+ m_EVENT_DISPATCH_THREAD.dispose();
+ }
+ }
+ }
+
+ /**
+ * Abstract operation to be implemented by classes extending this base
class.
+ * An implementation is reposible for the posting of the event to
associated
+ * listeners. Event posting will be executed under a separate thread to
the
+ * thread that initiated the event post.
+ *
+ * @param event the event to process
+ */
+ protected abstract void processEvent( EventObject event );
+
+ /**
+ * Add a listener to the set of listeners handled by this producer.
+ * @param listener the event listener
+ */
+ protected void addListener( EventListener listener )
+ {
+ if( null == listener )
+ {
+ throw new NullPointerException( "listener" );
+ }
+ synchronized( m_lock )
+ {
+ m_logger.debug( "adding context listener" );
+ m_listeners.put( listener, null );
+ }
+ startEventDispatchThread( m_logger );
+ }
+
+ /**
+ * Remove a listener to the set of listeners handled by this producer.
+ * @param listener the event listener
+ */
+ protected void removeListener( EventListener listener )
+ {
+ if( null == listener )
+ {
+ throw new NullPointerException( "listener" );
+ }
+ synchronized( m_lock )
+ {
+ m_logger.debug( "removing context listener" );
+ m_listeners.remove( listener );
+ }
+ }
+
+ /**
+ * Queue of pending notification events. When an event for which
+ * there are one or more listeners occurs, it is placed on this queue
+ * and the queue is notified. A background thread waits on this queue
+ * and delivers the events. This decouples event delivery from
+ * the application concern, greatly simplifying locking and reducing
+ * opportunity for deadlock.
+ */
+ private static final List EVENT_QUEUE = new LinkedList();
+
+ /**
+ * A single background thread ("the event notification thread") monitors
+ * the event queue and delivers events that are placed on the queue.
+ */
+ /**
+ * A single background thread ("the event notification thread") monitors
+ * the event queue and delivers events that are placed on the queue.
+ */
+ private static class EventDispatchThread extends Thread
+ {
+ private boolean m_continue = true;
+ private final Logger m_logger;
+
+ EventDispatchThread( Logger logger )
+ {
+ m_logger = logger;
+ }
+
+ void dispose()
+ {
+ synchronized( EVENT_QUEUE )
+ {
+ m_logger.debug( "terminating event dispatch thread" );
+ m_continue = false;
+ EVENT_QUEUE.notify();
+ }
+ }
+
+ public void run()
+ {
+ while( m_continue )
+ {
+ // Wait on EVENT_QUEUE till an event is present
+ EventObject event = null;
+ synchronized( EVENT_QUEUE )
+ {
+ try
+ {
+ while( EVENT_QUEUE.isEmpty() )
+ {
+ EVENT_QUEUE.wait();
+ }
+ Object object = EVENT_QUEUE.remove( 0 );
+ try
+ {
+ event = (EventObject) object;
+ }
+ catch( ClassCastException cce )
+ {
+ final String error =
+ "Unexpected class cast exception while
processing an event."
+ + "\nEvent: " + object;
+ throw new IllegalStateException( error );
+ }
+ }
+ catch( InterruptedException e )
+ {
+ return;
+ }
+ }
+
+ Object source = event.getSource();
+ if( source instanceof LocalEventProducer )
+ {
+ LocalEventProducer producer = (LocalEventProducer)
source;
+ try
+ {
+ producer.processEvent( event );
+ }
+ catch( Throwable e )
+ {
+ final String error =
+ "Unexpected error while processing event."
+ + "\nEvent: " + event
+ + "\nSource: " + this;
+ m_logger.warn( error, e );
+ }
+ }
+ else
+ {
+ final String error =
+ "Event source is not an instance of "
+ + LocalEventProducer.class.getName();
+ throw new IllegalStateException( error );
+ }
+ }
+ }
+ }
+
+ private static EventDispatchThread m_EVENT_DISPATCH_THREAD = null;
+
+ /**
+ * This method starts the event dispatch thread the first time it
+ * is called. The event dispatch thread will be started only
+ * if someone registers a listener.
+ */
+ private static synchronized void startEventDispatchThread( Logger logger
)
+ {
+ if( m_EVENT_DISPATCH_THREAD == null )
+ {
+ m_EVENT_DISPATCH_THREAD = new EventDispatchThread( logger );
+ m_EVENT_DISPATCH_THREAD.setDaemon( true );
+ m_EVENT_DISPATCH_THREAD.start();
+ }
+ }
+
+ /**
+ * Return this node's preference/node change listeners. Even though
+ * we're using a copy-on-write lists, we use synchronized accessors to
+ * ensure information transmission from the writing thread to the
+ * reading thread.
+ */
+ protected EventListener[] listeners()
+ {
+ synchronized( m_lock )
+ {
+ return (EventListener[]) m_listeners.keySet().toArray( new
EventListener[0] );
+ }
+ }
+
+ /**
+ * Enqueue an event for delivery to registered
+ * listeners unless there are no registered
+ * listeners.
+ */
+ protected void enqueueEvent( EventObject event )
+ {
+ enqueueEvent( event, true );
+ }
+
+ /**
+ * Enqueue an event for delivery to registered
+ * listeners unless there are no registered
+ * listeners.
+ */
+ protected void enqueueEvent( EventObject event, boolean asynchronouse )
+ {
+ if( m_listeners.size() != 0 )
+ {
+ if( asynchronouse )
+ {
+ synchronized( EVENT_QUEUE )
+ {
+ EVENT_QUEUE.add( event );
+ EVENT_QUEUE.notify();
+ }
+ }
+ else
+ {
+ processEvent( event );
+ }
+ }
+ }
+}
Copied: trunk/main/metro/part/api/src/main/net/dpml/part/Model.java (from rev
976, trunk/main/metro/part/api/src/main/net/dpml/part/remote/Model.java)
===================================================================
--- trunk/main/metro/part/api/src/main/net/dpml/part/remote/Model.java
2006-01-26 04:10:09 UTC (rev 976)
+++ trunk/main/metro/part/api/src/main/net/dpml/part/Model.java 2006-01-26
05:55:27 UTC (rev 978)
@@ -0,0 +1,77 @@
+/*
+ * Copyright (c) 2005 Stephen J. McConnell
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied.
+ *
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package net.dpml.part;
+
+import java.rmi.Remote;
+import java.rmi.RemoteException;
+
+/**
+ * The Model interfaces is used mark a object as manageable context used in
+ * the creation of a runtime handler.
+ *
+ * @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
+ * @version @PROJECT-VERSION@
+ */
+public interface Model extends Remote
+{
+ /**
+ * The constant partition separator.
+ */
+ final String PARTITION_SEPARATOR = "/";
+
+ /**
+ * Return the path identifying the model. A path commences with the
+ * PARTITION_SEPARATOR character and is followed by a model name. If the
+ * model exposed nested models, the path is composed of model names
+ * seaprated by the PARTITION_SEPARATOR as in "/main/web/handler".
+ *
+ * @return the context path
+ * @exception RemoteException if a remote exception occurs
+ */
+ String getContextPath() throws RemoteException;
+
+ /**
+ * Get the activation policy. If the activation policy is STARTUP, an
implementation
+ * a handler shall immidiately activation a runtime instance. If the
policy is on DEMAND
+ * an implementation shall defer activiation until an explicit request is
received. If
+ * the policy if SYSTEM activation may occur at the discretion of an
implementation.
+ *
+ * @return the activation policy
+ * @exception RemoteException if a remote exception occurs
+ * @see ActivationPolicy#SYSTEM
+ * @see ActivationPolicy#STARTUP
+ * @see ActivationPolicy#DEMAND
+ */
+ ActivationPolicy getActivationPolicy() throws RemoteException;
+
+ /**
+ * Add a listener to the component model.
+ * @param listener the model listener
+ * @exception RemoteException if a remote exception occurs
+ */
+ void addModelListener( ModelListener listener ) throws RemoteException;
+
+ /**
+ * Remove a listener from the component model.
+ * @param listener the model listener
+ * @exception RemoteException if a remote exception occurs
+ */
+ void removeModelListener( ModelListener listener ) throws
RemoteException;
+}
+
Copied: trunk/main/metro/part/api/src/main/net/dpml/part/ModelEvent.java
(from rev 976,
trunk/main/metro/part/api/src/main/net/dpml/part/remote/ModelEvent.java)
===================================================================
--- trunk/main/metro/part/api/src/main/net/dpml/part/remote/ModelEvent.java
2006-01-26 04:10:09 UTC (rev 976)
+++ trunk/main/metro/part/api/src/main/net/dpml/part/ModelEvent.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -0,0 +1,93 @@
+/*
+ * Copyright 2005 Stephen J. McConnell.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied.
+ *
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package net.dpml.part;
+
+import java.util.EventObject;
+
+/**
+ * Event triggered as a result of a model change.
+ *
+ * @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
+ * @version @PROJECT-VERSION@
+ */
+public class ModelEvent extends EventObject
+{
+ /**
+ * Serial version identifier.
+ */
+ static final long serialVersionUID = 1L;
+
+ private final String m_feature;
+ private final Object m_from;
+ private final Object m_to;
+
+ /**
+ * Construct a new <code>ModelEvent</code>.
+ *
+ * @param source the source component model
+ * @param feature the name of the model feature
+ * @param from the original value
+ * @param to the new value
+ */
+ public ModelEvent( final Model source, String feature, Object from,
Object to )
+ {
+ super( source );
+
+ m_feature = feature;
+ m_from = from;
+ m_to = to;
+ }
+
+ /**
+ * Return the feature name.
+ * @return the name of the modified feature
+ */
+ public String getFeature()
+ {
+ return m_feature;
+ }
+
+ /**
+ * Return the old value.
+ * @return the original value
+ */
+ public Object getOldValue()
+ {
+ return m_from;
+ }
+
+ /**
+ * Return the new value.
+ * @return the new current value
+ */
+ public Object getNewValue()
+ {
+ return m_to;
+ }
+
+ /**
+ * Return the component model that initiating the event.
+ * @return the source model
+ */
+ public Model getSourceModel()
+ {
+ return (Model) super.getSource();
+ }
+}
+
Copied: trunk/main/metro/part/api/src/main/net/dpml/part/ModelException.java
(from rev 976,
trunk/main/metro/part/api/src/main/net/dpml/part/remote/ModelException.java)
===================================================================
---
trunk/main/metro/part/api/src/main/net/dpml/part/remote/ModelException.java
2006-01-26 04:10:09 UTC (rev 976)
+++ trunk/main/metro/part/api/src/main/net/dpml/part/ModelException.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2005 Stephen J. McConnell
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied.
+ *
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package net.dpml.part;
+
+import java.net.URI;
+
+/**
+ * General exception thrown by a context model.
+ *
+ * @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
+ * @version @PROJECT-VERSION@
+ */
+public class ModelException extends ControlException
+{
+ /**
+ * Serial version identifier.
+ */
+ static final long serialVersionUID = 1L;
+
+ /**
+ * Creation of a new <tt>ModelException</tt>.
+ * @param uri the controller uri
+ * @param message the exception message
+ */
+ public ModelException( URI uri, String message )
+ {
+ super( uri, message );
+ }
+
+ /**
+ * Creation of a new <tt>ModelException</tt>.
+ * @param uri the controller uri
+ * @param message the exception message
+ * @param cause the causal exception
+ */
+ public ModelException( URI uri, String message, Throwable cause )
+ {
+ super( uri, message, cause );
+ }
+}
+
Copied: trunk/main/metro/part/api/src/main/net/dpml/part/ModelListener.java
(from rev 976,
trunk/main/metro/part/api/src/main/net/dpml/part/remote/ModelListener.java)
===================================================================
---
trunk/main/metro/part/api/src/main/net/dpml/part/remote/ModelListener.java
2006-01-26 04:10:09 UTC (rev 976)
+++ trunk/main/metro/part/api/src/main/net/dpml/part/ModelListener.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2005 Stephen J. McConnell.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied.
+ *
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package net.dpml.part;
+
+import java.rmi.Remote;
+import java.rmi.RemoteException;
+import java.util.EventListener;
+
+/**
+ * Interface implementated by remote listeners to model change events.
+ *
+ * @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
+ * @version @PROJECT-VERSION@
+ */
+public interface ModelListener extends EventListener, Remote
+{
+ /**
+ * Notify the listener of a model change.
+ *
+ * @param event the model change event
+ * @exception RemoteException if a remote transport error occurs
+ */
+ void modelChanged( final ModelEvent event ) throws RemoteException;
+}
+
Copied: trunk/main/metro/part/api/src/main/net/dpml/part/Provider.java (from
rev 977,
trunk/main/metro/part/api/src/main/net/dpml/part/remote/Provider.java)
===================================================================
--- trunk/main/metro/part/api/src/main/net/dpml/part/remote/Provider.java
2006-01-26 05:12:05 UTC (rev 977)
+++ trunk/main/metro/part/api/src/main/net/dpml/part/Provider.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -0,0 +1,31 @@
+/*
+ * Copyright 2004-2006 Stephen J. McConnell.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied.
+ *
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package net.dpml.part;
+
+import java.rmi.Remote;
+
+/**
+ * Provider holder.
+ *
+ * @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
+ * @version @PROJECT-VERSION@
+ */
+public interface Provider extends Remote, ProviderOperations
+{
+}
Copied: trunk/main/metro/part/api/src/main/net/dpml/part/Service.java (from
rev 976, trunk/main/metro/part/api/src/main/net/dpml/part/remote/Service.java)
===================================================================
--- trunk/main/metro/part/api/src/main/net/dpml/part/remote/Service.java
2006-01-26 04:10:09 UTC (rev 976)
+++ trunk/main/metro/part/api/src/main/net/dpml/part/Service.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2005 Stephen J. McConnell
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied.
+ *
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package net.dpml.part;
+
+import java.rmi.Remote;
+import java.rmi.RemoteException;
+
+
+/**
+ * The Component interface is implemented by objects that handle the runtime
+ * state of a component instance.
+ *
+ * @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
+ * @version @PROJECT-VERSION@
+ */
+public interface Service extends Remote
+{
+ /**
+ * Return the service class.
+ * @return the service class
+ * @exception RemoteException if a remoting I/O error occurs
+ */
+ Class getServiceClass() throws RemoteException;
+
+ /**
+ * Return the service version.
+ * @return the version
+ * @exception RemoteException if a remoting I/O error occurs
+ */
+ Version getVersion() throws RemoteException;
+
+}
+
Copied:
trunk/main/metro/part/api/src/main/net/dpml/part/UnknownPartException.java
(from rev 976,
trunk/main/metro/part/api/src/main/net/dpml/part/local/UnknownPartException.java)
===================================================================
---
trunk/main/metro/part/api/src/main/net/dpml/part/local/UnknownPartException.java
2006-01-26 04:10:09 UTC (rev 976)
+++
trunk/main/metro/part/api/src/main/net/dpml/part/UnknownPartException.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2005 Stephen J. McConnell
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied.
+ *
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package net.dpml.part;
+
+/**
+ * Exception thrown when a component request an unknown part.
+ *
+ * @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
+ * @version @PROJECT-VERSION@
+ */
+public class UnknownPartException extends IllegalArgumentException
+{
+ /**
+ * Serial version identifier.
+ */
+ static final long serialVersionUID = 1L;
+
+ private String m_type;
+
+ /**
+ * Creation of a new <tt>UnknownPartException</tt>.
+ * @param key the part key
+ */
+ public UnknownPartException( String key )
+ {
+ super( key );
+ }
+}
+
+
Deleted:
trunk/main/metro/part/api/src/main/net/dpml/part/local/Controller.java
===================================================================
--- trunk/main/metro/part/api/src/main/net/dpml/part/local/Controller.java
2006-01-26 05:12:05 UTC (rev 977)
+++ trunk/main/metro/part/api/src/main/net/dpml/part/local/Controller.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -1,107 +0,0 @@
-/*
- * Copyright (c) 2005 Stephen J. McConnell
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- * implied.
- *
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package net.dpml.part.local;
-
-import java.io.IOException;
-import java.net.URI;
-
-import net.dpml.part.remote.Component;
-import net.dpml.part.remote.Model;
-
-import net.dpml.part.Directive;
-import net.dpml.part.ControlException;
-
-/**
- * The Controller interface defines the a contract for an object that
provides generalized
- * part loading.
- *
- * @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
- * @version @PROJECT-VERSION@
- */
-public interface Controller
-{
- /**
- * Static default controller.
- */
- static final Controller STANDARD = InitialContext.createController();
-
- /**
- * Returns the identity of the object implementing this interface.
- * @return a uri identifying the object
- */
- URI getURI();
-
- /**
- * Load a directive from serialized form.
- *
- * @param uri the directive uri
- * @return the directive
- * @exception ControlException if a direction construction error ocurrs
- * @exception IOException if an I/O error occurs
- */
- Directive loadDirective( URI uri ) throws ControlException, IOException;
-
- /**
- * Create and return a new management context using the supplied part
- * as the inital management state.
- *
- * @param directive the part data structure
- * @return the management context
- * @exception ControlException if a part related error occurs
- */
- Model createModel( Directive directive ) throws ControlException;
-
- /**
- * Create and return a new management context using the supplied
directive uri.
- *
- * @param uri a uri identifying a deployment directive
- * @return the management context model
- * @exception ControlException if an error occurs
- * @exception IOException if an I/O error occurs
- */
- Model createModel( URI uri ) throws ControlException, IOException;
-
- /**
- * Create and return a remote reference to a component handler.
- * @param uri a uri identifying a deployment directive
- * @return the component handler
- * @exception Exception if an error occurs
- */
- Component createComponent( URI uri ) throws Exception;
-
- /**
- * Create and return a remote reference to a component handler.
- * @param model the management context
- * @return the component handler
- * @exception Exception if a component construction error occurs
- */
- Component createComponent( Model model ) throws Exception;
-
- /**
- * Create a classloader using the supplied anchor classloader and
- * component directive.
- *
- * @param anchor the anchor classloader
- * @param model a component model
- * @return the classloader
- * @exception ControlException if a part related error occurs
- */
- ClassLoader createClassLoader( ClassLoader anchor, Model model ) throws
ControlException;
-
-}
Deleted:
trunk/main/metro/part/api/src/main/net/dpml/part/local/ControllerContext.java
===================================================================
---
trunk/main/metro/part/api/src/main/net/dpml/part/local/ControllerContext.java
2006-01-26 05:12:05 UTC (rev 977)
+++
trunk/main/metro/part/api/src/main/net/dpml/part/local/ControllerContext.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -1,72 +0,0 @@
-/*
- * Copyright (c) 2005 Stephen J. McConnell
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- * implied.
- *
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package net.dpml.part.local;
-
-import java.io.File;
-
-import net.dpml.transit.Logger;
-
-/**
- * The ControllerContext declares the runtime context that a controller
- * is established within. Controller implementations will typically receive
- * be bsupplied with a context object as a constructor argument.
- *
- * @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
- * @version @PROJECT-VERSION@
- */
-public interface ControllerContext
-{
- /**
- * Return the assigned logging channel.
- *
- * @return the logging channel
- */
- Logger getLogger();
-
- /**
- * Return the root working directory.
- *
- * @return directory representing the root of the working directory
hierachy
- */
- File getWorkingDirectory();
-
- /**
- * Return the root temporary directory.
- *
- * @return directory representing the root of the temporary directory
hierachy.
- */
- File getTempDirectory();
-
- /**
- * Add the supplied controller context listener to the controller
context. A
- * controller implementation should not maintain strong references to
supplied
- * listeners.
- *
- * @param listener the controller context listener to add
- */
- void addControllerContextListener( ControllerContextListener listener );
-
- /**
- * Remove the supplied controller context listener from the controller
context.
- *
- * @param listener the controller context listener to remove
- */
- void removeControllerContextListener( ControllerContextListener listener
);
-
-}
Deleted:
trunk/main/metro/part/api/src/main/net/dpml/part/local/ControllerContextEvent.java
===================================================================
---
trunk/main/metro/part/api/src/main/net/dpml/part/local/ControllerContextEvent.java
2006-01-26 05:12:05 UTC (rev 977)
+++
trunk/main/metro/part/api/src/main/net/dpml/part/local/ControllerContextEvent.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -1,83 +0,0 @@
-/*
- * Copyright (c) 2005 Stephen J. McConnell
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- * implied.
- *
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package net.dpml.part.local;
-
-import java.io.File;
-import java.util.EventObject;
-
-/**
- * The ControllerContextEvent is an abstract base class for working and
- * temporty directory change notification events.
- *
- * @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
- * @version @PROJECT-VERSION@
- */
-public abstract class ControllerContextEvent extends EventObject
-{
- /**
- * Serial version identifier.
- */
- static final long serialVersionUID = 1L;
-
- private ControllerContext m_context;
- private File m_old;
- private File m_new;
-
- /**
- * Creation of a new controller context event object.
- *
- * @param source the controller context initiating the event
- * @param oldDir the original directory value
- * @param newDir the new directory value
- */
- public ControllerContextEvent( ControllerContext source, File oldDir,
File newDir )
- {
- super( source );
- m_context = source;
- m_old = oldDir;
- m_new = newDir;
- }
-
- /**
- * Return the controller context that this event is related to.
- * @return the controller context
- */
- public ControllerContext getContext()
- {
- return m_context;
- }
-
- /**
- * Return the old directory value.
- * @return the directory
- */
- public File getOldDirectory()
- {
- return m_old;
- }
-
- /**
- * Return the new directory value.
- * @return the directory
- */
- public File getNewDirectory()
- {
- return m_new;
- }
-}
Deleted:
trunk/main/metro/part/api/src/main/net/dpml/part/local/ControllerContextListener.java
===================================================================
---
trunk/main/metro/part/api/src/main/net/dpml/part/local/ControllerContextListener.java
2006-01-26 05:12:05 UTC (rev 977)
+++
trunk/main/metro/part/api/src/main/net/dpml/part/local/ControllerContextListener.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 2005 Stephen J. McConnell
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- * implied.
- *
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package net.dpml.part.local;
-
-import java.util.EventListener;
-
-/**
- * An interface implementation by controller concerned with or responsible
- * for handling changes in a local runtime directory context.
- *
- * @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
- * @version @PROJECT-VERSION@
- */
-public interface ControllerContextListener extends EventListener
-{
- /**
- * Notify the listener that the working directory has changed.
- *
- * @param event the change event
- */
- void workingDirectoryChanged( ControllerContextEvent event );
-
- /**
- * Notify the listener that the temporary directory has changed.
- *
- * @param event the change event
- */
- void tempDirectoryChanged( ControllerContextEvent event );
-
- /**
- * Notify listeners of the disposal of the controller.
- * @param event the context event
- */
- void controllerDisposal( ControllerContextEvent event );
-}
Deleted:
trunk/main/metro/part/api/src/main/net/dpml/part/local/InitialContext.java
===================================================================
---
trunk/main/metro/part/api/src/main/net/dpml/part/local/InitialContext.java
2006-01-26 05:12:05 UTC (rev 977)
+++
trunk/main/metro/part/api/src/main/net/dpml/part/local/InitialContext.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -1,495 +0,0 @@
-/*
- * Copyright (c) 2005 Stephen J. McConnell
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- * implied.
- *
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package net.dpml.part.local;
-
-import java.io.File;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.Method;
-import java.lang.reflect.Proxy;
-import java.net.URI;
-import java.util.EventObject;
-import java.util.EventListener;
-
-import net.dpml.part.Disposable;
-
-import net.dpml.transit.Logger;
-import net.dpml.transit.Transit;
-import net.dpml.transit.Repository;
-import net.dpml.transit.monitor.LoggingAdapter;
-
-/**
- * The CompositionControllerContext class wraps a ContentModel and supplies
convinience
- * operations that translate ContentModel properties and events to type-safe
values used
- * in the conposition controller.
- *
- * @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
- * @version @PROJECT-VERSION@
- */
-public final class InitialContext extends LocalEventProducer
- implements ControllerContext, Disposable
-{
-
//----------------------------------------------------------------------------
- // static
-
//----------------------------------------------------------------------------
-
- /**
- * Create the default controller using the default initial context.
- * The default context and associated controller disposal will be
triggered
- * on JVM shutdown.
- *
- * @return the default controller
- */
- public static Controller createController()
- {
- return createController( null );
- }
-
- /**
- * Create the default controller. Controller disposal is the
responsiblity
- * of the client application.
- *
- * @param context the controller context
- * @return the controller
- */
- public static Controller createController( final InitialContext context )
- {
- ControllerInvocationHandler handler =
- new ControllerInvocationHandler( context );
- return (Controller) Proxy.newProxyInstance(
- Controller.class.getClassLoader(), new Class[]{Controller.class},
handler );
- }
-
- /**
- * Internal invocation handler that delays controller instantiation
- * until a request against the controller is made by a client.
- */
- private static final class ControllerInvocationHandler implements
InvocationHandler
- {
- private InitialContext m_context;
- private Controller m_controller;
-
- private ControllerInvocationHandler( InitialContext context )
- {
- m_context = context;
- }
-
- /**
- * Invoke the specified method on underlying object.
- * This is called by the proxy object.
- *
- * @param proxy the proxy object
- * @param method the method invoked on proxy object
- * @param args the arguments supplied to method
- * @return the return value of method
- * @throws Throwable if an error occurs
- */
- public Object invoke(
- final Object proxy, final Method method, final Object[] args )
throws Throwable
- {
- Controller controller = getController();
- return method.invoke( controller, args );
- }
-
- private synchronized Controller getController()
- {
- if( null != m_controller )
- {
- return m_controller;
- }
- else
- {
- m_controller = InitialContext.newController( m_context );
- return m_controller;
- }
- }
- }
-
- private static URI getControllerURI() throws Exception
- {
- String spec =
- System.getProperty(
- "dpml.part.controller.uri",
- "@PART-HANDLER-URI@" );
- return new URI( spec );
- }
-
- /**
- * Construct a controller.
- * @param context the controller context
- * @return the controller
- */
- private static Controller newController( final InitialContext context )
- {
- InitialContext control = context;
- if( null == control )
- {
- control = new InitialContext();
- Runtime.getRuntime().addShutdownHook( new ContextShutdownHook(
control ) );
- }
-
- try
- {
- URI uri = getControllerURI();
- ClassLoader classloader = InitialContext.class.getClassLoader();
- Repository repository = Transit.getInstance().getRepository();
- Class c = repository.getPluginClass( classloader, uri );
- Constructor constructor = c.getConstructor( new
Class[]{ControllerContext.class} );
- Controller controller = (Controller) constructor.newInstance(
new Object[]{control} );
- return controller;
- }
- catch( Throwable e )
- {
- final String error =
- "Internal error while attempting to establish the standard
controller.";
- throw new RuntimeException( error, e );
- }
- }
-
-
//----------------------------------------------------------------------------
- // state
-
//----------------------------------------------------------------------------
-
- /**
- * Working directory.
- */
- private File m_work;
-
- /**
- * Temp directory.
- */
- private File m_temp;
-
- /**
- * The assigned logging channel.
- */
- private Logger m_logger;
-
-
//----------------------------------------------------------------------------
- // constructor
-
//----------------------------------------------------------------------------
-
- /**
- * Creation of a new <tt>InitialContext</tt>.
- */
- public InitialContext()
- {
- this( new LoggingAdapter( "metro" ), null, null );
- }
-
- /**
- * Creation of a new <tt>InitialContext</tt>.
- * @param logger the assigned logging channel
- */
- public InitialContext( Logger logger )
- {
- this( logger, null, null );
- }
-
- /**
- * Creation of a new <tt>InitialContext</tt>.
- * @param logger the assigned logging channel
- * @param work the working directory
- * @param temp the temporary directory
- */
- public InitialContext( Logger logger, File work, File temp )
- {
- super( new LoggingAdapter( "metro.context" ) );
-
- m_logger = logger;
-
- if( null == work )
- {
- String path = System.getProperty( "user.dir" );
- m_work = new File( path );
- }
- else
- {
- m_work = work;
- }
-
- if( null == temp )
- {
- String path = System.getProperty( "java.io.tmpdir" );
- m_temp = new File( path );
- }
- else
- {
- m_temp = temp;
- }
- }
-
-
//----------------------------------------------------------------------------
- // Disposable
-
//----------------------------------------------------------------------------
-
- /**
- * Initiate disposal.
- */
- public void dispose()
- {
- getInternalLogger().debug( "initiating context disposal" );
- ControllerDisposalEvent event = new ControllerDisposalEvent( this );
- enqueueEvent( event, false );
- super.dispose();
- getInternalLogger().debug( "disposed" );
- }
-
-
//----------------------------------------------------------------------------
- // ControllerContext
-
//----------------------------------------------------------------------------
-
- /**
- * Return the assigned logging channel
- * @return the logging channel
- */
- public Logger getLogger()
- {
- return m_logger;
- }
-
- /**
- * Return the root working directory.
- *
- * @return directory representing the root of the working directory
hierachy
- */
- public File getWorkingDirectory()
- {
- synchronized( getLock() )
- {
- return m_work;
- }
- }
-
- /**
- * Set the root working directory.
- *
- * @param dir the root of the working directory hierachy
- */
- public void setWorkingDirectory( File dir )
- {
- synchronized( getLock() )
- {
- m_work = dir;
- }
- }
-
- /**
- * Return the root temporary directory.
- *
- * @return directory representing the root of the temporary directory
hierachy.
- */
- public File getTempDirectory()
- {
- synchronized( getLock() )
- {
- return m_temp;
- }
- }
-
- /**
- * Add the supplied controller context listener to the controller
context. A
- * controller implementation should not maintain strong references to
supplied
- * listeners.
- *
- * @param listener the controller context listener to add
- */
- public void addControllerContextListener( ControllerContextListener
listener )
- {
- addListener( listener );
- }
-
- /**
- * Remove the supplied controller context listener from the controller
context.
- *
- * @param listener the controller context listener to remove
- */
- public void removeControllerContextListener( ControllerContextListener
listener )
- {
- removeListener( listener );
- }
-
-
//----------------------------------------------------------------------------
- // impl
-
//----------------------------------------------------------------------------
-
- /**
- * Process a context related event.
- * @param event the event to process
- */
- protected void processEvent( EventObject event )
- {
- if( event instanceof WorkingDirectoryChangeEvent )
- {
- processWorkingDirectoryChangeEvent(
(WorkingDirectoryChangeEvent) event );
- }
- else if( event instanceof TempDirectoryChangeEvent )
- {
- processTempDirectoryChangeEvent( (TempDirectoryChangeEvent)
event );
- }
- else if( event instanceof ControllerDisposalEvent )
- {
- processControllerDisposalEvent( (ControllerDisposalEvent) event
);
- }
- }
-
- private void processWorkingDirectoryChangeEvent(
WorkingDirectoryChangeEvent event )
- {
- EventListener[] listeners = super.listeners();
- for( int i=0; i<listeners.length; i++ )
- {
- EventListener eventListener = listeners[i];
- if( eventListener instanceof ControllerContextListener )
- {
- ControllerContextListener listener =
(ControllerContextListener) eventListener;
- try
- {
- listener.workingDirectoryChanged( event );
- }
- catch( Throwable e )
- {
- final String error =
- "ControllerContextListener working dir change
notification error.";
- getInternalLogger().error( error, e );
- }
- }
- }
- }
-
- private void processTempDirectoryChangeEvent( TempDirectoryChangeEvent
event )
- {
- EventListener[] listeners = super.listeners();
- for( int i=0; i<listeners.length; i++ )
- {
- EventListener eventListener = listeners[i];
- if( eventListener instanceof ControllerContextListener )
- {
- ControllerContextListener listener =
(ControllerContextListener) eventListener;
- try
- {
- listener.tempDirectoryChanged( event );
- }
- catch( Throwable e )
- {
- final String error =
- "ControllerContextListener temp dir change
notification error.";
- getInternalLogger().error( error, e );
- }
- }
- }
- }
-
- private void processControllerDisposalEvent( ControllerDisposalEvent
event )
- {
- EventListener[] listeners = super.listeners();
- for( int i=0; i<listeners.length; i++ )
- {
- EventListener eventListener = listeners[i];
- if( eventListener instanceof ControllerContextListener )
- {
- ControllerContextListener listener =
(ControllerContextListener) eventListener;
- try
- {
- listener.controllerDisposal( event );
- }
- catch( Throwable e )
- {
- final String error =
- "ControllerContextListener disposal notification
error.";
- getInternalLogger().error( error, e );
- }
- }
- }
- }
-
-
//----------------------------------------------------------------------------
- // static (private)
-
//----------------------------------------------------------------------------
-
- /**
- * Working directory change event impl.
- */
- private static class WorkingDirectoryChangeEvent extends
ControllerContextEvent
- {
- public WorkingDirectoryChangeEvent(
- ControllerContext source, File oldDir, File newDir )
- {
- super( source, oldDir, newDir );
- }
- }
-
- /**
- * Temp directory change event impl.
- */
- private static class TempDirectoryChangeEvent extends
ControllerContextEvent
- {
- public TempDirectoryChangeEvent(
- ControllerContext source, File oldDir, File newDir )
- {
- super( source, oldDir, newDir );
- }
- }
-
- /**
- * Disposal event.
- */
- private static class ControllerDisposalEvent extends
ControllerContextEvent
- {
- public ControllerDisposalEvent( ControllerContext source )
- {
- super( source, null, null );
- }
- }
-
- /**
- * Internal utility class to handle context disposal on JVM shutdown.
- */
- private static class ContextShutdownHook extends Thread
- {
- private InitialContext m_context;
-
- /**
- * Creation of a new initial context shutdown hook.
- * @param context the initional context to be shutdown on JVM shutdown
- */
- ContextShutdownHook( InitialContext context )
- {
- m_context = context;
- }
-
- /**
- * Execute context disposal.
- */
- public void run()
- {
- try
- {
- m_context.dispose();
- }
- catch( Throwable e )
- {
- boolean ignorable = true;
- }
- finally
- {
- System.runFinalization();
- }
- }
- }
-}
Deleted:
trunk/main/metro/part/api/src/main/net/dpml/part/local/LocalEventProducer.java
===================================================================
---
trunk/main/metro/part/api/src/main/net/dpml/part/local/LocalEventProducer.java
2006-01-26 05:12:05 UTC (rev 977)
+++
trunk/main/metro/part/api/src/main/net/dpml/part/local/LocalEventProducer.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -1,316 +0,0 @@
-/*
- * Copyright 2005 Stephen J. McConnell.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- * implied.
- *
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package net.dpml.part.local;
-
-import java.util.EventObject;
-import java.util.EventListener;
-import java.util.List;
-import java.util.LinkedList;
-import java.util.Map;
-import java.util.WeakHashMap;
-
-import net.dpml.transit.Logger;
-
-/**
- * A abstract base class that established an event queue and handles event
dispatch
- * operations for listeners declared in a class extending this base class.
- *
- * @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
- * @version @PROJECT-VERSION@
- */
-abstract class LocalEventProducer
-{
-
//----------------------------------------------------------------------------
- // state
-
//----------------------------------------------------------------------------
-
- /**
- * Weak hashmap of event listeners.
- */
- private Map m_listeners = new WeakHashMap();
-
- /**
- * Logging channel.
- */
- private Logger m_logger;
-
- /**
- * Internal synchronization lock.
- */
- private final Object m_lock = new Object();
-
-
//----------------------------------------------------------------------------
- // constructor
-
//----------------------------------------------------------------------------
-
- /**
- * Creation of a new local event producer.
- * @param logger the assigned logging channel
- */
- LocalEventProducer( Logger logger )
- {
- m_logger = logger;
- }
-
-
//----------------------------------------------------------------------------
- // implementation
-
//----------------------------------------------------------------------------
-
- /**
- * Return the internal context logging channel.
- * @return the logging channel
- */
- protected Logger getInternalLogger()
- {
- return m_logger;
- }
-
- /**
- * Return the synchronization lock.
- * @return the lock
- */
- protected Object getLock()
- {
- return m_lock;
- }
-
- /**
- * Dispose of the event producer.
- */
- void dispose()
- {
- m_logger.debug( "context event channel disposal" );
- synchronized( getLock() )
- {
- if( null != m_EVENT_DISPATCH_THREAD )
- {
- m_EVENT_DISPATCH_THREAD.dispose();
- }
- }
- }
-
- /**
- * Abstract operation to be implemented by classes extending this base
class.
- * An implementation is reposible for the posting of the event to
associated
- * listeners. Event posting will be executed under a separate thread to
the
- * thread that initiated the event post.
- *
- * @param event the event to process
- */
- protected abstract void processEvent( EventObject event );
-
- /**
- * Add a listener to the set of listeners handled by this producer.
- * @param listener the event listener
- */
- protected void addListener( EventListener listener )
- {
- if( null == listener )
- {
- throw new NullPointerException( "listener" );
- }
- synchronized( m_lock )
- {
- m_logger.debug( "adding context listener" );
- m_listeners.put( listener, null );
- }
- startEventDispatchThread( m_logger );
- }
-
- /**
- * Remove a listener to the set of listeners handled by this producer.
- * @param listener the event listener
- */
- protected void removeListener( EventListener listener )
- {
- if( null == listener )
- {
- throw new NullPointerException( "listener" );
- }
- synchronized( m_lock )
- {
- m_logger.debug( "removing context listener" );
- m_listeners.remove( listener );
- }
- }
-
- /**
- * Queue of pending notification events. When an event for which
- * there are one or more listeners occurs, it is placed on this queue
- * and the queue is notified. A background thread waits on this queue
- * and delivers the events. This decouples event delivery from
- * the application concern, greatly simplifying locking and reducing
- * opportunity for deadlock.
- */
- private static final List EVENT_QUEUE = new LinkedList();
-
- /**
- * A single background thread ("the event notification thread") monitors
- * the event queue and delivers events that are placed on the queue.
- */
- /**
- * A single background thread ("the event notification thread") monitors
- * the event queue and delivers events that are placed on the queue.
- */
- private static class EventDispatchThread extends Thread
- {
- private boolean m_continue = true;
- private final Logger m_logger;
-
- EventDispatchThread( Logger logger )
- {
- m_logger = logger;
- }
-
- void dispose()
- {
- synchronized( EVENT_QUEUE )
- {
- m_logger.debug( "terminating event dispatch thread" );
- m_continue = false;
- EVENT_QUEUE.notify();
- }
- }
-
- public void run()
- {
- while( m_continue )
- {
- // Wait on EVENT_QUEUE till an event is present
- EventObject event = null;
- synchronized( EVENT_QUEUE )
- {
- try
- {
- while( EVENT_QUEUE.isEmpty() )
- {
- EVENT_QUEUE.wait();
- }
- Object object = EVENT_QUEUE.remove( 0 );
- try
- {
- event = (EventObject) object;
- }
- catch( ClassCastException cce )
- {
- final String error =
- "Unexpected class cast exception while
processing an event."
- + "\nEvent: " + object;
- throw new IllegalStateException( error );
- }
- }
- catch( InterruptedException e )
- {
- return;
- }
- }
-
- Object source = event.getSource();
- if( source instanceof LocalEventProducer )
- {
- LocalEventProducer producer = (LocalEventProducer)
source;
- try
- {
- producer.processEvent( event );
- }
- catch( Throwable e )
- {
- final String error =
- "Unexpected error while processing event."
- + "\nEvent: " + event
- + "\nSource: " + this;
- m_logger.warn( error, e );
- }
- }
- else
- {
- final String error =
- "Event source is not an instance of "
- + LocalEventProducer.class.getName();
- throw new IllegalStateException( error );
- }
- }
- }
- }
-
- private static EventDispatchThread m_EVENT_DISPATCH_THREAD = null;
-
- /**
- * This method starts the event dispatch thread the first time it
- * is called. The event dispatch thread will be started only
- * if someone registers a listener.
- */
- private static synchronized void startEventDispatchThread( Logger logger
)
- {
- if( m_EVENT_DISPATCH_THREAD == null )
- {
- m_EVENT_DISPATCH_THREAD = new EventDispatchThread( logger );
- m_EVENT_DISPATCH_THREAD.setDaemon( true );
- m_EVENT_DISPATCH_THREAD.start();
- }
- }
-
- /**
- * Return this node's preference/node change listeners. Even though
- * we're using a copy-on-write lists, we use synchronized accessors to
- * ensure information transmission from the writing thread to the
- * reading thread.
- */
- protected EventListener[] listeners()
- {
- synchronized( m_lock )
- {
- return (EventListener[]) m_listeners.keySet().toArray( new
EventListener[0] );
- }
- }
-
- /**
- * Enqueue an event for delivery to registered
- * listeners unless there are no registered
- * listeners.
- */
- protected void enqueueEvent( EventObject event )
- {
- enqueueEvent( event, true );
- }
-
- /**
- * Enqueue an event for delivery to registered
- * listeners unless there are no registered
- * listeners.
- */
- protected void enqueueEvent( EventObject event, boolean asynchronouse )
- {
- if( m_listeners.size() != 0 )
- {
- if( asynchronouse )
- {
- synchronized( EVENT_QUEUE )
- {
- EVENT_QUEUE.add( event );
- EVENT_QUEUE.notify();
- }
- }
- else
- {
- processEvent( event );
- }
- }
- }
-}
Deleted:
trunk/main/metro/part/api/src/main/net/dpml/part/local/UnknownPartException.java
===================================================================
---
trunk/main/metro/part/api/src/main/net/dpml/part/local/UnknownPartException.java
2006-01-26 05:12:05 UTC (rev 977)
+++
trunk/main/metro/part/api/src/main/net/dpml/part/local/UnknownPartException.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -1,46 +0,0 @@
-/*
- * Copyright (c) 2005 Stephen J. McConnell
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- * implied.
- *
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package net.dpml.part.local;
-
-/**
- * Exception thrown when a component request an unknown part.
- *
- * @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
- * @version @PROJECT-VERSION@
- */
-public class UnknownPartException extends IllegalArgumentException
-{
- /**
- * Serial version identifier.
- */
- static final long serialVersionUID = 1L;
-
- private String m_type;
-
- /**
- * Creation of a new <tt>UnknownPartException</tt>.
- * @param key the part key
- */
- public UnknownPartException( String key )
- {
- super( key );
- }
-}
-
-
Deleted:
trunk/main/metro/part/api/src/main/net/dpml/part/remote/Component.java
===================================================================
--- trunk/main/metro/part/api/src/main/net/dpml/part/remote/Component.java
2006-01-26 05:12:05 UTC (rev 977)
+++ trunk/main/metro/part/api/src/main/net/dpml/part/remote/Component.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -1,34 +0,0 @@
-/*
- * Copyright (c) 2005-2006 Stephen J. McConnell
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- * implied.
- *
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package net.dpml.part.remote;
-
-import java.rmi.Remote;
-
-import net.dpml.part.ComponentOperations;
-
-/**
- * The Component represents a remote interface to a runtime component type.
- *
- * @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
- * @version @PROJECT-VERSION@
- */
-public interface Component extends Remote, ComponentOperations
-{
-}
-
Deleted:
trunk/main/metro/part/api/src/main/net/dpml/part/remote/ContextEvent.java
===================================================================
--- trunk/main/metro/part/api/src/main/net/dpml/part/remote/ContextEvent.java
2006-01-26 05:12:05 UTC (rev 977)
+++ trunk/main/metro/part/api/src/main/net/dpml/part/remote/ContextEvent.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -1,93 +0,0 @@
-/*
- * Copyright 2005 Stephen J. McConnell.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- * implied.
- *
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package net.dpml.part.remote;
-
-import java.util.EventObject;
-
-/**
- * Event triggered as a result of change to the value of a context entry.
- *
- * @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
- * @version @PROJECT-VERSION@
- */
-public class ContextEvent extends EventObject
-{
- /**
- * Serial version identifier.
- */
- static final long serialVersionUID = 1L;
-
- private final String m_key;
- private final Object m_from;
- private final Object m_to;
-
- /**
- * Construct a new <code>ContextEvent</code>.
- *
- * @param source the source provider
- * @param key the context entry key
- * @param from the original value
- * @param to the new value
- */
- public ContextEvent( final Provider source, String key, Object from,
Object to )
- {
- super( source );
-
- m_key = key;
- m_from = from;
- m_to = to;
- }
-
- /**
- * Return the feature name.
- * @return the name of the modified feature
- */
- public String getKey()
- {
- return m_key;
- }
-
- /**
- * Return the old value.
- * @return the original value
- */
- public Object getOldValue()
- {
- return m_from;
- }
-
- /**
- * Return the new value.
- * @return the new current value
- */
- public Object getNewValue()
- {
- return m_to;
- }
-
- /**
- * Return the component model that initiating the event.
- * @return the source model
- */
- public Provider getProvider()
- {
- return (Provider) super.getSource();
- }
-}
-
Deleted:
trunk/main/metro/part/api/src/main/net/dpml/part/remote/ContextListener.java
===================================================================
---
trunk/main/metro/part/api/src/main/net/dpml/part/remote/ContextListener.java
2006-01-26 05:12:05 UTC (rev 977)
+++
trunk/main/metro/part/api/src/main/net/dpml/part/remote/ContextListener.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -1,41 +0,0 @@
-/*
- * Copyright 2005 Stephen J. McConnell.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- * implied.
- *
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package net.dpml.part.remote;
-
-import java.rmi.Remote;
-import java.rmi.RemoteException;
-import java.util.EventListener;
-
-/**
- * Interface implementated by local listeners to context entry changes.
- *
- * @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
- * @version @PROJECT-VERSION@
- */
-public interface ContextListener extends EventListener, Remote
-{
- /**
- * Notify the listener of a change to a context entry.
- *
- * @param event the context change event
- * @exception RemoteException if a remote transport error occurs
- */
- void entryChanged( final ContextEvent event ) throws RemoteException;
-}
-
Deleted: trunk/main/metro/part/api/src/main/net/dpml/part/remote/Model.java
===================================================================
--- trunk/main/metro/part/api/src/main/net/dpml/part/remote/Model.java
2006-01-26 05:12:05 UTC (rev 977)
+++ trunk/main/metro/part/api/src/main/net/dpml/part/remote/Model.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -1,79 +0,0 @@
-/*
- * Copyright (c) 2005 Stephen J. McConnell
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- * implied.
- *
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package net.dpml.part.remote;
-
-import java.rmi.Remote;
-import java.rmi.RemoteException;
-
-import net.dpml.part.ActivationPolicy;
-
-/**
- * The Model interfaces is used mark a object as manageable context used in
- * the creation of a runtime handler.
- *
- * @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
- * @version @PROJECT-VERSION@
- */
-public interface Model extends Remote
-{
- /**
- * The constant partition separator.
- */
- final String PARTITION_SEPARATOR = "/";
-
- /**
- * Return the path identifying the model. A path commences with the
- * PARTITION_SEPARATOR character and is followed by a model name. If the
- * model exposed nested models, the path is composed of model names
- * seaprated by the PARTITION_SEPARATOR as in "/main/web/handler".
- *
- * @return the context path
- * @exception RemoteException if a remote exception occurs
- */
- String getContextPath() throws RemoteException;
-
- /**
- * Get the activation policy. If the activation policy is STARTUP, an
implementation
- * a handler shall immidiately activation a runtime instance. If the
policy is on DEMAND
- * an implementation shall defer activiation until an explicit request is
received. If
- * the policy if SYSTEM activation may occur at the discretion of an
implementation.
- *
- * @return the activation policy
- * @exception RemoteException if a remote exception occurs
- * @see ActivationPolicy#SYSTEM
- * @see ActivationPolicy#STARTUP
- * @see ActivationPolicy#DEMAND
- */
- ActivationPolicy getActivationPolicy() throws RemoteException;
-
- /**
- * Add a listener to the component model.
- * @param listener the model listener
- * @exception RemoteException if a remote exception occurs
- */
- void addModelListener( ModelListener listener ) throws RemoteException;
-
- /**
- * Remove a listener from the component model.
- * @param listener the model listener
- * @exception RemoteException if a remote exception occurs
- */
- void removeModelListener( ModelListener listener ) throws
RemoteException;
-}
-
Deleted:
trunk/main/metro/part/api/src/main/net/dpml/part/remote/ModelEvent.java
===================================================================
--- trunk/main/metro/part/api/src/main/net/dpml/part/remote/ModelEvent.java
2006-01-26 05:12:05 UTC (rev 977)
+++ trunk/main/metro/part/api/src/main/net/dpml/part/remote/ModelEvent.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -1,93 +0,0 @@
-/*
- * Copyright 2005 Stephen J. McConnell.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- * implied.
- *
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package net.dpml.part.remote;
-
-import java.util.EventObject;
-
-/**
- * Event triggered as a result of a model change.
- *
- * @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
- * @version @PROJECT-VERSION@
- */
-public class ModelEvent extends EventObject
-{
- /**
- * Serial version identifier.
- */
- static final long serialVersionUID = 1L;
-
- private final String m_feature;
- private final Object m_from;
- private final Object m_to;
-
- /**
- * Construct a new <code>ModelEvent</code>.
- *
- * @param source the source component model
- * @param feature the name of the model feature
- * @param from the original value
- * @param to the new value
- */
- public ModelEvent( final Model source, String feature, Object from,
Object to )
- {
- super( source );
-
- m_feature = feature;
- m_from = from;
- m_to = to;
- }
-
- /**
- * Return the feature name.
- * @return the name of the modified feature
- */
- public String getFeature()
- {
- return m_feature;
- }
-
- /**
- * Return the old value.
- * @return the original value
- */
- public Object getOldValue()
- {
- return m_from;
- }
-
- /**
- * Return the new value.
- * @return the new current value
- */
- public Object getNewValue()
- {
- return m_to;
- }
-
- /**
- * Return the component model that initiating the event.
- * @return the source model
- */
- public Model getSourceModel()
- {
- return (Model) super.getSource();
- }
-}
-
Deleted:
trunk/main/metro/part/api/src/main/net/dpml/part/remote/ModelException.java
===================================================================
---
trunk/main/metro/part/api/src/main/net/dpml/part/remote/ModelException.java
2006-01-26 05:12:05 UTC (rev 977)
+++
trunk/main/metro/part/api/src/main/net/dpml/part/remote/ModelException.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -1,59 +0,0 @@
-/*
- * Copyright (c) 2005 Stephen J. McConnell
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- * implied.
- *
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package net.dpml.part.remote;
-
-import java.net.URI;
-
-import net.dpml.part.ControlException;
-
-/**
- * General exception thrown by a context model.
- *
- * @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
- * @version @PROJECT-VERSION@
- */
-public class ModelException extends ControlException
-{
- /**
- * Serial version identifier.
- */
- static final long serialVersionUID = 1L;
-
- /**
- * Creation of a new <tt>ModelException</tt>.
- * @param uri the controller uri
- * @param message the exception message
- */
- public ModelException( URI uri, String message )
- {
- super( uri, message );
- }
-
- /**
- * Creation of a new <tt>ModelException</tt>.
- * @param uri the controller uri
- * @param message the exception message
- * @param cause the causal exception
- */
- public ModelException( URI uri, String message, Throwable cause )
- {
- super( uri, message, cause );
- }
-}
-
Deleted:
trunk/main/metro/part/api/src/main/net/dpml/part/remote/ModelListener.java
===================================================================
---
trunk/main/metro/part/api/src/main/net/dpml/part/remote/ModelListener.java
2006-01-26 05:12:05 UTC (rev 977)
+++
trunk/main/metro/part/api/src/main/net/dpml/part/remote/ModelListener.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -1,41 +0,0 @@
-/*
- * Copyright 2005 Stephen J. McConnell.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- * implied.
- *
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package net.dpml.part.remote;
-
-import java.rmi.Remote;
-import java.rmi.RemoteException;
-import java.util.EventListener;
-
-/**
- * Interface implementated by remote listeners to model change events.
- *
- * @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
- * @version @PROJECT-VERSION@
- */
-public interface ModelListener extends EventListener, Remote
-{
- /**
- * Notify the listener of a model change.
- *
- * @param event the model change event
- * @exception RemoteException if a remote transport error occurs
- */
- void modelChanged( final ModelEvent event ) throws RemoteException;
-}
-
Deleted: trunk/main/metro/part/api/src/main/net/dpml/part/remote/Provider.java
===================================================================
--- trunk/main/metro/part/api/src/main/net/dpml/part/remote/Provider.java
2006-01-26 05:12:05 UTC (rev 977)
+++ trunk/main/metro/part/api/src/main/net/dpml/part/remote/Provider.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -1,33 +0,0 @@
-/*
- * Copyright 2004-2006 Stephen J. McConnell.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- * implied.
- *
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package net.dpml.part.remote;
-
-import java.rmi.Remote;
-
-import net.dpml.part.ProviderOperations;
-
-/**
- * Provider holder.
- *
- * @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
- * @version @PROJECT-VERSION@
- */
-public interface Provider extends Remote, ProviderOperations
-{
-}
Deleted: trunk/main/metro/part/api/src/main/net/dpml/part/remote/Service.java
===================================================================
--- trunk/main/metro/part/api/src/main/net/dpml/part/remote/Service.java
2006-01-26 05:12:05 UTC (rev 977)
+++ trunk/main/metro/part/api/src/main/net/dpml/part/remote/Service.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 2005 Stephen J. McConnell
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- * implied.
- *
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package net.dpml.part.remote;
-
-import java.rmi.Remote;
-import java.rmi.RemoteException;
-
-import net.dpml.part.Version;
-
-
-/**
- * The Component interface is implemented by objects that handle the runtime
- * state of a component instance.
- *
- * @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
- * @version @PROJECT-VERSION@
- */
-public interface Service extends Remote
-{
- /**
- * Return the service class.
- * @return the service class
- * @exception RemoteException if a remoting I/O error occurs
- */
- Class getServiceClass() throws RemoteException;
-
- /**
- * Return the service version.
- * @return the version
- * @exception RemoteException if a remoting I/O error occurs
- */
- Version getVersion() throws RemoteException;
-
-}
-
Modified:
trunk/main/metro/part/content/src/main/net/dpml/part/content/PartContentHandler.java
===================================================================
---
trunk/main/metro/part/content/src/main/net/dpml/part/content/PartContentHandler.java
2006-01-26 05:12:05 UTC (rev 977)
+++
trunk/main/metro/part/content/src/main/net/dpml/part/content/PartContentHandler.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -25,10 +25,10 @@
import java.io.IOException;
import net.dpml.part.Directive;
-import net.dpml.part.local.Controller;
-import net.dpml.part.remote.Model;
-import net.dpml.part.remote.Component;
-import net.dpml.part.remote.Provider;
+import net.dpml.part.Controller;
+import net.dpml.part.Model;
+import net.dpml.part.Component;
+import net.dpml.part.Provider;
/**
* URL content handler support the part datatype.
Modified:
trunk/main/metro/part/test/src/test/net/dpml/test/part/PartLoadingTestCase.java
===================================================================
---
trunk/main/metro/part/test/src/test/net/dpml/test/part/PartLoadingTestCase.java
2006-01-26 05:12:05 UTC (rev 977)
+++
trunk/main/metro/part/test/src/test/net/dpml/test/part/PartLoadingTestCase.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -25,8 +25,8 @@
import junit.framework.TestCase;
import net.dpml.part.Directive;
-import net.dpml.part.local.Controller;
-import net.dpml.part.local.InitialContext;
+import net.dpml.part.Controller;
+import net.dpml.part.InitialContext;
import net.dpml.transit.DefaultTransitModel;
import net.dpml.transit.Transit;
Modified:
trunk/main/metro/runtime/src/main/net/dpml/metro/runtime/ComponentController.java
===================================================================
---
trunk/main/metro/runtime/src/main/net/dpml/metro/runtime/ComponentController.java
2006-01-26 05:12:05 UTC (rev 977)
+++
trunk/main/metro/runtime/src/main/net/dpml/metro/runtime/ComponentController.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -49,8 +49,8 @@
import net.dpml.part.ControlException;
import net.dpml.part.Version;
import net.dpml.metro.PartsManager;
-import net.dpml.part.remote.Component;
-import net.dpml.part.remote.Model;
+import net.dpml.part.Component;
+import net.dpml.part.Model;
import net.dpml.part.ServiceNotFoundException;
import net.dpml.transit.Category;
Modified:
trunk/main/metro/runtime/src/main/net/dpml/metro/runtime/CompositionController.java
===================================================================
---
trunk/main/metro/runtime/src/main/net/dpml/metro/runtime/CompositionController.java
2006-01-26 05:12:05 UTC (rev 977)
+++
trunk/main/metro/runtime/src/main/net/dpml/metro/runtime/CompositionController.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -31,18 +31,18 @@
import net.dpml.metro.data.ComponentDirective;
import net.dpml.metro.ComponentModel;
-import net.dpml.part.local.Controller;
+import net.dpml.part.Controller;
import net.dpml.part.ControlException;
import net.dpml.part.DelegationException;
import net.dpml.part.Directive;
import net.dpml.part.Part;
import net.dpml.part.PartBuilder;
import net.dpml.part.PartHeader;
-import net.dpml.part.local.ControllerContext;
-import net.dpml.part.local.ControllerContextListener;
-import net.dpml.part.local.ControllerContextEvent;
-import net.dpml.part.remote.Model;
-import net.dpml.part.remote.Component;
+import net.dpml.part.ControllerContext;
+import net.dpml.part.ControllerContextListener;
+import net.dpml.part.ControllerContextEvent;
+import net.dpml.part.Model;
+import net.dpml.part.Component;
import net.dpml.transit.Repository;
import net.dpml.transit.Transit;
Modified:
trunk/main/metro/runtime/src/main/net/dpml/metro/runtime/DefaultComponentHandler.java
===================================================================
---
trunk/main/metro/runtime/src/main/net/dpml/metro/runtime/DefaultComponentHandler.java
2006-01-26 05:12:05 UTC (rev 977)
+++
trunk/main/metro/runtime/src/main/net/dpml/metro/runtime/DefaultComponentHandler.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -50,11 +50,11 @@
import net.dpml.part.ControlException;
import net.dpml.part.Version;
import net.dpml.part.ServiceNotFoundException;
-import net.dpml.part.remote.Component;
-import net.dpml.part.remote.Provider;
-import net.dpml.part.remote.Service;
-import net.dpml.part.remote.ModelEvent;
-import net.dpml.part.remote.ModelListener;
+import net.dpml.part.Component;
+import net.dpml.part.Provider;
+import net.dpml.part.Service;
+import net.dpml.part.ModelEvent;
+import net.dpml.part.ModelListener;
import net.dpml.lang.UnknownKeyException;
Modified:
trunk/main/metro/runtime/src/main/net/dpml/metro/runtime/DefaultComponentModel.java
===================================================================
---
trunk/main/metro/runtime/src/main/net/dpml/metro/runtime/DefaultComponentModel.java
2006-01-26 05:12:05 UTC (rev 977)
+++
trunk/main/metro/runtime/src/main/net/dpml/metro/runtime/DefaultComponentModel.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -40,8 +40,8 @@
import net.dpml.part.Directive;
import net.dpml.part.ActivationPolicy;
import net.dpml.part.ControlException;
-import net.dpml.part.remote.ModelListener;
-import net.dpml.part.remote.ModelEvent;
+import net.dpml.part.ModelListener;
+import net.dpml.part.ModelEvent;
import net.dpml.configuration.Configuration;
import net.dpml.configuration.Configurable;
Modified:
trunk/main/metro/runtime/src/main/net/dpml/metro/runtime/DefaultContextModel.java
===================================================================
---
trunk/main/metro/runtime/src/main/net/dpml/metro/runtime/DefaultContextModel.java
2006-01-26 05:12:05 UTC (rev 977)
+++
trunk/main/metro/runtime/src/main/net/dpml/metro/runtime/DefaultContextModel.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -39,9 +39,9 @@
import net.dpml.logging.Logger;
import net.dpml.part.Directive;
-import net.dpml.part.remote.ModelException;
-import net.dpml.part.remote.ModelListener;
-import net.dpml.part.remote.ModelEvent;
+import net.dpml.part.ModelException;
+import net.dpml.part.ModelListener;
+import net.dpml.part.ModelEvent;
import net.dpml.lang.UnknownKeyException;
Modified:
trunk/main/metro/runtime/src/main/net/dpml/metro/runtime/DefaultPartsManager.java
===================================================================
---
trunk/main/metro/runtime/src/main/net/dpml/metro/runtime/DefaultPartsManager.java
2006-01-26 05:12:05 UTC (rev 977)
+++
trunk/main/metro/runtime/src/main/net/dpml/metro/runtime/DefaultPartsManager.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -31,8 +31,8 @@
import net.dpml.metro.ComponentModel;
import net.dpml.part.ControlException;
-import net.dpml.part.remote.Component;
-import net.dpml.part.remote.Model;
+import net.dpml.part.Component;
+import net.dpml.part.Model;
import net.dpml.lang.UnknownKeyException;
Modified:
trunk/main/metro/runtime/src/main/net/dpml/metro/runtime/DefaultProvider.java
===================================================================
---
trunk/main/metro/runtime/src/main/net/dpml/metro/runtime/DefaultProvider.java
2006-01-26 05:12:05 UTC (rev 977)
+++
trunk/main/metro/runtime/src/main/net/dpml/metro/runtime/DefaultProvider.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -29,7 +29,7 @@
import net.dpml.logging.Logger;
-import net.dpml.part.remote.Provider;
+import net.dpml.part.Provider;
import net.dpml.part.ControlException;
import net.dpml.state.State;
Modified:
trunk/main/metro/runtime/src/main/net/dpml/metro/runtime/DefaultService.java
===================================================================
---
trunk/main/metro/runtime/src/main/net/dpml/metro/runtime/DefaultService.java
2006-01-26 05:12:05 UTC (rev 977)
+++
trunk/main/metro/runtime/src/main/net/dpml/metro/runtime/DefaultService.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -18,7 +18,7 @@
package net.dpml.metro.runtime;
-import net.dpml.part.remote.Service;
+import net.dpml.part.Service;
import net.dpml.part.Version;
/**
Modified:
trunk/main/metro/runtime/src/main/net/dpml/metro/runtime/PartsInvocationHandler.java
===================================================================
---
trunk/main/metro/runtime/src/main/net/dpml/metro/runtime/PartsInvocationHandler.java
2006-01-26 05:12:05 UTC (rev 977)
+++
trunk/main/metro/runtime/src/main/net/dpml/metro/runtime/PartsInvocationHandler.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -24,7 +24,7 @@
import net.dpml.metro.ComponentHandler;
import net.dpml.metro.PartsManager;
-import net.dpml.part.remote.Component;
+import net.dpml.part.Component;
/**
* Invoication handler for the Context inner class. The invocation handler
is
Modified:
trunk/main/metro/station/api/src/main/net/dpml/station/Application.java
===================================================================
--- trunk/main/metro/station/api/src/main/net/dpml/station/Application.java
2006-01-26 05:12:05 UTC (rev 977)
+++ trunk/main/metro/station/api/src/main/net/dpml/station/Application.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -21,7 +21,7 @@
import java.rmi.Remote;
import java.rmi.RemoteException;
-import net.dpml.part.remote.Provider;
+import net.dpml.part.Provider;
import net.dpml.transit.PID;
Modified: trunk/main/metro/station/api/src/main/net/dpml/station/Callback.java
===================================================================
--- trunk/main/metro/station/api/src/main/net/dpml/station/Callback.java
2006-01-26 05:12:05 UTC (rev 977)
+++ trunk/main/metro/station/api/src/main/net/dpml/station/Callback.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -21,7 +21,7 @@
import java.rmi.Remote;
import java.rmi.RemoteException;
-import net.dpml.part.remote.Component;
+import net.dpml.part.Component;
import net.dpml.transit.PID;
Modified:
trunk/main/metro/station/console/src/main/net/dpml/station/console/StationPlugin.java
===================================================================
---
trunk/main/metro/station/console/src/main/net/dpml/station/console/StationPlugin.java
2006-01-26 05:12:05 UTC (rev 977)
+++
trunk/main/metro/station/console/src/main/net/dpml/station/console/StationPlugin.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -44,7 +44,7 @@
import net.dpml.station.info.ApplicationDescriptor;
import net.dpml.station.server.RemoteApplicationRegistry;
-import net.dpml.part.remote.Provider;
+import net.dpml.part.Provider;
import net.dpml.state.State;
import net.dpml.state.Operation;
import net.dpml.state.Transition;
Modified:
trunk/main/metro/station/server/src/main/net/dpml/station/server/RemoteApplication.java
===================================================================
---
trunk/main/metro/station/server/src/main/net/dpml/station/server/RemoteApplication.java
2006-01-26 05:12:05 UTC (rev 977)
+++
trunk/main/metro/station/server/src/main/net/dpml/station/server/RemoteApplication.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -34,8 +34,8 @@
import net.dpml.station.info.StartupPolicy;
import net.dpml.station.info.ApplicationDescriptor;
-import net.dpml.part.remote.Component;
-import net.dpml.part.remote.Provider;
+import net.dpml.part.Component;
+import net.dpml.part.Provider;
import net.dpml.station.Callback;
import net.dpml.station.ProcessState;
Modified:
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/AppTestCase.java
===================================================================
---
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/AppTestCase.java
2006-01-26 05:12:05 UTC (rev 977)
+++
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/AppTestCase.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -23,9 +23,9 @@
import junit.framework.TestCase;
-import net.dpml.part.local.Controller;
-import net.dpml.part.remote.Component;
-import net.dpml.part.remote.Provider;
+import net.dpml.part.Controller;
+import net.dpml.part.Component;
+import net.dpml.part.Provider;
import net.dpml.test.app.Demo;
Modified:
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/CategoriesTestCase.java
===================================================================
---
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/CategoriesTestCase.java
2006-01-26 05:12:05 UTC (rev 977)
+++
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/CategoriesTestCase.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -23,9 +23,9 @@
import junit.framework.TestCase;
-import net.dpml.part.local.Controller;
-import net.dpml.part.remote.Component;
-import net.dpml.part.remote.Provider;
+import net.dpml.part.Controller;
+import net.dpml.part.Component;
+import net.dpml.part.Provider;
import net.dpml.test.categories.CategoriesComponent;
Modified:
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/ComponentModelTestCase.java
===================================================================
---
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/ComponentModelTestCase.java
2006-01-26 05:12:05 UTC (rev 977)
+++
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/ComponentModelTestCase.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -23,7 +23,7 @@
import junit.framework.TestCase;
-import net.dpml.part.local.Controller;
+import net.dpml.part.Controller;
import net.dpml.part.ActivationPolicy;
import net.dpml.metro.info.LifestylePolicy;
import net.dpml.metro.info.CollectionPolicy;
Modified:
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/CompositeTestCase.java
===================================================================
---
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/CompositeTestCase.java
2006-01-26 05:12:05 UTC (rev 977)
+++
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/CompositeTestCase.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -24,9 +24,9 @@
import junit.framework.TestCase;
-import net.dpml.part.local.Controller;
-import net.dpml.part.remote.Component;
-import net.dpml.part.remote.Provider;
+import net.dpml.part.Controller;
+import net.dpml.part.Component;
+import net.dpml.part.Provider;
import net.dpml.metro.ComponentHandler;
Modified:
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/ConfigTestCase.java
===================================================================
---
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/ConfigTestCase.java
2006-01-26 05:12:05 UTC (rev 977)
+++
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/ConfigTestCase.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -23,9 +23,9 @@
import junit.framework.TestCase;
-import net.dpml.part.local.Controller;
-import net.dpml.part.remote.Component;
-import net.dpml.part.remote.Provider;
+import net.dpml.part.Controller;
+import net.dpml.part.Component;
+import net.dpml.part.Provider;
import net.dpml.test.config.ConfigurableComponent;
Modified:
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/ContextModelTestCase.java
===================================================================
---
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/ContextModelTestCase.java
2006-01-26 05:12:05 UTC (rev 977)
+++
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/ContextModelTestCase.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -24,7 +24,7 @@
import junit.framework.TestCase;
-import net.dpml.part.local.Controller;
+import net.dpml.part.Controller;
import net.dpml.metro.ComponentManager;
import net.dpml.metro.ContextManager;
Modified:
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/ContextTestCase.java
===================================================================
---
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/ContextTestCase.java
2006-01-26 05:12:05 UTC (rev 977)
+++
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/ContextTestCase.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -24,9 +24,9 @@
import junit.framework.TestCase;
-import net.dpml.part.local.Controller;
-import net.dpml.part.remote.Component;
-import net.dpml.part.remote.Provider;
+import net.dpml.part.Controller;
+import net.dpml.part.Component;
+import net.dpml.part.Provider;
import net.dpml.test.ContextTestComponent;
import net.dpml.test.ContextTestComponent.Context;
Modified:
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/DefaultComponentHandlerTestCase.java
===================================================================
---
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/DefaultComponentHandlerTestCase.java
2006-01-26 05:12:05 UTC (rev 977)
+++
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/DefaultComponentHandlerTestCase.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -23,9 +23,9 @@
import junit.framework.TestCase;
-import net.dpml.part.local.Controller;
-import net.dpml.part.remote.Component;
-import net.dpml.part.remote.Provider;
+import net.dpml.part.Controller;
+import net.dpml.part.Component;
+import net.dpml.part.Provider;
/**
Modified:
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/DisposalTestCase.java
===================================================================
---
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/DisposalTestCase.java
2006-01-26 05:12:05 UTC (rev 977)
+++
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/DisposalTestCase.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -23,8 +23,8 @@
import junit.framework.TestCase;
-import net.dpml.part.local.Controller;
-import net.dpml.part.remote.Component;
+import net.dpml.part.Controller;
+import net.dpml.part.Component;
import net.dpml.part.Disposable;
/**
Modified:
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/HardCollectionPolicyTestCase.java
===================================================================
---
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/HardCollectionPolicyTestCase.java
2006-01-26 05:12:05 UTC (rev 977)
+++
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/HardCollectionPolicyTestCase.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -23,9 +23,9 @@
import junit.framework.TestCase;
-import net.dpml.part.local.Controller;
-import net.dpml.part.remote.Component;
-import net.dpml.part.remote.Provider;
+import net.dpml.part.Controller;
+import net.dpml.part.Component;
+import net.dpml.part.Provider;
/**
* Test HARD collection policy semantics.
Modified:
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/LifecycleTestCase.java
===================================================================
---
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/LifecycleTestCase.java
2006-01-26 05:12:05 UTC (rev 977)
+++
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/LifecycleTestCase.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -23,9 +23,9 @@
import junit.framework.TestCase;
-import net.dpml.part.local.Controller;
-import net.dpml.part.remote.Component;
-import net.dpml.part.remote.Provider;
+import net.dpml.part.Controller;
+import net.dpml.part.Component;
+import net.dpml.part.Provider;
import net.dpml.test.lifecycle.StartableComponent;
Modified:
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/NullTestCase.java
===================================================================
---
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/NullTestCase.java
2006-01-26 05:12:05 UTC (rev 977)
+++
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/NullTestCase.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -20,7 +20,7 @@
import junit.framework.TestCase;
-import net.dpml.part.local.Controller;
+import net.dpml.part.Controller;
/**
* Testing load launch time.
Modified:
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/ObserverTestCase.java
===================================================================
---
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/ObserverTestCase.java
2006-01-26 05:12:05 UTC (rev 977)
+++
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/ObserverTestCase.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -24,9 +24,9 @@
import junit.framework.TestCase;
-import net.dpml.part.remote.Component;
-import net.dpml.part.local.Controller;
-import net.dpml.part.remote.Provider;
+import net.dpml.part.Component;
+import net.dpml.part.Controller;
+import net.dpml.part.Provider;
import net.dpml.metro.data.ValueDirective;
import net.dpml.metro.ComponentModel;
Modified:
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/ParamsTestCase.java
===================================================================
---
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/ParamsTestCase.java
2006-01-26 05:12:05 UTC (rev 977)
+++
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/ParamsTestCase.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -23,9 +23,9 @@
import junit.framework.TestCase;
-import net.dpml.part.local.Controller;
-import net.dpml.part.remote.Component;
-import net.dpml.part.remote.Provider;
+import net.dpml.part.Controller;
+import net.dpml.part.Component;
+import net.dpml.part.Provider;
import net.dpml.test.params.ParameterizableComponent;
Modified:
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/PartsTestCase.java
===================================================================
---
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/PartsTestCase.java
2006-01-26 05:12:05 UTC (rev 977)
+++
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/PartsTestCase.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -24,9 +24,9 @@
import junit.framework.TestCase;
-import net.dpml.part.local.Controller;
-import net.dpml.part.remote.Component;
-import net.dpml.part.remote.Provider;
+import net.dpml.part.Controller;
+import net.dpml.part.Component;
+import net.dpml.part.Provider;
import net.dpml.test.composite.ChildComponent;
import net.dpml.test.composite.PartsComponent;
Modified:
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/ProviderTestCase.java
===================================================================
---
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/ProviderTestCase.java
2006-01-26 05:12:05 UTC (rev 977)
+++
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/ProviderTestCase.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -26,9 +26,9 @@
import junit.framework.TestCase;
-import net.dpml.part.local.Controller;
-import net.dpml.part.remote.Component;
-import net.dpml.part.remote.Provider;
+import net.dpml.part.Controller;
+import net.dpml.part.Component;
+import net.dpml.part.Provider;
import net.dpml.state.State;
import net.dpml.state.StateListener;
import net.dpml.state.impl.DefaultStateListener;
Modified:
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/SingletonProviderTestCase.java
===================================================================
---
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/SingletonProviderTestCase.java
2006-01-26 05:12:05 UTC (rev 977)
+++
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/SingletonProviderTestCase.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -23,9 +23,9 @@
import junit.framework.TestCase;
-import net.dpml.part.local.Controller;
-import net.dpml.part.remote.Component;
-import net.dpml.part.remote.Provider;
+import net.dpml.part.Controller;
+import net.dpml.part.Component;
+import net.dpml.part.Provider;
/**
* Test singleton semantics.
Modified:
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/StateTestCase.java
===================================================================
---
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/StateTestCase.java
2006-01-26 05:12:05 UTC (rev 977)
+++
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/StateTestCase.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -23,9 +23,9 @@
import junit.framework.TestCase;
-import net.dpml.part.local.Controller;
-import net.dpml.part.remote.Component;
-import net.dpml.part.remote.Provider;
+import net.dpml.part.Controller;
+import net.dpml.part.Component;
+import net.dpml.part.Provider;
import net.dpml.test.state.Service;
import net.dpml.test.state.ManagedComponent.Monitor;
Modified:
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/TransientProviderTestCase.java
===================================================================
---
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/TransientProviderTestCase.java
2006-01-26 05:12:05 UTC (rev 977)
+++
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/TransientProviderTestCase.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -23,9 +23,9 @@
import junit.framework.TestCase;
-import net.dpml.part.local.Controller;
-import net.dpml.part.remote.Component;
-import net.dpml.part.remote.Provider;
+import net.dpml.part.Controller;
+import net.dpml.part.Component;
+import net.dpml.part.Provider;
/**
* Test transient semantics.
Modified:
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/WeakCollectionPolicyTestCase.java
===================================================================
---
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/WeakCollectionPolicyTestCase.java
2006-01-26 05:12:05 UTC (rev 977)
+++
trunk/main/metro/test/src/test/net/dpml/metro/runtime/test/WeakCollectionPolicyTestCase.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -23,9 +23,9 @@
import junit.framework.TestCase;
-import net.dpml.part.local.Controller;
-import net.dpml.part.remote.Component;
-import net.dpml.part.remote.Provider;
+import net.dpml.part.Controller;
+import net.dpml.part.Component;
+import net.dpml.part.Provider;
/**
* Test WEAK collection semantics.
Modified:
trunk/main/metro/tools/src/main/net/dpml/metro/tools/ClassLoaderBuilderTask.java
===================================================================
---
trunk/main/metro/tools/src/main/net/dpml/metro/tools/ClassLoaderBuilderTask.java
2006-01-26 05:12:05 UTC (rev 977)
+++
trunk/main/metro/tools/src/main/net/dpml/metro/tools/ClassLoaderBuilderTask.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -30,7 +30,7 @@
import net.dpml.library.info.Scope;
import net.dpml.library.model.Resource;
-import net.dpml.part.local.Controller;
+import net.dpml.part.Controller;
import net.dpml.transit.Category;
Modified:
trunk/main/metro/tools/src/main/net/dpml/metro/tools/PartDataType.java
===================================================================
--- trunk/main/metro/tools/src/main/net/dpml/metro/tools/PartDataType.java
2006-01-26 05:12:05 UTC (rev 977)
+++ trunk/main/metro/tools/src/main/net/dpml/metro/tools/PartDataType.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -28,7 +28,7 @@
import net.dpml.part.Directive;
import net.dpml.part.DelegationException;
import net.dpml.part.PartNotFoundException;
-import net.dpml.part.local.Controller;
+import net.dpml.part.Controller;
import org.apache.tools.ant.Task;
import org.apache.tools.ant.BuildException;
Modified: trunk/main/planet/http/demo/src/test/net/dpml/http/HttpTestCase.java
===================================================================
--- trunk/main/planet/http/demo/src/test/net/dpml/http/HttpTestCase.java
2006-01-26 05:12:05 UTC (rev 977)
+++ trunk/main/planet/http/demo/src/test/net/dpml/http/HttpTestCase.java
2006-01-26 05:55:27 UTC (rev 978)
@@ -24,8 +24,8 @@
import junit.framework.TestCase;
-import net.dpml.part.local.Controller;
-import net.dpml.part.remote.Component;
+import net.dpml.part.Controller;
+import net.dpml.part.Component;
import net.dpml.part.ControlException;
import net.dpml.http.demo.Demo;
- r978 - in trunk/main: central/src/docs/metro/runtime/controller depot/library/common/etc/test/dpml metro/exec/src/main/net/dpml/metro/exec metro/model/src/main/net/dpml/metro metro/part/api/src/main/net/dpml/part metro/part/api/src/main/net/dpml/part/local metro/part/api/src/main/net/dpml/part/remote metro/part/content/src/main/net/dpml/part/content metro/part/test/src/test/net/dpml/test/part metro/runtime/src/main/net/dpml/metro/runtime metro/station/api/src/main/net/dpml/station metro/station/console/src/main/net/dpml/station/console metro/station/server/src/main/net/dpml/station/server metro/test/src/test/net/dpml/metro/runtime/test metro/tools/src/main/net/dpml/metro/tools planet/http/demo/src/test/net/dpml/http, mcconnell at BerliOS, 01/26/2006
Archive powered by MHonArc 2.6.24.