/** * Builds a {@link JsResponse} object with the provided data. */ public JsResponse build() { return new JsResponse(jsCode, statusCode, cacheTtlSecs, proxyCacheable, errors, rawExterns + buildExternString()); }
public JsResponseBuilder(JsResponse response) { this(); if (response.getAllJsContent() != null) { jsCode.addAll(Lists.newArrayList(response.getAllJsContent())); } if (response.getErrors() != null) { errors.addAll(Lists.newArrayList(response.getErrors())); } if (response.getExterns() != null) { rawExterns.append(response.getExterns()); } statusCode = response.getStatusCode(); cacheTtlSecs = response.getCacheTtlSecs(); proxyCacheable = response.isProxyCacheable(); }
private void checkNoFeaturesDoesNothing(RenderingContext ctx) throws Exception { JsResponseBuilder builder = prepareRequestReturnBuilder(ctx); expect(containerConfig.getMap(CONTAINER, ConfigInjectionProcessor.GADGETS_FEATURES_KEY)) .andReturn(null); List<String> libs = ImmutableList.of(); expect(jsUri.getLibs()).andReturn(libs); expect(jsUri.getLoadedLibs()).andReturn(EMPTY_LIST); expect(registry.getFeatures(libs)).andReturn(libs); expect(request.getHost()).andReturn("host"); control.replay(); assertTrue(processor.process(request, builder)); control.verify(); assertEquals(BASE_CODE, builder.build().toJsString()); }
protected void emitJsResponse(JsResponse jsResponse, HttpServletRequest req, HttpServletResponse resp) throws IOException { if (jsResponse.getStatusCode() == HttpServletResponse.SC_NOT_MODIFIED) { resp.setStatus(HttpServletResponse.SC_NOT_MODIFIED); cachingSetter.setCachingHeaders( resp, jsResponse.getCacheTtlSecs(), !jsResponse.isProxyCacheable()); return; } if (jsResponse.getStatusCode() == HttpServletResponse.SC_OK && jsResponse.toJsString().length() == 0) { resp.setStatus(HttpServletResponse.SC_NOT_FOUND); return; } cachingSetter.setCachingHeaders( resp, jsResponse.getCacheTtlSecs(), !jsResponse.isProxyCacheable()); resp.setStatus(jsResponse.getStatusCode()); resp.setContentType("text/javascript; charset=utf-8"); byte[] response = CharsetUtil.getUtf8Bytes(jsResponse.toJsString()); resp.setContentLength(response.length); resp.getOutputStream().write(response); } }
public JsResponse execute(JsRequest jsRequest) throws JsException { JsResponseBuilder resp = new JsResponseBuilder(); jsProcessorRegistry.process(jsRequest, resp); final JsResponse response = resp.build(); if (response.isError()) { throw new JsException(response.getStatusCode(), response.toErrorString()); } return response; } }
@Test public void testCompile() throws Exception { JsResponse actual = compiler.compile(null, ImmutableList.of(JsContent.fromText(COMPILE_CONTENT, "js")), null); assertEquals(COMPILE_CONTENT, actual.toJsString()); assertEquals(0, actual.getErrors().size()); }
@Test public void compilerIsRun() throws Exception { JsUri jsUri = control.createMock(JsUri.class); JsResponseBuilder builder = new JsResponseBuilder().setCacheTtlSecs(1234).setStatusCode(200) .appendJs("content1:", "source1") .appendJs("content2", "source2") .appendJs(JsContent.fromFeature("content3:", "source3", mockBundle("extern3"), null)) .appendJs(JsContent.fromFeature("content4:", "source4", mockBundle("extern4"), null)); JsResponse outputResponse = new JsResponseBuilder().appendJs("content3", "s3").build(); JsRequest request = control.createMock(JsRequest.class); expect(request.getJsUri()).andReturn(jsUri); expect(compiler.compile(same(jsUri), eq(builder.build().getAllJsContent()), isA(String.class))).andReturn(outputResponse); control.replay(); boolean status = processor.process(request, builder); control.verify(); assertTrue(status); JsResponse compResult = builder.build(); assertEquals(200, compResult.getStatusCode()); assertEquals(1234, compResult.getCacheTtlSecs()); assertEquals("content3", compResult.toJsString()); Iterator<JsContent> outIterator = compResult.getAllJsContent().iterator(); JsContent firstOut = outIterator.next(); assertEquals("content3", firstOut.get()); assertEquals("s3", firstOut.getSource()); assertFalse(outIterator.hasNext()); }
@Test public void compilerTtlIsUsed() throws Exception { JsUri jsUri = control.createMock(JsUri.class); JsResponseBuilder builder = new JsResponseBuilder().setCacheTtlSecs(1234).setStatusCode(200) .appendJs("content1:", "source1"); JsResponse outputResponse = new JsResponseBuilder().setCacheTtlSecs(789) .appendJs("content3", "s3").build(); JsRequest request = control.createMock(JsRequest.class); expect(request.getJsUri()).andReturn(jsUri); expect(compiler.compile(same(jsUri), eq(builder.build().getAllJsContent()), isA(String.class))).andReturn(outputResponse); control.replay(); boolean status = processor.process(request, builder); control.verify(); JsResponse compResult = builder.build(); assertEquals(200, compResult.getStatusCode()); assertEquals(789, compResult.getCacheTtlSecs()); }
/** * Returns the JavaScript code to serve. */ public String toJsString() { if (codeString == null) { StringBuilder sb = new StringBuilder(); for (JsContent js : getAllJsContent()) { sb.append(js.get()); } codeString = sb.toString(); } return codeString; }
private void checkResponse(boolean proxyCacheable, int expectedTtl, String jsString, String... externs) { assertEquals(proxyCacheable, response.isProxyCacheable()); assertEquals(expectedTtl, response.getCacheTtlSecs()); assertEquals(jsString, response.build().toJsString()); for (String extern : externs) { assertTrue(response.build().getExterns().contains(extern)); } } }
private JsResponse mockJsResponse(String content) { JsResponse result = createMock(JsResponse.class); expect(result.toJsString()).andReturn(content).anyTimes(); expect(result.getAllJsContent()).andReturn(newJsContents(content)).anyTimes(); replay(result); return result; }
/** * Returns a string of all error messages associated with this response. */ public String toErrorString() { if (errorString == null) { StringBuilder sb = new StringBuilder(); for (String error : getErrors()) { sb.append(error); } errorString = sb.toString(); } return errorString; }
public GadgetsHandlerApi.JsResponse getJs(GadgetsHandlerApi.JsRequest request) throws ProcessingException { verifyBaseParams(request, false); Set<String> fields = beanFilter.processBeanFields(request.getFields()); JsUri jsUri = createJsUri(request); Uri servedUri = jsUriManager.makeExternJsUri(jsUri); String content = null; Long expireMs = null; if (isFieldIncluded(fields, "jsContent")) { JsResponse response; try { response = jsPipeline.execute(jsRequestBuilder.build(jsUri, servedUri.getAuthority())); } catch (JsException e) { throw new ProcessingException(e.getMessage(), e.getStatusCode()); } content = response.toJsString(); if (response.isProxyCacheable()) { expireMs = getDefaultExpiration(); } } else { expireMs = getDefaultExpiration(); } return createJsResponse(request.getUrl(), servedUri, content, fields, expireMs); }
@Test public void testExterns() throws Exception { builder.appendExtern("b"); builder.appendExtern("b"); builder.appendExtern("c.d"); builder.appendExtern("c.d"); builder.appendExtern("e.prototype.f"); builder.appendExtern("e.prototype.f"); builder.appendRawExtern("var a"); String eee = builder.build().getExterns(); assertEquals( "var a;\n" + "var b = {};\n" + "var c = {};\nc.d = {};\n" + "var e = {};\ne.prototype.f = {};\n", builder.build().getExterns()); }
@Test public void testCompile() throws Exception { JsResponse actual = compiler.compile(null, ImmutableList.of(JsContent.fromText(COMPILE_CONTENT, "js")), null); assertEquals(COMPILE_CONTENT, actual.toJsString()); assertEquals(0, actual.getErrors().size()); }
@Test public void compilerIsRun() throws Exception { JsUri jsUri = control.createMock(JsUri.class); JsResponseBuilder builder = new JsResponseBuilder().setCacheTtlSecs(1234).setStatusCode(200) .appendJs("content1:", "source1") .appendJs("content2", "source2") .appendJs(JsContent.fromFeature("content3:", "source3", mockBundle("extern3"), null)) .appendJs(JsContent.fromFeature("content4:", "source4", mockBundle("extern4"), null)); JsResponse outputResponse = new JsResponseBuilder().appendJs("content3", "s3").build(); JsRequest request = control.createMock(JsRequest.class); expect(request.getJsUri()).andReturn(jsUri); expect(compiler.compile(same(jsUri), eq(builder.build().getAllJsContent()), isA(String.class))).andReturn(outputResponse); control.replay(); boolean status = processor.process(request, builder); control.verify(); assertTrue(status); JsResponse compResult = builder.build(); assertEquals(200, compResult.getStatusCode()); assertEquals(1234, compResult.getCacheTtlSecs()); assertEquals("content3", compResult.toJsString()); Iterator<JsContent> outIterator = compResult.getAllJsContent().iterator(); JsContent firstOut = outIterator.next(); assertEquals("content3", firstOut.get()); assertEquals("s3", firstOut.getSource()); assertFalse(outIterator.hasNext()); }
@Test public void compilerTtlIsUsed() throws Exception { JsUri jsUri = control.createMock(JsUri.class); JsResponseBuilder builder = new JsResponseBuilder().setCacheTtlSecs(1234).setStatusCode(200) .appendJs("content1:", "source1"); JsResponse outputResponse = new JsResponseBuilder().setCacheTtlSecs(789) .appendJs("content3", "s3").build(); JsRequest request = control.createMock(JsRequest.class); expect(request.getJsUri()).andReturn(jsUri); expect(compiler.compile(same(jsUri), eq(builder.build().getAllJsContent()), isA(String.class))).andReturn(outputResponse); control.replay(); boolean status = processor.process(request, builder); control.verify(); JsResponse compResult = builder.build(); assertEquals(200, compResult.getStatusCode()); assertEquals(789, compResult.getCacheTtlSecs()); }
public boolean process(JsRequest jsRequest, JsResponseBuilder builder) { if (!jsRequest.getJsUri().cajoleContent()) { ImmutableList.Builder<JsContent> listBuilder = ImmutableList.builder(); for (JsContent js : builder.build().getAllJsContent()) { if (!isCajole(js)) { listBuilder.add(js); } } builder.clearJs().appendAllJs(listBuilder.build()); } return true; }
private void checkResponse(boolean proxyCacheable, int expectedTtl, String jsString, String... externs) { assertEquals(proxyCacheable, response.isProxyCacheable()); assertEquals(expectedTtl, response.getCacheTtlSecs()); assertEquals(jsString, response.build().toJsString()); for (String extern : externs) { assertTrue(response.build().getExterns().contains(extern)); } } }
private JsResponse mockJsResponse(String content) { JsResponse result = createMock(JsResponse.class); expect(result.toJsString()).andReturn(content).anyTimes(); expect(result.getAllJsContent()).andReturn(newJsContents(content)).anyTimes(); replay(result); return result; }