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>


Reply via email to