[Yanel-commits] rev 25261 - public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet

michi at wyona.com michi at wyona.com
Wed Jun 20 17:44:31 CEST 2007


Author: michi
Date: 2007-06-20 17:44:30 +0200 (Wed, 20 Jun 2007)
New Revision: 25261

Modified:
   public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet/YanelServlet.java
Log:
get reserved prefix from Yanel instead servlet config and handle resource reserved prefix

Modified: public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet/YanelServlet.java
===================================================================
--- public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet/YanelServlet.java	2007-06-20 15:41:37 UTC (rev 25260)
+++ public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet/YanelServlet.java	2007-06-20 15:44:30 UTC (rev 25261)
@@ -148,7 +148,7 @@
 
             sslPort = config.getInitParameter("ssl-port");
             toolbarMasterSwitch = config.getInitParameter("toolbar-master-switch");
-            reservedPrefix = config.getInitParameter("reserved-prefix");
+            reservedPrefix = yanel.getReservedPrefix();
         } catch (Exception e) {
             log.error(e);
             throw new ServletException(e.getMessage(), e);
@@ -1993,6 +1993,42 @@
             } catch (Exception e) {
                 throw new ServletException(e);
             }
+        } else if (path.indexOf("resource-types") >=0 ) {
+            String[] pathPart1 = path.split("/resource-types/");
+            String[] pathPart2 = pathPart1[1].split("::");
+            String[] pathPart3 = pathPart2[1].split("/");
+            String name = pathPart3[0];
+            String namespace = pathPart2[0].replaceAll("http:/", "http://");
+            String htdocsPath = path.split("::" + name)[1].replaceAll("/", File.separator); 
+            try {
+                java.util.Map properties = new HashMap();
+                Realm realm = yanel.getMap().getRealm(request.getServletPath());
+                ResourceConfiguration rc = new ResourceConfiguration(name, namespace, properties);
+                Resource resourceOfPrefix = yanel.getResourceManager().getResource(request, response, realm, path, rc);
+                File resourceFile = org.wyona.commons.io.FileUtil.file(resourceOfPrefix.getRTD().getConfigFile().getParentFile().getAbsolutePath(), "htdocs" + htdocsPath);
+
+                if (resourceFile.exists()) {
+                    log.debug("Resource-Type specific data: " + resourceFile);
+                    // TODO: Set HTTP header (mime-type, size, etc.)
+                    String mimeType = guessMimeType(FilenameUtils.getExtension(resourceFile.getName()));
+                    response.setHeader("Content-Type", mimeType);
+
+                    byte buffer[] = new byte[8192];
+                    int bytesRead;
+                    InputStream in = new java.io.FileInputStream(resourceFile);
+                    OutputStream out = response.getOutputStream();
+                    while ((bytesRead = in.read(buffer)) != -1) {
+                        out.write(buffer, 0, bytesRead);
+                    }
+                    return;
+                } else {
+                    log.error("No such file or directory: " + resourceFile);
+                    response.setStatus(javax.servlet.http.HttpServletResponse.SC_NOT_FOUND);
+                    return;
+                }
+            } catch (Exception e) {
+                throw new ServletException(e);
+            }
         } else {
             File globalFile = org.wyona.commons.io.FileUtil.file(servletContextRealPath, "htdocs" + File.separator + path.substring(reservedPrefix.length() + 2));
             if (globalFile.exists()) {




More information about the Yanel-commits mailing list