You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@avalon.apache.org by bl...@apache.org on 2001/04/06 16:00:09 UTC
cvs commit: jakarta-avalon/proposal/4.0/src/java/org/apache/framework/component DefaultRoleManager.java RoleManager.java DefaultComponentManager.java DefaultRoleInfo.java RoleInfo.java
bloritsch 01/04/06 07:00:09
Modified: proposal/4.0/src/java/org/apache/framework/component
DefaultComponentManager.java
Added: proposal/4.0/src/java/org/apache/framework/component
DefaultRoleManager.java RoleManager.java
Removed: proposal/4.0/src/java/org/apache/framework/component
DefaultRoleInfo.java RoleInfo.java
Log:
Reworked ComponentManagement infrastructure a little bit.
Revision Changes Path
1.3 +45 -59 jakarta-avalon/proposal/4.0/src/java/org/apache/framework/component/DefaultComponentManager.java
Index: DefaultComponentManager.java
===================================================================
RCS file: /home/cvs/jakarta-avalon/proposal/4.0/src/java/org/apache/framework/component/DefaultComponentManager.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- DefaultComponentManager.java 2001/04/05 19:38:43 1.2
+++ DefaultComponentManager.java 2001/04/06 14:00:05 1.3
@@ -6,7 +6,7 @@
* the LICENSE file. *
*****************************************************************************/
-package org.apache.framework.component;
+package org.apache.avalon.component;
import java.util.HashMap;
import java.util.Map;
@@ -15,22 +15,26 @@
import java.util.ArrayList;
import java.util.List;
-import org.apache.framework.context.Context;
-import org.apache.framework.context.Contextualizable;
-import org.apache.framework.configuration.Configurable;
-import org.apache.framework.configuration.Configuration;
-import org.apache.framework.configuration.ConfigurationException;
-import org.apache.framework.configuration.DefaultConfiguration;
-import org.apache.framework.lifecycle.Disposable;
-import org.apache.framework.lifecycle.Initializable;
-import org.apache.framework.logger.AbstractLoggable;
+import org.apache.avalon.ComponentManager;
+import org.apache.avalon.Component;
+import org.apache.avalon.ComponentManagerException;
+import org.apache.avalon.Context;
+import org.apache.avalon.Contextualizable;
+import org.apache.avalon.configuration.Configurable;
+import org.apache.avalon.configuration.Configuration;
+import org.apache.avalon.Composer;
+import org.apache.avalon.configuration.ConfigurationException;
+import org.apache.avalon.configuration.DefaultConfiguration;
+import org.apache.avalon.Disposable;
+import org.apache.avalon.Initializable;
+import org.apache.avalon.AbstractLoggable;
/**
* Default component manager for Avalon's components.
*
* @author <a href="mailto:bloritsch@apache.org">Berin Loritsch</a>
* @author <a href="mailto:paul@luminas.co.uk">Paul Russell</a>
- * @version CVS $Revision: 1.2 $ $Date: 2001/04/05 19:38:43 $
+ * @version CVS $Revision: 1.3 $ $Date: 2001/04/06 14:00:05 $
*/
public class DefaultComponentManager extends AbstractLoggable
implements ComponentManager, Configurable, Contextualizable, Disposable {
@@ -49,7 +53,7 @@
/** RoleInfos.
*/
- private RoleInfo roles;
+ private RoleManager roles;
/** Is the Manager disposed or not? */
private boolean disposed = false;
@@ -102,7 +106,7 @@
* case, the Role's FQN is appended with "Selector", and we return a ComponentSelector.
*/
public Component lookup( String role )
- throws ComponentException {
+ throws ComponentManagerException {
if (disposed) throw new IllegalStateException("You cannot lookup components on a disposed ComponentManager");
@@ -111,7 +115,7 @@
if ( role == null ) {
getLogger().error("ComponentManager Attempted to retrieve component with null role.");
- throw new ComponentException("Attempted to retrieve component with null role.");
+ throw new ComponentManagerException("Attempted to retrieve component with null role.");
}
handler = (DefaultComponentHandler) this.componentHandlers.get(role);
@@ -122,14 +126,14 @@
Configuration config = new DefaultConfiguration("", "-");
try {
- componentClass = this.getClass().getClassLoader().loadClass(roles.defaultClass(role));
+ componentClass = this.getClass().getClassLoader().loadClass(roles.getDefaultClassNameForRole(role));
handler = new DefaultComponentHandler(componentClass, config, this, this.context);
handler.setLogger(getLogger());
handler.init();
} catch (Exception e) {
getLogger().error("ComponentManager Could not find component for role: " + role, e);
- throw new ComponentException("Could not find component for role: " + role, e);
+ throw new ComponentManagerException("Could not find component for role: " + role, e);
}
this.componentHandlers.put(role, handler);
@@ -143,10 +147,10 @@
try {
component = handler.get();
} catch (Exception ee) {
- throw new ComponentException("Could not access the Component for you", ee);
+ throw new ComponentManagerException("Could not access the Component for you", ee);
}
} catch (Exception e) {
- throw new ComponentException("Could not access the Component for you", e);
+ throw new ComponentManagerException("Could not access the Component for you", e);
}
this.componentMapping.put(component, handler);
@@ -157,56 +161,38 @@
* Configure the ComponentManager.
*/
public void configure(Configuration conf) throws ConfigurationException {
- DefaultRoleInfo role_info = new DefaultRoleInfo();
+ DefaultRoleManager role_info = new DefaultRoleManager();
role_info.setLogger(getLogger());
role_info.configure(conf);
roles = role_info;
// Set components
- Configuration[] e = conf.getChildren("component");
+ Configuration[] e = conf.getChildren();
for (int i = 0; i < e.length; i++) {
- String type = e[i].getAttribute("type", "");
- String role = e[i].getAttribute("role", "");
- String className = e[i].getAttribute("class", "");
+ String type = e[i].getName(); // types are already trimmed
- if (! "".equals(type)) {
- role = roles.lookup(type);
- }
-
- if ("".equals(className)) {
- className = roles.defaultClass(role);
- }
-
- try {
- getLogger().debug("Adding component (" + role + " = " + className + ")");
- this.addComponent(role, this.getClass().getClassLoader().loadClass(className),e[i]);
- } catch ( Exception ex ) {
- getLogger().error("Could not load class " + className, ex);
- throw new ConfigurationException("Could not get class " + className
- + " for role " + role, ex);
- }
- }
-
- Iterator r = roles.shorthandNames();
- while (r.hasNext()) {
- Configuration co = conf.getChild((String) r.next(), false);
-
- if (co != null) {
- String role = roles.lookup(co.getName());
- String className = co.getAttribute("class", "");
+ if (("role".equals(type) == false)) {
+ String role = e[i].getAttribute("role", "");
+ String className = e[i].getAttribute("class", "");
- if ("".equals(className)) {
- className = roles.defaultClass(role);
+ if ("".equals(role)) {
+ role = roles.getRoleForName(type);
}
- try {
- getLogger().debug("Adding component (" + role + " = " + className + ")");
- this.addComponent(role, this.getClass().getClassLoader().loadClass(className), co);
- } catch ( Exception ex ) {
- getLogger().error("Could not load class " + className, ex);
- throw new ConfigurationException("Could not get class " + className
- + " for role " + role, ex);
+ if (role != null && ("".equals(role) == false)) {
+ if ("".equals(className)) {
+ className = roles.getDefaultClassNameForRole(role);
+ }
+
+ try {
+ getLogger().debug("Adding component (" + role + " = " + className + ")");
+ this.addComponent(role, this.getClass().getClassLoader().loadClass(className), e[i]);
+ } catch ( Exception ex ) {
+ getLogger().error("Could not load class " + className, ex);
+ throw new ConfigurationException("Could not get class " + className
+ + " for role " + role + " on configuration element " + e[i].getName(), ex);
+ }
}
}
}
@@ -230,13 +216,13 @@
* @param Configuration the configuration for this component.
*/
public void addComponent(String role, Class component, Configuration config)
- throws ComponentException {
+ throws ComponentManagerException {
try {
DefaultComponentHandler handler = new DefaultComponentHandler(component, config, this, this.context);
handler.setLogger(getLogger());
this.componentHandlers.put(role, handler);
} catch (Exception e) {
- throw new ComponentException ("Could not set up Component for role: " + role, e);
+ throw new ComponentManagerException ("Could not set up Component for role: " + role, e);
}
}
1.1 jakarta-avalon/proposal/4.0/src/java/org/apache/framework/component/DefaultRoleManager.java
Index: DefaultRoleManager.java
===================================================================
/*****************************************************************************
* Copyright (C) The Apache Software Foundation. All rights reserved. *
* ------------------------------------------------------------------------- *
* This software is published under the terms of the Apache Software License *
* version 1.1, a copy of which has been included with this distribution in *
* the LICENSE file. *
*****************************************************************************/
package org.apache.avalon.component;
import java.util.Map;
import java.util.Iterator;
import java.util.HashMap;
import java.util.Collections;
import org.apache.avalon.configuration.Configurable;
import org.apache.avalon.configuration.Configuration;
import org.apache.avalon.AbstractLoggable;
import org.apache.avalon.configuration.ConfigurationException;
/**
* Default RoleManager implementation. It populates the RoleManager
* from a configuration file.
*
* @author <a href="mailto:bloritsch@apache.org">Berin Loritsch</a>
* @author <a href="mailto:ricardo@apache,org">Ricardo Rocha</a>
* @author <a href="mailto:giacomo@apache,org">Giacomo Pati</a>
* @version CVS $Revision: 1.1 $ $Date: 2001/04/06 14:00:06 $
*/
public class DefaultRoleManager extends AbstractLoggable implements RoleManager, Configurable {
private Map shorthands = new HashMap();
private Map classNames = new HashMap();
public final String getRoleForName(String shorthandName) {
getLogger().debug("looking up role " + shorthandName + ", returning " + (String) this.shorthands.get(shorthandName));
return (String) this.shorthands.get(shorthandName);
}
public final String getDefaultClassNameForRole(String role) {
return (String) this.classNames.get(role);
}
protected final void addRole(String name, String shorthand, String defaultClassName) {
this.shorthands.put(shorthand, name);
if (defaultClassName != null) {
this.classNames.put(name, defaultClassName);
}
}
public final void configure(Configuration conf) throws ConfigurationException {
Configuration[] roles = conf.getChildren("role");
for (int i = 0; i < roles.length; i++) {
String name = roles[i].getAttribute("name");
String shorthand = roles[i].getAttribute("shorthand");
String defaultClassName = roles[i].getAttribute("default-class", null);
this.addRole(name, shorthand, defaultClassName);
getLogger().debug("added Role " + name + " with shorthand " + shorthand + " for " + defaultClassName);
}
this.shorthands = Collections.unmodifiableMap(this.shorthands);
this.classNames = Collections.unmodifiableMap(this.classNames);
}
}
1.1 jakarta-avalon/proposal/4.0/src/java/org/apache/framework/component/RoleManager.java
Index: RoleManager.java
===================================================================
/*****************************************************************************
* Copyright (C) The Apache Software Foundation. All rights reserved. *
* ------------------------------------------------------------------------- *
* This software is published under the terms of the Apache Software License *
* version 1.1, a copy of which has been included with this distribution in *
* the LICENSE file. *
*****************************************************************************/
package org.apache.avalon.component;
import java.util.Iterator;
/**
* RoleManager Interface, use this to specify the Roles and how they
* correspond easy shorthand names.
*
* @author <a href="mailto:bloritsch@apache.org">Berin Loritsch</a>
* @author <a href="mailto:ricardo@apache,org">Ricardo Rocha</a>
* @author <a href="mailto:giacomo@apache,org">Giacomo Pati</a>
* @version CVS $Revision: 1.1 $ $Date: 2001/04/06 14:00:07 $
*/
public interface RoleManager {
/**
* Find Role name based on shorthand name. Please note that if
* this returns <code>null</code> or an empty string, then the
* shorthand name is assumed to be a "reserved word". In other
* words, you should not try to instantiate a class from an empty
* role.
*/
public String getRoleForName(String shorthandName);
/**
* Get the default classname for a given role
*/
public String getDefaultClassNameForRole(String role);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: avalon-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: avalon-dev-help@jakarta.apache.org