svn commit: r551444 - in /xml/xindice/trunk: ./ config/ java/src/org/apache/xindice/server/ java/src/org/apache/xindice/webadmin/ java/src/org/apache/xindice/webadmin/webdav/components/

[email protected]
Newsgroups gmane.text.xml.xindice.devel
Message-ID <[email protected]>
Author: vgritsenko
Date: Wed Jun 27 21:39:52 2007
New Revision: 551444

URL: http://svn.apache.org/viewvc?view=rev&rev=551444
Log:
      <action dev="VG" type="remove">
        Remove 'Ugly Browser', replaced by WebAdmin. 
      </action>


Removed:
    xml/xindice/trunk/java/src/org/apache/xindice/server/UglyBrowser.java
    xml/xindice/trunk/java/src/org/apache/xindice/webadmin/WebAdminServlet.java
Modified:
    xml/xindice/trunk/config/web.xml
    xml/xindice/trunk/java/src/org/apache/xindice/server/XindiceServlet.java
    xml/xindice/trunk/java/src/org/apache/xindice/webadmin/webdav/components/Get.java
    xml/xindice/trunk/status.xml

Modified: xml/xindice/trunk/config/web.xml
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/config/web.xml?view=diff&rev=551444&r1=551443&r2=551444
==============================================================================
--- xml/xindice/trunk/config/web.xml (original)
+++ xml/xindice/trunk/config/web.xml Wed Jun 27 21:39:52 2007
@@ -49,12 +49,6 @@
       <param-value>WEB-INF/config/system.xml</param-value>
     </init-param>
 
-    <load-on-startup>1</load-on-startup>
-  </servlet>
-
-  <servlet>
-    <servlet-name>webadmin</servlet-name>
-    <servlet-class>org.apache.xindice.webadmin.WebAdminServlet</servlet-class>
     <init-param>
       <param-name>webadmin.configuration</param-name>
       <param-value>WEB-INF/config/webadmin.xml</param-value>
@@ -63,13 +57,9 @@
       <param-name>mimetable.configuration</param-name>
       <param-value>WEB-INF/config/MimeTypes.xml</param-value>
     </init-param>
+
     <load-on-startup>1</load-on-startup>
   </servlet>
-
-  <servlet-mapping>
-    <servlet-name>webadmin</servlet-name>
-    <url-pattern>/dav/*</url-pattern>
-  </servlet-mapping>
 
   <servlet-mapping>
     <servlet-name>xindice</servlet-name>

Modified: xml/xindice/trunk/java/src/org/apache/xindice/server/XindiceServlet.java
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/server/XindiceServlet.java?view=diff&rev=551444&r1=551443&r2=551444
==============================================================================
--- xml/xindice/trunk/java/src/org/apache/xindice/server/XindiceServlet.java (original)
+++ xml/xindice/trunk/java/src/org/apache/xindice/server/XindiceServlet.java Wed Jun 27 21:39:52 2007
@@ -21,10 +21,22 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.xindice.core.Collection;
+import org.apache.xindice.core.DBException;
 import org.apache.xindice.core.Database;
 import org.apache.xindice.server.rpc.RPCMessageInterface;
 import org.apache.xindice.util.Configuration;
 import org.apache.xindice.util.ConfigurationException;
+import org.apache.xindice.webadmin.Location;
+import org.apache.xindice.webadmin.WebAdminManager;
+import org.apache.xindice.webadmin.viewer.HtmlDatabaseViewer;
+import org.apache.xindice.webadmin.viewer.HtmlCollectionViewer;
+import org.apache.xindice.webadmin.viewer.HtmlResourceViewer;
+import org.apache.xindice.webadmin.util.MimeTable;
+import org.apache.xindice.webadmin.webdav.DAVRequest;
+import org.apache.xindice.webadmin.webdav.DAVResponse;
+import org.apache.xindice.webadmin.webdav.WebdavStatus;
+import org.apache.xindice.webadmin.webdav.components.DAVComponent;
 import org.apache.xindice.xml.dom.DOMParser;
 import org.apache.xmlrpc.XmlRpc;
 import org.apache.xmlrpc.XmlRpcServer;
@@ -59,48 +71,18 @@
     private static final Log log = LogFactory.getLog(XindiceServlet.class);
 
     private static final String DEFAULT_XMLRPC_DRIVER = "xerces";
-    protected XmlRpcServer xmlrpcServer;
+    private static final String WEBADMIN_CONFIGURATION = "webadmin.configuration";
+    private static final String MIMETABLE_CONFIGURATION = "mimetable.configuration";
 
-    public void destroy() {
-        // When the servlet engine goes down we need to close the database instance.
-        // By the time destroy() is called, no more client requests can come in,
-        // so no need to worry about multithreading.
-        String[] databases = Database.listDatabases();
-        for (int i = 0; i < databases.length; i++) {
-            String name = databases[i];
-            try {
-                Database.getDatabase(name).close();
-                log.info("Database '" + name + "' successfully closed");
-            } catch (Exception e) {
-                log.error("Error closing database '" + name + "'", e);
-            }
-        }
-    }
+    protected XmlRpcServer xmlrpcServer;
+    protected WebAdminManager webAdmin;
 
-    /**
-     * Delegate GET requests to the UglyBrowser.
-     */
-    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
-        UglyBrowser.doGet(request, response);
-    }
-
-    /**
-     * Sends an XML query to the server and writes the output back. Currenlty
-     * only XML-RPC query is supported.
-     */
-    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
-        byte[] result = xmlrpcServer.execute(request.getInputStream());
-        response.setContentType("text/xml");
-        response.setContentLength(result.length);
-        OutputStream output = response.getOutputStream();
-        output.write(result);
-        output.flush();
-    }
 
     /**
      * Initializes database
      */
     public void init(ServletConfig servletConfig) throws ServletException {
+        super.init(servletConfig);
 
         Configuration configuration = loadConfiguration(servletConfig);
 
@@ -212,6 +194,22 @@
             destroy();
             throw new ServletException("Error while handling the configuration", e);
         }
+
+        try {
+            String path = servletConfig.getInitParameter(WEBADMIN_CONFIGURATION);
+            Document doc = loadFile(path, servletConfig);
+            webAdmin = new WebAdminManager(doc.getDocumentElement());
+        } catch(Exception e) {
+            throw new ServletException("Could not process WebAdmin configuration", e);
+        }
+
+        try {
+            String path = servletConfig.getInitParameter(MIMETABLE_CONFIGURATION);
+            Document doc = loadFile(path, servletConfig);
+            MimeTable.addMimeConfig(doc);
+        } catch(Exception e) {
+            log.error("Could not process Mime Table configuration", e);
+        }
     }
 
     /**
@@ -267,4 +265,155 @@
             throw new ConfigurationException("Failed to load configuration.", e);
         }
     }
+
+    private Document loadFile(String path, ServletConfig config) throws Exception {
+        InputStream inputStream = null;
+
+        try {
+            if (path.startsWith("/")) { // Absolute file path
+                log.debug("Loading configuration from filesystem path " + path);
+                inputStream = new FileInputStream(path);
+            } else {
+                // Relative (to the context) path
+                log.debug("Loading configuration from context path " + path);
+                ServletContext context = config.getServletContext();
+                inputStream = context.getResourceAsStream("/" + path);
+            }
+
+            Document configuration = null;
+            if (inputStream != null) {
+                configuration = DOMParser.toDocument(inputStream);
+            }
+
+            return configuration;
+        } finally {
+            try {
+                if (inputStream != null) {
+                    inputStream.close();
+                }
+            } catch (IOException ignored) {
+                // ignore
+            }
+        }
+    }
+
+    public void destroy() {
+        // When the servlet engine goes down we need to close the database instance.
+        // By the time destroy() is called, no more client requests can come in,
+        // so no need to worry about multithreading.
+        String[] databases = Database.listDatabases();
+        for (int i = 0; i < databases.length; i++) {
+            String name = databases[i];
+            try {
+                Database.getDatabase(name).close();
+                log.info("Database '" + name + "' successfully closed");
+            } catch (Exception e) {
+                log.error("Error closing database '" + name + "'", e);
+            }
+        }
+    }
+
+    /**
+     * Process request. Determine type of a request and delegate for processing
+     * either to XML-RPC server, WebDAV, or WebAdmin.
+     *
+     * @param request a HttpServletRequest instance
+     * @param response a HttpServletResponse instance
+     * @exception IOException if an IO error occurs
+     * @exception ServletException if a servlet error occurs
+     */
+    public void service(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
+        // get requested information
+        String path = request.getServletPath();
+        String method = request.getMethod();
+
+        // xmlrpc requests do not have path (always '/') and are always POST
+        if ("/".equals(path) && method.equalsIgnoreCase("POST")) {
+            byte[] result = xmlrpcServer.execute(request.getInputStream());
+            response.setContentType("text/xml");
+            response.setContentLength(result.length);
+            OutputStream output = response.getOutputStream();
+            output.write(result);
+            return;
+        }
+
+        // empty path - redirect to initial page
+        if (path.length() == 0) {
+            String redirect = request.getContextPath() + request.getServletPath() + "/?viewer=default";
+            response.sendRedirect(redirect);
+            return;
+        }
+
+        // get request target
+        Location target;
+        try {
+            target = new Location(path);
+        } catch (DBException e) {
+            log.error("Unable to process request '" + path + "'", e);
+            throw new ServletException(e);
+        }
+
+        // get viewer parameter (missing if DAV request)
+        String viewer = request.getParameter("viewer");
+
+        // WebDAV requests do not have viewer parameter, nor can not GET a collection
+        if (viewer == null && !(path.endsWith("/") && method.equalsIgnoreCase("GET"))) {
+            DAVComponent m = webAdmin.getMethod(method);
+            if (m == null) {
+                // method is not supported
+                if (log.isInfoEnabled()) {
+                    log.info("Method " + method + " is not supported.");
+                }
+                response.setStatus(WebdavStatus.SC_NOT_IMPLEMENTED);
+                return;
+            }
+
+            m.execute(new DAVRequest(request), new DAVResponse(response), target);
+            return;
+        }
+
+        // HTML requests are all the rest
+        Collection col = target.getCollection();
+        String resource = target.getName();
+        if (col == null) {
+            // redirect if path is not '/'
+            if (!path.equals("/")) {
+                String redirect = request.getContextPath() + request.getServletPath() + "/?viewer=" + viewer;
+                response.sendRedirect(redirect);
+                return;
+            }
+
+            HtmlDatabaseViewer v = webAdmin.getDatabaseViewer(viewer);
+            if (v == null) {
+                response.setStatus(WebdavStatus.SC_NOT_IMPLEMENTED);
+                return;
+            }
+
+            v.execute(request, response);
+        } else if (resource == null) {
+            // redirect if path does not end with '/'
+            if (!path.endsWith("/")) {
+                String redirect = request.getContextPath() + request.getServletPath() + path + "/?viewer=" + viewer;
+                response.sendRedirect(redirect);
+                return;
+            }
+
+            HtmlCollectionViewer v = webAdmin.getCollectionViewer(viewer);
+            if (v == null) {
+                response.setStatus(WebdavStatus.SC_NOT_IMPLEMENTED);
+                return;
+            }
+
+            v.execute(request, response, col);
+        } else {
+            HtmlResourceViewer v = webAdmin.getResourceViewer(viewer);
+            if (v == null) {
+                response.setStatus(WebdavStatus.SC_NOT_IMPLEMENTED);
+                return;
+            }
+
+            v.execute(request, response, col, resource);
+        }
+    }
+
 }

Modified: xml/xindice/trunk/java/src/org/apache/xindice/webadmin/webdav/components/Get.java
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/webadmin/webdav/components/Get.java?view=diff&rev=551444&r1=551443&r2=551444
==============================================================================
--- xml/xindice/trunk/java/src/org/apache/xindice/webadmin/webdav/components/Get.java (original)
+++ xml/xindice/trunk/java/src/org/apache/xindice/webadmin/webdav/components/Get.java Wed Jun 27 21:39:52 2007
@@ -51,27 +51,7 @@
 
     public void execute(DAVRequest req, DAVResponse res, Location target) throws ServletException, IOException {
         if (target.getName() == null) {
-            // test if viewer is already specified
-            String viewer = req.getParameter("viewer");
-            if (viewer != null && viewer.length() != 0) {
-                res.setStatus(HttpServletResponse.SC_NOT_IMPLEMENTED);
-            }
-
-            if (log.isDebugEnabled()) {
-                log.debug("WEBDAV Get redirected to HtmlViewer");
-            }
-
-            //	redirect if path does not end with /
-            String reqPath = req.getPath();
-            if (reqPath == null || !reqPath.endsWith("/")) {
-                if (reqPath == null) {
-                    reqPath = "";
-                }
-                String redirect = req.getContextPath() + reqPath + "/?viewer=default";
-                res.sendRedirect(redirect);
-            } else {
-                res.sendRedirect("?viewer=default");
-            }
+            res.setStatus(HttpServletResponse.SC_NOT_IMPLEMENTED);
 
         } else {
             Collection col = target.getCollection();

Modified: xml/xindice/trunk/status.xml
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/status.xml?view=diff&rev=551444&r1=551443&r2=551444
==============================================================================
--- xml/xindice/trunk/status.xml (original)
+++ xml/xindice/trunk/status.xml Wed Jun 27 21:39:52 2007
@@ -113,6 +113,9 @@
 
   <changes>
     <release version="1.2" date="unreleased">
+      <action dev="VG" type="remove">
+        Remove 'Ugly Browser', replaced by WebAdmin.
+      </action>
       <action dev="VG" type="update" fixes-bug="42684" due-to="Natalia Shilenkova">
         Use Java NIO to lock database on startup.
       </action>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.