Author: jdonnerstag
Date: Mon Dec 29 15:05:33 2008
New Revision: 730011

URL: http://svn.apache.org/viewvc?rev=730011&view=rev
Log:
fixed Wicket-1917: Automatically Load CSS files based on name matching
Added a test case

Added:
    
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/header/MyPage2.css
    
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/header/MyPage2.html
    
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/header/MyPage2.java
    
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/header/MyPage2_ExpectedResult.html
Modified:
    wicket/trunk/wicket/src/main/java/org/apache/wicket/Component.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/MarkupContainer.java
    
wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/WebMarkupContainer.java
    
wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/WebMarkupContainerWithAssociatedMarkup.java
    
wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/internal/HtmlHeaderContainer.java
    
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/header/HeaderScopingTest.java

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/Component.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/Component.java?rev=730011&r1=730010&r2=730011&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/Component.java 
(original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/Component.java Mon Dec 
29 15:05:33 2008
@@ -29,6 +29,7 @@
 import org.apache.wicket.authorization.AuthorizationException;
 import org.apache.wicket.authorization.IAuthorizationStrategy;
 import org.apache.wicket.authorization.UnauthorizedActionException;
+import org.apache.wicket.behavior.HeaderContributor;
 import org.apache.wicket.behavior.IBehavior;
 import org.apache.wicket.feedback.FeedbackMessage;
 import org.apache.wicket.feedback.IFeedback;
@@ -37,6 +38,7 @@
 import org.apache.wicket.markup.MarkupStream;
 import org.apache.wicket.markup.WicketTag;
 import org.apache.wicket.markup.html.IHeaderContributor;
+import org.apache.wicket.markup.html.PackageResource;
 import org.apache.wicket.markup.html.internal.HtmlHeaderContainer;
 import org.apache.wicket.model.IComponentAssignedModel;
 import org.apache.wicket.model.IComponentInheritedModel;
@@ -890,15 +892,7 @@
         */
        public Component(final String id)
        {
-               setId(id);
-               getApplication().notifyComponentInstantiationListeners(this);
-
-               final IDebugSettings debugSettings = 
Application.get().getDebugSettings();
-               if (debugSettings.isLinePreciseReportingOnNewComponentEnabled())
-               {
-                       setMetaData(CONSTRUCTED_AT_KEY, Strings.toString(this, 
new MarkupException(
-                               "constructed")));
-               }
+               this(id, null);
        }
 
        /**
@@ -915,8 +909,38 @@
         */
        public Component(final String id, final IModel<?> model)
        {
-               this(id);
-               setModelImpl(wrap(model));
+               setId(id);
+               getApplication().notifyComponentInstantiationListeners(this);
+
+               final IDebugSettings debugSettings = 
Application.get().getDebugSettings();
+               if (debugSettings.isLinePreciseReportingOnNewComponentEnabled())
+               {
+                       setMetaData(CONSTRUCTED_AT_KEY, Strings.toString(this, 
new MarkupException(
+                               "constructed")));
+               }
+
+               if (model != null)
+               {
+                       setModelImpl(wrap(model));
+               }
+
+               // Any component is allowed to have associated *.js or *.css 
file which are automatically
+               // added to the header section of the page.
+               // ignore anonymous classes and internal components
+               String name = this.getClass().getSimpleName();
+               if ((name != null) &&
+                       ((this instanceof Page) || ((id != null) && 
(id.length() > 0) && (id.charAt(0) != '_'))))
+               {
+                       if (PackageResource.exists(this.getClass(), name + 
".css", getLocale(), getStyle()))
+                       {
+                               add(HeaderContributor.forCss(this.getClass(), 
name + ".css"));
+                       }
+
+                       if (PackageResource.exists(this.getClass(), name + 
".js", getLocale(), getStyle()))
+                       {
+                               
add(HeaderContributor.forJavaScript(this.getClass(), name + ".js"));
+                       }
+               }
        }
 
        /**
@@ -3634,9 +3658,9 @@
        /**
         * THIS METHOD IS NOT PART OF THE WICKET PUBLIC API. DO NOT CALL OR 
OVERRIDE.
         * 
-     * <p>
+        * <p>
         * Called when a request begins.
-     * </p>
+        * </p>
         * 
         * @Deprecated use {...@link #onBeforeRender()} instead
         */
@@ -3647,9 +3671,9 @@
        /**
         * THIS METHOD IS NOT PART OF THE WICKET PUBLIC API. DO NOT CALL OR 
OVERRIDE.
         * 
-     * <p>
+        * <p>
         * Called when a request ends.
-     * </p>
+        * </p>
         * 
         * @Deprecated use {...@link #onBeforeRender()} instead
         * 
@@ -3661,9 +3685,9 @@
        /**
         * THIS METHOD IS NOT PART OF THE WICKET PUBLIC API. DO NOT CALL OR 
OVERRIDE.
         * 
-     * <p>
+        * <p>
         * Called anytime a model is changed via setModel or setModelObject.
-     * </p>
+        * </p>
         */
        protected void internalOnModelChanged()
        {
@@ -4222,7 +4246,7 @@
         */
        final void setId(final String id)
        {
-               if (id == null && !(this instanceof Page))
+               if ((id == null) && !(this instanceof Page))
                {
                        throw new WicketRuntimeException("Null component id is 
not allowed.");
                }

Modified: 
wicket/trunk/wicket/src/main/java/org/apache/wicket/MarkupContainer.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/MarkupContainer.java?rev=730011&r1=730010&r2=730011&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/MarkupContainer.java 
(original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/MarkupContainer.java 
Mon Dec 29 15:05:33 2008
@@ -102,7 +102,7 @@
         */
        public MarkupContainer(final String id)
        {
-               super(id);
+               this(id, null);
        }
 
        /**

Modified: 
wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/WebMarkupContainer.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/WebMarkupContainer.java?rev=730011&r1=730010&r2=730011&view=diff
==============================================================================
--- 
wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/WebMarkupContainer.java
 (original)
+++ 
wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/WebMarkupContainer.java
 Mon Dec 29 15:05:33 2008
@@ -37,7 +37,7 @@
         */
        public WebMarkupContainer(final String id)
        {
-               super(id);
+               this(id, null);
        }
 
        /**

Modified: 
wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/WebMarkupContainerWithAssociatedMarkup.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/WebMarkupContainerWithAssociatedMarkup.java?rev=730011&r1=730010&r2=730011&view=diff
==============================================================================
--- 
wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/WebMarkupContainerWithAssociatedMarkup.java
 (original)
+++ 
wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/WebMarkupContainerWithAssociatedMarkup.java
 Mon Dec 29 15:05:33 2008
@@ -40,7 +40,7 @@
         */
        public WebMarkupContainerWithAssociatedMarkup(final String id)
        {
-               super(id);
+               this(id, null);
        }
 
        /**

Modified: 
wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/internal/HtmlHeaderContainer.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/internal/HtmlHeaderContainer.java?rev=730011&r1=730010&r2=730011&view=diff
==============================================================================
--- 
wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/internal/HtmlHeaderContainer.java
 (original)
+++ 
wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/internal/HtmlHeaderContainer.java
 Mon Dec 29 15:05:33 2008
@@ -62,7 +62,6 @@
  * </ul>
  * 
  * @author Juergen Donnerstag
- * 
  */
 public class HtmlHeaderContainer extends WebMarkupContainer
 {
@@ -171,12 +170,16 @@
                        if (output.length() > 0)
                        {
                                if (renderOpenAndCloseTags())
+                               {
                                        webResponse.write("<head>");
+                               }
 
                                webResponse.write(output);
 
                                if (renderOpenAndCloseTags())
+                               {
                                        webResponse.write("</head>");
+                               }
                        }
                }
                finally
@@ -186,6 +189,10 @@
                }
        }
 
+       /**
+        * 
+        * @return True if open and close tag are to be rendered.
+        */
        protected boolean renderOpenAndCloseTags()
        {
                return true;
@@ -209,6 +216,7 @@
                final HtmlHeaderContainer container)
        {
                page.renderHead(container);
+
                // Make sure all Components interested in contributing to the 
header
                // and there attached behaviors are asked.
                page.visitChildren(new IVisitor<Component>()
@@ -223,10 +231,7 @@
                                        component.renderHead(container);
                                        return IVisitor.CONTINUE_TRAVERSAL;
                                }
-                               else
-                               {
-                                       return 
IVisitor.CONTINUE_TRAVERSAL_BUT_DONT_GO_DEEPER;
-                               }
+                               return 
IVisitor.CONTINUE_TRAVERSAL_BUT_DONT_GO_DEEPER;
                        }
                });
        }
@@ -320,5 +325,4 @@
                }
                return headerResponse;
        }
-
 }

Modified: 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/header/HeaderScopingTest.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/header/HeaderScopingTest.java?rev=730011&r1=730010&r2=730011&view=diff
==============================================================================
--- 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/header/HeaderScopingTest.java
 (original)
+++ 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/header/HeaderScopingTest.java
 Mon Dec 29 15:05:33 2008
@@ -20,7 +20,6 @@
 
 /**
  * 
- * @author Matheus
  */
 public class HeaderScopingTest extends WicketTestCase
 {
@@ -42,4 +41,13 @@
        {
                executeTest(MyPage.class, "MyPageExpectedResult.html");
        }
+
+       /**
+        * 
+        * @throws Exception
+        */
+       public void test_2() throws Exception
+       {
+               executeTest(MyPage2.class, "MyPage2_ExpectedResult.html");
+       }
 }

Added: 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/header/MyPage2.css
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/header/MyPage2.css?rev=730011&view=auto
==============================================================================
--- 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/header/MyPage2.css
 (added)
+++ 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/header/MyPage2.css
 Mon Dec 29 15:05:33 2008
@@ -0,0 +1 @@
+CSS File
\ No newline at end of file

Added: 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/header/MyPage2.html
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/header/MyPage2.html?rev=730011&view=auto
==============================================================================
--- 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/header/MyPage2.html
 (added)
+++ 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/header/MyPage2.html
 Mon Dec 29 15:05:33 2008
@@ -0,0 +1,8 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>My Page</title>
+  </head>
+  <body>
+  </body>
+</html>

Added: 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/header/MyPage2.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/header/MyPage2.java?rev=730011&view=auto
==============================================================================
--- 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/header/MyPage2.java
 (added)
+++ 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/header/MyPage2.java
 Mon Dec 29 15:05:33 2008
@@ -0,0 +1,37 @@
+/*
+ * 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.wicket.markup.html.header;
+
+import org.apache.wicket.behavior.HeaderContributor;
+import org.apache.wicket.markup.html.WebPage;
+
+/**
+ * 
+ */
+public class MyPage2 extends WebPage
+{
+       private static final long serialVersionUID = 1L;
+
+       /**
+        * Creates a new instance of MyPage
+        */
+       public MyPage2()
+       {
+               // And it is not problem if historically it has been added. 
Wicket will render it just once
+               add(HeaderContributor.forCss(this.getClass(), 
this.getClass().getSimpleName() + ".css"));
+       }
+}

Added: 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/header/MyPage2_ExpectedResult.html
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/header/MyPage2_ExpectedResult.html?rev=730011&view=auto
==============================================================================
--- 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/header/MyPage2_ExpectedResult.html
 (added)
+++ 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/header/MyPage2_ExpectedResult.html
 Mon Dec 29 15:05:33 2008
@@ -0,0 +1,9 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>My Page</title>
+  <link rel="stylesheet" type="text/css" 
href="resources/org.apache.wicket.markup.html.header.MyPage2/MyPage2.css" />
+</head>
+  <body>
+  </body>
+</html>


Reply via email to