On Tue, Jul 29, 2008 at 2:59 PM, <[EMAIL PROTECTED]> wrote:

> Author: lryan
> Date: Tue Jul 29 14:59:32 2008
> New Revision: 680856
>
> URL: http://svn.apache.org/viewvc?rev=680856&view=rev
> Log:
> Fix problem with non-inline JS being included out-of-order
>
> Added:
>
>  
> incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/RestfulRequestItemTest.java
>      - copied, changed from r679466,
> incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/RequestItemTest.java


What do these changes have to do with your commit message?


>
> Modified:
>
>  
> incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetRenderingTask.java
>
> Modified:
> incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetRenderingTask.java
> URL:
> http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetRenderingTask.java?rev=680856&r1=680855&r2=680856&view=diff
>
> ==============================================================================
> ---
> incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetRenderingTask.java
> (original)
> +++
> incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetRenderingTask.java
> Tue Jul 29 14:59:32 2008
> @@ -19,6 +19,8 @@
>
>  package org.apache.shindig.gadgets.servlet;
>
> +import com.google.inject.Inject;
> +
>  import org.apache.shindig.common.ContainerConfig;
>  import org.apache.shindig.common.SecurityToken;
>  import org.apache.shindig.common.SecurityTokenDecoder;
> @@ -40,9 +42,6 @@
>  import org.apache.shindig.gadgets.spec.ModulePrefs;
>  import org.apache.shindig.gadgets.spec.Preload;
>  import org.apache.shindig.gadgets.spec.View;
> -
> -import com.google.inject.Inject;
> -
>  import org.json.JSONArray;
>  import org.json.JSONException;
>  import org.json.JSONObject;
> @@ -70,30 +69,45 @@
>  * Represents a single rendering task
>  */
>  public class GadgetRenderingTask {
> +
>   protected static final int DEFAULT_CACHE_TTL = 60 * 5;
> +
>   protected static final String CAJA_PARAM = "caja";
> +
>   protected static final String LIBS_PARAM_NAME = "libs";
> +
>   protected static final Logger logger
>       = Logger.getLogger("org.apache.shindig.gadgets");
> -  protected static final String STRICT_MODE_DOCTYPE = "<!DOCTYPE HTML
> PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"
> http://www.w3.org/TR/html4/strict.dtd\<http://www.w3.org/TR/html4/strict.dtd%5C>
> ">";
> +
> +  protected static final String STRICT_MODE_DOCTYPE
> +      = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"
> http://www.w3.org/TR/html4/strict.dtd\<http://www.w3.org/TR/html4/strict.dtd%5C>
> ">";
>
>   private HttpServletRequest request;
> +
>   private HttpServletResponse response;
> +
>   private final GadgetServer server;
> +
>   private final MessageBundleFactory messageBundleFactory;
> +
>   private final GadgetFeatureRegistry registry;
> +
>   private final ContainerConfig containerConfig;
> +
>   private final UrlGenerator urlGenerator;
> +
>   private final SecurityTokenDecoder tokenDecoder;
> +
>   private GadgetContext context;
> +
>   private final List<GadgetContentFilter> filters;
> +
>   private final LockedDomainService domainLocker;
> +
>   private String container = null;
>
>   /**
>    * Processes a single rendering request and produces output html or
> errors.
> -   *
> -   * @throws IOException
>    */
>   public void process(HttpServletRequest request, HttpServletResponse
> response)
>       throws IOException {
> @@ -111,7 +125,7 @@
>
>     if (!"http".equals(url.getScheme()) &&
> !"https".equals(url.getScheme())) {
>       response.sendError(HttpServletResponse.SC_BAD_REQUEST,
> -                         "Unsupported scheme (must be http or https).");
> +          "Unsupported scheme (must be http or https).");
>       return;
>     }
>
> @@ -140,18 +154,14 @@
>
>   /**
>    * Renders a successfully processed gadget.
> -   *
> -   * @param gadget
> -   * @throws IOException
> -   * @throws GadgetException
>    */
>   private void outputGadget(Gadget gadget) throws IOException,
> GadgetException {
>     View view = gadget.getView(containerConfig);
>     if (view == null) {
> -        throw new
> GadgetException(GadgetException.Code.UNKNOWN_VIEW_SPECIFIED,
> -            "No appropriate view could be found for gadget: " +
> gadget.getSpec().getUrl());
> +      throw new
> GadgetException(GadgetException.Code.UNKNOWN_VIEW_SPECIFIED,
> +          "No appropriate view could be found for gadget: " +
> gadget.getSpec().getUrl());
>     }
> -    switch(view.getType()) {
> +    switch (view.getType()) {
>       case HTML:
>         outputHtmlGadget(gadget, view);
>         break;
> @@ -164,9 +174,7 @@
>   /**
>    * Redirect a type=html gadget to a locked domain if necessary.
>    *
> -   * @param gadget
>    * @return true if the request was handled, false if the request can
> proceed
> -   * @throws IOException
>    */
>   private boolean mustRedirectToLockedDomain(Gadget gadget)
>       throws IOException {
> @@ -183,9 +191,9 @@
>         gadgetUrl, container);
>     String redir =
>         request.getScheme() + "://" +
> -        required +
> -        request.getServletPath() + '?' +
> -        request.getQueryString();
> +            required +
> +            request.getServletPath() + '?' +
> +            request.getQueryString();
>     logger.info("Redirecting gadget " + context.getUrl() + " from domain "
> +
>         host + " to domain " + redir);
>     response.sendRedirect(redir);
> @@ -195,11 +203,6 @@
>
>   /**
>    * Handles type=html gadget output.
> -   *
> -   * @param gadget
> -   * @param view
> -   * @throws IOException
> -   * @throws GadgetException
>    */
>   private void outputHtmlGadget(Gadget gadget, View view)
>       throws IOException, GadgetException {
> @@ -217,11 +220,11 @@
>     // TODO: Substitute gadgets.skins values in here.
>     String boilerPlate
>         = "<html><head><style type=\"text/css\">" +
> -          "body,td,div,span,p{font-family:arial,sans-serif;}" +
> -          "a {color:#0000cc;}a:visited {color:#551a8b;}" +
> -          "a:active {color:#ff0000;}" +
> -          "body{margin: 0px;padding: 0px;background-color:white;}" +
> -          "</style></head>";
> +        "body,td,div,span,p{font-family:arial,sans-serif;}" +
> +        "a {color:#0000cc;}a:visited {color:#551a8b;}" +
> +        "a:active {color:#ff0000;}" +
> +        "body{margin: 0px;padding: 0px;background-color:white;}" +
> +        "</style></head>";
>     markup.append(boilerPlate);
>     LocaleSpec localeSpec = gadget.getSpec().getModulePrefs().getLocale(
>         gadget.getContext().getLocale());
> @@ -229,11 +232,10 @@
>       markup.append("<body>");
>     } else {
>       markup.append("<body dir=\"")
> -            .append(localeSpec.getLanguageDirection())
> -            .append("\">");
> +          .append(localeSpec.getLanguageDirection())
> +          .append("\">");
>     }
>
> -    StringBuilder externJs = new StringBuilder();
>     StringBuilder inlineJs = new StringBuilder();
>     String externFmt = "<script src=\"%s\"></script>";
>     String forcedLibs = request.getParameter("libs");
> @@ -262,7 +264,12 @@
>     // Inline any libs that weren't forced
>     for (JsLibrary library : gadget.getJsLibraries()) {
>       if (library.getType().equals(JsLibrary.Type.URL)) {
> -        externJs.append(String.format(externFmt, library.getContent()));
> +        if (inlineJs.length() > 0) {
> +          markup.append("<script><!--\n").append(inlineJs)
> +              .append("\n-->\n</script>");
> +          inlineJs.setLength(0);
> +        }
> +        markup.append(String.format(externFmt, library.getContent()));
>       } else {
>         if (!libs.contains(library.getFeature())) {
>           // already pulled this file in from the shared contents.
> @@ -293,11 +300,7 @@
>
>     if (inlineJs.length() > 0) {
>       markup.append("<script><!--\n").append(inlineJs)
> -            .append("\n-->\n</script>");
> -    }
> -
> -    if (externJs.length() > 0) {
> -      markup.append(externJs);
> +          .append("\n-->\n</script>");
>     }
>
>     String content = view.getContent();
> @@ -306,8 +309,8 @@
>     }
>
>     markup.append(content)
> -          .append("<script>gadgets.util.runOnLoadHandlers();</script>")
> -          .append("</body></html>");
> +        .append("<script>gadgets.util.runOnLoadHandlers();</script>")
> +        .append("</body></html>");
>     if (context.getIgnoreCache()) {
>       HttpUtil.setCachingHeaders(response, 0);
>     } else if (request.getParameter("v") != null) {
> @@ -323,12 +326,8 @@
>
>   /**
>    * Outputs a url type gadget by redirecting.
> -   *
> -   * @param gadget
> -   * @param view
> -   * @throws IOException
>    */
> -  private void outputUrlGadget(Gadget gadget,  View view) throws
> IOException {
> +  private void outputUrlGadget(Gadget gadget, View view) throws
> IOException {
>     // TODO: generalize this as injectedArgs on Gadget object
>
>     // Preserve existing query string parameters.
> @@ -344,20 +343,20 @@
>
>     try {
>       href = new URI(href.getScheme(),
> -                     href.getUserInfo(),
> -                     href.getHost(),
> -                     href.getPort(),
> -                     href.getPath(),
> -                     null,
> -                     null);
> +          href.getUserInfo(),
> +          href.getHost(),
> +          href.getPort(),
> +          href.getPath(),
> +          null,
> +          null);
>     } catch (URISyntaxException e) {
>       // Not really ever going to happen; input values are already OK.
>       response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
> -                         e.getMessage());
> +          e.getMessage());
>     }
>     // Necessary to avoid double-URL-encoding of the JavaScript bundle
> portion of the query.
>     StringBuilder redirectHref = new StringBuilder(href.toString());
> -    if (query.toString() != null ) {
> +    if (query.toString() != null) {
>       redirectHref.append('?');
>       redirectHref.append(query.toString());
>     }
> @@ -369,12 +368,8 @@
>   }
>
>   /**
> -   * Displays errors for failed GadgetRendering.
> -   * Also sets the caching headers to insure that our server
> -   * is not hurt by failing backends when nocache is not set.
> -   *
> -   * @param error
> -   * @throws IOException
> +   * Displays errors for failed GadgetRendering. Also sets the caching
> headers to insure that our
> +   * server is not hurt by failing backends when nocache is not set.
>    */
>   private void outputErrors(GadgetException error) throws IOException {
>     // Log the errors here for now. We might want different severity levels
> @@ -396,18 +391,15 @@
>
>   /**
>    * Appends libs to the query string.
> -   * @param libs
> -   * @param query
>    */
>   private void appendLibsToQuery(Set<String> libs, StringBuilder query) {
>     query.append('&')
> -         .append(LIBS_PARAM_NAME)
> -         .append('=')
> -         .append(Utf8UrlCoder.encode(urlGenerator.getBundledJsParam(libs,
> context)));
> +        .append(LIBS_PARAM_NAME)
> +        .append('=')
> +        .append(Utf8UrlCoder.encode(urlGenerator.getBundledJsParam(libs,
> context)));
>   }
>
>   /**
> -   * @param req
>    * @return Whether or not to use caja.
>    */
>   protected boolean getUseCaja(HttpServletRequest req) {
> @@ -418,17 +410,16 @@
>   /**
>    * Appends javascript configuration to the bottom of an existing script
> block.
>    *
> -   * Appends special configuration for gadgets.util.hasFeature and
> -   * gadgets.util.getFeatureParams to the output js.
> +   * Appends special configuration for gadgets.util.hasFeature and
> gadgets.util.getFeatureParams to
> +   * the output js.
>    *
> -   * This can't be handled via the normal configuration mechanism because
> it is
> -   * something that varies per request.
> +   * This can't be handled via the normal configuration mechanism because
> it is something that
> +   * varies per request.
>    *
>    * Only explicitly <Require>'d and <Optional> features will be added.
>    *
> -   * @param gadget
>    * @param reqs The features you require.
> -   * @param js Existing js, to which the configuration will be appended.
> +   * @param js   Existing js, to which the configuration will be appended.
>    * @throws GadgetException if there is a problem with the gadget auth
> token
>    */
>   private void appendJsConfig(Gadget gadget, Set<String> reqs,
> @@ -467,11 +458,7 @@
>   }
>
>   /**
> -   * Appends data from <Preload> elements to make them available to
> -   * gadgets.io.
> -   *
> -   * @param gadget
> -   * @param inlineJs
> +   * Appends data from <Preload> elements to make them available to
> gadgets.io.
>    */
>   private void appendPreloads(Gadget gadget, StringBuilder inlineJs) {
>     // Output preloads. We will allow the gadget render to continue
> @@ -485,11 +472,11 @@
>         // Use raw param as key as URL may have to be decoded
>         JSONObject jsonEntry = new JSONObject();
>         jsonEntry.put("body", response.getResponseAsString())
> -                 .put("rc", response.getHttpStatusCode());
> +            .put("rc", response.getHttpStatusCode());
>         resp.put(entry.getKey().getHref().toString(), jsonEntry);
>       } catch (JSONException e) {
>         logger.log(
> -            Level.INFO,"Error outputting preload for " +
> preload.getHref(), e);
> +            Level.INFO, "Error outputting preload for " +
> preload.getHref(), e);
>       } catch (InterruptedException e) {
>         logger.log(
>             Level.INFO, "Error scheduling preload for " +
> preload.getHref(), e);
> @@ -499,10 +486,12 @@
>       }
>     }
>     inlineJs.append("gadgets.io.preloaded_ = ").append(resp.toString())
> -            .append(";\n");
> +        .append(";\n");
>   }
>
> -  /** Gets the container for the current request. */
> +  /**
> +   * Gets the container for the current request.
> +   */
>   private String getContainerForRequest() {
>     if (container != null) {
>       return container;
> @@ -521,8 +510,7 @@
>   /**
>    * Validates that the parent parameter was acceptable.
>    *
> -   * @return True if the parent parameter is valid for the current
> -   *     container.
> +   * @return True if the parent parameter is valid for the current
> container.
>    */
>   private boolean validateParent() {
>     String container = getContainerForRequest();
> @@ -559,12 +547,12 @@
>
>   @Inject
>   public GadgetRenderingTask(GadgetServer server,
> -                             MessageBundleFactory messageBundleFactory,
> -                             GadgetFeatureRegistry registry,
> -                             ContainerConfig containerConfig,
> -                             UrlGenerator urlGenerator,
> -                             SecurityTokenDecoder tokenDecoder,
> -                             LockedDomainService lockedDomainService) {
> +      MessageBundleFactory messageBundleFactory,
> +      GadgetFeatureRegistry registry,
> +      ContainerConfig containerConfig,
> +      UrlGenerator urlGenerator,
> +      SecurityTokenDecoder tokenDecoder,
> +      LockedDomainService lockedDomainService) {
>     this.server = server;
>     this.messageBundleFactory = messageBundleFactory;
>     this.registry = registry;
>
> Copied:
> incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/RestfulRequestItemTest.java
> (from r679466,
> incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/RequestItemTest.java)
> URL:
> http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/RestfulRequestItemTest.java?p2=incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/RestfulRequestItemTest.java&p1=incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/RequestItemTest.java&r1=679466&r2=680856&rev=680856&view=diff
>
> ==============================================================================
> ---
> incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/RequestItemTest.java
> (original)
> +++
> incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/RestfulRequestItemTest.java
> Tue Jul 29 14:59:32 2008
> @@ -17,25 +17,25 @@
>  */
>  package org.apache.shindig.social.opensocial.service;
>
> +import com.google.common.collect.Maps;
> +import com.google.common.collect.Sets;
> +
> +import junit.framework.TestCase;
> +
>  import org.apache.shindig.common.SecurityToken;
>  import org.apache.shindig.common.testing.FakeGadgetToken;
> -import org.apache.shindig.social.opensocial.service.RequestItem;
>  import org.apache.shindig.social.opensocial.spi.GroupId;
>  import org.apache.shindig.social.opensocial.spi.PersonService;
>  import org.apache.shindig.social.opensocial.spi.UserId;
>
> -import com.google.common.collect.Maps;
> -import com.google.common.collect.Sets;
> -import junit.framework.TestCase;
> -
>  import java.util.Map;
>
> -public class RequestItemTest extends TestCase {
> +public class RestfulRequestItemTest extends TestCase {
>
>   public void testParseUrl() throws Exception {
>     String path = "/people/john.doe/@self";
>
> -    RequestItem request = new RequestItem();
> +    RestfulRequestItem request = new RestfulRequestItem();
>     request.setUrl(path + "?fields=huey,dewey,louie");
>
>     request.putUrlParamsIntoParameters();
> @@ -44,7 +44,7 @@
>     assertEquals("huey,dewey,louie",
> request.getParameters().get("fields"));
>
>     // Try it without any params
> -    request = new RequestItem();
> +    request = new RestfulRequestItem();
>     request.setUrl(path);
>
>     request.putUrlParamsIntoParameters();
> @@ -58,7 +58,7 @@
>     Map<String, String> params = Maps.newHashMap();
>     SecurityToken token = null;
>     String method = "method";
> -    RequestItem request = new RequestItem();
> +    RestfulRequestItem request = new RestfulRequestItem();
>
>     request.setUrl(url);
>     assertEquals(url, request.getUrl());
> @@ -74,7 +74,7 @@
>   }
>
>   public void testGetAppId() throws Exception {
> -    RequestItem request = new RequestItem();
> +    RestfulRequestItem request = new RestfulRequestItem();
>
>     request.setParameters(Maps.immutableMap("appId", "100"));
>     assertEquals("100", request.getAppId());
> @@ -86,21 +86,21 @@
>   }
>
>   public void testGetUser() throws Exception {
> -    RequestItem request = new RequestItem();
> +    RestfulRequestItem request = new RestfulRequestItem();
>
>     request.setParameters(Maps.immutableMap("userId", "@owner"));
>     assertEquals(UserId.Type.owner, request.getUser().getType());
>   }
>
>   public void testGetGroup() throws Exception {
> -    RequestItem request = new RequestItem();
> +    RestfulRequestItem request = new RestfulRequestItem();
>
>     request.setParameters(Maps.immutableMap("groupId", "@self"));
>     assertEquals(GroupId.Type.self, request.getGroup().getType());
>   }
>
>   public void testStartIndex() throws Exception {
> -    RequestItem request = new RequestItem();
> +    RestfulRequestItem request = new RestfulRequestItem();
>
>     request.setParameters(Maps.<String, String>immutableMap("startIndex",
> null));
>     assertEquals(0, request.getStartIndex());
> @@ -110,7 +110,7 @@
>   }
>
>   public void testCount() throws Exception {
> -    RequestItem request = new RequestItem();
> +    RestfulRequestItem request = new RestfulRequestItem();
>
>     request.setParameters(Maps.<String, String>immutableMap("count",
> null));
>     assertEquals(20, request.getCount());
> @@ -120,7 +120,7 @@
>   }
>
>   public void testOrderBy() throws Exception {
> -    RequestItem request = new RequestItem();
> +    RestfulRequestItem request = new RestfulRequestItem();
>
>     request.setParameters(Maps.<String, String>immutableMap("orderBy",
> null));
>     assertEquals(PersonService.SortOrder.topFriends, request.getOrderBy());
> @@ -130,7 +130,7 @@
>   }
>
>   public void testFilterBy() throws Exception {
> -    RequestItem request = new RequestItem();
> +    RestfulRequestItem request = new RestfulRequestItem();
>
>     request.setParameters(Maps.<String, String>immutableMap("filterBy",
> null));
>     assertEquals(PersonService.FilterType.all, request.getFilterBy());
> @@ -140,7 +140,7 @@
>   }
>
>   public void testFields() throws Exception {
> -    RequestItem request = new RequestItem();
> +    RestfulRequestItem request = new RestfulRequestItem();
>
>     request.setParameters(Maps.<String, String>immutableMap("fields",
> null));
>     assertEquals(Sets.<String>newHashSet(), request.getFields());
> @@ -149,4 +149,10 @@
>     assertEquals(Sets.newHashSet("happy", "sad", "grumpy"),
> request.getFields());
>   }
>
> +  public void testRouteFromParameter() throws Exception {
> +    assertEquals("path", RestfulRequestItem.getServiceFromPath("/path"));
> +    assertEquals("path",
> RestfulRequestItem.getServiceFromPath("/path/fun"));
> +    assertEquals("path",
> RestfulRequestItem.getServiceFromPath("/path/fun/yes"));
> +  }
> +
>  }
> \ No newline at end of file
>
>
>

Reply via email to