]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - swt/rap/org.argeo.cms.swt.rap/src/org/argeo/cms/web/BundleResourceLoader.java
Refactor SWT directory structure.
[lgpl/argeo-commons.git] / swt / rap / org.argeo.cms.swt.rap / src / org / argeo / cms / web / BundleResourceLoader.java
diff --git a/swt/rap/org.argeo.cms.swt.rap/src/org/argeo/cms/web/BundleResourceLoader.java b/swt/rap/org.argeo.cms.swt.rap/src/org/argeo/cms/web/BundleResourceLoader.java
new file mode 100644 (file)
index 0000000..ca93e62
--- /dev/null
@@ -0,0 +1,34 @@
+package org.argeo.cms.web;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+
+import org.eclipse.rap.rwt.service.ResourceLoader;
+import org.osgi.framework.Bundle;
+
+/** {@link ResourceLoader} implementation wrapping an {@link Bundle}. */
+public class BundleResourceLoader implements ResourceLoader {
+       private final Bundle bundle;
+
+       public BundleResourceLoader(Bundle bundle) {
+               this.bundle = bundle;
+       }
+
+       @Override
+       public InputStream getResourceAsStream(String resourceName) throws IOException {
+               URL res = bundle.getEntry(resourceName);
+               if (res == null) {
+                       res = bundle.getResource(resourceName);
+                       if (res == null)
+                               throw new IllegalArgumentException(
+                                               "Resource " + resourceName + " not found in bundle " + bundle.getSymbolicName());
+               }
+               return res.openStream();
+       }
+
+       public Bundle getBundle() {
+               return bundle;
+       }
+
+}