001    // Copyright 2004, 2005 The Apache Software Foundation
002    //
003    // Licensed under the Apache License, Version 2.0 (the "License");
004    // you may not use this file except in compliance with the License.
005    // You may obtain a copy of the License at
006    //
007    //     http://www.apache.org/licenses/LICENSE-2.0
008    //
009    // Unless required by applicable law or agreed to in writing, software
010    // distributed under the License is distributed on an "AS IS" BASIS,
011    // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
012    // See the License for the specific language governing permissions and
013    // limitations under the License.
014    
015    package org.apache.tapestry;
016    
017    import java.util.Locale;
018    
019    import org.apache.hivemind.ClassResolver;
020    import org.apache.tapestry.engine.IEngineService;
021    import org.apache.tapestry.engine.IPropertySource;
022    import org.apache.tapestry.engine.IScriptSource;
023    import org.apache.tapestry.engine.ISpecificationSource;
024    import org.apache.tapestry.services.Infrastructure;
025    import org.apache.tapestry.services.WebRequestServicer;
026    import org.apache.tapestry.spec.IApplicationSpecification;
027    
028    /**
029     * Defines the core, session-persistant object used to run a Tapestry application for a single
030     * client (each client will have its own instance of the engine).
031     * <p>
032     * The engine exists to provide core services to the pages and components that make up the
033     * application. The engine is a delegate to the {@link ApplicationServlet}via the
034     * {@link #service(RequestContext)}method.
035     * <p>
036     * Starting in release 4.0, the engine is kept around only for compatibility (with release 3.0).
037     * It's functions have been moved over into a collection of HiveMind services (or are in the process
038     * of doing so).
039     * 
040     * @author Howard Lewis Ship
041     */
042    
043    public interface IEngine extends WebRequestServicer
044    {
045        /**
046         * Returns the locale for the engine. This locale is used when selecting templates and assets.
047         */
048    
049        public Locale getLocale();
050    
051        /**
052         * Changes the engine's locale. Any subsequently loaded pages will be in the new locale (though
053         * pages already loaded stay in the old locale). Generally, you should render a new page after
054         * changing the locale, to show that the locale has changed.
055         */
056    
057        public void setLocale(Locale value);
058    
059        /**
060         * Gets the named service, or throws an {@link org.apache.tapestry.ApplicationRuntimeException}
061         * if the engine can't provide the named service.
062         * 
063         * @deprecated To be removed in 4.1. Engine services can now be injected.
064         */
065    
066        public IEngineService getService(String name);
067    
068        /**
069         * Returns the application specification that defines the application and its pages.
070         * 
071         * @deprecated To be removed in 4.1. This value can be injected as "infrastructure:applicationSpecification".
072         */
073    
074        public IApplicationSpecification getSpecification();
075    
076        /**
077         * Returns the source of all component specifications for the application. The source is shared
078         * between sessions.
079         * 
080         * @see org.apache.tapestry.engine.AbstractEngine#createSpecificationSource(RequestContext)
081         * @deprecated To be removed in 4.1. This value can be injected as "infrastructure:specificationSource".
082         */
083    
084        public ISpecificationSource getSpecificationSource();
085    
086        /**
087         * Returns an object that can resolve resources and classes.
088         * 
089         * @deprecated To be removed in 4.1. This value can be injected (into services).
090         */
091    
092        public ClassResolver getClassResolver();
093    
094        /**
095         * Returns the visit object, an object that represents the client's visit to the application.
096         * This is where most server-side state is stored (with the exception of persistent page
097         * properties).
098         * <p>
099         * Returns the visit, if it exists, or null if it has not been created.
100         * 
101         * @deprecated To be removed in 4.1. Application state objects can now be injected.
102         */
103    
104        public Object getVisit();
105    
106        /**
107         * Returns the visit object, creating it if necessary.
108         * 
109         * @deprecated To be removed in 4.1. Application state objects can now be injected.
110         */
111    
112        public Object getVisit(IRequestCycle cycle);
113    
114        /**
115         * Allows the visit object to be removed; typically done when "shutting down" a user's session
116         * (by setting the visit to null).
117         * 
118         * @deprecated To be removed in 4.1. Application state objects can now be injected.
119         */
120    
121        public void setVisit(Object value);
122    
123        /**
124         * Returns the globally shared application object. The global object is stored in the servlet
125         * context and shared by all instances of the engine for the same application (within the same
126         * JVM; the global is <em>not</em> shared between nodes in a cluster).
127         * <p>
128         * Returns the global object, if it exists, or null if not defined.
129         * 
130         * @since 2.3
131         * @deprecated To be removed in 4.1. Application state objects can now be injected.
132         */
133    
134        public Object getGlobal();
135    
136        /**
137         * Returns a source for parsed {@link org.apache.tapestry.IScript}s. The source is shared
138         * between all sessions.
139         * 
140         * @since 1.0.2
141         * @deprecated To be removed in 4.1. This value can now be injected as "infrastructure:scriptSource".
142         */
143    
144        public IScriptSource getScriptSource();
145    
146        /**
147         * Returns a {@link org.apache.tapestry.engine.IPropertySource}that should be used to obtain
148         * configuration data. The returned source represents a search path that includes (at a
149         * minimum):
150         * <ul>
151         * <li>Properties of the {@link org.apache.tapestry.spec.ApplicationSpecification}
152         * <li>Initial Parameters of servlet (configured in the <code>web.xml</code> deployment
153         * descriptor)
154         * <li>Initial Parameter of the servlet context (also configured in <code>web.xml</code>)
155         * <li>System properties (defined with the <code>-D</code> JVM command line parameter)
156         * <li>Hard-coded "factory defaults" (for some properties)
157         * </ul>
158         * 
159         * @since 2.3
160         * @see org.apache.tapestry.engine.AbstractEngine#createPropertySource(RequestContext)
161         * @deprecated To be removed in 4.1. This value can now be injected as "infrastructure:applicationPropertySource".
162         */
163    
164        public IPropertySource getPropertySource();
165    
166        /**
167         * Returns the encoding to be used to generate the responses and accept the requests.
168         * 
169         * @since 3.0
170         */
171    
172        public String getOutputEncoding();
173    
174        /**
175         * Returns the {@link org.apache.tapestry.services.Infrastructure}&nbsp;object, a central
176         * registry of key HiveMind services used by Tapestry.
177         * 
178         * @since 4.0
179         */
180    
181        public Infrastructure getInfrastructure();
182    }