You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by gp...@apache.org on 2011/02/06 06:05:16 UTC
svn commit: r1067586 - in /myfaces/extensions/cdi/trunk:
examples/jsf-examples/hello_myfaces-codi_jsf12/src/main/java/org/apache/myfaces/examples/codi/jsf12/view/inline/
examples/jsf-examples/hello_myfaces-codi_jsf12/src/main/webapp/
jee-modules/jsf-mo...
Author: gpetracek
Date: Sun Feb 6 05:05:16 2011
New Revision: 1067586
URL: http://svn.apache.org/viewvc?rev=1067586&view=rev
Log:
EXTCDI-125 inline view-configs (initial draft)
Added:
myfaces/extensions/cdi/trunk/examples/jsf-examples/hello_myfaces-codi_jsf12/src/main/java/org/apache/myfaces/examples/codi/jsf12/view/inline/
myfaces/extensions/cdi/trunk/examples/jsf-examples/hello_myfaces-codi_jsf12/src/main/java/org/apache/myfaces/examples/codi/jsf12/view/inline/HelloMyFacesCodiInlineViewConfigPageBean.java
myfaces/extensions/cdi/trunk/examples/jsf-examples/hello_myfaces-codi_jsf12/src/main/java/org/apache/myfaces/examples/codi/jsf12/view/inline/InlineViewConfigRootMarker.java
myfaces/extensions/cdi/trunk/examples/jsf-examples/hello_myfaces-codi_jsf12/src/main/webapp/helloMyFacesCodiInlineViewConfig.jsp
Modified:
myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/view/DefaultViewConfigExtractor.java
myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/view/ExtractedInlineViewConfigDefinitionEntry.java
myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/view/ViewConfigCache.java
myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/view/ViewConfigExtension.java
myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/test/java/org/apache/myfaces/extensions/cdi/jsf/test/impl/config/view/TestableViewConfigExtension.java
myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/test/java/org/apache/myfaces/extensions/cdi/jsf/test/impl/config/view/ViewConfigTest.java
Added: myfaces/extensions/cdi/trunk/examples/jsf-examples/hello_myfaces-codi_jsf12/src/main/java/org/apache/myfaces/examples/codi/jsf12/view/inline/HelloMyFacesCodiInlineViewConfigPageBean.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/examples/jsf-examples/hello_myfaces-codi_jsf12/src/main/java/org/apache/myfaces/examples/codi/jsf12/view/inline/HelloMyFacesCodiInlineViewConfigPageBean.java?rev=1067586&view=auto
==============================================================================
--- myfaces/extensions/cdi/trunk/examples/jsf-examples/hello_myfaces-codi_jsf12/src/main/java/org/apache/myfaces/examples/codi/jsf12/view/inline/HelloMyFacesCodiInlineViewConfigPageBean.java (added)
+++ myfaces/extensions/cdi/trunk/examples/jsf-examples/hello_myfaces-codi_jsf12/src/main/java/org/apache/myfaces/examples/codi/jsf12/view/inline/HelloMyFacesCodiInlineViewConfigPageBean.java Sun Feb 6 05:05:16 2011
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.myfaces.examples.codi.jsf12.view.inline;
+
+import org.apache.myfaces.extensions.cdi.jsf.api.config.view.Page;
+import org.apache.myfaces.extensions.cdi.jsf.api.config.view.PreRenderView;
+import static org.apache.myfaces.extensions.cdi.jsf.api.config.view.Page.Extension.JSP;
+import org.apache.myfaces.extensions.cdi.core.api.config.view.ViewConfig;
+
+import javax.enterprise.inject.Model;
+
+/**
+ * @author Gerhard Petracek
+ */
+@Page(extension = JSP)
+@Model
+public class HelloMyFacesCodiInlineViewConfigPageBean implements ViewConfig
+{
+ private boolean preloaded = false;
+
+ @PreRenderView
+ protected void preload()
+ {
+ this.preloaded = true;
+ }
+
+ public boolean isPreloaded()
+ {
+ return preloaded;
+ }
+}
Added: myfaces/extensions/cdi/trunk/examples/jsf-examples/hello_myfaces-codi_jsf12/src/main/java/org/apache/myfaces/examples/codi/jsf12/view/inline/InlineViewConfigRootMarker.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/examples/jsf-examples/hello_myfaces-codi_jsf12/src/main/java/org/apache/myfaces/examples/codi/jsf12/view/inline/InlineViewConfigRootMarker.java?rev=1067586&view=auto
==============================================================================
--- myfaces/extensions/cdi/trunk/examples/jsf-examples/hello_myfaces-codi_jsf12/src/main/java/org/apache/myfaces/examples/codi/jsf12/view/inline/InlineViewConfigRootMarker.java (added)
+++ myfaces/extensions/cdi/trunk/examples/jsf-examples/hello_myfaces-codi_jsf12/src/main/java/org/apache/myfaces/examples/codi/jsf12/view/inline/InlineViewConfigRootMarker.java Sun Feb 6 05:05:16 2011
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.myfaces.examples.codi.jsf12.view.inline;
+
+import org.apache.myfaces.extensions.cdi.jsf.api.config.view.InlineViewConfigRoot;
+
+/**
+ * @author Gerhard Petracek
+ */
+@InlineViewConfigRoot(basePath = "/", pageBeanPostfix = "PageBean")
+public interface InlineViewConfigRootMarker
+{
+}
Added: myfaces/extensions/cdi/trunk/examples/jsf-examples/hello_myfaces-codi_jsf12/src/main/webapp/helloMyFacesCodiInlineViewConfig.jsp
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/examples/jsf-examples/hello_myfaces-codi_jsf12/src/main/webapp/helloMyFacesCodiInlineViewConfig.jsp?rev=1067586&view=auto
==============================================================================
--- myfaces/extensions/cdi/trunk/examples/jsf-examples/hello_myfaces-codi_jsf12/src/main/webapp/helloMyFacesCodiInlineViewConfig.jsp (added)
+++ myfaces/extensions/cdi/trunk/examples/jsf-examples/hello_myfaces-codi_jsf12/src/main/webapp/helloMyFacesCodiInlineViewConfig.jsp Sun Feb 6 05:05:16 2011
@@ -0,0 +1,32 @@
+<%--
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+--%>
+
+<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
+<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
+<html>
+ <head>
+ <title>Hello World</title>
+ </head>
+ <body>
+ <f:view>
+ <h1>Inline ViewConfig-Demo</h1>
+ <h:outputText value="bean with inline view-config - preloaded: #{helloMyFacesCodiInlineViewConfigPageBean.preloaded}"/>
+
+ <h:messages globalOnly="true" infoStyle="color: blue;" warnStyle="color: orange;" errorStyle="color: red;" fatalStyle="color:darkred;"/>
+ </f:view>
+ </body>
+</html>
Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/view/DefaultViewConfigExtractor.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/view/DefaultViewConfigExtractor.java?rev=1067586&r1=1067585&r2=1067586&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/view/DefaultViewConfigExtractor.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/view/DefaultViewConfigExtractor.java Sun Feb 6 05:05:16 2011
@@ -62,10 +62,19 @@ class DefaultViewConfigExtractor impleme
}
int startIndex = viewConfigRootMarker.getPackage().getName().length() + 1;
- String basePath = viewDefinitionClass.getName()
- .substring(startIndex, viewDefinitionClass.getName().lastIndexOf("."));
+ int endIndex = viewDefinitionClass.getName().lastIndexOf(".");
- basePath = basePath.replace(".", "/");
+ String basePath;
+ if(startIndex < endIndex)
+ {
+ basePath = viewDefinitionClass.getName()
+ .substring(startIndex, endIndex);
+ basePath = basePath.replace(".", "/");
+ }
+ else
+ {
+ basePath = null; //both are in the same package
+ }
//use the interface to make clear which information we really need
ViewConfigEntry viewConfigEntry = new ExtractedInlineViewConfigDefinitionEntry(viewDefinitionClass, basePath);
Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/view/ExtractedInlineViewConfigDefinitionEntry.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/view/ExtractedInlineViewConfigDefinitionEntry.java?rev=1067586&r1=1067585&r2=1067586&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/view/ExtractedInlineViewConfigDefinitionEntry.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/view/ExtractedInlineViewConfigDefinitionEntry.java Sun Feb 6 05:05:16 2011
@@ -31,7 +31,15 @@ class ExtractedInlineViewConfigDefinitio
public ExtractedInlineViewConfigDefinitionEntry(Class<? extends ViewConfig> viewDefinitionClass, String basePath)
{
super(viewDefinitionClass);
- this.basePath = basePath + "/";
+
+ if(basePath != null)
+ {
+ this.basePath = basePath + "/";
+ }
+ else
+ {
+ this.basePath = "";
+ }
}
@Override
Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/view/ViewConfigCache.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/view/ViewConfigCache.java?rev=1067586&r1=1067585&r2=1067586&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/view/ViewConfigCache.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/view/ViewConfigCache.java Sun Feb 6 05:05:16 2011
@@ -62,6 +62,25 @@ public class ViewConfigCache
inlineViewConfigRootMarker =
new HashMap<ClassLoader, Class>();
+ private static Map<ClassLoader, Boolean>
+ lazyInitAllowed =
+ new HashMap<ClassLoader, Boolean>();
+
+ static void activateWriteMode()
+ {
+ setLazyInit(false);
+ }
+
+ static void deactivateWriteMode()
+ {
+ setLazyInit(true);
+ }
+
+ private static void setLazyInit(boolean newValue)
+ {
+ lazyInitAllowed.put(getClassloader(), newValue);
+ }
+
static void addViewDefinition(String viewId, ViewConfigEntry viewDefinitionEntry)
{
storeViewDefinition(viewId, viewDefinitionEntry, false);
@@ -247,9 +266,19 @@ public class ViewConfigCache
return;
}
+ if(isInWriteMode())
+ {
+ return;
+ }
+
registerInlineViewConfigEntry();
}
+ private static boolean isInWriteMode()
+ {
+ return !Boolean.TRUE.equals(lazyInitAllowed.get(getClassloader()));
+ }
+
private synchronized static void registerInlineViewConfigEntry()
{
List<InlineViewConfigEntry> inlineViewConfigEntryList =
Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/view/ViewConfigExtension.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/view/ViewConfigExtension.java?rev=1067586&r1=1067585&r2=1067586&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/view/ViewConfigExtension.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/view/ViewConfigExtension.java Sun Feb 6 05:05:16 2011
@@ -65,6 +65,8 @@ public class ViewConfigExtension impleme
return;
}
+ beginViewConfigExtraction();
+
if (processAnnotatedType.getAnnotatedType().isAnnotationPresent(Page.class))
{
validateViewConfigDefinition(processAnnotatedType.getAnnotatedType().getJavaClass());
@@ -93,6 +95,18 @@ public class ViewConfigExtension impleme
processAnnotatedType.setAnnotatedType(
new ViewControllerWrapper(processAnnotatedType.getAnnotatedType()));
}
+
+ endViewConfigExtraction();
+ }
+
+ protected void beginViewConfigExtraction()
+ {
+ ViewConfigCache.activateWriteMode();
+ }
+
+ protected void endViewConfigExtraction()
+ {
+ ViewConfigCache.deactivateWriteMode();
}
protected void setInlineViewConfigRootMarker(Class markerClass)
Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/test/java/org/apache/myfaces/extensions/cdi/jsf/test/impl/config/view/TestableViewConfigExtension.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/test/java/org/apache/myfaces/extensions/cdi/jsf/test/impl/config/view/TestableViewConfigExtension.java?rev=1067586&r1=1067585&r2=1067586&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/test/java/org/apache/myfaces/extensions/cdi/jsf/test/impl/config/view/TestableViewConfigExtension.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/test/java/org/apache/myfaces/extensions/cdi/jsf/test/impl/config/view/TestableViewConfigExtension.java Sun Feb 6 05:05:16 2011
@@ -49,4 +49,15 @@ class TestableViewConfigExtension extend
{
return super.isInlineViewConfig(beanClass);
}
+
+ @Override
+ public void beginViewConfigExtraction()
+ {
+ super.beginViewConfigExtraction();
+ }
+
+ public void finalizeConfig()
+ {
+ super.endViewConfigExtraction();
+ }
}
Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/test/java/org/apache/myfaces/extensions/cdi/jsf/test/impl/config/view/ViewConfigTest.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/test/java/org/apache/myfaces/extensions/cdi/jsf/test/impl/config/view/ViewConfigTest.java?rev=1067586&r1=1067585&r2=1067586&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/test/java/org/apache/myfaces/extensions/cdi/jsf/test/impl/config/view/ViewConfigTest.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/test/java/org/apache/myfaces/extensions/cdi/jsf/test/impl/config/view/ViewConfigTest.java Sun Feb 6 05:05:16 2011
@@ -46,6 +46,7 @@ public class ViewConfigTest
public void resetCache()
{
ViewConfigCache.reset();
+ viewConfigExtension.beginViewConfigExtraction(); //allow lazy init
}
@Test
@@ -286,6 +287,8 @@ public class ViewConfigTest
viewConfigExtension.addInlinePageDefinition(OrderOverviewPage.class);
viewConfigExtension.addInlinePageDefinition(RegistrationStep01PageBean.class);
+ viewConfigExtension.finalizeConfig();
+
assertEquals(ViewConfigCache.getViewDefinition(
OrderOverviewPage.class).getViewId(),
"/pages/order/orderOverview.xhtml");
@@ -311,6 +314,8 @@ public class ViewConfigTest
viewConfigExtension.addInlinePageDefinition(OrderOverviewPage.class);
viewConfigExtension.addInlinePageDefinition(RegistrationStep01PageBean.class);
+ viewConfigExtension.finalizeConfig();
+
assertEquals(ViewConfigCache.getViewDefinition(
OrderOverviewPage.class).getViewId(),
"/views/order/orderOverview.xhtml");
@@ -336,6 +341,8 @@ public class ViewConfigTest
viewConfigExtension.addInlinePageDefinition(OrderOverviewPage.class);
viewConfigExtension.addInlinePageDefinition(RegistrationStep01PageBean.class);
+ viewConfigExtension.finalizeConfig();
+
assertEquals(ViewConfigCache.getViewDefinition(
OrderOverviewPage.class).getViewId(),
"/order/orderOverview.xhtml");
@@ -366,6 +373,8 @@ public class ViewConfigTest
{
viewConfigExtension.addInlinePageDefinition(OrderOverviewPage.class);
+ viewConfigExtension.finalizeConfig();
+
try
{
assertEquals(ViewConfigCache.getViewDefinition(