You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by lu...@apache.org on 2015/04/01 00:45:19 UTC

svn commit: r1670509 - in /myfaces/core/trunk/impl/src: main/java/org/apache/myfaces/config/ main/java/org/apache/myfaces/config/element/ main/java/org/apache/myfaces/config/impl/digester/ main/java/org/apache/myfaces/config/impl/digester/elements/ tes...

Author: lu4242
Date: Tue Mar 31 22:45:18 2015
New Revision: 1670509

URL: http://svn.apache.org/r1670509
Log:
MYFACES-3970 11.4.2.1 topic Each <contract-mapping> element can have one or more <contract> elements.

Added:
    myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/config/impl/digister/contracts2.xml
      - copied, changed from r1657660, myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/config/impl/digister/csrf-and-contracts.xml
Modified:
    myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/config/FacesConfigurator.java
    myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/config/element/ContractMapping.java
    myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/config/impl/digester/DigesterFacesConfigUnmarshallerImpl.java
    myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/config/impl/digester/elements/ContractMappingImpl.java
    myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/config/impl/digister/DigesterFacesConfigUnmarshallerImplTest.java

Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/config/FacesConfigurator.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/config/FacesConfigurator.java?rev=1670509&r1=1670508&r2=1670509&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/config/FacesConfigurator.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/config/FacesConfigurator.java Tue Mar 31 22:45:18 2015
@@ -894,9 +894,25 @@ public class FacesConfigurator
         
         for (ContractMapping mapping : dispenser.getResourceLibraryContractMappings())
         {
-            String urlPattern = mapping.getUrlPattern();
-            String[] contracts = StringUtils.trim(StringUtils.splitShortString(mapping.getContracts(), ' '));
-            runtimeConfig.addContractMapping(urlPattern, contracts);
+            if (mapping.getUrlPattern() != null)
+            {
+                // Deprecated way
+                String urlPattern = mapping.getUrlPattern();
+                String[] contracts = StringUtils.trim(StringUtils.splitShortString(mapping.getContracts(), ' '));
+                runtimeConfig.addContractMapping(urlPattern, contracts);
+            }
+            else
+            {
+                List<String> urlMappingsList = mapping.getUrlPatternList();
+                for (String urlPattern: urlMappingsList)
+                {
+                    for (String contract : mapping.getContractList())
+                    {
+                        String[] contracts = StringUtils.trim(StringUtils.splitShortString(contract, ' '));
+                        runtimeConfig.addContractMapping(urlPattern, contracts);
+                    }
+                }
+            }
         }
         
         this.setApplication(application);

Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/config/element/ContractMapping.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/config/element/ContractMapping.java?rev=1670509&r1=1670508&r2=1670509&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/config/element/ContractMapping.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/config/element/ContractMapping.java Tue Mar 31 22:45:18 2015
@@ -19,6 +19,7 @@
 package org.apache.myfaces.config.element;
 
 import java.io.Serializable;
+import java.util.List;
 
 /**
  *
@@ -26,7 +27,21 @@ import java.io.Serializable;
  */
 public abstract class ContractMapping implements Serializable
 {
+    /**
+     * @deprecated 
+     * @return 
+     */
+    @Deprecated
     public abstract String getUrlPattern();
     
+    /**
+     * @deprecated 
+     * @return 
+     */
+    @Deprecated
     public abstract String getContracts();
+    
+    public abstract List<String> getUrlPatternList();
+    
+    public abstract List<String> getContractList();
 }

Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/config/impl/digester/DigesterFacesConfigUnmarshallerImpl.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/config/impl/digester/DigesterFacesConfigUnmarshallerImpl.java?rev=1670509&r1=1670508&r2=1670509&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/config/impl/digester/DigesterFacesConfigUnmarshallerImpl.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/config/impl/digester/DigesterFacesConfigUnmarshallerImpl.java Tue Mar 31 22:45:18 2015
@@ -132,9 +132,9 @@ public class DigesterFacesConfigUnmarsha
         digester.addSetNext("faces-config/application/resource-library-contracts/contract-mapping", 
             "addResourceLibraryContractMapping");
         digester.addCallMethod(
-            "faces-config/application/resource-library-contracts/contract-mapping/url-pattern", "setUrlPattern", 0);
+            "faces-config/application/resource-library-contracts/contract-mapping/url-pattern", "addUrlPattern", 0);
         digester.addCallMethod(
-            "faces-config/application/resource-library-contracts/contract-mapping/contracts", "setContracts", 0);
+            "faces-config/application/resource-library-contracts/contract-mapping/contracts", "addContract", 0);
         
         // 2.1 specific start
         digester.addCallMethod("faces-config/factory/facelet-cache-factory", "addFaceletCacheFactory", 0);

Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/config/impl/digester/elements/ContractMappingImpl.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/config/impl/digester/elements/ContractMappingImpl.java?rev=1670509&r1=1670508&r2=1670509&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/config/impl/digester/elements/ContractMappingImpl.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/config/impl/digester/elements/ContractMappingImpl.java Tue Mar 31 22:45:18 2015
@@ -18,6 +18,9 @@
  */
 package org.apache.myfaces.config.impl.digester.elements;
 
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
 import org.apache.myfaces.config.element.ContractMapping;
 
 /**
@@ -26,39 +29,73 @@ import org.apache.myfaces.config.element
  */
 public class ContractMappingImpl extends ContractMapping
 {
-    private String urlPattern;
-    private String contracts;
+    private List<String> urlPatternList;
+    private List<String> contractsList;
+    
+    private transient List <String> unmodifiableUrlPatternList;
+    private transient List <String> unmodifiableContractsList;
 
     /**
      * @return the urlPattern
      */
-    public String getUrlPattern()
+    public List<String> getUrlPatternList()
     {
-        return urlPattern;
+        if (urlPatternList == null)
+        {
+            return Collections.emptyList();
+        }
+        if (unmodifiableUrlPatternList == null)
+        {
+            unmodifiableUrlPatternList = 
+                Collections.unmodifiableList(urlPatternList);
+        }
+        return unmodifiableUrlPatternList;
     }
 
     /**
-     * @param urlPattern the urlPattern to set
+     * @return the contracts
      */
-    public void setUrlPattern(String urlPattern)
+    public List<String> getContractList()
     {
-        this.urlPattern = urlPattern;
+        if (contractsList == null)
+        {
+            return Collections.emptyList();
+        }
+        if (unmodifiableContractsList == null)
+        {
+            unmodifiableContractsList = 
+                Collections.unmodifiableList(contractsList);
+        }
+        return unmodifiableContractsList;
     }
 
-    /**
-     * @return the contracts
-     */
-    public String getContracts()
+    public void addContract(String contract)
+    {
+        if (contractsList == null)
+        {
+            contractsList = new ArrayList<String>();
+        }
+        contractsList.add(contract);
+    }
+    
+    public void addUrlPattern(String urlPattern)
     {
-        return contracts;
+        if (urlPatternList == null)
+        {
+            urlPatternList = new ArrayList<String>();
+        }
+        urlPatternList.add(urlPattern);
     }
 
-    /**
-     * @param contracts the contracts to set
-     */
-    public void setContracts(String contracts)
+    @Override
+    public String getUrlPattern()
     {
-        this.contracts = contracts;
+        return null;
+    }
+
+    @Override
+    public String getContracts()
+    {
+        return null;
     }
-    
 }

Modified: myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/config/impl/digister/DigesterFacesConfigUnmarshallerImplTest.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/config/impl/digister/DigesterFacesConfigUnmarshallerImplTest.java?rev=1670509&r1=1670508&r2=1670509&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/config/impl/digister/DigesterFacesConfigUnmarshallerImplTest.java (original)
+++ myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/config/impl/digister/DigesterFacesConfigUnmarshallerImplTest.java Tue Mar 31 22:45:18 2015
@@ -262,7 +262,25 @@ public class DigesterFacesConfigUnmarsha
         assertEquals(1, app.getResourceLibraryContractMappings().size());
         
         ContractMapping mapping = app.getResourceLibraryContractMappings().get(0);
-        assertEquals("/files/*.xhtml", mapping.getUrlPattern());
-        assertEquals("contractA contractB", mapping.getContracts());
+        assertEquals("/files/*.xhtml", mapping.getUrlPatternList().get(0));
+        assertEquals("contractA contractB", mapping.getContractList().get(0));
     }
+    
+    public void testContracts2() throws Exception
+    {
+        FacesConfig cfg = _impl.getFacesConfig(getClass().getResourceAsStream(
+                "contracts2.xml"), "contracts2.xml");
+        
+        assertNotNull(cfg);
+
+        Application app = cfg.getApplications().get(0);
+        assertNotNull(app);
+        assertEquals(1, app.getResourceLibraryContractMappings().size());
+        
+        ContractMapping mapping = app.getResourceLibraryContractMappings().get(0);
+        assertTrue(mapping.getUrlPatternList().contains("/files/*.xhtml"));
+        assertTrue(mapping.getUrlPatternList().contains("/files2/*.xhtml"));
+        assertTrue(mapping.getContractList().contains("contractA"));
+        assertTrue(mapping.getContractList().contains("contractB"));
+    }    
 }

Copied: myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/config/impl/digister/contracts2.xml (from r1657660, myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/config/impl/digister/csrf-and-contracts.xml)
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/config/impl/digister/contracts2.xml?p2=myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/config/impl/digister/contracts2.xml&p1=myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/config/impl/digister/csrf-and-contracts.xml&r1=1657660&r2=1670509&rev=1670509&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/config/impl/digister/csrf-and-contracts.xml (original)
+++ myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/config/impl/digister/contracts2.xml Tue Mar 31 22:45:18 2015
@@ -23,7 +23,9 @@
         <resource-library-contracts>
             <contract-mapping>
                 <url-pattern>/files/*.xhtml</url-pattern>
-                <contracts>contractA contractB</contracts>
+                <url-pattern>/files2/*.xhtml</url-pattern>
+                <contracts>contractA</contracts>
+                <contracts>contractB</contracts>
             </contract-mapping>
         </resource-library-contracts>
     </application>