Author: musachy
Date: Fri Nov  9 09:53:40 2007
New Revision: 593608

URL: http://svn.apache.org/viewvc?rev=593608&view=rev
Log:
Organize the code a little bit

Added:
    
struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/loaders/
    
struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/loaders/FreeMarkerBundleResourceLoader.java
    
struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/loaders/VelocityBundleResourceLoader.java
Removed:
    
struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/BundleResourceLoader.java
    
struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/BundleTemplateLoader.java
Modified:
    
struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/BundleAccessor.java
    
struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/BundleFreemarkerManager.java
    
struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/BundlePackageLoader.java
    
struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/DefaultBundleAccessor.java
    
struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/DelegatingObjectFactory.java
    
struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/OsgiConfigurationProvider.java

Modified: 
struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/BundleAccessor.java
URL: 
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/BundleAccessor.java?rev=593608&r1=593607&r2=593608&view=diff
==============================================================================
--- 
struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/BundleAccessor.java
 (original)
+++ 
struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/BundleAccessor.java
 Fri Nov  9 09:53:40 2007
@@ -9,11 +9,15 @@
 import org.osgi.framework.BundleContext;
 
 public interface BundleAccessor {
-    
-    void setBundles(Map<String,Bundle> bundles);
+
+    void setBundles(Map<String, Bundle> bundles);
+
     void setBundleContext(BundleContext bundleContext);
+
     Class loadClass(String name) throws ClassNotFoundException;
+
     InputStream loadResourceAsStream(String name) throws IOException;
+
     URL loadResource(String name);
 
 }

Modified: 
struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/BundleFreemarkerManager.java
URL: 
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/BundleFreemarkerManager.java?rev=593608&r1=593607&r2=593608&view=diff
==============================================================================
--- 
struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/BundleFreemarkerManager.java
 (original)
+++ 
struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/BundleFreemarkerManager.java
 Fri Nov  9 09:53:40 2007
@@ -5,6 +5,7 @@
 
 import javax.servlet.ServletContext;
 
+import org.apache.struts2.osgi.loaders.FreeMarkerBundleResourceLoader;
 import org.apache.struts2.views.freemarker.FreemarkerManager;
 import org.apache.struts2.views.freemarker.StrutsClassTemplateLoader;
 
@@ -16,7 +17,11 @@
 import freemarker.cache.TemplateLoader;
 import freemarker.cache.WebappTemplateLoader;
 
-public class BundleFreemarkerManager extends FreemarkerManager{
+/**
+ * This class extends FreemarkerManager in core to add a template loader
+ * (that finds resources inside bundles) to MultiTemplateLoader
+ */
+public class BundleFreemarkerManager extends FreemarkerManager {
     private static final Logger LOG = 
LoggerFactory.getLogger(BundleFreemarkerManager.class);
     
     @Override
@@ -33,7 +38,7 @@
             try {
                 templatePathLoader = new FileTemplateLoader(new 
File(templatePath));
             } catch (IOException e) {
-                LOG.error("Invalid template path specified: " + 
e.getMessage(), e);
+                LOG.error("Invalid template path specified: #1",e, 
e.getMessage());
             }
         }
 
@@ -44,12 +49,12 @@
                         templatePathLoader,
                         new WebappTemplateLoader(servletContext),
                         new StrutsClassTemplateLoader(),
-                        new BundleTemplateLoader()
+                        new FreeMarkerBundleResourceLoader()
                 })
                 : new MultiTemplateLoader(new TemplateLoader[]{
                     new WebappTemplateLoader(servletContext),
                     new StrutsClassTemplateLoader(),
-                    new BundleTemplateLoader()
+                    new FreeMarkerBundleResourceLoader()
                 });
     }
     

Modified: 
struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/BundlePackageLoader.java
URL: 
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/BundlePackageLoader.java?rev=593608&r1=593607&r2=593608&view=diff
==============================================================================
--- 
struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/BundlePackageLoader.java
 (original)
+++ 
struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/BundlePackageLoader.java
 Fri Nov  9 09:53:40 2007
@@ -18,9 +18,12 @@
 import com.opensymphony.xwork2.config.impl.DefaultConfiguration;
 import com.opensymphony.xwork2.config.providers.XmlConfigurationProvider;
 import com.opensymphony.xwork2.util.location.Location;
+import com.opensymphony.xwork2.util.logging.Logger;
+import com.opensymphony.xwork2.util.logging.LoggerFactory;
 
 public class BundlePackageLoader implements PackageLoader {
-
+    private static final Logger LOG = 
LoggerFactory.getLogger(BundlePackageLoader.class);
+    
     public List<PackageConfig> loadPackages(Bundle bundle, BundleContext 
bundleContext, ObjectFactory objectFactory, Map<String,PackageConfig> 
pkgConfigs) throws ConfigurationException {
         BundleConfigurationProvider prov = new 
BundleConfigurationProvider("struts.xml", bundle, bundleContext);
         Configuration config = new DefaultConfiguration("struts.xml");
@@ -51,18 +54,26 @@
             return iter;
         }
         
+        /* 
+         * Try to find the class (className) on this bundle. If the class it 
not found,
+         * try to find an Spring bean with that name. 
+         */
         @Override
         protected boolean verifyAction(String className, String name, Location 
loc) {
             try {
                 return bundle.loadClass(className) != null;
             } catch (Exception e) {
-                //try spring
+                if (LOG.isDebugEnabled())
+                    LOG.debug("Unable to find class #1 in bundle #2", 
className, bundle.getSymbolicName());
+
+                //try to find a bean with that id
                 try {
                     return SpringOSGiUtil.isValidBean(bundleContext, 
className);
                 } catch (Exception e1) {
-                    // TODO Auto-generated catch block
-                    e1.printStackTrace();
+                    if (LOG.isDebugEnabled())
+                        LOG.debug("Unable to find bean #1", className);
                 }
+                
                 return false;
             }
         }

Modified: 
struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/DefaultBundleAccessor.java
URL: 
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/DefaultBundleAccessor.java?rev=593608&r1=593607&r2=593608&view=diff
==============================================================================
--- 
struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/DefaultBundleAccessor.java
 (original)
+++ 
struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/DefaultBundleAccessor.java
 Fri Nov  9 09:53:40 2007
@@ -44,39 +44,39 @@
         this.bundleContext = bundleContext;
     }
     
-    public Class<?> loadClass(String name) throws ClassNotFoundException {
+    public Class<?> loadClass(String className) throws ClassNotFoundException {
         Class cls = null;
-        if (classToBundle.containsKey(name)) {
-            bundles.get(classToBundle.get(name)).loadClass(name);
+        if (classToBundle.containsKey(className)) {
+            bundles.get(classToBundle.get(className)).loadClass(className);
         } else {
             for (Entry<String,Bundle> entry : bundles.entrySet()) {
                 try {
-                    cls = entry.getValue().loadClass(name);
+                    cls = entry.getValue().loadClass(className);
                     if (cls != null) {
-                        classToBundle.put(name, entry.getKey());
+                        classToBundle.put(className, entry.getKey());
                     }
                 } catch (ClassNotFoundException ex) {
                     if (LOG.isDebugEnabled()) {
-                        LOG.debug("class not found in bundle 
"+entry.getValue().getSymbolicName());
+                        LOG.debug("class #1 not found in bundle #2", 
className, entry.getValue().getSymbolicName());
                     }
                 }
             }
         }
         
         if (cls == null) {
-            //try spring
+            //try to find a bean with that id
             try {
-                Object bean = SpringOSGiUtil.getBean(bundleContext, name);
+                Object bean = SpringOSGiUtil.getBean(bundleContext, className);
                 if (bean != null)
                     cls = bean.getClass();
             } catch (Exception e) {
-                // TODO Auto-generated catch block
-                e.printStackTrace();
+                if (LOG.isDebugEnabled())
+                    LOG.debug("Unable to find bean #1", className);
             }
         }
         
         if (cls == null) {
-            throw new ClassNotFoundException("Unable to find class "+name+" in 
bundles");
+            throw new ClassNotFoundException("Unable to find class 
"+className+" in bundles");
         }
         return cls;
     }

Modified: 
struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/DelegatingObjectFactory.java
URL: 
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/DelegatingObjectFactory.java?rev=593608&r1=593607&r2=593608&view=diff
==============================================================================
--- 
struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/DelegatingObjectFactory.java
 (original)
+++ 
struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/DelegatingObjectFactory.java
 Fri Nov  9 09:53:40 2007
@@ -39,7 +39,7 @@
         {
             return delegateObjectFactory.getClassInstance(className);
         }
-        catch (ClassNotFoundException cnfe)
+        catch (Exception e)
         {
             return bundleResourceLoader.loadClass(className);
         }

Modified: 
struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/OsgiConfigurationProvider.java
URL: 
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/OsgiConfigurationProvider.java?rev=593608&r1=593607&r2=593608&view=diff
==============================================================================
--- 
struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/OsgiConfigurationProvider.java
 (original)
+++ 
struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/OsgiConfigurationProvider.java
 Fri Nov  9 09:53:40 2007
@@ -25,6 +25,7 @@
 import org.apache.felix.framework.cache.BundleCache;
 import org.apache.felix.framework.util.FelixConstants;
 import org.apache.felix.framework.util.StringMap;
+import org.apache.struts2.osgi.loaders.VelocityBundleResourceLoader;
 import org.apache.struts2.views.velocity.VelocityManager;
 import org.apache.velocity.app.Velocity;
 import org.osgi.framework.Bundle;
@@ -51,7 +52,7 @@
 
 public class OsgiConfigurationProvider implements ConfigurationProvider {
     
-    private static final Logger log = 
LoggerFactory.getLogger(OsgiConfigurationProvider.class);
+    private static final Logger LOG = 
LoggerFactory.getLogger(OsgiConfigurationProvider.class);
 
     private Felix felix;
     private Map<String,Bundle> bundles = Collections.synchronizedMap(new 
HashMap<String,Bundle>());
@@ -82,7 +83,7 @@
     public void setVelocityManager(VelocityManager vm) {
         Properties props = new Properties();
         props.setProperty("osgi.resource.loader.description","OSGI bundle 
loader");
-        props.setProperty("osgi.resource.loader.class", 
BundleResourceLoader.class.getName());
+        props.setProperty("osgi.resource.loader.class", 
VelocityBundleResourceLoader.class.getName());
         props.setProperty(Velocity.RESOURCE_LOADER, 
"strutsfile,strutsclass,osgi");
         vm.setVelocityProperties(props);
     }
@@ -91,8 +92,7 @@
         try {
             felix.stop();
         } catch (BundleException e) {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
+            LOG.error("Failed to stop Felix", e);
         }
         bundles = null; 
     }
@@ -114,7 +114,7 @@
             for (ServiceReference ref : refs) {
                 if (!bundleNames.contains(ref.getBundle().getSymbolicName())) {
                     bundleNames.add(ref.getBundle().getSymbolicName());
-                    log.info("Loading packages from bundle 
"+ref.getBundle().getSymbolicName());
+                    LOG.info("Loading packages from bundle #1", 
ref.getBundle().getSymbolicName());
                     PackageLoader loader = (PackageLoader) 
bundleContext.getService(ref);
                     for (PackageConfig pkg : 
loader.loadPackages(ref.getBundle(),  bundleContext, objectFactory, 
configuration.getPackageConfigs())) {
                         configuration.addPackageConfig(pkg.getName(), pkg);
@@ -136,6 +136,8 @@
     protected void loadOsgi() {
         //configuration properties 
         Properties systemProperties = getProperties("default.properties");
+        
+        //struts specific properties
         Properties strutsProperties = getProperties("struts-osgi.properties");
         
         Map configMap = new StringMap(false);
@@ -149,7 +151,7 @@
             strutsProperties.getProperty("xwork"));
 
         Set<String> bundlePaths = new 
HashSet<String>(findInPackage("bundles"));
-        log.info("Loading Struts bundles "+bundlePaths);
+        LOG.info("Loading Struts bundles "+bundlePaths);
         
         StringBuilder sb = new StringBuilder();
         for (String path : bundlePaths) {
@@ -158,7 +160,7 @@
         
         configMap.put(FelixConstants.AUTO_START_PROP + ".1",
             sb.toString());
-        configMap.put(BundleCache.CACHE_PROFILE_DIR_PROP, 
System.getProperty("tmp.dir"));
+        configMap.put(BundleCache.CACHE_PROFILE_DIR_PROP, 
System.getProperty("java.io.tmpdir"));
         configMap.put(BundleCache.CACHE_DIR_PROP, "jim");
         configMap.put(FelixConstants.EMBEDDED_EXECUTION_PROP, "true");
         configMap.put(FelixConstants.SERVICE_URLHANDLERS_PROP, "false");
@@ -183,12 +185,9 @@
             try {
                 Thread.sleep(500);
             } catch (InterruptedException e) {
-                // TODO Auto-generated catch block
-                e.printStackTrace();
+                LOG.error("An error occured while waiting for bundle 
activation", e);
             }
         }
-        
-        
     }
     
     private String getSystemPackages(Properties properties) {
@@ -224,29 +223,16 @@
             bundleContext = context;
         }
 
-        public void stop(BundleContext arg0) throws Exception {
-            // TODO Auto-generated method stub
-            
+        public void stop(BundleContext ctx) throws Exception {
         }
 
         public void bundleChanged(BundleEvent evt) {
-            if (evt.getType() == evt.INSTALLED) {
-                log.debug("Installed bundle 
"+evt.getBundle().getSymbolicName());
+            if (evt.getType() == BundleEvent.INSTALLED) {
+                LOG.debug("Installed bundle 
"+evt.getBundle().getSymbolicName());
                 bundles.put(evt.getBundle().getLocation(), evt.getBundle());
                 bundlesChanged = true;
             }
-            
-            // Copy out all view files
-            /*if (evt.getType() == evt.STARTED) {
-                Enumeration e = evt.getBundle().findEntries("/view/", null, 
true);
-                while (e != null && e.hasMoreElements()) {
-                    URL url = (URL) e.nextElement();
-                    System.out.println("found view url: "+url);
-                }
-            }
-            */
         }
-
     }
     
     /**
@@ -268,7 +254,7 @@
             urls = 
Thread.currentThread().getContextClassLoader().getResources(packageName);
         }
         catch (IOException ioe) {
-            log.warn("Could not read package: " + packageName, ioe);
+            LOG.warn("Could not read package: " + packageName, ioe);
             return paths;
         }
 
@@ -297,7 +283,7 @@
                 }
             }
             catch (IOException ioe) {
-                log.warn("could not read entries", ioe);
+                LOG.warn("could not read entries", ioe);
             }
         }
         return paths;
@@ -330,10 +316,9 @@
             }
             else if (file.getName().endsWith(".jar")) {
                 try {
-                    paths.add(file.toURL().toString());
+                    paths.add(file.toURI().toURL().toString());
                 } catch (MalformedURLException e) {
-                    // TODO Auto-generated catch block
-                    e.printStackTrace();
+                    LOG.error("Invalid file path", e);
                 }
             }
         }
@@ -357,12 +342,12 @@
             while ( (entry = jarStream.getNextJarEntry() ) != null) {
                 String name = entry.getName();
                 if (!entry.isDirectory() && name.startsWith(parent) && 
name.endsWith(".jar")) {
-                    paths.add(jarfile.toURL()+"!"+entry.getName());
+                    paths.add(jarfile.toURI().toURL()+"!"+entry.getName());
                 }
             }
         }
         catch (IOException ioe) {
-            log.error("Could not search jar file '" + jarfile + "' due to an 
IOException", ioe);
+            LOG.error("Could not search jar file #1 due to an IOException", 
ioe, jarfile.toString());
         }
     }
 

Added: 
struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/loaders/FreeMarkerBundleResourceLoader.java
URL: 
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/loaders/FreeMarkerBundleResourceLoader.java?rev=593608&view=auto
==============================================================================
--- 
struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/loaders/FreeMarkerBundleResourceLoader.java
 (added)
+++ 
struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/loaders/FreeMarkerBundleResourceLoader.java
 Fri Nov  9 09:53:40 2007
@@ -0,0 +1,19 @@
+package org.apache.struts2.osgi.loaders;
+
+import java.net.URL;
+
+import org.apache.struts2.osgi.DefaultBundleAccessor;
+
+import freemarker.cache.URLTemplateLoader;
+
+/**
+ * Finds FreeMarker templates in bundles
+ */
+public class FreeMarkerBundleResourceLoader extends URLTemplateLoader {
+
+    @Override
+    protected URL getURL(String name) {
+        return DefaultBundleAccessor.getInstance().loadResource(name);
+    }
+
+}

Added: 
struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/loaders/VelocityBundleResourceLoader.java
URL: 
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/loaders/VelocityBundleResourceLoader.java?rev=593608&view=auto
==============================================================================
--- 
struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/loaders/VelocityBundleResourceLoader.java
 (added)
+++ 
struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/loaders/VelocityBundleResourceLoader.java
 Fri Nov  9 09:53:40 2007
@@ -0,0 +1,30 @@
+package org.apache.struts2.osgi.loaders;
+
+import java.io.InputStream;
+
+import org.apache.struts2.osgi.DefaultBundleAccessor;
+import org.apache.velocity.exception.ResourceNotFoundException;
+import org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader;
+
+/**
+ * Finds Velocity templates in bundles
+ */
+public class VelocityBundleResourceLoader extends ClasspathResourceLoader {
+
+    public synchronized InputStream getResourceStream(String name)
+            throws ResourceNotFoundException {
+        if ((name == null) || (name.length() == 0)) {
+            throw new ResourceNotFoundException("No template name provided");
+        }
+
+        if (name.startsWith("/")) {
+            name = name.substring(1);
+        }
+
+        try {
+            return 
DefaultBundleAccessor.getInstance().loadResourceAsStream(name);
+        } catch (Exception e) {
+            throw new ResourceNotFoundException(e.getMessage());
+        }
+    }
+}


Reply via email to