You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@struts.apache.org by dg...@apache.org on 2005/06/14 23:59:17 UTC
svn commit: r190662 [3/6] - in /struts/sandbox/trunk/tiles: ./ core-library/
core-library/src/ core-library/src/conf/ core-library/src/java/
core-library/src/java/org/ core-library/src/java/org/apache/
core-library/src/java/org/apache/taglib/
core-library/src/java/org/apache/taglib/tiles/
core-library/src/java/org/apache/taglib/tiles/doc-files/
core-library/src/java/org/apache/taglib/tiles/util/
core-library/src/java/org/apache/tiles/
core-library/src/java/org/apache/tiles/beans/
core-library/src/java/org/apache/tiles/definition/
core-library/src/java/org/apache/tiles/doc-files/
core-library/src/java/org/apache/tiles/servlets/
core-library/src/java/org/apache/tiles/xmlDefinition/
core-library/src/java/org/apache/util/ core-library/src/test/ examples/
examples/simple/ examples/simple/WEB-INF/ examples/simple/WEB-INF/lib/
examples/simple/graphics/ examples/simple/graphics/flags/
Added: struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/ComponentContext.java
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/ComponentContext.java?rev=190662&view=auto
==============================================================================
--- struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/ComponentContext.java (added)
+++ struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/ComponentContext.java Tue Jun 14 14:59:13 2005
@@ -0,0 +1,197 @@
+/*
+ * Copyright 2004-2005 The Apache Software Foundation.
+ *
+ * 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 org.apache.tiles;
+
+import java.io.Serializable;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+import javax.servlet.ServletRequest;
+import javax.servlet.jsp.PageContext;
+
+import org.apache.taglib.tiles.ComponentConstants;
+
+/**
+ * Component context.
+ */
+public class ComponentContext implements Serializable {
+
+ /**
+ * Component attributes.
+ */
+ private Map attributes=null;
+
+ /**
+ * Constructor.
+ */
+ public ComponentContext() {
+ super();
+ }
+
+ /**
+ * Constructor.
+ * Create a context and set specified attributes.
+ * @param attributes Attributes to initialize context.
+ */
+ public ComponentContext(Map attributes) {
+ if (attributes != null) {
+ this.attributes = new HashMap(attributes);
+ }
+ }
+
+ /**
+ * Add all attributes to this context.
+ * Copies all of the mappings from the specified attribute map to this context.
+ * New attribute mappings will replace any mappings that this context had for any of the keys
+ * currently in the specified attribute map.
+ * @param newAttributes Attributes to add.
+ */
+ public void addAll(Map newAttributes) {
+ if (attributes == null) {
+ attributes = new HashMap(newAttributes);
+ return;
+ }
+
+ attributes.putAll(newAttributes);
+ }
+
+ /**
+ * Add all missing attributes to this context.
+ * Copies all of the mappings from the specified attributes map to this context.
+ * New attribute mappings will be added only if they don't already exist in
+ * this context.
+ * @param defaultAttributes Attributes to add.
+ */
+ public void addMissing(Map defaultAttributes) {
+ if (defaultAttributes == null) {
+ return;
+ }
+
+ if (attributes == null) {
+ attributes = new HashMap(defaultAttributes);
+ return;
+ }
+
+ Set entries = defaultAttributes.entrySet();
+ Iterator iterator = entries.iterator();
+ while (iterator.hasNext()) {
+ Map.Entry entry = (Map.Entry) iterator.next();
+ if (!attributes.containsKey(entry.getKey())) {
+ attributes.put(entry.getKey(), entry.getValue());
+ }
+ }
+ }
+
+ /**
+ * Get an attribute from context.
+ * @param name Name of the attribute.
+ * @return <{Object}>
+ */
+ public Object getAttribute(String name) {
+ if (attributes == null){
+ return null;
+ }
+
+ return attributes.get(name);
+ }
+
+ /**
+ * Get names of all attributes.
+ * @return <{Object}>
+ */
+ public Iterator getAttributeNames() {
+ if (attributes == null) {
+ return Collections.EMPTY_LIST.iterator();
+ }
+
+ return attributes.keySet().iterator();
+ }
+
+ /**
+ * Put a new attribute to context.
+ * @param name Name of the attribute.
+ * @param value Value of the attribute.
+ */
+ public void putAttribute(String name, Object value) {
+ if (attributes == null) {
+ attributes = new HashMap();
+ }
+
+ attributes.put(name, value);
+ }
+
+ /**
+ * Find object in one of the contexts.
+ * Order : component then pageContext.findAttribute()
+ * @param beanName Name of the bean to find.
+ * @param pageContext Page context.
+ * @return Requested bean or <code>null</code> if not found.
+ */
+ public Object findAttribute(String beanName, PageContext pageContext) {
+ Object attribute = getAttribute(beanName);
+ if (attribute == null) {
+ attribute = pageContext.findAttribute(beanName);
+ }
+
+ return attribute;
+ }
+
+ /**
+ * Get object from requested context.
+ * Context can be 'component'.
+ * @param beanName Name of the bean to find.
+ * @param scope Search scope (see {@link PageContext}).
+ * @param pageContext Page context.
+ * @return requested bean or <code>null</code> if not found.
+ */
+ public Object getAttribute(
+ String beanName,
+ int scope,
+ PageContext pageContext) {
+
+ if (scope == ComponentConstants.COMPONENT_SCOPE){
+ return getAttribute(beanName);
+ }
+
+ return pageContext.getAttribute(beanName, scope);
+ }
+
+ /**
+ * Get component context from request.
+ * @param request ServletRequest.
+ * @return ComponentContext
+ */
+ static public ComponentContext getContext(ServletRequest request) {
+ return (ComponentContext) request.getAttribute(
+ ComponentConstants.COMPONENT_CONTEXT);
+ }
+
+ /**
+ * Store component context into request.
+ * @param context ComponentContext to store.
+ * @param request Request to store ComponentContext.
+ */
+ static public void setContext(
+ ComponentContext context,
+ ServletRequest request) {
+
+ request.setAttribute(ComponentConstants.COMPONENT_CONTEXT, context);
+ }
+}
Added: struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/ComponentDefinition.java
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/ComponentDefinition.java?rev=190662&view=auto
==============================================================================
--- struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/ComponentDefinition.java (added)
+++ struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/ComponentDefinition.java Tue Jun 14 14:59:13 2005
@@ -0,0 +1,545 @@
+/*
+ * Copyright 2004-2005 The Apache Software Foundation.
+ *
+ * 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 org.apache.tiles;
+
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.tiles.xmlDefinition.XmlDefinition;
+import org.apache.tiles.TilesUtil;
+
+/**
+ * Definition of a template / component attributes.
+ * Attributes of a component can be defined with the help of this class.
+ * An instance of this class can be used as a bean, and passed to 'insert' tag.
+ *
+ * @author Cedric Dumoulin
+ * @author David Geary
+ */
+public class ComponentDefinition implements Serializable {
+
+ /**
+ * Commons Logging instance.
+ */
+ protected static Log log = LogFactory.getLog(ComponentDefinition.class);
+
+ /**
+ * Definition name
+ */
+ protected String name = null;
+
+ /**
+ * Component / template path (URL).
+ */
+ protected String path = null;
+
+ /**
+ * Attributes defined for the component.
+ */
+ protected Map attributes = null;
+
+ /**
+ * Role associated to definition.
+ */
+ protected String role = null;
+
+ /** Associated Controller URL or classname, if defined */
+ protected String controller = null;
+
+ /**
+ * Associated Controller typename, if controllerName defined.
+ * Can be CONTROLLER, ACTION or URL, or null.
+ */
+ protected String controllerType = null;
+
+ /**
+ * Controller name type.
+ */
+ public static final String URL = "url";
+
+ /**
+ * Controller name type.
+ */
+ public static final String CONTROLLER = "controller";
+
+ /**
+ * Controller name type.
+ */
+ public static final String ACTION = "action";
+
+ /**
+ * Controller associated to Definition.
+ * Lazy creation : only on first request
+ */
+ private Controller controllerInstance = null;
+
+ /**
+ * Constructor.
+ */
+ public ComponentDefinition() {
+ attributes = new HashMap();
+ }
+
+ /**
+ * Copy Constructor.
+ * Create a new definition initialized with parent definition.
+ * Do a shallow copy : attributes are shared between copies, but not the Map
+ * containing attributes.
+ */
+ public ComponentDefinition(ComponentDefinition definition) {
+ attributes = new HashMap(definition.getAttributes());
+ this.name = definition.getName();
+ this.path = definition.getPath();
+ this.role = definition.getRole();
+ this.controllerInstance = definition.getControllerInstance();
+ this.controller = definition.getController();
+ this.controllerType = definition.getControllerType();
+ }
+
+ /**
+ * Constructor.
+ * Create a new definition initialized from a RawDefinition.
+ * Raw definitions are used to read definition from a data source (xml file, db, ...).
+ * A RawDefinition mainly contains properties of type String, while Definition
+ * contains more complex type (ex : Controller).
+ * Do a shallow copy : attributes are shared between objects, but not the Map
+ * containing attributes.
+ * OO Design issues : Actually RawDefinition (XmlDefinition) extends ComponentDefinition.
+ * This must not be the case. I have do it because I am lazy.
+ * @throws InstantiationException if an error occur while instanciating Controller :
+ * (classname can't be instanciated, Illegal access with instanciated class,
+ * Error while instanciating class, classname can't be instanciated.
+ */
+ public ComponentDefinition(XmlDefinition definition) {
+
+ this((ComponentDefinition) definition);
+ }
+
+ /**
+ * Constructor.
+ */
+ public ComponentDefinition(String name, String path, Map attributes) {
+ this.name = name;
+ this.path = path;
+ this.attributes = attributes;
+ }
+
+ /**
+ * Access method for the name property.
+ *
+ * @return the current value of the name property
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * Sets the value of the name property.
+ *
+ * @param aName the new value of the name property
+ */
+ public void setName(String aName) {
+ name = aName;
+ }
+
+ /**
+ * Access method for the path property.
+ *
+ * @return The current value of the path property.
+ */
+ public String getPage() {
+ return path;
+ }
+
+ /**
+ * Sets the value of the path property.
+ *
+ * @param aPath the new value of the path property
+ */
+ public void setPage(String page) {
+ path = page;
+ }
+
+ /**
+ * Access method for the path property.
+ *
+ * @return the current value of the path property
+ */
+ public String getPath() {
+ return path;
+ }
+
+ /**
+ * Sets the value of the path property.
+ *
+ * @param aPath the new value of the path property
+ */
+ public void setPath(String aPath) {
+ path = aPath;
+ }
+
+ /**
+ * Access method for the template property.
+ * Same as getPath()
+ * @return the current value of the template property
+ */
+ public String getTemplate() {
+ return path;
+ }
+
+ /**
+ * Sets the value of the template property.
+ * Same as setPath()
+ *
+ * @param template the new value of the path property
+ */
+ public void setTemplate(String template) {
+ path = template;
+ }
+
+ /**
+ * Access method for the role property.
+ * @return the current value of the role property
+ */
+ public String getRole() {
+ return role;
+ }
+
+ /**
+ * Sets the value of the role property.
+ *
+ * @param role the new value of the path property
+ */
+ public void setRole(String role) {
+ this.role = role;
+ }
+
+ /**
+ * Access method for the attributes property.
+ * If there is no attributes, return an empty map.
+ * @return the current value of the attributes property
+ */
+ public Map getAttributes() {
+ return attributes;
+ }
+
+ /**
+ * Returns the value of the named attribute as an Object, or null if no
+ * attribute of the given name exists.
+ *
+ * @return requested attribute or null if not found
+ */
+ public Object getAttribute(String key) {
+ return attributes.get(key);
+ }
+
+ /**
+ * Put a new attribute in this component
+ *
+ * @param key String key for attribute
+ * @param value Attibute value.
+ */
+ public void putAttribute(String key, Object value) {
+ attributes.put(key, value);
+ }
+
+ /**
+ * Put an attribute in component / template definition.
+ * Attribute can be used as content for tag get.
+ * @param name Attribute name
+ * @param content Attribute value
+ */
+ public void put(String name, Object content) {
+ put(name, content, false, null);
+ }
+
+ /**
+ * Put an attribute in template definition.
+ * Attribute can be used as content for tag get.
+ * @param name Attribute name
+ * @param content Attribute value ยต
+ * @param direct Determines how content is handled by get tag: true means content is printed directly; false, the default, means content is included
+ */
+ public void put(String name, Object content, boolean direct) {
+ put(name, content, direct, null);
+ }
+
+ /**
+ * Put an attribute in template definition.
+ * Attribute can be used as content for tag get.
+ * @param name Attribute name
+ * @param content Attribute value
+ * @param direct Determines how content is handled by get tag: true means content is printed directly; false, the default, means content is included
+ * @param role Determine if content is used by get tag. If user is in role, content is used.
+ */
+ public void put(String name, Object content, boolean direct, String role) {
+ if (direct == true) { // direct String
+ put(name, content, "string", role);
+ } else {
+ put(name, content, "template", role);
+ }
+
+ }
+
+ /**
+ * Put an attribute in template definition.
+ * Attribute can be used as content for tag get.
+ * @param name Attribute name
+ * @param content Attribute value
+ * @param type attribute type: template, string, definition
+ * @param role Determine if content is used by get tag. If user is in role, content is used.
+ */
+ public void put(String name, Object content, String type, String role) {
+ // Is there a type set ?
+ // First check direct attribute, and translate it to a valueType.
+ // Then, evaluate valueType, and create requested typed attribute.
+ AttributeDefinition attribute = null;
+
+ if (content != null
+ && type != null
+ && !(content instanceof AttributeDefinition)) {
+
+ String strValue = content.toString();
+ if (type.equalsIgnoreCase("string")) {
+ attribute = new DirectStringAttribute(strValue);
+
+ } else if (type.equalsIgnoreCase("page")) {
+ attribute = new PathAttribute(strValue);
+
+ } else if (type.equalsIgnoreCase("template")) {
+ attribute = new PathAttribute(strValue);
+
+ } else if (type.equalsIgnoreCase("instance")) {
+ attribute = new DefinitionNameAttribute(strValue);
+
+ } else if (type.equalsIgnoreCase("definition")) {
+ attribute = new DefinitionNameAttribute(strValue);
+ }
+ }
+
+ putAttribute(name, attribute);
+ }
+
+ /**
+ * Returns a description of the attributes.
+ */
+ public String toString() {
+ return "{name="
+ + name
+ + ", path="
+ + path
+ + ", role="
+ + role
+ + ", controller="
+ + controller
+ + ", controllerType="
+ + controllerType
+ + ", controllerInstance="
+ + controllerInstance
+ + ", attributes="
+ + attributes
+ + "}\n";
+ }
+
+ /**
+ * Get associated controller type.
+ * Type denote a fully qualified classname.
+ */
+ public String getControllerType() {
+ return controllerType;
+ }
+
+ /**
+ * Set associated controller type.
+ * Type denote a fully qualified classname.
+ * @param controllerType Typeof associated controller
+ */
+ public void setControllerType(String controllerType) {
+ this.controllerType = controllerType;
+ }
+
+ /**
+ * Set associated controller name as an url, and controller
+ * type as "url".
+ * Name must be an url (not checked).
+ * Convenience method.
+ * @param controller Controller url
+ */
+ public void setControllerUrl(String controller) {
+ setController(controller);
+ setControllerType("url");
+ }
+
+ /**
+ * Set associated controller name as a classtype, and controller
+ * type as "classname".
+ * Name denote a fully qualified classname
+ * Convenience method.
+ * @param controller Controller classname.
+ */
+ public void setControllerClass(String controller) {
+ setController(controller);
+ setControllerType("classname");
+ }
+
+ /**
+ * Get associated controller local URL.
+ * URL should be local to webcontainer in order to allow request context followup.
+ * URL comes as a string.
+ */
+ public String getController() {
+ return controller;
+ }
+
+ /**
+ * Set associated controller URL.
+ * URL should be local to webcontainer in order to allow request context followup.
+ * URL is specified as a string.
+ * @param url Url called locally
+ */
+ public void setController(String url) {
+ this.controller = url;
+ }
+
+ /**
+ * Get controller instance.
+ * @return controller instance.
+ */
+ public Controller getControllerInstance() {
+ return controllerInstance;
+ }
+
+ /**
+ * Get or create controller.
+ * Get controller, create it if necessary.
+ * @return controller if controller or controllerType is set, null otherwise.
+ * @throws InstantiationException if an error occur while instanciating Controller :
+ * (classname can't be instanciated, Illegal access with instanciated class,
+ * Error while instanciating class, classname can't be instanciated.
+ */
+ public Controller getOrCreateController() throws InstantiationException {
+
+ if (controllerInstance != null) {
+ return controllerInstance;
+ }
+
+ // Do we define a controller ?
+ if (controller == null && controllerType == null) {
+ return null;
+ }
+
+ // check parameters
+ if (controllerType != null && controller == null) {
+ throw new InstantiationException("Controller name should be defined if controllerType is set");
+ }
+
+ controllerInstance = createController(controller, controllerType);
+
+ return controllerInstance;
+ }
+
+ /**
+ * Set controller.
+ */
+ public void setControllerInstance(Controller controller) {
+ this.controllerInstance = controller;
+ }
+
+ /**
+ * Create a new instance of controller named in parameter.
+ * If controllerType is specified, create controller accordingly.
+ * Otherwise, if name denote a classname, create an instance of it. If class is
+ * subclass of org.apache.struts.action.Action, wrap controller
+ * appropriately.
+ * Otherwise, consider name as an url.
+ * @param name Controller name (classname, url, ...)
+ * @param controllerType Expected Controller type
+ * @return org.apache.tiles.Controller
+ * @throws InstantiationException if an error occur while instanciating Controller :
+ * (classname can't be instanciated, Illegal access with instanciated class,
+ * Error while instanciating class, classname can't be instanciated.
+ */
+ public static Controller createController(String name, String controllerType)
+ throws InstantiationException {
+
+ if (log.isDebugEnabled()) {
+ log.debug("Create controller name=" + name + ", type=" + controllerType);
+ }
+
+ Controller controller = null;
+
+ if (controllerType == null) { // first try as a classname
+ try {
+ return createControllerFromClassname(name);
+
+ } catch (InstantiationException ex) { // ok, try something else
+ controller = new UrlController(name);
+ }
+
+ } else if ("url".equalsIgnoreCase(controllerType)) {
+ controller = new UrlController(name);
+
+ } else if ("classname".equalsIgnoreCase(controllerType)) {
+ controller = createControllerFromClassname(name);
+ }
+
+ return controller;
+ }
+
+ /**
+ * Create a controller from specified classname
+ * @param classname Controller classname.
+ * @return org.apache.tiles.Controller
+ * @throws InstantiationException if an error occur while instanciating Controller :
+ * (classname can't be instanciated, Illegal access with instanciated class,
+ * Error while instanciating class, classname can't be instanciated.
+ */
+ public static Controller createControllerFromClassname(String classname)
+ throws InstantiationException {
+
+ try {
+ Class requestedClass = TilesUtil.applicationClass(classname);
+ Object instance = requestedClass.newInstance();
+
+ if (log.isDebugEnabled()) {
+ log.debug("Controller created : " + instance);
+ }
+ return (Controller) instance;
+
+ } catch (java.lang.ClassNotFoundException ex) {
+ throw new InstantiationException(
+ "Error - Class not found :" + ex.getMessage());
+
+ } catch (java.lang.IllegalAccessException ex) {
+ throw new InstantiationException(
+ "Error - Illegal class access :" + ex.getMessage());
+
+ } catch (java.lang.InstantiationException ex) {
+ throw ex;
+
+ } catch (java.lang.ClassCastException ex) {
+ throw new InstantiationException(
+ "Controller of class '"
+ + classname
+ + "' should implements 'Controller' or extends 'Action'");
+ }
+ }
+
+}
Added: struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/ComponentDefinitionsFactory.java
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/ComponentDefinitionsFactory.java?rev=190662&view=auto
==============================================================================
--- struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/ComponentDefinitionsFactory.java (added)
+++ struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/ComponentDefinitionsFactory.java Tue Jun 14 14:59:13 2005
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2004-2005 The Apache Software Foundation.
+ *
+ * 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 org.apache.tiles;
+
+import java.util.Map;
+import java.io.Serializable;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletContext;
+
+/**
+ * Component repository interface.
+ * This interface allows to retrieve an definition by its name, independently of the
+ * factory implementation.
+ * Implementation must be Serializable, in order to be compliant with web Container
+ * having this constraint (Weblogic 6.x).
+ * @deprecated Use DefinitionsFactory instead.
+*/
+public interface ComponentDefinitionsFactory extends Serializable
+{
+
+ /**
+ * Get a definition by its name.
+ * @param name Name of requested definition.
+ * @param request Current servelet request
+ * @param servletContext current servlet context
+ * @throws DefinitionsFactoryException An error occur while getting definition.
+ * @throws NoSuchDefinitionException No definition found for specified name
+ * Implementation can throw more accurate exception as a subclass of this exception
+ */
+ public ComponentDefinition getDefinition(String name, ServletRequest request, ServletContext servletContext) throws NoSuchDefinitionException,DefinitionsFactoryException;
+
+ /**
+ * Init factory.
+ * This method is called exactly once immediately after factory creation in
+ * case of internal creation (by DefinitionUtil).
+ * @param servletContext Servlet Context passed to newly created factory.
+ * @param properties Map of name/property passed to newly created factory.
+ * Map can contains more properties than requested.
+ * @throws DefinitionsFactoryException An error occur during initialization.
+ */
+ public void initFactory(ServletContext servletContext, Map properties) throws DefinitionsFactoryException;
+}
Added: struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/Controller.java
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/Controller.java?rev=190662&view=auto
==============================================================================
--- struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/Controller.java (added)
+++ struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/Controller.java Tue Jun 14 14:59:13 2005
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2004-2005 The Apache Software Foundation.
+ *
+ * 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 org.apache.tiles;
+
+import java.io.IOException;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.ServletContext;
+
+/**
+ * A controller is a piece of code called before rendering a jsp page.
+ * A controller can be associated to a tile. See <insert> or <definition> for
+ * association syntax.
+ */
+public interface Controller
+{
+
+ /**
+ * Method associated to a tile and called immediately before the tile is included.
+ * @param tileContext Current tile context.
+ * @param request Current request
+ * @param response Current response
+ * @param servletContext Current servlet context
+ */
+ public void perform(ComponentContext tileContext,
+ HttpServletRequest request, HttpServletResponse response,
+ ServletContext servletContext)
+ throws ServletException, IOException;
+}
Added: struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/ControllerSupport.java
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/ControllerSupport.java?rev=190662&view=auto
==============================================================================
--- struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/ControllerSupport.java (added)
+++ struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/ControllerSupport.java Tue Jun 14 14:59:13 2005
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2004-2005 The Apache Software Foundation.
+ *
+ * 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 org.apache.tiles;
+
+import java.io.IOException;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.ServletContext;
+
+/**
+ * Basic implementation of Controller.
+ */
+public class ControllerSupport implements Controller {
+
+ /**
+ * Method associated with a tile and called immediately before tile is included.
+ * This implementation does nothing.
+ * @param tileContext Current tile context.
+ * @param request Current request
+ * @param response Current response
+ * @param servletContext Current servlet context
+ */
+ public void perform(ComponentContext tileContext,
+ HttpServletRequest request, HttpServletResponse response,
+ ServletContext servletContext)
+ throws ServletException, IOException {
+
+ }
+}
Added: struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/DefinitionAttribute.java
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/DefinitionAttribute.java?rev=190662&view=auto
==============================================================================
--- struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/DefinitionAttribute.java (added)
+++ struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/DefinitionAttribute.java Tue Jun 14 14:59:13 2005
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2004-2005 The Apache Software Foundation.
+ *
+ * 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 org.apache.tiles;
+
+/**
+ * Attribute representing a Component Definition.
+ * This attribute definition contains a Component definition.
+ */
+public class DefinitionAttribute extends UntypedAttribute {
+
+ public DefinitionAttribute(String value) {
+ super(value);
+ }
+
+}
Added: struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/DefinitionNameAttribute.java
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/DefinitionNameAttribute.java?rev=190662&view=auto
==============================================================================
--- struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/DefinitionNameAttribute.java (added)
+++ struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/DefinitionNameAttribute.java Tue Jun 14 14:59:13 2005
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2004-2005 The Apache Software Foundation.
+ *
+ * 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 org.apache.tiles;
+
+/**
+ * Component attribute.
+ * Such attribute value represent an instance name.
+ */
+public class DefinitionNameAttribute extends UntypedAttribute {
+
+ /**
+ * Constructor.
+ */
+ public DefinitionNameAttribute(String value) {
+ super(value);
+ }
+
+ /**
+ * Constructor.
+ */
+ public DefinitionNameAttribute(String value, String role) {
+ super(value, role);
+ }
+
+}
Added: struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/DefinitionsFactory.java
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/DefinitionsFactory.java?rev=190662&view=auto
==============================================================================
--- struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/DefinitionsFactory.java (added)
+++ struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/DefinitionsFactory.java Tue Jun 14 14:59:13 2005
@@ -0,0 +1,93 @@
+/*
+ * Copyright 2004-2005 The Apache Software Foundation.
+ *
+ * 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 org.apache.tiles;
+
+import java.io.Serializable;
+
+import javax.servlet.ServletContext;
+import javax.servlet.ServletRequest;
+
+/**
+ * Tiles Definition factory.
+ * This interface replace old ComponentDefinitionsFactory.
+ * Main method getDefinition() is exactly the same. Initialization method change.
+ * This interface allows to retrieve a definition by its name, independently of
+ * the factory implementation.
+ * Object life cycle is as follow:
+ * <ul>
+ * <li>Constructor: create object</li>
+ * <li>setConfig: set config and initialize factory. After first call to this
+ * method, factory is operational.</li>
+ * <li>destroy: factory is being shutdown.</li>
+ * </ul>
+ * Implementation must be Serializable, in order to be compliant with web Container
+ * having this constraint (Weblogic 6.x).
+ */
+public interface DefinitionsFactory extends Serializable
+{
+
+ /**
+ * Get a definition by its name.
+ * @param name Name of requested definition.
+ * @param request Current servelet request
+ * @param servletContext current servlet context
+ * @throws DefinitionsFactoryException An error occur while getting definition.
+ * @throws NoSuchDefinitionException No definition found for specified name
+ * Implementation can throw more accurate exception as a subclass of this exception
+ */
+ public ComponentDefinition getDefinition(String name, ServletRequest request, ServletContext servletContext)
+ throws NoSuchDefinitionException,DefinitionsFactoryException;
+
+ /**
+ * Init definition factory.
+ * This method is called immediately after factory creation, and prior any call
+ * to setConfig().
+ *
+ * @param config Configuration object used to set factory configuration.
+ * @param servletContext Servlet Context passed to factory.
+ * @throws DefinitionsFactoryException An error occur during initialization.
+ */
+ public void init(DefinitionsFactoryConfig config, ServletContext servletContext)
+ throws DefinitionsFactoryException;
+
+ /**
+ * <p>Receive notification that the factory is being
+ * shut down.</p>
+ */
+ public void destroy();
+
+ /**
+ * Set factory configuration.
+ * This method is used to change factory configuration.
+ * This method is optional, and can send an exception if implementation
+ * doesn't allow change in configuration.
+ *
+ * @param config Configuration object used to set factory configuration.
+ * @param servletContext Servlet Context passed to factory.
+ * @throws DefinitionsFactoryException An error occur during initialization.
+ */
+ public void setConfig(DefinitionsFactoryConfig config, ServletContext servletContext)
+ throws DefinitionsFactoryException;
+
+ /**
+ * Get factory configuration.
+ * @return TilesConfig
+ */
+ public DefinitionsFactoryConfig getConfig();
+
+
+}
Added: struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/DefinitionsFactoryConfig.java
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/DefinitionsFactoryConfig.java?rev=190662&view=auto
==============================================================================
--- struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/DefinitionsFactoryConfig.java (added)
+++ struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/DefinitionsFactoryConfig.java Tue Jun 14 14:59:13 2005
@@ -0,0 +1,312 @@
+/*
+ * Copyright 2004-2005 The Apache Software Foundation.
+ *
+ * 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 org.apache.tiles;
+
+import java.io.Serializable;
+import java.lang.reflect.InvocationTargetException;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.commons.beanutils.BeanUtils;
+
+/**
+ * A TilesFactoryConfig object hold configuration attributes for a tile
+ * definition factory.
+ *
+ * @author Cedric Dumoulin
+ * @since Struts 1.1
+ * @version $Revision: 1.9 $ $Date: 2003/07/09 00:05:17 $
+ */
+public class DefinitionsFactoryConfig implements Serializable {
+
+ /**
+ * Fully qualified classname of the factory to create.
+ * If no classname is set, a default factory is created
+ * (of class "org.apache.tiles.xmlDefinition.I18nFactorySet").
+ */
+ protected String factoryClassname =
+ "org.apache.tiles.xmlDefinition.I18nFactorySet";
+
+ /**
+ * Specifies whether the parser will validate configuration files.
+ * Default value is true.
+ */
+ protected boolean parserValidate = true;
+
+ /**
+ * Definition configuration file specified by user.
+ */
+ protected String definitionConfigFiles = null;
+
+ /**
+ * Specifies whether the factory is "module-aware".
+ */
+ protected boolean moduleAware = true;
+
+ /**
+ * The name associated to this factory.
+ * <br>
+ * With Struts 1.1, this name is the module name to which this factory
+ * belong. It is set by the system.
+ * <br>
+ * In prior versions, this property is not used.
+ */
+ protected String factoryName;
+
+ /**
+ * Alternate name for parser debug details properties in configuration file.
+ * @deprecated This will be removed in a release after Struts 1.2.
+ */
+ public static final String PARSER_DETAILS_PARAMETER_NAME =
+ "definitions-parser-details";
+
+ /**
+ * Alternate name for parser validate properties in configuration file.
+ */
+ public static final String PARSER_VALIDATE_PARAMETER_NAME =
+ "definitions-parser-validate";
+
+ /**
+ * Alternate name for factory classname properties in configuration file.
+ */
+ public static final String FACTORY_CLASSNAME_PARAMETER_NAME =
+ "definitions-factory-class";
+
+ /**
+ * Alternate name for definition files properties in configuration file.
+ */
+ public static final String DEFINITIONS_CONFIG_PARAMETER_NAME =
+ "definitions-config";
+
+ /**
+ * Alternate name for definition debug details properties in configuration file.
+ * @deprecated This will be removed in a release after Struts 1.2.
+ */
+ public static final String TILES_DETAILS_PARAMETER_NAME = "definitions-debug";
+
+ /**
+ * Map of extra attribute available.
+ */
+ private Map extraAttributes = new HashMap();
+
+ /**
+ * Default constructor.
+ */
+ public DefinitionsFactoryConfig() {
+ super();
+ }
+
+ /**
+ * Constructor.
+ * Create configuration object, and initialize it with parameters from Map.
+ * Parameters corresponding to an attribute are filtered and stored in appropriate
+ * attribute.
+ * @param initParameters Map.
+ */
+ public DefinitionsFactoryConfig(Map initParameters) {
+ super();
+ }
+
+ /**
+ * Get the module aware flag.
+ * @return <code>true</code>: user wants a single factory instance,
+ * <code>false</code>: user wants multiple factory instances (one per module with Struts)
+ */
+ public boolean isModuleAware() {
+ return moduleAware;
+ }
+ /**
+ * Set the module aware flag.
+ * @param moduleAware <code>true</code>: user wants a single factory instance,
+ * <code>false</code>: user wants multiple factory instances (one per module with Struts)
+ */
+ public void setModuleAware(boolean moduleAware) {
+ this.moduleAware = moduleAware;
+ }
+
+ /**
+ * Get the classname of the factory.
+ * @return Classname.
+ */
+ public String getFactoryClassname() {
+ return factoryClassname;
+ }
+
+ /**
+ * Set the classname of the factory..
+ * @param aFactoryClassname Classname of the factory.
+ */
+ public void setFactoryClassname(String aFactoryClassname) {
+ factoryClassname = aFactoryClassname;
+ }
+
+ /**
+ * Determines if the parser is validating.
+ * @return <code>true<code> when in validating mode.
+ */
+ public boolean getParserValidate() {
+ return parserValidate;
+ }
+
+ /**
+ * Set the validating mode for the parser.
+ * @param aParserValidate <code>true</code> for validation, <code>false</code> otherwise
+ */
+ public void setParserValidate(boolean aParserValidate) {
+ parserValidate = aParserValidate;
+ }
+
+ /**
+ * Get the definition config files.
+ * @return Defition config files.
+ */
+ public String getDefinitionConfigFiles() {
+ return definitionConfigFiles;
+ }
+
+ /**
+ * Set the definition config files.
+ * @param aDefinitionConfigFiles Definition config files.
+ */
+ public void setDefinitionConfigFiles(String aDefinitionConfigFiles) {
+ definitionConfigFiles = aDefinitionConfigFiles;
+ }
+
+ /**
+ * Set value of an additional attribute.
+ * @param name Name of the attribute.
+ * @param value Value of the attribute.
+ */
+ public void setAttribute(String name, Object value) {
+ extraAttributes.put(name, value);
+ }
+
+ /**
+ * Get value of an additional attribute.
+ * @param name Name of the attribute.
+ * @return Value of the attribute, or null if not found.
+ */
+ public Object getAttribute(String name) {
+ return extraAttributes.get(name);
+ }
+
+ /**
+ * Get additional attributes as a Map.
+ * @return Map A Map containing attribute name - value pairs.
+ */
+ public Map getAttributes() {
+ Map map = new HashMap(extraAttributes);
+ // Add property attributes using old names
+ /*
+ map.put(DEFINITIONS_CONFIG_PARAMETER_NAME, getDefinitionConfigFiles());
+ map.put(TILES_DETAILS_PARAMETER_NAME, Integer.toString(getDebugLevel()) );
+ map.put(PARSER_DETAILS_PARAMETER_NAME, Integer.toString(getParserDebugLevel()) );
+ map.put(PARSER_VALIDATE_PARAMETER_NAME, new Boolean(getParserValidate()).toString() );
+
+ if( ! "org.apache.tiles.xmlDefinition.I18nFactorySet".equals(getFactoryClassname()) )
+ map.put(FACTORY_CLASSNAME_PARAMETER_NAME, getFactoryClassname());
+ */
+ return map;
+ }
+
+ /**
+ * Populate this config object from properties map, based on
+ * the specified name/value pairs. This method uses the populate() method from
+ * org.apache.commons.beanutils.BeanUtil.
+ * <p>
+ * Properties keys are scanned for old property names, and linked to the new name
+ * if necessary. This modifies the properties map.
+ * <p>
+ * The particular setter method to be called for each property is
+ * determined using the usual JavaBeans introspection mechanisms. Thus,
+ * you may identify custom setter methods using a BeanInfo class that is
+ * associated with the class of the bean itself. If no such BeanInfo
+ * class is available, the standard method name conversion ("set" plus
+ * the capitalized name of the property in question) is used.
+ * <p>
+ * <strong>NOTE</strong>: It is contrary to the JavaBeans Specification
+ * to have more than one setter method (with different argument
+ * signatures) for the same property.
+ *
+ * @param properties Map keyed by property name, with the
+ * corresponding (String or String[]) value(s) to be set.
+ *
+ * @exception IllegalAccessException if the caller does not have
+ * access to the property accessor method.
+ * @exception InvocationTargetException if the property accessor method
+ * throws an exception.
+ * @see org.apache.commons.beanutils.BeanUtils
+ */
+ public void populate(Map properties)
+ throws IllegalAccessException, InvocationTargetException {
+
+ // link old parameter names for backward compatibility
+ linkOldPropertyNames(properties);
+ BeanUtils.populate(this, properties);
+ }
+
+ /**
+ * Link old property names to new property names.
+ * This modifies the map.
+ * @param properties Map keyed by property name, with the
+ * corresponding (String or String[]) value(s) to be set.
+ */
+ static public void linkOldPropertyNames(Map properties) {
+ Set entries = properties.entrySet();
+ Map toAdd = new HashMap();
+ Iterator i = entries.iterator();
+ while (i.hasNext()) {
+ Map.Entry entry = (Map.Entry) i.next();
+
+ if (DEFINITIONS_CONFIG_PARAMETER_NAME.equals(entry.getKey())) {
+ toAdd.put("definitionConfigFiles", entry.getValue());
+
+ } else if (FACTORY_CLASSNAME_PARAMETER_NAME.equals(entry.getKey())) {
+ toAdd.put("factoryClassname", entry.getValue());
+
+ } else if (PARSER_DETAILS_PARAMETER_NAME.equals(entry.getKey())) {
+ toAdd.put("parserDebugLevel", entry.getValue());
+
+ } else if (PARSER_VALIDATE_PARAMETER_NAME.equals(entry.getKey())) {
+ toAdd.put("parserValidate", entry.getValue());
+
+ } else if (TILES_DETAILS_PARAMETER_NAME.equals(entry.getKey())) {
+ toAdd.put("debugLevel", entry.getValue());
+ }
+ }
+
+ if (toAdd.size() > 0) {
+ properties.putAll(toAdd);
+ }
+ }
+
+ /**
+ * Get the factory name.
+ */
+ public String getFactoryName() {
+ return factoryName;
+ }
+ /**
+ * Set the factory name.
+ * @param factoryName Name of the factory.
+ */
+ public void setFactoryName(String factoryName) {
+ this.factoryName = factoryName;
+ }
+}
Added: struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/DefinitionsFactoryException.java
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/DefinitionsFactoryException.java?rev=190662&view=auto
==============================================================================
--- struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/DefinitionsFactoryException.java (added)
+++ struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/DefinitionsFactoryException.java Tue Jun 14 14:59:13 2005
@@ -0,0 +1,117 @@
+/*
+ * Copyright 2004-2005 The Apache Software Foundation.
+ *
+ * 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 org.apache.tiles;
+
+ /**
+ * Exception thrown when an error occurs while the factory tries to
+ * create a new instance mapper.
+ */
+public class DefinitionsFactoryException extends TilesException
+{
+ /**
+ * Constructor.
+ */
+ public DefinitionsFactoryException()
+ {
+ super();
+ this.exception = null;
+ }
+
+ /**
+ * Constructor.
+ * @param message The error or warning message.
+ */
+ public DefinitionsFactoryException(String message)
+ {
+ super(message);
+ this.exception = null;
+ }
+
+
+ /**
+ * Create a new <code>DefinitionsFactoryException</code> wrapping an existing exception.
+ *
+ * <p>The existing exception will be embedded in the new
+ * one and its message will become the default message for
+ * the DefinitionsFactoryException.</p>
+ *
+ * @param e The exception to be wrapped.
+ */
+ public DefinitionsFactoryException(Exception e)
+ {
+ super();
+ this.exception = e;
+ }
+
+
+ /**
+ * Create a new <code>DefinitionsFactoryException</code> from an existing exception.
+ *
+ * <p>The existing exception will be embedded in the new
+ * one, but the new exception will have its own message.</p>
+ *
+ * @param message The detail message.
+ * @param e The exception to be wrapped.
+ */
+ public DefinitionsFactoryException(String message, Exception e)
+ {
+ super(message);
+ this.exception = e;
+ }
+
+
+ /**
+ * Return a detail message for this exception.
+ *
+ * <p>If there is a embedded exception, and if the DefinitionsFactoryException
+ * has no detail message of its own, this method will return
+ * the detail message from the embedded exception.</p>
+ *
+ * @return The error or warning message.
+ */
+ public String getMessage ()
+ {
+ String message = super.getMessage ();
+
+ if (message == null && exception != null) {
+ return exception.getMessage();
+ } else {
+ return message;
+ }
+ }
+
+
+ /**
+ * Return the embedded exception, if any.
+ * @return The embedded exception, or <code>null</code> if there is none.
+ */
+ public Exception getException ()
+ {
+ return exception;
+ }
+
+ //////////////////////////////////////////////////////////////////////
+ // Internal state.
+ //////////////////////////////////////////////////////////////////////
+
+
+ /**
+ * Any "wrapped" exception will be exposed when this is serialized.
+ * @serial
+ */
+ private Exception exception;
+}
Added: struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/DefinitionsUtil.java
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/DefinitionsUtil.java?rev=190662&view=auto
==============================================================================
--- struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/DefinitionsUtil.java (added)
+++ struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/DefinitionsUtil.java Tue Jun 14 14:59:13 2005
@@ -0,0 +1,306 @@
+/*
+ * Copyright 2004-2005 The Apache Software Foundation.
+ *
+ * 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 org.apache.tiles;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletRequest;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.taglib.tiles.ComponentConstants;
+
+/**
+ * Utilities class for definitions factory.
+ * Also define userDebugLevel property (TODO to be moved from this class ?).
+ * @deprecated Use {@link TilesUtil#createDefinitionsFactory(ServletContext, DefinitionsFactoryConfig)}
+ */
+public class DefinitionsUtil extends TilesUtil implements ComponentConstants {
+
+ /**
+ * Commons Logging instance.
+ */
+ protected static Log log = LogFactory.getLog(DefinitionsUtil.class);
+
+ /**
+ * Global user defined debug level.
+ * @deprecated This will be removed in a release after Struts 1.2.
+ */
+ public static int userDebugLevel = 0;
+
+ /**
+ * User Debug level.
+ * @deprecated This will be removed in a release after Struts 1.2.
+ */
+ public static final int NO_DEBUG = 0;
+
+ /**
+ * Name of init property carrying debug level.
+ */
+ public static final String DEFINITIONS_CONFIG_USER_DEBUG_LEVEL =
+ "definitions-debug";
+
+ /**
+ * Name of init property carrying factory class name.
+ */
+ public static final String DEFINITIONS_FACTORY_CLASSNAME =
+ "definitions-factory-class";
+
+ /**
+ * Constant name used to store factory in context.
+ */
+ public static final String DEFINITIONS_FACTORY =
+ "org.apache.tiles.DEFINITIONS_FACTORY";
+
+ /**
+ * Constant name used to store definition in jsp context.
+ * Used to pass definition from a Struts action to servlet forward.
+ */
+ public static final String ACTION_DEFINITION =
+ "org.apache.tiles.ACTION_DEFINITION";
+
+ /**
+ * Create Definition factory.
+ * If a factory class name is provided, a factory of this class is created. Otherwise,
+ * default factory is created.
+ * @param classname Class name of the factory to create.
+ * @param servletContext Servlet Context passed to newly created factory.
+ * @param properties Map of name/property used to initialize factory configuration object.
+ * @return newly created factory.
+ * @throws DefinitionsFactoryException If an error occur while initializing factory
+ * @deprecated Use createDefinitionsFactory(ServletContext servletContext, ServletConfig servletConfig)
+ */
+ public static DefinitionsFactory createDefinitionsFactory(
+ ServletContext servletContext,
+ Map properties,
+ String classname)
+ throws DefinitionsFactoryException {
+
+ // Create config object
+ DefinitionsFactoryConfig factoryConfig = new DefinitionsFactoryConfig();
+ // populate it from map.
+ try {
+ factoryConfig.populate(properties);
+
+ } catch (Exception ex) {
+ throw new DefinitionsFactoryException(
+ "Error - createDefinitionsFactory : Can't populate config object from properties map",
+ ex);
+ }
+
+ // Add classname
+ if (classname != null)
+ factoryConfig.setFactoryClassname(classname);
+
+ // Create factory using config object
+ return createDefinitionsFactory(servletContext, factoryConfig);
+ }
+
+ /**
+ * Create default Definition factory.
+ * @param servletContext Servlet Context passed to newly created factory.
+ * @param properties Map of name/property used to initialize factory configuration object.
+ * @return newly created factory of type ConfigurableDefinitionsFactory.
+ * @throws DefinitionsFactoryException If an error occur while initializing factory
+ */
+ public static DefinitionsFactory createDefinitionsFactory(
+ ServletContext servletContext,
+ Map properties)
+ throws DefinitionsFactoryException {
+
+ return createDefinitionsFactory(servletContext, properties, null);
+ }
+
+ /**
+ * Create Definition factory.
+ * Create configuration object from servlet web.xml file, then create
+ * ConfigurableDefinitionsFactory and initialized it with object.
+ * <p>
+ * Convenience method. Calls createDefinitionsFactory(ServletContext servletContext, DefinitionsFactoryConfig factoryConfig)
+ *
+ * @param servletContext Servlet Context passed to newly created factory.
+ * @param servletConfig Servlet config containing parameters to be passed to factory configuration object.
+ * @return newly created factory of type ConfigurableDefinitionsFactory.
+ * @throws DefinitionsFactoryException If an error occur while initializing factory
+ */
+ public static DefinitionsFactory createDefinitionsFactory(
+ ServletContext servletContext,
+ ServletConfig servletConfig)
+ throws DefinitionsFactoryException {
+
+ DefinitionsFactoryConfig factoryConfig = readFactoryConfig(servletConfig);
+
+ return createDefinitionsFactory(servletContext, factoryConfig);
+ }
+
+ /**
+ * Create Definition factory.
+ * Create configuration object from servlet web.xml file, then create
+ * ConfigurableDefinitionsFactory and initialized it with object.
+ * <p>
+ * If checkIfExist is true, start by checking if factory already exist. If yes,
+ * return it. If no, create a new one.
+ * <p>
+ * If checkIfExist is false, factory is always created.
+ * <p>
+ * Convenience method. Calls createDefinitionsFactory(ServletContext servletContext, DefinitionsFactoryConfig factoryConfig)
+ *
+ * @param servletContext Servlet Context passed to newly created factory.
+ * @param servletConfig Servlet config containing parameters to be passed to factory configuration object.
+ * @param checkIfExist Check if factory already exist. If true and factory exist, return it.
+ * If true and factory doesn't exist, create it. If false, create it in all cases.
+ * @return newly created factory of type ConfigurableDefinitionsFactory.
+ * @throws DefinitionsFactoryException If an error occur while initializing factory
+ */
+ public static DefinitionsFactory createDefinitionsFactory(
+ ServletContext servletContext,
+ ServletConfig servletConfig,
+ boolean checkIfExist)
+ throws DefinitionsFactoryException {
+
+ if (checkIfExist) {
+ // Check if already exist in context
+ DefinitionsFactory factory = getDefinitionsFactory(servletContext);
+ if (factory != null)
+ return factory;
+ }
+
+ return createDefinitionsFactory(servletContext, servletConfig);
+ }
+
+ /**
+ * Get definition factory from appropriate servlet context.
+ * @return Definitions factory or null if not found.
+ * @deprecated Use {@link TilesUtil#getDefinitionsFactory(ServletRequest, ServletContext)}
+ * @since 20020708
+ */
+ public static DefinitionsFactory getDefinitionsFactory(ServletContext servletContext) {
+ return (DefinitionsFactory) servletContext.getAttribute(DEFINITIONS_FACTORY);
+ }
+
+ /**
+ * Get Definition stored in jsp context by an action.
+ * @return ComponentDefinition or null if not found.
+ */
+ public static ComponentDefinition getActionDefinition(ServletRequest request) {
+ return (ComponentDefinition) request.getAttribute(ACTION_DEFINITION);
+ }
+
+ /**
+ * Store definition in jsp context.
+ * Mainly used by Struts to pass a definition defined in an Action to the forward.
+ */
+ public static void setActionDefinition(
+ ServletRequest request,
+ ComponentDefinition definition) {
+
+ request.setAttribute(ACTION_DEFINITION, definition);
+ }
+
+ /**
+ * Remove Definition stored in jsp context.
+ * Mainly used by Struts to pass a definition defined in an Action to the forward.
+ */
+ public static void removeActionDefinition(
+ ServletRequest request,
+ ComponentDefinition definition) {
+
+ request.removeAttribute(ACTION_DEFINITION);
+ }
+
+ /**
+ * Populate Definition Factory Config from web.xml properties.
+ * @param factoryConfig Definition Factory Config to populate.
+ * @param servletConfig Current servlet config containing web.xml properties.
+ * @exception IllegalAccessException if the caller does not have
+ * access to the property accessor method
+ * @exception java.lang.reflect.InvocationTargetException if the property accessor method
+ * throws an exception
+ * @see org.apache.commons.beanutils.BeanUtils
+ * @since tiles 20020708
+ */
+ public static void populateDefinitionsFactoryConfig(
+ DefinitionsFactoryConfig factoryConfig,
+ ServletConfig servletConfig)
+ throws IllegalAccessException, InvocationTargetException {
+
+ Map properties = new DefinitionsUtil.ServletPropertiesMap(servletConfig);
+ System.out.println("Populating factory config with these properties: " + properties);
+ factoryConfig.populate(properties);
+ System.out.println("Done populating factory config");
+ }
+
+ /**
+ * Create FactoryConfig and initialize it from web.xml.
+ *
+ * @param servletConfig ServletConfig for the module with which
+ * this plug in is associated
+ * @exception DefinitionsFactoryException if this <code>PlugIn</code> cannot
+ * be successfully initialized
+ */
+ protected static DefinitionsFactoryConfig readFactoryConfig(ServletConfig servletConfig)
+ throws DefinitionsFactoryException {
+
+ // Create tiles definitions config object
+ DefinitionsFactoryConfig factoryConfig = new DefinitionsFactoryConfig();
+
+ // Get init parameters from web.xml files
+ try {
+ DefinitionsUtil.populateDefinitionsFactoryConfig(
+ factoryConfig,
+ servletConfig);
+
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ throw new DefinitionsFactoryException(
+ "Can't populate DefinitionsFactoryConfig class from 'web.xml'.",
+ ex);
+ }
+
+ return factoryConfig;
+ }
+
+ /**
+ * Inner class.
+ * Wrapper for ServletContext init parameters.
+ * Object of this class is an hashmap containing parameters and values
+ * defined in the servlet config file (web.xml).
+ */
+ static class ServletPropertiesMap extends HashMap {
+ /**
+ * Constructor.
+ */
+ ServletPropertiesMap(ServletConfig config) {
+ // This implementation is very simple.
+ // It is possible to avoid creation of a new structure, but this need
+ // imply writing all Map interface.
+ System.out.println("Iterating over servlet parameters");
+ Enumeration enum = config.getInitParameterNames();
+ while (enum.hasMoreElements()) {
+ String key = (String) enum.nextElement();
+ put(key, config.getInitParameter(key));
+ System.out.println("Storing key " + key);
+ }
+ }
+ } // end inner class
+
+}
Added: struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/DirectStringAttribute.java
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/DirectStringAttribute.java?rev=190662&view=auto
==============================================================================
--- struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/DirectStringAttribute.java (added)
+++ struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/DirectStringAttribute.java Tue Jun 14 14:59:13 2005
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2004-2005 The Apache Software Foundation.
+ *
+ * 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 org.apache.tiles;
+
+/**
+ * Component attribute.
+ * Such attribute value represent a path used to include a JSP.
+ */
+public class DirectStringAttribute extends UntypedAttribute {
+
+ public DirectStringAttribute(String value) {
+ super(value);
+ }
+
+}
Added: struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/FactoryNotFoundException.java
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/FactoryNotFoundException.java?rev=190662&view=auto
==============================================================================
--- struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/FactoryNotFoundException.java (added)
+++ struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/FactoryNotFoundException.java Tue Jun 14 14:59:13 2005
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2004-2005 The Apache Software Foundation.
+ *
+ * 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 org.apache.tiles;
+
+ /**
+ * Exception thrown when definitions factory is not found.
+ */
+public class FactoryNotFoundException extends DefinitionsFactoryException
+{
+ /**
+ * Constructor.
+ */
+ public FactoryNotFoundException()
+ {
+ super();
+ }
+ /**
+ * Constructor.
+ * @param msg Message.
+ */
+ public FactoryNotFoundException( String msg )
+ {
+ super(msg);
+ }
+}
Added: struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/Globals.java
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/Globals.java?rev=190662&view=auto
==============================================================================
--- struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/Globals.java (added)
+++ struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/Globals.java Tue Jun 14 14:59:13 2005
@@ -0,0 +1,252 @@
+/*
+ * Copyright 2004-2005 The Apache Software Foundation.
+ *
+ * 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 org.apache.tiles;
+
+import java.io.Serializable;
+
+/**
+ * Global manifest constants for the entire Struts Framework.
+ *
+ * @author Craig R. McClanahan
+ * @author David Graham
+ * @author David Geary: migrated from struts package to eliminate Struts
+ * dependencies
+ */
+public class Globals implements Serializable {
+
+
+ // ----------------------------------------------------- Manifest Constants
+
+
+ /**
+ * The context attributes key under which our <code>ActionServlet</code>
+ * instance will be stored.
+ *
+ * @since Struts 1.1
+ */
+ public static final String ACTION_SERVLET_KEY =
+ "org.apache.tiles.action.ACTION_SERVLET";
+
+ /**
+ * The request attributes key under which a boolean <code>true</code>
+ * value should be stored if this request was cancelled.
+ *
+ * @since Struts 1.1
+ */
+ public static final String CANCEL_KEY =
+ "org.apache.tiles.action.CANCEL";
+
+ /**
+ * <p>The base of the context attributes key under which our
+ * <code>ModuleConfig</code> data structure will be stored. This
+ * will be suffixed with the actual module prefix (including the
+ * leading "/" character) to form the actual attributes key.</p>
+ *
+ * <p>For each request processed by the controller servlet, the
+ * <code>ModuleConfig</code> object for the module selected by
+ * the request URI currently being processed will also be exposed under
+ * this key as a request attribute.</p>
+ *
+ * @since Struts 1.1
+ */
+ public static final String MODULE_KEY =
+ "org.apache.tiles.action.MODULE";
+
+ /**
+ * The ServletContext attribute under which we store the module prefixes
+ * String[].
+ * @since Struts 1.2
+ */
+ public static final String MODULE_PREFIXES_KEY =
+ "org.apache.tiles.globals.MODULE_PREFIXES";
+
+
+ /**
+ * The context attributes key under which our <strong>default</strong>
+ * configured data source (which must implement
+ * <code>javax.sql.DataSource</code>) is stored,
+ * if one is configured for this module.
+ */
+ public static final String DATA_SOURCE_KEY =
+ "org.apache.tiles.action.DATA_SOURCE";
+
+
+ /**
+ * The request attributes key under which your action should store an
+ * <code>org.apache.tiles.action.ActionErrors</code> object, if you
+ * are using the corresponding custom tag library elements.
+ */
+ public static final String ERROR_KEY =
+ "org.apache.tiles.action.ERROR";
+
+
+ /**
+ * The request attributes key under which Struts custom tags might store a
+ * <code>Throwable</code> that caused them to report a JspException at
+ * runtime. This value can be used on an error page to provide more
+ * detailed information about what really went wrong.
+ */
+ public static final String EXCEPTION_KEY =
+ "org.apache.tiles.action.EXCEPTION";
+
+
+ /**
+ * The context attributes key under which our
+ * <code>org.apache.tiles.action.ActionFormBeans</code> collection
+ * is normally stored, unless overridden when initializing our
+ * ActionServlet.
+ *
+ * @deprecated Replaced by collection in ModuleConfig
+ */
+ public static final String FORM_BEANS_KEY =
+ "org.apache.tiles.action.FORM_BEANS";
+
+
+ /**
+ * The context attributes key under which our
+ * <code>org.apache.tiles.action.ActionForwards</code> collection
+ * is normally stored, unless overridden when initializing our
+ * ActionServlet.
+ *
+ * @deprecated Replaced by collection in ModuleConfig.
+ */
+ public static final String FORWARDS_KEY =
+ "org.apache.tiles.action.FORWARDS";
+
+
+ /**
+ * The session attributes key under which the user's selected
+ * <code>java.util.Locale</code> is stored, if any. If no such
+ * attribute is found, the system default locale
+ * will be used when retrieving internationalized messages. If used, this
+ * attribute is typically set during user login processing.
+ */
+ public static final String LOCALE_KEY =
+ "org.apache.tiles.action.LOCALE";
+
+
+ /**
+ * The request attributes key under which our
+ * <code>org.apache.tiles.ActionMapping</code> instance
+ * is passed.
+ */
+ public static final String MAPPING_KEY =
+ "org.apache.tiles.action.mapping.instance";
+
+
+ /**
+ * The context attributes key under which our
+ * <code>org.apache.tiles.action.ActionMappings</code> collection
+ * is normally stored, unless overridden when initializing our
+ * ActionServlet.
+ *
+ * @deprecated Replaced by collection in ModuleConfig
+ */
+ public static final String MAPPINGS_KEY =
+ "org.apache.tiles.action.MAPPINGS";
+
+
+ /**
+ * The request attributes key under which your action should store an
+ * <code>org.apache.tiles.action.ActionMessages</code> object, if you
+ * are using the corresponding custom tag library elements.
+ *
+ * @since Struts 1.1
+ */
+ public static final String MESSAGE_KEY =
+ "org.apache.tiles.action.ACTION_MESSAGE";
+
+
+ /**
+ * <p>The base of the context attributes key under which our
+ * module <code>MessageResources</code> will be stored. This
+ * will be suffixed with the actual module prefix (including the
+ * leading "/" character) to form the actual resources key.</p>
+ *
+ * <p>For each request processed by the controller servlet, the
+ * <code>MessageResources</code> object for the module selected by
+ * the request URI currently being processed will also be exposed under
+ * this key as a request attribute.</p>
+ */
+ public static final String MESSAGES_KEY =
+ "org.apache.tiles.action.MESSAGE";
+
+
+ /**
+ * The request attributes key under which our multipart class is stored.
+ */
+ public static final String MULTIPART_KEY =
+ "org.apache.tiles.action.mapping.multipartclass";
+
+
+ /**
+ * <p>The base of the context attributes key under which an array of
+ * <code>PlugIn</code> instances will be stored. This
+ * will be suffixed with the actual module prefix (including the
+ * leading "/" character) to form the actual attributes key.</p>
+ * @since Struts 1.1
+ */
+ public static final String PLUG_INS_KEY =
+ "org.apache.tiles.action.PLUG_INS";
+
+
+ /**
+ * <p>The base of the context attributes key under which our
+ * <code>RequestProcessor</code> instance will be stored. This
+ * will be suffixed with the actual module prefix (including the
+ * leading "/" character) to form the actual attributes key.</p>
+ * @since Struts 1.1
+ */
+ public static final String REQUEST_PROCESSOR_KEY =
+ "org.apache.tiles.action.REQUEST_PROCESSOR";
+
+
+ /**
+ * The context attributes key under which we store the mapping defined
+ * for our controller serlet, which will be either a path-mapped pattern
+ * (<code>/action/*</code>) or an extension mapped pattern
+ * (<code>*.do</code>).
+ */
+ public static final String SERVLET_KEY =
+ "org.apache.tiles.action.SERVLET_MAPPING";
+
+
+ /**
+ * The session attributes key under which our transaction token is
+ * stored, if it is used.
+ */
+ public static final String TRANSACTION_TOKEN_KEY =
+ "org.apache.tiles.action.TOKEN";
+
+ /**
+ * The page attributes key under which xhtml status is stored. This may be "true"
+ * or "false". When set to true, the html tags output xhtml.
+ * @since Struts 1.1
+ */
+ public static final String XHTML_KEY =
+ "org.apache.tiles.globals.XHTML";
+
+
+ /**
+ * The application-scope key whose value represents an
+ * exception thrown when Tiles parses the tile definition
+ * file(s).
+ */
+ public static final String TILES_INIT_EXCEPTION =
+ "org.apache.tiles.globals.TILES_INIT_EXCEPTION";
+
+}
Added: struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/NoSuchDefinitionException.java
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/NoSuchDefinitionException.java?rev=190662&view=auto
==============================================================================
--- struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/NoSuchDefinitionException.java (added)
+++ struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/NoSuchDefinitionException.java Tue Jun 14 14:59:13 2005
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2004-2005 The Apache Software Foundation.
+ *
+ * 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 org.apache.tiles;
+
+ /**
+ * Exception thrown when a definition is not found.
+ */
+public class NoSuchDefinitionException extends DefinitionsFactoryException
+{
+ /**
+ * Constructor.
+ */
+ public NoSuchDefinitionException() {
+ super();
+ }
+
+ /**
+ * Constructor.
+ * @param msg Message.
+ */
+ public NoSuchDefinitionException( String msg ) {
+ super(msg);
+ }
+}
Added: struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/PathAttribute.java
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/PathAttribute.java?rev=190662&view=auto
==============================================================================
--- struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/PathAttribute.java (added)
+++ struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/PathAttribute.java Tue Jun 14 14:59:13 2005
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2004-2005 The Apache Software Foundation.
+ *
+ * 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 org.apache.tiles;
+
+/**
+ * Component attribute.
+ * Attribute value represents a path used to include a JSP.
+ */
+public class PathAttribute extends UntypedAttribute {
+
+ public PathAttribute(String value) {
+ super(value);
+ }
+
+}
Added: struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/TilesException.java
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/TilesException.java?rev=190662&view=auto
==============================================================================
--- struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/TilesException.java (added)
+++ struts/sandbox/trunk/tiles/core-library/src/java/org/apache/tiles/TilesException.java Tue Jun 14 14:59:13 2005
@@ -0,0 +1,109 @@
+/*
+ * Copyright 2004-2005 The Apache Software Foundation.
+ *
+ * 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 org.apache.tiles;
+
+/**
+ * Root class for all Tiles-exceptions.
+ * @author Cedric Dumoulin
+ */
+public class TilesException extends Exception
+{
+
+
+ /**
+ * Any "wrapped" exception will be exposed when this is serialized.
+ * @serial
+ */
+ private Exception exception;
+ /**
+ * Constructor.
+ */
+ public TilesException() {
+ super();
+ this.exception = null;
+ }
+
+ /**
+ * Constructor.
+ * @param message The error or warning message.
+ */
+ public TilesException(String message) {
+ super(message);
+ this.exception = null;
+ }
+
+
+ /**
+ * Create a new <code>TilesException</code> wrapping an existing exception.
+ *
+ * <p>The existing exception will be embedded in the new
+ * one, and its message will become the default message for
+ * the TilesException.</p>
+ *
+ * @param e The exception to be wrapped.
+ */
+ public TilesException(Exception e) {
+ super();
+ this.exception = e;
+ }
+
+
+ /**
+ * Create a new <code>TilesException</code> from an existing exception.
+ *
+ * <p>The existing exception will be embedded in the new
+ * one, but the new exception will have its own message.</p>
+ *
+ * @param message The detail message.
+ * @param e The exception to be wrapped.
+ */
+ public TilesException(String message, Exception e) {
+ super(message);
+ this.exception = e;
+ }
+
+
+ /**
+ * Return a detail message for this exception.
+ *
+ * <p>If there is a embedded exception, and if the TilesException
+ * has no detail message of its own, this method will return
+ * the detail message from the embedded exception.</p>
+ *
+ * @return The error or warning message.
+ */
+ public String getMessage () {
+ String message = super.getMessage ();
+
+ if (message == null && exception != null) {
+ return exception.getMessage();
+ } else {
+ return message;
+ }
+ }
+
+
+ /**
+ * Return the embedded exception, if any.
+ *
+ * @return The embedded exception, or <code>null</code> if there is none.
+ */
+ public Exception getException () {
+ return exception;
+ }
+
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
For additional commands, e-mail: dev-help@struts.apache.org