I see... this breaks the ITs because of the package version of api. Rolling
back the API version...

Still not clear about the JCR dependency

On Fri, Sep 28, 2012 at 1:28 PM, Justin Edelson <[email protected]> wrote:

> Argh. I forgot to remove my changes to the pom.xml before committing...
> the environment I was testing this in didn't have the latest API jar.
>
> But question... is there a reason servlets.resolver should depend upon the
> latest API? It works OK with a dependency on 2.1.0.
>
> Also, the JCR API isn't used as all.
>
> I'm inclined to keep my pom.xml changes unless there's a good reason for
> these extra dependencies. If they are required, I'll roll back my changes.
>
> Regards,
> Justin
>
> On Fri, Sep 28, 2012 at 1:17 PM, <[email protected]> wrote:
>
>> Author: justin
>> Date: Fri Sep 28 12:17:34 2012
>> New Revision: 1391420
>>
>> URL: http://svn.apache.org/viewvc?rev=1391420&view=rev
>> Log:
>> SLING-2562 - adding initial implementation of a servlet web console test
>> tool based on work done by Konrad Windszus
>>
>> Added:
>>     sling/trunk/bundles/servlets/resolver/src/main/resources/res/
>>     sling/trunk/bundles/servlets/resolver/src/main/resources/res/ui/
>>
>> sling/trunk/bundles/servlets/resolver/src/main/resources/res/ui/styles.css
>>   (with props)
>> Modified:
>>     sling/trunk/bundles/servlets/resolver/pom.xml
>>
>> sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/SlingServletResolver.java
>>
>> sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/helper/ResourceCollector.java
>>
>> sling/trunk/bundles/servlets/resolver/src/test/java/org/apache/sling/servlets/resolver/internal/SlingServletResolverTest.java
>>
>> Modified: sling/trunk/bundles/servlets/resolver/pom.xml
>> URL:
>> http://svn.apache.org/viewvc/sling/trunk/bundles/servlets/resolver/pom.xml?rev=1391420&r1=1391419&r2=1391420&view=diff
>>
>> ==============================================================================
>> --- sling/trunk/bundles/servlets/resolver/pom.xml (original)
>> +++ sling/trunk/bundles/servlets/resolver/pom.xml Fri Sep 28 12:17:34 2012
>> @@ -59,7 +59,6 @@
>>                  <configuration>
>>                      <instructions>
>>                          <Import-Package>
>> -                            javax.jcr;resolution:=optional,
>>                              org.apache.sling.api.resource;provide:=true,
>>                              *
>>                          </Import-Package>
>> @@ -77,13 +76,9 @@
>>              <artifactId>servlet-api</artifactId>
>>          </dependency>
>>          <dependency>
>> -            <groupId>javax.jcr</groupId>
>> -            <artifactId>jcr</artifactId>
>> -        </dependency>
>> -        <dependency>
>>              <groupId>org.apache.sling</groupId>
>>              <artifactId>org.apache.sling.api</artifactId>
>> -            <version>2.2.5-SNAPSHOT</version>
>> +            <version>2.2.4</version>
>>              <scope>provided</scope>
>>          </dependency>
>>          <dependency>
>> @@ -126,7 +121,7 @@
>>          <dependency>
>>              <groupId>org.apache.sling</groupId>
>>              <artifactId>org.apache.sling.commons.testing</artifactId>
>> -            <version>2.0.2-incubator</version>
>> +            <version>2.0.11-SNAPSHOT</version>
>>              <scope>test</scope>
>>          </dependency>
>>          <dependency>
>>
>> Modified:
>> sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/SlingServletResolver.java
>> URL:
>> http://svn.apache.org/viewvc/sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/SlingServletResolver.java?rev=1391420&r1=1391419&r2=1391420&view=diff
>>
>> ==============================================================================
>> ---
>> sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/SlingServletResolver.java
>> (original)
>> +++
>> sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/SlingServletResolver.java
>> Fri Sep 28 12:17:34 2012
>> @@ -28,12 +28,17 @@ import static org.osgi.framework.Constan
>>  import static
>> org.osgi.service.component.ComponentConstants.COMPONENT_NAME;
>>
>>  import java.io.IOException;
>> +import java.io.InputStream;
>> +import java.io.PrintWriter;
>> +import java.net.URL;
>>  import java.util.ArrayList;
>>  import java.util.Arrays;
>>  import java.util.Collection;
>> +import java.util.Collections;
>>  import java.util.Dictionary;
>>  import java.util.HashMap;
>>  import java.util.Hashtable;
>> +import java.util.Iterator;
>>  import java.util.List;
>>  import java.util.Map;
>>  import java.util.concurrent.ConcurrentHashMap;
>> @@ -41,9 +46,12 @@ import java.util.concurrent.ConcurrentHa
>>  import javax.servlet.Servlet;
>>  import javax.servlet.ServletContext;
>>  import javax.servlet.ServletException;
>> +import javax.servlet.http.HttpServlet;
>>  import javax.servlet.http.HttpServletRequest;
>>  import javax.servlet.http.HttpServletResponse;
>>
>> +import org.apache.commons.io.IOUtils;
>> +import org.apache.commons.lang.StringUtils;
>>  import org.apache.felix.scr.annotations.Component;
>>  import org.apache.felix.scr.annotations.Properties;
>>  import org.apache.felix.scr.annotations.Property;
>> @@ -81,6 +89,7 @@ import org.apache.sling.servlets.resolve
>>  import
>> org.apache.sling.servlets.resolver.internal.helper.SlingServletConfig;
>>  import
>> org.apache.sling.servlets.resolver.internal.resource.ServletResourceProvider;
>>  import
>> org.apache.sling.servlets.resolver.internal.resource.ServletResourceProviderFactory;
>> +import org.osgi.framework.BundleContext;
>>  import org.osgi.framework.Constants;
>>  import org.osgi.framework.ServiceReference;
>>  import org.osgi.framework.ServiceRegistration;
>> @@ -232,6 +241,8 @@ public class SlingServletResolver
>>       */
>>      private String[] defaultExtensions;
>>
>> +    private ServletResolverWebConsolePlugin plugin;
>> +
>>      // ---------- ServletResolver interface
>> -----------------------------------
>>
>>      /**
>> @@ -877,6 +888,8 @@ public class SlingServletResolver
>>          // and finally register as event listener
>>          this.eventHandlerReg =
>> context.getBundleContext().registerService(EventHandler.class.getName(),
>> this,
>>                  properties);
>> +
>> +        this.plugin = new
>> ServletResolverWebConsolePlugin(context.getBundleContext());
>>      }
>>
>>      /**
>> @@ -886,6 +899,10 @@ public class SlingServletResolver
>>          // stop registering of servlets immediately
>>          this.context = null;
>>
>> +        if (this.plugin != null) {
>> +            this.plugin.dispose();
>> +        }
>> +
>>          // unregister event handler
>>          if (this.eventHandlerReg != null) {
>>              this.eventHandlerReg.unregister();
>> @@ -1139,4 +1156,243 @@ public class SlingServletResolver
>>          // this is deprecated, but we just delegate anyway
>>          return this.decorate(resource);
>>      }
>> +
>> +    @SuppressWarnings("serial")
>> +    class ServletResolverWebConsolePlugin extends HttpServlet {
>> +        private static final String PARAMETER_URL = "url";
>> +        private static final String PARAMETER_METHOD = "method";
>> +
>> +        private ServiceRegistration service;
>> +
>> +        public ServletResolverWebConsolePlugin(BundleContext context) {
>> +            Dictionary<String, Object> props = new Hashtable<String,
>> Object>();
>> +            props.put(Constants.SERVICE_DESCRIPTION,
>> +                    "Sling Servlet Resolver Web Console Plugin");
>> +            props.put(Constants.SERVICE_VENDOR, "The Apache Software
>> Foundation");
>> +            props.put(Constants.SERVICE_PID, getClass().getName());
>> +            props.put("felix.webconsole.label", "servletresolver");
>> +            props.put("felix.webconsole.title", "Sling Servlet
>> Resolver");
>> +            props.put("felix.webconsole.css",
>> "/servletresolver/res/ui/styles.css");
>> +
>> +            service = context.registerService(
>> +                    new String[] { "javax.servlet.Servlet" }, this,
>> props);
>> +        }
>> +
>> +        public void dispose() {
>> +            if (service != null) {
>> +                service.unregister();
>> +                service = null;
>> +            }
>> +        }
>> +
>> +        class DecomposedURL {
>> +            final String extension;
>> +            final String path;
>> +            final String[] selectors;
>> +
>> +            DecomposedURL(String url) {
>> +                if (url != null) {
>> +                    final int lastDot = url.lastIndexOf('.');
>> +                    final int firstDot = url.indexOf('.');
>> +                    if (lastDot > 0) {
>> +                        final int slashInExtension = url.indexOf('/',
>> lastDot);
>> +                        // strip suffix, if any
>> +                        if (slashInExtension > 0) {
>> +                            extension = url.substring(lastDot + 1,
>> slashInExtension);
>> +                        } else {
>> +                            extension = url.substring(lastDot + 1);
>> +                        }
>> +
>> +                        path = url.substring(0, firstDot);
>> +                        if (lastDot != firstDot) {
>> +                            // has selectors
>> +                            final String selectorString =
>> url.substring(firstDot + 1, lastDot);
>> +                            selectors = selectorString.split("\\.");
>> +                        } else {
>> +                            selectors = new String[0];
>> +                        }
>> +                    } else {
>> +                        extension = "";
>> +                        path = url;
>> +                        selectors = new String[0];
>> +                    }
>> +                } else {
>> +                    extension = "";
>> +                    path = "";
>> +                    selectors = new String[0];
>> +                }
>> +            }
>> +        }
>> +
>> +        @Override
>> +        protected void service(HttpServletRequest request,
>> HttpServletResponse response) throws ServletException, IOException {
>> +            final String url = request.getParameter(PARAMETER_URL);
>> +            final DecomposedURL decomposed = new DecomposedURL(url);
>> +            String method = request.getParameter(PARAMETER_METHOD);
>> +            if (StringUtils.isBlank(method)) {
>> +                method = "GET";
>> +            }
>> +
>> +            ResourceResolver resourceResolver = null;
>> +            try {
>> +                resourceResolver =
>> resourceResolverFactory.getAdministrativeResourceResolver(null);
>> +
>> +                final PrintWriter pw = response.getWriter();
>> +
>> +                pw.print("<form method='get'>");
>> +                pw.println("<table class='content' cellpadding='0'
>> cellspacing='0' width='100%'>");
>> +
>> +                titleHtml(
>> +                        pw,
>> +                        "Servlet Resolver Test",
>> +                        "To check which servlet is responsible for
>> rendering a response, enter a request path into " +
>> +                                 "the field and click 'Resolve' to
>> resolve it.");
>> +
>> +                tr(pw);
>> +                tdLabel(pw, "URL");
>> +                tdContent(pw);
>> +
>> +                pw.println("<input type='text' name='" + PARAMETER_URL +
>> "' value='" +
>> +                         (url != null ? url : "") + "' class='input'
>> size='50'>");
>> +                closeTd(pw);
>> +                closeTr(pw);
>> +                closeTr(pw);
>> +
>> +                tr(pw);
>> +                tdLabel(pw, "Method");
>> +                tdContent(pw);
>> +                pw.println("<select name='" + PARAMETER_METHOD + "'>");
>> +                pw.println("<option value='GET'>GET</option>");
>> +                pw.println("<option value='POST'>POST</option>");
>> +                pw.println("</select>");
>> +                pw.println("&nbsp;&nbsp;<input type='submit'" +
>> +                         "' value='Resolve' class='submit'>");
>> +
>> +                closeTd(pw);
>> +                closeTr(pw);
>> +
>> +                if (StringUtils.isNotBlank(url)) {
>> +                    tr(pw);
>> +                    tdLabel(pw, "Decomposed URL");
>> +                    tdContent(pw);
>> +                    pw.println("<dl>");
>> +                    pw.println("<dt>Path</dt>");
>> +                    pw.println("<dd>" + decomposed.path + "</dd>");
>> +                    pw.println("<dt>Selectors</dt>");
>> +                    pw.print("<dd>");
>> +                    if (decomposed.selectors.length == 0) {
>> +                        pw.print("&lt;none&gt;");
>> +                    } else {
>> +                        pw.print("[");
>> +                        pw.print(StringUtils.join(decomposed.selectors,
>> ", "));
>> +                        pw.print("]");
>> +                    }
>> +                    pw.println("</dd>");
>> +                    pw.println("<dt>Extension</dt>");
>> +                    pw.println("<dd>" + decomposed.extension + "</dd>");
>> +                    pw.println("</dl>");
>> +                    closeTd(pw);
>> +                    closeTr(pw);
>> +                }
>> +
>> +                if (StringUtils.isNotBlank(decomposed.path)) {
>> +                    final Collection<Resource> servlets;
>> +                    Resource resource =
>> resourceResolver.resolve(decomposed.path);
>> +                    if (resource.adaptTo(Servlet.class) != null) {
>> +                        servlets = Collections.singleton(resource);
>> +                    } else {
>> +                        final ResourceCollector locationUtil =
>> ResourceCollector.create(resource, defaultWorkspaceName,
>> decomposed.extension, executionPaths, defaultExtensions, method,
>> decomposed.selectors);
>> +                        servlets =
>> locationUtil.getServlets(resourceResolver);
>> +                    }
>> +                    tr(pw);
>> +                    tdLabel(pw, "&nbsp;");
>> +                    tdContent(pw);
>> +
>> +                    if (servlets == null || servlets.isEmpty()) {
>> +                        pw.println("Could not find a suitable servlet
>> for this request!");
>> +                    } else {
>> +                        pw.println("Candidate servlets and scripts in
>> order of preference:<br/>");
>> +                        pw.println("<ol class='servlets'>");
>> +                        Iterator<Resource> iterator =
>> servlets.iterator();
>> +                        outputServlets(pw, iterator);
>> +                        pw.println("</ol>");
>> +                    }
>> +                    pw.println("</td>");
>> +                    closeTr(pw);
>> +                }
>> +
>> +                pw.println("</table>");
>> +                pw.print("</form>");
>> +            } catch (LoginException e) {
>> +                throw new ServletException(e);
>> +            } finally {
>> +                if (resourceResolver != null) {
>> +                    resourceResolver.close();
>> +                }
>> +            }
>> +        }
>> +
>> +        private void tdContent(final PrintWriter pw) {
>> +            pw.print("<td class='content' colspan='2'>");
>> +        }
>> +
>> +        private void closeTd(final PrintWriter pw) {
>> +            pw.print("</td>");
>> +        }
>> +
>> +        @SuppressWarnings("unused")
>> +        private URL getResource(final String path) {
>> +            if (path.startsWith("/servletresolver/res/ui")) {
>> +                return this.getClass().getResource(path.substring(16));
>> +            } else {
>> +                return null;
>> +            }
>> +        }
>> +
>> +        private void closeTr(final PrintWriter pw) {
>> +            pw.println("</tr>");
>> +        }
>> +
>> +        private void tdLabel(final PrintWriter pw, final String label) {
>> +            pw.println("<td class='content'>" + label + "</td>");
>> +        }
>> +
>> +        private void tr(final PrintWriter pw) {
>> +            pw.println("<tr class='content'>");
>> +        }
>> +
>> +        private void outputServlets(PrintWriter pw, Iterator<Resource>
>> iterator) {
>> +            while (iterator.hasNext()) {
>> +                Resource candidateResource = iterator.next();
>> +                Servlet candidate =
>> candidateResource.adaptTo(Servlet.class);
>> +                if (candidate != null) {
>> +                    boolean isOptingServlet = false;
>> +
>> +                    if (candidate instanceof SlingScript) {
>> +                        pw.println("<li>" + candidateResource.getPath()
>> + "</li>");
>> +                    } else {
>> +                        if (candidate instanceof OptingServlet) {
>> +                            isOptingServlet = true;
>> +                        }
>> +                        pw.println("<li>" +
>> candidate.getClass().getName() + (isOptingServlet ? " (OptingServlet)" :
>> "") + "</li>");
>> +                    }
>> +                }
>> +            }
>> +        }
>> +
>> +        private void titleHtml(PrintWriter pw, String title, String
>> description) {
>> +            tr(pw);
>> +            pw.println("<th colspan='3' class='content container'>" +
>> title +
>> +                     "</th>");
>> +            closeTr(pw);
>> +
>> +            if (description != null) {
>> +                tr(pw);
>> +                pw.println("<td colspan='3' class='content'>" +
>> description +
>> +                         "</th>");
>> +                closeTr(pw);
>> +            }
>> +        }
>> +
>> +    }
>>  }
>>
>> Modified:
>> sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/helper/ResourceCollector.java
>> URL:
>> http://svn.apache.org/viewvc/sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/helper/ResourceCollector.java?rev=1391420&r1=1391419&r2=1391420&view=diff
>>
>> ==============================================================================
>> ---
>> sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/helper/ResourceCollector.java
>> (original)
>> +++
>> sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/helper/ResourceCollector.java
>> Fri Sep 28 12:17:34 2012
>> @@ -18,10 +18,12 @@
>>   */
>>  package org.apache.sling.servlets.resolver.internal.helper;
>>
>> +import java.util.Arrays;
>>  import java.util.Iterator;
>>  import java.util.Set;
>>
>>  import org.apache.commons.lang.ArrayUtils;
>> +import org.apache.commons.lang.StringUtils;
>>  import org.apache.sling.api.SlingHttpServletRequest;
>>  import org.apache.sling.api.request.RequestPathInfo;
>>  import org.apache.sling.api.resource.Resource;
>> @@ -86,8 +88,20 @@ public class ResourceCollector extends A
>>      public static ResourceCollector create(
>>              final SlingHttpServletRequest request, final String
>> workspaceName,
>>              final String[] executionPaths, final String[]
>> defaultExtensions) {
>> -        boolean isDefaultExtension =
>> ArrayUtils.contains(defaultExtensions,
>> request.getRequestPathInfo().getExtension());
>> -        return new ResourceCollector(request, workspaceName,
>> executionPaths, isDefaultExtension);
>> +        final RequestPathInfo requestPathInfo =
>> request.getRequestPathInfo();
>> +        final boolean isDefaultExtension =
>> ArrayUtils.contains(defaultExtensions, requestPathInfo.getExtension());
>> +        return new ResourceCollector(request.getResource(),
>> workspaceName, requestPathInfo.getExtension(), executionPaths,
>> isDefaultExtension,
>> +                request.getMethod(), requestPathInfo.getSelectors());
>> +    }
>> +
>> +    public static ResourceCollector create(final Resource resource,
>> +            final String workspaceName,
>> +            final String extension,
>> +            final String[] executionPaths, final String[]
>> defaultExtensions,
>> +            final String methodName, final String[] selectors
>> +            ) {
>> +        boolean isDefaultExtension =
>> ArrayUtils.contains(defaultExtensions, extension);
>> +        return new ResourceCollector(resource, workspaceName, extension,
>> executionPaths, isDefaultExtension, methodName, selectors);
>>      }
>>
>>      /**
>> @@ -133,7 +147,7 @@ public class ResourceCollector extends A
>>
>>      /**
>>       * Creates a <code>ResourceCollector</code> finding servlets and
>> scripts for
>> -     * the given <code>methodName</code>.
>> +     * the given <code>resource</code>.
>>       *
>>       * @param methodName The <code>methodName</code> used to find
>> scripts for.
>>       *            This must not be <code>null</code>.
>> @@ -144,34 +158,35 @@ public class ResourceCollector extends A
>>       *            {@link
>> org.apache.sling.servlets.resolver.internal.ServletResolverConstants#DEFAULT_SERVLET_NAME}
>>       *            is assumed.
>>       */
>> -    private ResourceCollector(final SlingHttpServletRequest request,
>> -            final String workspaceName, final String[] executionPaths,
>> -            final boolean isDefaultExtension) {
>> +    private ResourceCollector(final Resource resource,
>> +            final String workspaceName, final String extension,
>> +            final String[] executionPaths,
>> +            final boolean isDefaultExtension,
>> +            final String methodName,
>> +            final String[] selectors) {
>>          super(ServletResolverConstants.DEFAULT_SERVLET_NAME,
>> -            request.getResource().getResourceType(),
>> -            request.getResource().getResourceSuperType(), workspaceName,
>> -            request.getRequestPathInfo().getExtension(), executionPaths);
>> -        this.methodName = request.getMethod();
>> -
>> -        this.suffExt = "." + extension;
>> -        this.suffMethod = "." + methodName;
>> -        this.suffExtMethod = suffExt + suffMethod;
>> -
>> -        RequestPathInfo requestpaInfo = request.getRequestPathInfo();
>> -
>> -        this.requestSelectors = requestpaInfo.getSelectors();
>> -        this.numRequestSelectors = requestSelectors.length;
>> -
>> -        this.isGet = "GET".equals(methodName) ||
>> "HEAD".equals(methodName);
>> -        this.isDefaultExtension = isDefaultExtension;
>> -
>> -        // create the hash code once
>> -        final String key = methodName + ':' + baseResourceType + ':'
>> -            + extension + ':' + requestpaInfo.getSelectorString() + ':'
>> -            + (this.resourceType == null ? "" : this.resourceType) + ':'
>> -            + (this.resourceSuperType == null ? "" :
>> this.resourceSuperType)
>> -            + ':' + (this.workspaceName == null ? "" :
>> this.workspaceName);
>> -        this.hashCode = key.hashCode();
>> +                resource.getResourceType(),
>> +                resource.getResourceSuperType(), workspaceName,
>> +                extension, executionPaths);
>> +            this.methodName = methodName;
>> +
>> +            this.suffExt = "." + extension;
>> +            this.suffMethod = "." + methodName;
>> +            this.suffExtMethod = suffExt + suffMethod;
>> +
>> +            this.requestSelectors = selectors;
>> +            this.numRequestSelectors = requestSelectors.length;
>> +
>> +            this.isGet = "GET".equals(methodName) ||
>> "HEAD".equals(methodName);
>> +            this.isDefaultExtension = isDefaultExtension;
>> +
>> +            // create the hash code once
>> +            final String key = methodName + ':' + baseResourceType + ':'
>> +                + extension + ':' + StringUtils.join(requestSelectors,
>> '.') + ':'
>> +                + (this.resourceType == null ? "" : this.resourceType) +
>> ':'
>> +                + (this.resourceSuperType == null ? "" :
>> this.resourceSuperType)
>> +                + ':' + (this.workspaceName == null ? "" :
>> this.workspaceName);
>> +            this.hashCode = key.hashCode();
>>      }
>>
>>      protected void getWeightedResources(final Set<Resource> resources,
>>
>> Added:
>> sling/trunk/bundles/servlets/resolver/src/main/resources/res/ui/styles.css
>> URL:
>> http://svn.apache.org/viewvc/sling/trunk/bundles/servlets/resolver/src/main/resources/res/ui/styles.css?rev=1391420&view=auto
>>
>> ==============================================================================
>> ---
>> sling/trunk/bundles/servlets/resolver/src/main/resources/res/ui/styles.css
>> (added)
>> +++
>> sling/trunk/bundles/servlets/resolver/src/main/resources/res/ui/styles.css
>> Fri Sep 28 12:17:34 2012
>> @@ -0,0 +1,30 @@
>> +/*
>> + * 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.
>> + */
>> +ol.servlets {
>> +    margin-top: 10px;
>> +}
>> +ol.servlets li {
>> +    list-style: decimal;
>> +    margin-left: 20px;
>> +}
>> +
>> +.content dt {
>> +    font-weight: bold;
>> +}
>> +.content dd {
>> +    margin-left: 10px;
>> +}
>> \ No newline at end of file
>>
>> Propchange:
>> sling/trunk/bundles/servlets/resolver/src/main/resources/res/ui/styles.css
>>
>> ------------------------------------------------------------------------------
>>     svn:eol-style = native
>>
>> Propchange:
>> sling/trunk/bundles/servlets/resolver/src/main/resources/res/ui/styles.css
>>
>> ------------------------------------------------------------------------------
>>     svn:keywords = Author Date Id Revision Rev URL
>>
>> Modified:
>> sling/trunk/bundles/servlets/resolver/src/test/java/org/apache/sling/servlets/resolver/internal/SlingServletResolverTest.java
>> URL:
>> http://svn.apache.org/viewvc/sling/trunk/bundles/servlets/resolver/src/test/java/org/apache/sling/servlets/resolver/internal/SlingServletResolverTest.java?rev=1391420&r1=1391419&r2=1391420&view=diff
>>
>> ==============================================================================
>> ---
>> sling/trunk/bundles/servlets/resolver/src/test/java/org/apache/sling/servlets/resolver/internal/SlingServletResolverTest.java
>> (original)
>> +++
>> sling/trunk/bundles/servlets/resolver/src/test/java/org/apache/sling/servlets/resolver/internal/SlingServletResolverTest.java
>> Fri Sep 28 12:17:34 2012
>> @@ -24,6 +24,7 @@ import static org.junit.Assert.assertTru
>>
>>  import java.lang.reflect.Field;
>>  import java.util.ArrayList;
>> +import java.util.Dictionary;
>>  import java.util.List;
>>  import java.util.Map;
>>
>> @@ -38,6 +39,7 @@ import org.apache.sling.api.resource.Res
>>  import org.apache.sling.api.resource.ResourceUtil;
>>  import org.apache.sling.api.servlets.OptingServlet;
>>  import org.apache.sling.commons.testing.osgi.MockBundle;
>> +import org.apache.sling.commons.testing.osgi.MockBundleContext;
>>  import org.apache.sling.commons.testing.osgi.MockComponentContext;
>>  import org.apache.sling.commons.testing.osgi.MockServiceReference;
>>  import org.apache.sling.commons.testing.sling.MockResource;
>> @@ -51,6 +53,7 @@ import org.junit.Before;
>>  import org.junit.Test;
>>  import org.junit.runner.RunWith;
>>  import org.osgi.framework.Constants;
>> +import org.osgi.framework.ServiceRegistration;
>>
>>  @RunWith(JMock.class)
>>  public class SlingServletResolverTest {
>> @@ -115,8 +118,19 @@ public class SlingServletResolverTest {
>>          resolverField.set(servletResolver, factory);
>>
>>          MockBundle bundle = new MockBundle(1L);
>> +        MockBundleContext bundleContext = new MockBundleContext(bundle) {
>> +            @Override
>> +            public ServiceRegistration registerService(String s, Object
>> o, Dictionary dictionary) {
>> +                return null;
>> +            }
>> +
>> +            @Override
>> +            public ServiceRegistration registerService(String[] strings,
>> Object o, Dictionary dictionary) {
>> +                return null;
>> +            }
>> +        };
>>          MockComponentContext mockComponentContext = new
>> MockComponentContext(
>> -            bundle, SlingServletResolverTest.this.servlet);
>> +            bundleContext, SlingServletResolverTest.this.servlet);
>>          MockServiceReference serviceReference = new
>> MockServiceReference(bundle);
>>          serviceReference.setProperty(Constants.SERVICE_ID, 1L);
>>          serviceReference.setProperty(SLING_SERLVET_NAME,
>>
>>
>>
>

Reply via email to