You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by cz...@apache.org on 2015/05/19 19:30:24 UTC

svn commit: r1680351 - in /felix/trunk/http/base/src: main/java/org/apache/felix/http/base/internal/whiteboard/ test/java/org/apache/felix/http/base/internal/registry/

Author: cziegeler
Date: Tue May 19 17:30:24 2015
New Revision: 1680351

URL: http://svn.apache.org/r1680351
Log:
FELIX-4888 : ServletHandler's are not sorted by longest matching path. DTO handling (WiP)

Added:
    felix/trunk/http/base/src/test/java/org/apache/felix/http/base/internal/registry/ErrorPageRegistryTest.java
      - copied, changed from r1680349, felix/trunk/http/base/src/test/java/org/apache/felix/http/base/internal/registry/ErrorPageTest.java
Removed:
    felix/trunk/http/base/src/test/java/org/apache/felix/http/base/internal/registry/ErrorPageTest.java
Modified:
    felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/WhiteboardManager.java

Modified: felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/WhiteboardManager.java
URL: http://svn.apache.org/viewvc/felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/WhiteboardManager.java?rev=1680351&r1=1680350&r2=1680351&view=diff
==============================================================================
--- felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/WhiteboardManager.java (original)
+++ felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/WhiteboardManager.java Tue May 19 17:30:24 2015
@@ -24,7 +24,6 @@ import static org.osgi.service.http.runt
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.Comparator;
 import java.util.Dictionary;
 import java.util.HashMap;
 import java.util.Hashtable;
@@ -33,7 +32,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.TreeMap;
-import java.util.TreeSet;
 import java.util.concurrent.ConcurrentSkipListMap;
 
 import javax.annotation.Nonnull;
@@ -748,41 +746,39 @@ public final class WhiteboardManager
     {
         final FailedDTOHolder failedDTOHolder = new FailedDTOHolder();
 
-        final Collection<ServletContextDTO> contextDTOs = new TreeSet<ServletContextDTO>(new Comparator<ServletContextDTO>() {
-
-            @Override
-            public int compare(ServletContextDTO o1, ServletContextDTO o2) {
-                // Service id's can be negative. Negative id's follow the reverse natural ordering of integers.
-                int reverseOrder = ( o1.serviceId >= 0 && o2.serviceId >= 0 ) ? 1 : -1;
-                return reverseOrder * Long.compare(o1.serviceId, o2.serviceId);
-            }
-        });
+        final Collection<ServletContextDTO> contextDTOs = new ArrayList<ServletContextDTO>();
+        // add the context for the http service
+        final ServletContextHelperInfo info = new ServletContextHelperInfo(Integer.MAX_VALUE, 0, HTTP_SERVICE_CONTEXT_NAME, "/", null);
+        final ServletContextDTO dto = ServletContextDTOBuilder.build(info, webContext, -1);
+        if ( registry.getRuntime(dto, failedDTOHolder) )
+        {
+            contextDTOs.add(dto);
+        }
 
+        // get sort list of context handlers
+        final List<ContextHandler> contextHandlerList = new ArrayList<ContextHandler>();
         synchronized ( this.contextMap )
         {
-            for (final List<ContextHandler> contextHandlerList : this.contextMap.values())
+            for (final List<ContextHandler> list : this.contextMap.values())
             {
-                if ( !contextHandlerList.isEmpty() )
+                if ( !list.isEmpty() )
                 {
-                    final ContextHandler handler = contextHandlerList.get(0);
-                    final ServletContextDTO dto = ServletContextDTOBuilder.build(handler.getContextInfo(), handler.getSharedContext(), -1);
-
-                    if ( registry.getRuntime(dto, failedDTOHolder) )
-                    {
-                        handler.getListenerRegistry().getRuntime(dto);
-                        contextDTOs.add(dto);
-                    }
+                    contextHandlerList.add(list.get(0));
                 }
             }
             failedDTOHolder.add(serviceFailures);
         }
+        Collections.sort(contextHandlerList);
 
-        // add the context for the http service
-        final ServletContextHelperInfo info = new ServletContextHelperInfo(Integer.MAX_VALUE, 0, HTTP_SERVICE_CONTEXT_NAME, "/", null);
-        final ServletContextDTO dto = ServletContextDTOBuilder.build(info, webContext, -1);
-        if ( registry.getRuntime(dto, failedDTOHolder) )
+        for (final ContextHandler handler : contextHandlerList)
         {
-            contextDTOs.add(dto);
+            final ServletContextDTO scDTO = ServletContextDTOBuilder.build(handler.getContextInfo(), handler.getSharedContext(), -1);
+
+            if ( registry.getRuntime(scDTO, failedDTOHolder) )
+            {
+                handler.getListenerRegistry().getRuntime(scDTO);
+                contextDTOs.add(scDTO);
+            }
         }
 
         return new RegistryRuntime(failedDTOHolder, contextDTOs);

Copied: felix/trunk/http/base/src/test/java/org/apache/felix/http/base/internal/registry/ErrorPageRegistryTest.java (from r1680349, felix/trunk/http/base/src/test/java/org/apache/felix/http/base/internal/registry/ErrorPageTest.java)
URL: http://svn.apache.org/viewvc/felix/trunk/http/base/src/test/java/org/apache/felix/http/base/internal/registry/ErrorPageRegistryTest.java?p2=felix/trunk/http/base/src/test/java/org/apache/felix/http/base/internal/registry/ErrorPageRegistryTest.java&p1=felix/trunk/http/base/src/test/java/org/apache/felix/http/base/internal/registry/ErrorPageTest.java&r1=1680349&r2=1680351&rev=1680351&view=diff
==============================================================================
--- felix/trunk/http/base/src/test/java/org/apache/felix/http/base/internal/registry/ErrorPageTest.java (original)
+++ felix/trunk/http/base/src/test/java/org/apache/felix/http/base/internal/registry/ErrorPageRegistryTest.java Tue May 19 17:30:24 2015
@@ -47,7 +47,7 @@ import org.osgi.framework.ServiceReferen
 import org.osgi.service.http.runtime.dto.ServletContextDTO;
 import org.osgi.service.http.whiteboard.HttpWhiteboardConstants;
 
-public class ErrorPageTest {
+public class ErrorPageRegistryTest {
 
     private final ErrorPageRegistry reg = new ErrorPageRegistry();