import java.io.IOException;
import java.io.InputStream;
+import java.net.URI;
+import java.net.URISyntaxException;
import java.net.URL;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
import org.argeo.cms.CmsException;
import org.eclipse.rap.rwt.service.ResourceLoader;
throws IOException {
// TODO deal with other bundles
Bundle bundle = bundleContext.getBundle();
+ // String location =
+ // bundle.getLocation().substring("initial@reference:".length());
+ // if (location.startsWith("file:")) {
+ // Path path = null;
+ // try {
+ // path = Paths.get(new URI(location));
+ // } catch (URISyntaxException e) {
+ // e.printStackTrace();
+ // }
+ // if (path != null) {
+ // Path resourcePath = path.resolve(resourceName);
+ // if (Files.exists(resourcePath))
+ // return Files.newInputStream(resourcePath);
+ // }
+ // }
URL res = bundle.getResource(resourceName);
if (res == null)
throw new CmsException("Resource " + resourceName
+ " not found in bundle " + bundle.getSymbolicName());
- return bundleContext.getBundle().getResource(resourceName).openStream();
+ return res.openStream();
}
}
import org.eclipse.rap.rwt.application.ExceptionHandler;
import org.eclipse.rap.rwt.client.WebClient;
import org.eclipse.rap.rwt.service.ResourceLoader;
+import org.eclipse.swt.widgets.Composite;
import org.osgi.framework.BundleContext;
/** A basic generic app based on {@link SimpleErgonomics}. */
public void configure(Application application) {
try {
+ StyleSheetResourceLoader styleSheetRL = new StyleSheetResourceLoader(
+ bundleContext);
+ BundleResourceLoader bundleRL = new BundleResourceLoader(
+ bundleContext);
+
application.setOperationMode(OperationMode.SWT_COMPATIBILITY);
// application.setOperationMode(OperationMode.JEE_COMPATIBILITY);
application.addResource(NO_IMAGE, createResourceLoader(NO_IMAGE));
for (String resource : resources) {
- application.addResource(resource, new BundleResourceLoader(
- bundleContext));
+ application.addResource(resource, bundleRL);
if (log.isDebugEnabled())
log.debug("Registered resource " + resource);
}
for (String themeId : styleSheets.keySet()) {
List<String> cssLst = styleSheets.get(themeId);
for (String css : cssLst) {
- application.addStyleSheet(themeId, css,
- new BundleResourceLoader(bundleContext));
+ application.addStyleSheet(themeId, css, styleSheetRL);
}
}
@Override
public EntryPoint create() {
SimpleErgonomics entryPoint = new SimpleErgonomics(repository,
- workspace, basePath, page, properties);
+ workspace, basePath, page, properties) {
+
+ @Override
+ protected void initUi(Composite parent) {
+ // TODO Auto-generated method stub
+ super.initUi(parent);
+ }
+ };
// entryPoint.setState("");
entryPoint.setHeader(header);
entryPoint.setHeaderHeight(headerHeight);
--- /dev/null
+package org.argeo.cms.util;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import org.apache.commons.io.IOUtils;
+import org.argeo.cms.CmsException;
+import org.eclipse.rap.rwt.service.ResourceLoader;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+
+/** {@link ResourceLoader} caching stylesheets. */
+public class StyleSheetResourceLoader implements ResourceLoader {
+ private final BundleContext bundleContext;
+
+ private Map<String, StyleSheet> stylesheets = new LinkedHashMap<String, StyleSheet>();
+
+ public StyleSheetResourceLoader(BundleContext bundleContext) {
+ this.bundleContext = bundleContext;
+ }
+
+ @Override
+ public InputStream getResourceAsStream(String resourceName)
+ throws IOException {
+ if (!stylesheets.containsKey(resourceName)) {
+ // TODO deal with other bundles
+ Bundle bundle = bundleContext.getBundle();
+ // String location =
+ // bundle.getLocation().substring("initial@reference:".length());
+ // if (location.startsWith("file:")) {
+ // Path path = null;
+ // try {
+ // path = Paths.get(new URI(location));
+ // } catch (URISyntaxException e) {
+ // e.printStackTrace();
+ // }
+ // if (path != null) {
+ // Path resourcePath = path.resolve(resourceName);
+ // if (Files.exists(resourcePath))
+ // return Files.newInputStream(resourcePath);
+ // }
+ // }
+ URL res = bundle.getResource(resourceName);
+ if (res == null)
+ throw new CmsException("Resource " + resourceName
+ + " not found in bundle " + bundle.getSymbolicName());
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ IOUtils.copy(res.openStream(), out);
+ stylesheets.put(resourceName, new StyleSheet(out.toByteArray()));
+ }
+ return new ByteArrayInputStream(stylesheets.get(resourceName).getData());
+ // return res.openStream();
+ }
+
+ private class StyleSheet {
+ private byte[] data;
+
+ public StyleSheet(byte[] data) {
+ super();
+ this.data = data;
+ }
+
+ public byte[] getData() {
+ return data;
+ }
+
+ }
+}