private void renderAMD(Iterable<Asset> modules, Stream stream) { StringBuilder buffer = new StringBuilder(); buffer.append("<script type=\"text/javascript\">"); buffer.append(" var require={"); buffer.append("\"paths\":{"); for (Iterator<Asset> i = modules.iterator(); i.hasNext();) { Asset module = i.next(); buffer.append("\"").append(module.getId()).append("\":\""); String uri = module.resolveURI(minifyAssets); uri = uri.substring(0, uri.lastIndexOf(".js")); buffer.append(renderAssetURL(module.getLocation(), uri)); buffer.append("\""); if (i.hasNext()) { buffer.append(","); } } buffer.append("}"); buffer.append("};"); buffer.append("</script>"); stream.provide(Chunk.create(buffer)); } }
public AssetNode(String id, String type, AssetLocation location, String value, Boolean header, String minified, Integer maxAge, URL resource, Set<String> iDependOn) { // this.id = id; this.location = location; this.value = value; this.header = header; this.minified = minified; this.asset = new Asset(id, type, header, location, value, minified, maxAge); this.resource = resource; this.iDependOn = iDependOn; }
/** * Find all assets of the specified type and returns a map of id -> Asset. * * @param type the asset type * @return the asset map */ public Map<String, Asset> getAssets(String type) { Map<String, Asset> ret = Collections.emptyMap(); for (AssetNode node : assets.values()) { if (node.asset.getType().equals(type)) { if (ret.isEmpty()) { ret = new HashMap<String, Asset>(); } ret.put(node.id, node.asset); } } return ret; }
String getAssetURL(Asset asset) { StringBuilder sb = new StringBuilder(); try { renderAssetURL(asset.getLocation(), asset.resolveURI(bridge.getRunMode().getMinifyAssets()), sb); } catch (IOException e) { // Should not happen throw new UndeclaredIOException(e); } return sb.toString(); } }
if (asset.isStylesheet()) { String uri = asset.resolveURI(minifyAssets); int pos = uri.lastIndexOf('.'); String ext = pos == -1 ? "css" : uri.substring(pos + 1); String url = renderAssetURL(asset.getLocation(), uri); stream.provide(Chunk.create("<link rel=\"stylesheet\" type=\"text/")); stream.provide(Chunk.create(ext)); if (asset.getType().equals("module")) { if (modules.isEmpty()) { modules = new ArrayList<Asset>(); if (asset.isScript() && !Boolean.FALSE.equals(asset.getHeader())) { String uri = asset.resolveURI(minifyAssets); String url = renderAssetURL(asset.getLocation(), uri); stream.provide(Chunk.create("<script type=\"text/javascript\" src=\"")); stream.provide(Chunk.create(url));
void sendFooter(Stream stream) { for (Asset asset : resolvedAssets) { if (asset.isScript() && Boolean.FALSE.equals(asset.getHeader())) { String uri = asset.resolveURI(minifyAssets); String url = renderAssetURL(asset.getLocation(), uri); stream.provide(Chunk.create("<script type=\"text/javascript\" src=\"")); stream.provide(Chunk.create(url)); stream.provide(Chunk.create("\"></script>\n")); } } stream.provide(Chunk.create( "</body>\n" + "</html>\n")); }
for (Asset resolvedAsset : resolvedAssets) { Element elt; if (resolvedAsset.isStylesheet()) { int pos = resolvedAsset.getURI().lastIndexOf('.'); String ext = pos == -1 ? "css" : resolvedAsset.getURI().substring(pos + 1); elt = resp.createElement("link"); elt.setAttribute("media", "screen"); elt.setAttribute("type", "text/" + ext); elt.setAttribute("href", PortletMimeBridge.this.getAssetURL(resolvedAsset)); } else if (resolvedAsset.isScript()) { String url = PortletMimeBridge.this.getAssetURL(resolvedAsset); elt = resp.createElement("script");
@Test public void testUndeploy() { AssetManager mgr = new AssetManager("", ResourceResolver.NULL_RESOLVER); AssetDeployment fooDepl = mgr.createDeployment(); fooDepl.addAsset("foo", "script", AssetLocation.APPLICATION, "foo.js", null, null, null, DUMMY_URL, "bar"); fooDepl.deploy(); AssetDeployment barDepl = mgr.createDeployment(); barDepl.addAsset("bar", "script", AssetLocation.APPLICATION, "bar.js", null, null, null, DUMMY_URL); barDepl.deploy(); List<Asset> asset = Tools.list(mgr.resolveAssets(Collections.singletonList("foo"))); assertEquals(2, asset.size()); assertEquals("bar", asset.get(0).getId()); assertEquals("foo", asset.get(1).getId()); barDepl.undeploy(); try { mgr.resolveAssets(Collections.singletonList("foo")); fail(); } catch (IllegalArgumentException expected) { } } }
/** * Resolve an application asset as a resource URL or return null if it cannot be found. * * @param path the path the path within the application * @return the resource */ public AssetResource resolveApplicationAssetResource(String path) { for (AssetNode asset : assets.values()) { if (asset.value.equals(path) && asset.resource != null) { Integer maxAge = asset.asset.getMaxAge(); return new AssetResource(asset.resource, maxAge); } } if (path.startsWith(prefix)) { URL resolved = applicationResolver.resolve(path); return new AssetResource(resolved, null); } else { return null; } }
if (asset.isStylesheet()) { String uri = asset.resolveURI(minifyAssets); int pos = uri.lastIndexOf('.'); String ext = pos == -1 ? "css" : uri.substring(pos + 1); String url = renderAssetURL(asset.getLocation(), uri); stream.provide(Chunk.create("<link rel=\"stylesheet\" type=\"text/")); stream.provide(Chunk.create(ext)); if (asset.getType().equals("module")) { if (modules.isEmpty()) { modules = new ArrayList<Asset>(); if (asset.isScript() && !Boolean.FALSE.equals(asset.getHeader())) { String uri = asset.resolveURI(minifyAssets); String url = renderAssetURL(asset.getLocation(), uri); stream.provide(Chunk.create("<script type=\"text/javascript\" src=\"")); stream.provide(Chunk.create(url));
void sendFooter(Stream stream) { for (Asset asset : resolvedAssets) { if (asset.isScript() && Boolean.FALSE.equals(asset.getHeader())) { String uri = asset.resolveURI(minifyAssets); String url = renderAssetURL(asset.getLocation(), uri); stream.provide(Chunk.create("<script type=\"text/javascript\" src=\"")); stream.provide(Chunk.create(url)); stream.provide(Chunk.create("\"></script>\n")); } } stream.provide(Chunk.create( "</body>\n" + "</html>\n")); }
for (Asset resolvedAsset : resolvedAssets) { Element elt; if (resolvedAsset.isStylesheet()) { int pos = resolvedAsset.getURI().lastIndexOf('.'); String ext = pos == -1 ? "css" : resolvedAsset.getURI().substring(pos + 1); elt = resp.createElement("link"); elt.setAttribute("media", "screen"); elt.setAttribute("type", "text/" + ext); elt.setAttribute("href", PortletMimeBridge.this.getAssetURL(resolvedAsset)); } else if (resolvedAsset.isScript()) { String url = PortletMimeBridge.this.getAssetURL(resolvedAsset); elt = resp.createElement("script");
String getAssetURL(Asset asset) { StringBuilder sb = new StringBuilder(); try { renderAssetURL(asset.getLocation(), asset.resolveURI(bridge.getRunMode().getMinifyAssets()), sb); } catch (IOException e) { // Should not happen throw new UndeclaredIOException(e); } return sb.toString(); } }
@Test public void testUndeploy() { AssetManager mgr = new AssetManager("", ResourceResolver.NULL_RESOLVER); AssetDeployment fooDepl = mgr.createDeployment(); fooDepl.addAsset("foo", "script", AssetLocation.APPLICATION, "foo.js", null, null, null, DUMMY_URL, "bar"); fooDepl.deploy(); AssetDeployment barDepl = mgr.createDeployment(); barDepl.addAsset("bar", "script", AssetLocation.APPLICATION, "bar.js", null, null, null, DUMMY_URL); barDepl.deploy(); List<Asset> asset = Tools.list(mgr.resolveAssets(Collections.singletonList("foo"))); assertEquals(2, asset.size()); assertEquals("bar", asset.get(0).getId()); assertEquals("foo", asset.get(1).getId()); barDepl.undeploy(); try { mgr.resolveAssets(Collections.singletonList("foo")); fail(); } catch (IllegalArgumentException expected) { } } }
/** * Resolve an application asset as a resource URL or return null if it cannot be found. * * @param path the path the path within the application * @return the resource */ public AssetResource resolveApplicationAssetResource(String path) { for (AssetNode asset : assets.values()) { if (asset.value.equals(path) && asset.resource != null) { Integer maxAge = asset.asset.getMaxAge(); return new AssetResource(asset.resource, maxAge); } } if (path.startsWith(prefix)) { URL resolved = applicationResolver.resolve(path); return new AssetResource(resolved, null); } else { return null; } }
private void renderAMD(Iterable<Asset> modules, Stream stream) { StringBuilder buffer = new StringBuilder(); buffer.append("<script type=\"text/javascript\">"); buffer.append(" var require={"); buffer.append("\"paths\":{"); for (Iterator<Asset> i = modules.iterator(); i.hasNext();) { Asset module = i.next(); buffer.append("\"").append(module.getId()).append("\":\""); String uri = module.resolveURI(minifyAssets); uri = uri.substring(0, uri.lastIndexOf(".js")); buffer.append(renderAssetURL(module.getLocation(), uri)); buffer.append("\""); if (i.hasNext()) { buffer.append(","); } } buffer.append("}"); buffer.append("};"); buffer.append("</script>"); stream.provide(Chunk.create(buffer)); } }
public static String renderAssetURLById(String id) throws NullPointerException { Request request = Request.getCurrent(); if (request != null) { AssetManager assetManager = request.getApplication().resolveBean(AssetManager.class); if (assetManager != null) { Asset asset = assetManager.getAsset(id); if (asset != null) { String uri = asset.resolveURI(request.getRunMode().getMinifyAssets()); return renderAssetURL(request, asset.getLocation(), uri); } } } return null; }
public AssetNode(String id, String type, AssetLocation location, String value, Boolean header, String minified, Integer maxAge, URL resource, Set<String> iDependOn) { // this.id = id; this.location = location; this.value = value; this.header = header; this.minified = minified; this.asset = new Asset(id, type, header, location, value, minified, maxAge); this.resource = resource; this.iDependOn = iDependOn; }
/** * Find all assets of the specified type and returns a map of id -> Asset. * * @param type the asset type * @return the asset map */ public Map<String, Asset> getAssets(String type) { Map<String, Asset> ret = Collections.emptyMap(); for (AssetNode node : assets.values()) { if (node.asset.getType().equals(type)) { if (ret.isEmpty()) { ret = new HashMap<String, Asset>(); } ret.put(node.id, node.asset); } } return ret; }
public static String renderAssetURLById(String id) throws NullPointerException { Request request = Request.getCurrent(); if (request != null) { AssetManager assetManager = request.getApplication().resolveBean(AssetManager.class); if (assetManager != null) { Asset asset = assetManager.getAsset(id); if (asset != null) { String uri = asset.resolveURI(request.getRunMode().getMinifyAssets()); return renderAssetURL(request, asset.getLocation(), uri); } } } return null; }