CompositeSkin(SkinService service, Collection<SkinConfig> skins) { TreeMap<String, SkinConfig> urlSkins = new TreeMap<String, SkinConfig>(); for (SkinConfig skin : skins) { urlSkins.put(skin.getCSSPath(), skin); } // final StringBuilder builder = new StringBuilder(); builder.append("/portal/resource"); // final StringBuilder id = new StringBuilder(); // try { for (SkinConfig cfg : urlSkins.values()) { StringBuilder encodedName = new StringBuilder(); Codec.encode(encodedName, cfg.getName()); StringBuilder encodedModule = new StringBuilder(); Codec.encode(encodedModule, cfg.getModule()); // id.append(encodedName).append(encodedModule); builder.append("/").append(encodedName).append("/").append(encodedModule); } } catch (IOException e) { throw new Error(e); } // this.service = service; this.id = id.toString(); this.urlPrefix = builder.toString(); }
public Resource resolve(String path) { if (path.startsWith("/portal/resource/") && path.endsWith(".css")) { final StringBuffer sb = new StringBuffer(); String encoded = path.substring("/portal/resource/".length()); String blah[] = encoded.split("/"); int len = (blah.length >> 1) << 1; for (int i = 0; i < len; i += 2) { String name = Codec.decode(blah[i]); String module = Codec.decode(blah[i + 1]); SkinKey key = new SkinKey(module, name); SkinConfig skin = skins.get(key); if (skin != null) { sb.append("@import url(").append(skin.getCSSPath()).append(");").append("\n"); } } return new Resource(path) { @Override public Reader read() { return new StringReader(sb.toString()); } }; } else { return null; } }
public void testDeployedSkinModules() { assertNotNull(skinService.getAvailableSkinNames()); assertTrue(skinService.getAvailableSkinNames().contains("TestSkin")); Collection<SkinConfig> skinConfigs = skinService.getPortalSkins("TestSkin"); assertNotNull(skinConfigs); SkinConfig portalSkin = null; for (SkinConfig config : skinConfigs) { if ("TestSkin".equals(config.getName())) { portalSkin = config; break; } } assertNotNull(portalSkin); assertEquals( mockServletContext.getContextPath() + "/skin/Stylesheet.css", portalSkin.getCSSPath()); SkinConfig firstPortletSkin = skinService.getSkin("mockwebapp/FirstPortlet", "TestSkin"); assertNotNull(firstPortletSkin); assertEquals( mockServletContext.getContextPath() + "/skin/portlet/FirstPortlet/Stylesheet.css", firstPortletSkin.getCSSPath()); }