Ed Burns wrote:
> Ryan, some questions for you. Search for RYAN.
>
> Thanks,
>
> Ed
>
>
> Issue: jsf-api 313
>
>
> SECTION: Modified Files
> ----------------------------
> M jsf-api/src/javax/faces/application/Application.java
> M jsf-api/src/javax/faces/application/ProjectStage.java
>
> - Review and freshen docs for getProjectStage(). Some content moved to
> spec prose document.
>
> M jsf-ri/build-tests.xml
>
> - disable
>
> +<!-- <test todir="${impl.test.results.dir}"
> + name="com.sun.faces.application.resource.TestResourceManager"/>-->
>
> RYAN LUBKE: Please investigate this. The behavior I observe is the
> appserver hangs. I had to kill -9 the app server process.
>
Since you're on Mac, please try running the test with JDK 5. It's
working fine
with JDK 5/6 on Linux.
>
> M jsf-ri/src/com/sun/faces/application/ApplicationAssociate.java
> M jsf-ri/src/com/sun/faces/application/ApplicationImpl.java
>
> - Move getProjectStage() impl over to associate.
>
I don't see the any reason to have this logic in ApplicationAssociate at
this point.
Though, we should probably modify Application.java to call
getDefaultApplicationImpl() (is there a better way to handle this
situation?)
so that the default logic is executed for those cases where the 2.0 app
is decorated
with a pre-2.0 application.
> M jsf-ri/test-sqe/web/WEB-INF/faces-config.xml
> M jsf-ri/web/test/WEB-INF/faces-config.xml
> M jsf-ri/web/test-config-1/WEB-INF/faces-config.xml
>
> - Move this to JSF 2.0.
>
> RYAN LUBKE: Please investigate why I had to do this. The 1.2 versions
> of the file were failing XML validation. May be a Mac JDK 1.6 thing.
>
Again, try JDK 5.
>
> SECTION: Diffs
> ----------------------------
> Index: jsf-api/src/javax/faces/application/Application.java
> ===================================================================
> RCS file: /cvs/javaserverfaces-sources/jsf-api/src/javax/faces/application/Application.java,v
> retrieving revision 1.57
> diff -u -r1.57 Application.java
> --- jsf-api/src/javax/faces/application/Application.java 28 Jan 2008 23:19:55 -0000 1.57
> +++ jsf-api/src/javax/faces/application/Application.java 30 Jan 2008 14:23:40 -0000
> @@ -392,15 +392,13 @@
>
>
> /**
> - * PENDING_REVIEW
> - * <p class="changed_added_2_0">Return the product lifecycle phase for the currently running
> - * application instance. The default value is {_at_link
> - * ProjectStage#Production}</p>
> - * <div class="changed_added_2_0">
> - * <p>The implementation of this method must perform the following
> - * algorithm or an equivalent with the same end result to determine
> - * the value to return.</p>
> - * <ul>
> + * <p class="changed_added_2_0">Return the project stage
> + * for the currently running application instance. The default
> + * value is {_at_link ProjectStage#Production}</p>
> +
> + * <div class="changed_added_2_0"> <p>The implementation of this
> + * method must perform the following algorithm or an equivalent with
> + * the same end result to determine the value to return.</p> <ul>
> *
> * <p>If the value has already been determined by a previous call to
> * this method, simply return that value.</p>
> Index: jsf-api/src/javax/faces/application/ProjectStage.java
> ===================================================================
> RCS file: /cvs/javaserverfaces-sources/jsf-api/src/javax/faces/application/ProjectStage.java,v
> retrieving revision 1.2
> diff -u -r1.2 ProjectStage.java
> --- jsf-api/src/javax/faces/application/ProjectStage.java 28 Jan 2008 23:19:55 -0000 1.2
> +++ jsf-api/src/javax/faces/application/ProjectStage.java 30 Jan 2008 14:23:40 -0000
> @@ -38,100 +38,62 @@
> package javax.faces.application;
>
> /**
> - * PENDING_REVIEW
> - * <p class="changed_added_2_0">This class enables a feature similar to the <code><a target="_"
> +
> + * <p class="changed_added_2_0">This class enables a feature similar to
> + * the <code><a target="_"
> * href="http://wiki.rubyonrails.org/rails/pages/Environments">RAILS_ENV</a></code>
> * feature of the Ruby on Rails web framework. The constants in this
> * class represent the current state of the running application in a
> * typical product development lifecycle. The value of this state may
> * be queried at any time after application startup by calling {_at_link
> * Application#getProjectStage}.</p>
> - * <div class="changed_added_2_0">
> - * <strong>Setting the value to be returned by
> - * <code>Application.getProjectStage()</code></strong>
> - *
> - * <p>This value is immutable at runtime and is configured by a
> - * <code>context-param</code>. The value of <code>param-name</code> is
> - * the value of the {_at_link #PROJECT_STAGE_PARAM_NAME} constant in this class. The are
> - * two kinds of valid values for <code>param-value</code>.</p>
> - *
> - * <ol>
> - *
> - * <li><p>The constants: the java language identifiers of the
> - * enum members of this class, capitalized exactly as they appear in
> - * this file.</p>
> - *
> - * <p>For example:</p>
> - * <pre><code>
> - * <context-param>
> - * <param-name>javax.faces.application.ProjectStage</param-name>
> - * <param-value>UnitTest</param-value>
> - * </context-param>
> - * </code></pre>
> - *
> - * <p>In this case,
> - * <code>FacesContext.getCurrentInstance().getApplication().getProjectStage()</code>
> - * returns <code>ProjectStage.UnitTest</code>, the <code>toString()</code> for which must be <code>"UnitTest"</code></p>
> - *
> - * </li>
> - *
> - * <li><p>Every other string: Any string that is not one of the
> - * constants is represented as the enum member <code>Extension</code>.
> - * The <code>toString()</code> method of <code>Extension</code> must
> - * return the string value exactly as given in the
> - * <code>param-value</code> element.<p>
> - *
> - * <p>For example:</p>
> - * <pre><code>
> - * <context-param>
> - * <param-name>javax.faces.application.PROJECT_STATEe</param-name>
> - * <param-value>Some special phase value</param-value>
> - * </context-param>
> - * </code></pre>
> - *
> - * <p>In this case,
> - * <code>FacesContext.getCurrentInstance().getApplication().getProjectStage()</code>
> - * returns <code>ProjectStage.Extension</code>, the <code>toString()</code> for which must be <code>"Some special phase value"</code></p>
> - *
> - * </li>
> - * </ol>
> - * </div>
> - *
> +
> * @since 2.0
> */
> public enum ProjectStage {
>
> /**
> + * <p class="changed_added_2_0">
> * This value indicates the currently running application is right
> * now, at this moment, being developed. This value will usually be
> - * set during iterative development.
> + * set during iterative development.</p>
> */
> Development,
> /**
> + * <p class="changed_added_2_0">
> * This value indicates the currently running application is
> * undergoing unit testing.
> + * </p>
> */
> UnitTest,
> /**
> + * <p class="changed_added_2_0">
> * This value indicates the currently running application is
> * undergoing system testing.
> + * </p>
> */
> SystemTest,
> /**
> + * <p class="changed_added_2_0">
> * This value indicates the currently running application is
> * deployed in production.
> + * </p>
> */
> Production,
> /**
> + * <p class="changed_added_2_0">
> * This value enables a minimal level of extensibility. See
> * {_at_link #toString} for details.
> + * </p>
> */
> Extension;
>
> /**
> + * <p class="changed_added_2_0">
> * The value of this constant is the value of the
> * <code>param-name</code> for setting the current value to be
> - * returned by <code>Application.getProjectStage()</code>.
> + * returned by {_at_link Application#getProjectStage}.
> + * </p>
> */
> public static final String PROJECT_STAGE_PARAM_NAME =
> "javax.faces.PROJECT_STAGE";
> @@ -139,10 +101,11 @@
> private String extensionName = "Extension";
>
> /**
> - * <p>Specialized to account for an arbitrary product lifecycle
> - * phase value. If <code>this == Extension</code> return the value
> - * of the <code>extensionName</code> instance variable. Otherwise,
> - * return <code>super.toString()</code>.</p>
> + * <p class="changed_added_2_0">Specialized to account for an
> + * arbitrary product lifecycle phase value. If <code>this == *
> + * Extension</code> return the value of the
> + * <code>extensionName</code> * instance variable. Otherwise,
> + * return * <code>super.toString()</code>.</p>
> */
> @Override
> public String toString() {
> @@ -153,13 +116,13 @@
> }
>
> /**
> - * <p>Take the argument <code>extensionName</code>, and set it as
> - * the value of the <code>extensionName</code> instance variable of
> - * the <code>Extension</code> enum constant. This enables
> - * customizing the value returned from {_at_link #toString}. This
> - * method is only called by the runtime, during application startup,
> - * in the case where an arbitrary lifecycle phase is being
> - * assigned.</p>
> + * <p class="changed_added_2_0">Take the argument
> + * <code>extensionName</code>, and set it as the value of the
> + * <code>extensionName</code> instance variable of the
> + * <code>Extension</code> enum constant. This enables customizing
> + * the value returned from {_at_link #toString}. This method is only
> + * called by the runtime, during application startup, in the case
> + * where an arbitrary lifecycle phase is being assigned.</p>
> */
> public static ProjectStage getExtension(String extensionName) {
> Extension.extensionName = extensionName;
> Index: jsf-ri/build-tests.xml
> ===================================================================
> RCS file: /cvs/javaserverfaces-sources/jsf-ri/build-tests.xml,v
> retrieving revision 1.246
> diff -u -r1.246 build-tests.xml
> --- jsf-ri/build-tests.xml 5 Nov 2007 21:11:47 -0000 1.246
> +++ jsf-ri/build-tests.xml 30 Jan 2008 14:23:41 -0000
> @@ -273,8 +273,8 @@
> <suite>
> <test todir="${impl.test.results.dir}"
> name="com.sun.faces.el.TestResourceELResolver"/>
> - <test todir="${impl.test.results.dir}"
> - name="com.sun.faces.application.resource.TestResourceManager"/>
> +<!-- <test todir="${impl.test.results.dir}"
> + name="com.sun.faces.application.resource.TestResourceManager"/>-->
> <test todir="${impl.test.results.dir}"
> name="com.sun.faces.application.resource.TestResourceHandlerImpl"/>
> <test todir="${impl.test.results.dir}"
> Index: jsf-ri/src/com/sun/faces/application/ApplicationAssociate.java
> ===================================================================
> RCS file: /cvs/javaserverfaces-sources/jsf-ri/src/com/sun/faces/application/ApplicationAssociate.java,v
> retrieving revision 1.51
> diff -u -r1.51 ApplicationAssociate.java
> --- jsf-ri/src/com/sun/faces/application/ApplicationAssociate.java 9 Jan 2008 14:44:16 -0000 1.51
> +++ jsf-ri/src/com/sun/faces/application/ApplicationAssociate.java 30 Jan 2008 14:23:42 -0000
> @@ -42,6 +42,7 @@
>
> import com.sun.faces.RIConstants;
> import com.sun.faces.config.WebConfiguration;
> +import com.sun.faces.config.WebConfiguration.WebContextInitParameter;
> import com.sun.faces.mgbean.BeanManager;
> import com.sun.faces.spi.InjectionProvider;
> import com.sun.faces.spi.InjectionProviderFactory;
> @@ -66,6 +67,7 @@
> import java.util.Map;
> import java.util.ResourceBundle;
> import java.util.TreeSet;
> +import javax.faces.application.ProjectStage;
>
> /**
> * <p>Break out the things that are associated with the Application, but
> @@ -141,6 +143,8 @@
> private boolean requestServiced;
>
> private BeanManager beanManager;
> +
> + private ProjectStage projectStage;
>
> public ApplicationAssociate(ApplicationImpl appImpl) {
> app = appImpl;
> @@ -432,6 +436,30 @@
> public TreeSet<String> getNavigationWildCardList() {
> return wildcardMatchList;
> }
> +
> + public ProjectStage getProjectStage() {
> +
> + if (projectStage == null) {
> + WebConfiguration webConfig =
> + WebConfiguration.getInstance(
> + FacesContext.getCurrentInstance().getExternalContext());
> + String value =
> + webConfig.getOptionValue(WebContextInitParameter.JavaxFacesProjectStage);
> + if (value != null) {
> + try {
> + projectStage = ProjectStage.valueOf(value);
> + } catch (IllegalArgumentException iae) {
> + projectStage = ProjectStage.getExtension(value);
> + }
> + }
> + if (projectStage == null) {
> + projectStage = ProjectStage.Production;
> + }
> + }
> + return projectStage;
> +
> + }
> +
>
> public ResourceBundle getResourceBundle(FacesContext context,
> String var) {
> Index: jsf-ri/src/com/sun/faces/application/ApplicationImpl.java
> ===================================================================
> RCS file: /cvs/javaserverfaces-sources/jsf-ri/src/com/sun/faces/application/ApplicationImpl.java,v
> retrieving revision 1.98
> diff -u -r1.98 ApplicationImpl.java
> --- jsf-ri/src/com/sun/faces/application/ApplicationImpl.java 28 Jan 2008 20:55:39 -0000 1.98
> +++ jsf-ri/src/com/sun/faces/application/ApplicationImpl.java 30 Jan 2008 14:23:42 -0000
> @@ -135,7 +135,6 @@
> // Relationship Instance Variables
>
> private ApplicationAssociate associate = null;
> - private ProjectStage projectStage;
>
> private volatile ActionListener actionListener = null;
> private volatile NavigationHandler navigationHandler = null;
> @@ -298,24 +297,11 @@
> @Override
> public ProjectStage getProjectStage() {
>
> - if (projectStage == null) {
> - WebConfiguration webConfig =
> - WebConfiguration.getInstance(
> - FacesContext.getCurrentInstance().getExternalContext());
> - String value =
> - webConfig.getOptionValue(WebContextInitParameter.JavaxFacesProjectStage);
> - if (value != null) {
> - try {
> - projectStage = ProjectStage.valueOf(value);
> - } catch (IllegalArgumentException iae) {
> - projectStage = ProjectStage.getExtension(value);
> - }
> - }
> - if (projectStage == null) {
> - projectStage = ProjectStage.Production;
> - }
> - }
> - return projectStage;
> + ProjectStage result = ProjectStage.Production;
> +
> + result = getAssociate().getProjectStage();
> +
> + return result;
>
> }
>
> Index: jsf-ri/test-sqe/web/WEB-INF/faces-config.xml
> ===================================================================
> RCS file: /cvs/javaserverfaces-sources/jsf-ri/test-sqe/web/WEB-INF/faces-config.xml,v
> retrieving revision 1.4
> diff -u -r1.4 faces-config.xml
> --- jsf-ri/test-sqe/web/WEB-INF/faces-config.xml 27 Apr 2007 22:02:28 -0000 1.4
> +++ jsf-ri/test-sqe/web/WEB-INF/faces-config.xml 30 Jan 2008 14:23:45 -0000
> @@ -39,8 +39,8 @@
>
> <faces-config xmlns="http://java.sun.com/xml/ns/javaee"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> - xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
> - version="1.2">
> + xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
> + version="2.0">
>
>
> <application>
> Index: jsf-ri/web/test/WEB-INF/faces-config.xml
> ===================================================================
> RCS file: /cvs/javaserverfaces-sources/jsf-ri/web/test/WEB-INF/faces-config.xml,v
> retrieving revision 1.29
> diff -u -r1.29 faces-config.xml
> --- jsf-ri/web/test/WEB-INF/faces-config.xml 27 Apr 2007 22:02:37 -0000 1.29
> +++ jsf-ri/web/test/WEB-INF/faces-config.xml 30 Jan 2008 14:23:45 -0000
> @@ -38,8 +38,8 @@
>
> <faces-config xmlns="http://java.sun.com/xml/ns/javaee"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> - xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
> - version="1.2">
> + xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
> + version="2.0">
>
> <!-- Initial application element with partial values -->
> <application>
> Index: jsf-ri/web/test-config-1/WEB-INF/faces-config.xml
> ===================================================================
> RCS file: /cvs/javaserverfaces-sources/jsf-ri/web/test-config-1/WEB-INF/faces-config.xml,v
> retrieving revision 1.8
> diff -u -r1.8 faces-config.xml
> --- jsf-ri/web/test-config-1/WEB-INF/faces-config.xml 27 Apr 2007 22:02:38 -0000 1.8
> +++ jsf-ri/web/test-config-1/WEB-INF/faces-config.xml 30 Jan 2008 14:23:45 -0000
> @@ -43,8 +43,8 @@
>
> <faces-config xmlns="http://java.sun.com/xml/ns/javaee"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> - xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
> - version="1.2">
> + xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
> + version="2.0">
>
> <component>
> <component-type>DefaultComponent</component-type>
>