Author: bdube
Date: Tue Apr 26 05:49:41 2011
New Revision: 1096666

URL: http://svn.apache.org/viewvc?rev=1096666&view=rev
Log:
Refactor service tracking and simplify logging in servlet

Modified:
    
forrest/trunk/whiteboard/forrest-osgi/org.apache.forrest.servlet/src/java/org/apache/forrest/http/ForrestServlet.java

Modified: 
forrest/trunk/whiteboard/forrest-osgi/org.apache.forrest.servlet/src/java/org/apache/forrest/http/ForrestServlet.java
URL: 
http://svn.apache.org/viewvc/forrest/trunk/whiteboard/forrest-osgi/org.apache.forrest.servlet/src/java/org/apache/forrest/http/ForrestServlet.java?rev=1096666&r1=1096665&r2=1096666&view=diff
==============================================================================
--- 
forrest/trunk/whiteboard/forrest-osgi/org.apache.forrest.servlet/src/java/org/apache/forrest/http/ForrestServlet.java
 (original)
+++ 
forrest/trunk/whiteboard/forrest-osgi/org.apache.forrest.servlet/src/java/org/apache/forrest/http/ForrestServlet.java
 Tue Apr 26 05:49:41 2011
@@ -57,44 +57,44 @@ public class ForrestServlet extends Http
   public ForrestServlet(final BundleContext context) {
     mBundleContext = context;
 
-    Filter filter;
-
-    // track input plugins
     try {
-      filter = context.createFilter("(&("
-                                    + Constants.OBJECTCLASS
-                                    + "=" + ForrestPlugin.class.getName() + ")"
-                                    + "(pluginType=" + 
ForrestPlugin.TYPE_INPUT + ")"
-                                    + ")");
-      mInputPluginTracker = new ServiceTracker(context, filter, null);
+      // track input plugins
+      mInputPluginTracker = buildPluginTracker(ForrestPlugin.TYPE_INPUT);
       mInputPluginTracker.open();
-    } catch (InvalidSyntaxException ise) {
-      // TODO: log failure
-    }
 
-    // track output plugins
-    try {
-      filter = context.createFilter("(&("
-                                    + Constants.OBJECTCLASS
-                                    + "=" + ForrestPlugin.class.getName() + ")"
-                                    + "(pluginType=" + 
ForrestPlugin.TYPE_OUTPUT + ")"
-                                    + ")");
-      mOutputPluginTracker = new ServiceTracker(context, filter, null);
+      // track output plugins
+      mOutputPluginTracker = buildPluginTracker(ForrestPlugin.TYPE_OUTPUT);
       mOutputPluginTracker.open();
     } catch (InvalidSyntaxException ise) {
-      // TODO: log failure
+      // TODO handle failure with grace
+      LOG.debug("Failed to track plugins: " + ise);
     }
   }
 
+  private ServiceTracker buildPluginTracker(String type) throws 
InvalidSyntaxException {
+    String filterFormat = new StringBuilder()
+      .append("(&(")
+      .append(Constants.OBJECTCLASS)
+      .append("=").append(ForrestPlugin.class.getName()).append(")")
+      .append("(pluginType=%s))").toString();
+
+    String filterString = String.format(filterFormat, type);
+    LOG.debug("Building service tracker with LDAP filter: " + filterString);
+
+    Filter filter = mBundleContext.createFilter(filterString);
+
+    return new  ServiceTracker(mBundleContext, filter, null);
+  }
+
   @Override
   protected void doGet(HttpServletRequest req, HttpServletResponse resp)
     throws ServletException, IOException {
 
     String pathInfo = req.getPathInfo();
-    LogPlugin.getDefault().getLogService().log(LogService.LOG_DEBUG, "doGet: " 
+ pathInfo);
+    LOG.debug("doGet: " + pathInfo);
     File rootPath = new File(System.getProperty("project.home"),
                              System.getProperty("project.xdocs-dir"));
-    LogPlugin.getDefault().getLogService().log(LogService.LOG_DEBUG, 
"project.xdocs-dir: " + rootPath.getAbsolutePath());
+    LOG.debug("project.xdocs-dir: " + rootPath.getAbsolutePath());
 
     if (!rootPath.canRead()) {
       // not much to do if the source area is not readable
@@ -103,19 +103,19 @@ public class ForrestServlet extends Http
       return;
     }
 
-    LogPlugin.getDefault().getLogService().log(LogService.LOG_DEBUG, "Can read 
" + rootPath.getAbsolutePath());
+    LOG.debug("Can read " + rootPath.getAbsolutePath());
     File source = new File(rootPath, pathInfo);
 
     if (source.canRead()) {
       // source exists on disk and is readable
-      LogPlugin.getDefault().getLogService().log(LogService.LOG_DEBUG, "Can 
read " + source.getAbsolutePath());
+      LOG.debug("Can read " + source.getAbsolutePath());
       doFileResponse(req, resp, source);
 
       return;
     }
 
     // source does not exist on disk or is not readable
-    LogPlugin.getDefault().getLogService().log(LogService.LOG_DEBUG, "Cannot 
read " + source.getAbsolutePath());
+    LOG.debug("Cannot read " + source.getAbsolutePath());
 
     File[] files = source.getParentFile().listFiles();
     Arrays.sort(files);
@@ -141,10 +141,9 @@ public class ForrestServlet extends Http
 
         if (extension > 0) {
           String base = name.substring(0, extension);
-          LogPlugin.getDefault().getLogService().log(LogService.LOG_DEBUG, 
name + " --> " + base);
+          LOG.debug(name + " --> " + base);
 
           if (base.equals(sourceBasename)) {
-            LogPlugin.getDefault().getLogService().log(LogService.LOG_DEBUG, 
"Found something, right here");
             foundMatch = true;
             sourceUri = files[i].toURI();
             break;
@@ -158,7 +157,7 @@ public class ForrestServlet extends Http
       String sourceFormat = name;
       String logMsg = "transform input " + sourceFormat + " into output " + 
requestUri;
 
-      LogPlugin.getDefault().getLogService().log(LogService.LOG_DEBUG, logMsg);
+      LOG.debug(logMsg);
 
       String pluginType;
 
@@ -172,21 +171,21 @@ public class ForrestServlet extends Http
           for (int i = 0; i < outRefs.length; i++) {
             // XXX use property name, something like PROP_CONTENT_TYPE
             pluginType = (String) outRefs[i].getProperty("contentType");
-            LogPlugin.getDefault().getLogService().log(LogService.LOG_DEBUG, 
"Found an output plugin for format: " + pluginType);
+            LOG.debug("Found an output plugin for format: " + pluginType);
 
             if (null != pluginType
                 && pluginType.equals
                 (ContentType.getContentTypeByName(requestUri))) {
-              LogPlugin.getDefault().getLogService().log(LogService.LOG_DEBUG, 
"It's a match. Transform it.");
+              LOG.debug("It's a match. Transform it.");
 
               outputPlugin = (ForrestPlugin) 
mOutputPluginTracker.getService(outRefs[i]);
               break;
             } else {
-              LogPlugin.getDefault().getLogService().log(LogService.LOG_DEBUG, 
"Skipping " + pluginType + " format for " + 
ContentType.getContentTypeByName(requestUri));
+              LOG.debug("Skipping " + pluginType + " format for " + 
ContentType.getContentTypeByName(requestUri));
             }
           }
         } else {
-          LogPlugin.getDefault().getLogService().log(LogService.LOG_DEBUG, 
"List of output plugins is null");
+          LOG.debug("List of output plugins is null");
         }
       }
 
@@ -200,24 +199,22 @@ public class ForrestServlet extends Http
           for (int i = 0; i < inRefs.length; i++) {
             // XXX use property, something like PROP_CONTENT_TYPE
             pluginType = (String) inRefs[i].getProperty("contentType");
-            LogPlugin.getDefault().getLogService().log(LogService.LOG_DEBUG, 
"Found an input plugin for format: " + pluginType);
+            LOG.debug("Found an input plugin for format: " + pluginType);
 
             if (null != pluginType
                 && pluginType.equals
                 (ContentType.getContentTypeByName(sourceFormat))) {
-              LogPlugin.getDefault().getLogService().log(LogService.LOG_DEBUG, 
"It's a match. Transform it.");
+              LOG.debug("It's a match. Transform it.");
 
               inputPlugin = (ForrestPlugin) 
mInputPluginTracker.getService(inRefs[i]);
               break;
             } else {
-              LogPlugin.getDefault().getLogService().log
-                (LogService.LOG_DEBUG,
-                 "Skipping " + pluginType + " format for "
-                 + ContentType.getContentTypeByName(sourceFormat));
+              LOG.debug("Skipping " + pluginType + " format for "
+                        + ContentType.getContentTypeByName(sourceFormat));
             }
           }
         } else {
-          LogPlugin.getDefault().getLogService().log(LogService.LOG_DEBUG, 
"List of input plugins is null");
+          LOG.debug("List of input plugins is null");
         }
       }
 
@@ -285,4 +282,19 @@ public class ForrestServlet extends Http
     return path + (path.endsWith("/") ? "" : "/") + index;
   }
 
+  /*
+   * Convenience wrapper to allow typing LOG.debug(msg)
+   */
+  static class LOG {
+
+    static void debug(String msg) {
+      LogService service = LogPlugin.getDefault().getLogService();
+
+      if (null != service) {
+        service.log(LogService.LOG_DEBUG, msg);
+      }
+    }
+
+  }
+
 }