You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@chemistry.apache.org by fm...@apache.org on 2012/04/28 18:33:39 UTC

svn commit: r1331791 [8/12] - in /chemistry/opencmis/trunk: ./ chemistry-opencmis-client/chemistry-opencmis-client-bindings/ chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/...

Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/filter/LoggingFilter.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/filter/LoggingFilter.java?rev=1331791&r1=1331790&r2=1331791&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/filter/LoggingFilter.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/filter/LoggingFilter.java Sat Apr 28 16:33:35 2012
@@ -1,602 +1,602 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.support.filter;
-
-import java.io.BufferedReader;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileReader;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.io.StringReader;
-import java.io.StringWriter;
-import java.io.Writer;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Scanner;
-
-import javax.servlet.Filter;
-import javax.servlet.FilterChain;
-import javax.servlet.FilterConfig;
-import javax.servlet.ServletException;
-import javax.servlet.ServletInputStream;
-import javax.servlet.ServletOutputStream;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletRequestWrapper;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpServletResponseWrapper;
-import javax.xml.transform.OutputKeys;
-import javax.xml.transform.Source;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.stream.StreamResult;
-import javax.xml.transform.stream.StreamSource;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-public class LoggingFilter implements Filter {
-
-    private static final Log log = LogFactory.getLog(LoggingFilter.class);
-    private static int REQUEST_NO = 0;
-    private static final SimpleDateFormat FORMAT = new SimpleDateFormat("EEE MMM dd hh:mm:ss a z yyyy", Locale.US);
-    private String logDir;
-    private boolean prettyPrint = true;
-    private boolean logHeaders = true;
-    private int indent = -1;
-
-    public void init(FilterConfig cfg) throws ServletException {
-        
-        String val; 
-        logDir = cfg.getInitParameter("LogDir");
-        if (null == logDir || logDir.length() == 0)
-            logDir = System.getProperty("java.io.tmpdir");
-        if (null == logDir|| logDir.length() == 0)
-            logDir = "." + File.separator;
-
-        if (!logDir.endsWith(File.separator))
-            logDir += File.separator;
-
-        val = cfg.getInitParameter("Indent");
-        if (null != val)
-            indent = Integer.parseInt(val);
-        if (indent < 0)
-            indent = 4;
-
-        val = cfg.getInitParameter("PrettyPrint");
-        if (null != val)
-            prettyPrint = Boolean.parseBoolean(val);
-
-        val = cfg.getInitParameter("LogHeaders");
-        if (null != val)
-            logHeaders = Boolean.parseBoolean(val);
-    }
-
-    public void destroy() {
-    }
-
-    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException,
-            ServletException {
-        log.debug("Logging filter doFilter");
-
-        if (resp instanceof HttpServletResponse && req instanceof HttpServletRequest) {
-            LoggingRequestWrapper logReq = new LoggingRequestWrapper((HttpServletRequest)req);
-            LoggingResponseWrapper logResponse = new LoggingResponseWrapper((HttpServletResponse)resp);
-            
-            chain.doFilter(logReq, logResponse);
-
-            int reqNo = getNextRequestNumber();
-            String requestFileName = getRequestFileName(reqNo);
-            String cType = logReq.getContentType();
-            String xmlRequest = logReq.getPayload();
-            StringBuffer sb = new StringBuffer();
-            
-            if (logHeaders)
-                logHeaders(logReq, sb);
-
-            if (xmlRequest == null || xmlRequest.length() == 0)
-                xmlRequest = "";
-
-            if (prettyPrint && cType != null) {
-                if (cType.startsWith("multipart")) {
-                    xmlRequest = processMultipart(cType, xmlRequest);
-                } else if (cType.contains("xml")) { 
-                    xmlRequest = prettyPrintXml(xmlRequest, indent);
-                }
-            }
-            
-            xmlRequest = sb.toString() + xmlRequest;
-            log.debug("Found request: " + requestFileName + ": " + xmlRequest);
-            writeTextToFile(requestFileName, xmlRequest);
-            
-
-            sb = new StringBuffer();
-            cType = logResponse.getContentType();
-            String xmlResponse = logResponse.getPayload();
-            String responseFileName = getResponseFileName(reqNo);
-            
-            if (logHeaders) {
-                logHeaders(logResponse, req.getProtocol(), sb);
-            }
-            
-            if (xmlResponse == null || xmlResponse.length() == 0) 
-                xmlResponse = "";
-
-            if (prettyPrint && cType != null) {
-                if (cType.startsWith("multipart")) {
-                    xmlResponse = processMultipart(cType, xmlResponse);
-                } else if (cType.contains("xml")) { 
-                    xmlResponse = prettyPrintXml(xmlResponse, indent);
-                } else if (cType.contains("json")) { 
-                    xmlResponse = prettyPrintJson(xmlResponse, indent);
-                }
-            }
-                
-            xmlResponse = sb.toString() + xmlResponse;
-            log.debug("Found response: " + responseFileName  + ": " + xmlResponse);
-            writeTextToFile(responseFileName, xmlResponse);
-        } else {            
-            chain.doFilter(req, resp);
-        }
-    }
-    
-    private void writeTextToFile(String filename, String content) {
-        PrintWriter pw = null;
-        FileWriter fw = null;
-        try {
-            fw = new FileWriter(filename);
-            pw = new PrintWriter(fw);
-
-            Scanner scanner = new Scanner(content);
-            while (scanner.hasNextLine()) {
-                String line = scanner.nextLine();
-                pw.println(line);
-            }
-
-            pw.flush();
-        } catch (IOException e) {
-            e.printStackTrace();
-        } finally {
-            if (pw != null)
-                pw.close();
-            if (fw != null)
-                try {
-                    fw.close();
-                } catch (IOException e) {
-                    e.printStackTrace();
-                }
-        }
-    }
-    
-    private static String prettyPrintXml(String input, int indent) {
-        try {
-            Source xmlInput = new StreamSource(new StringReader(input));
-            StringWriter stringWriter = new StringWriter();
-            StreamResult xmlOutput = new StreamResult(stringWriter);
-            TransformerFactory transformerFactory = TransformerFactory.newInstance();
-            transformerFactory.setAttribute("indent-number", indent);
-            Transformer transformer = transformerFactory.newTransformer(); 
-            transformer.setOutputProperty(OutputKeys.INDENT, "yes");
-            transformer.transform(xmlInput, xmlOutput);
-            return xmlOutput.getWriter().toString();
-        } catch (Exception e) {
-            throw new RuntimeException(e); // simple exception handling, please review it
-        }
-    }
-    
-    private static String prettyPrintJson(String input, int indent) {
-        JsonPrettyPrinter pp = new JsonPrettyPrinter(indent);
-        return pp.prettyPrint(input);
-    }
-    
-    private String processMultipart(String cType, String messageBody) throws IOException {
-        int beginIndex = cType.indexOf("boundary=\"") + 10;
-        int endIndex = cType.indexOf("\"", beginIndex);
-        if (endIndex < 0)
-            endIndex = cType.length();
-        String boundary = "--" + cType.substring(beginIndex, endIndex);
-        log.debug("Boundary = " + boundary);
-        BufferedReader in = new BufferedReader(new StringReader(messageBody));
-        StringBuffer out = new StringBuffer();
-        String line;
-        ByteArrayOutputStream xmlBodyBuffer = new ByteArrayOutputStream();
-        boolean boundaryFound;
-        
-        boolean inXmlOrJsonBody = false;
-        boolean inXmlOrJsonPart = false;
-        boolean isXml;
-        while ((line = in.readLine()) != null) {
-            if (inXmlOrJsonPart) {
-                if (line.startsWith("<?xml") || line.startsWith("{")) {
-                    inXmlOrJsonBody = true;
-                    isXml = line.startsWith("<?xml");
-                    xmlBodyBuffer.write(line.getBytes(), 0, line.length());                   
-                    while (inXmlOrJsonBody)  {
-                        line = in.readLine();
-                        boundaryFound = line.startsWith(boundary);
-                        if (boundaryFound) {
-                            log.debug("Leaving XML body: " + line);
-                            inXmlOrJsonBody = false;
-                            inXmlOrJsonPart = false;
-                            if (isXml)
-                                out.append(prettyPrintXml(xmlBodyBuffer.toString(), indent));
-                            else
-                                out.append(prettyPrintJson(xmlBodyBuffer.toString(), indent));
-                            out.append(line).append("\n");
-                        } else
-                            xmlBodyBuffer.write(line.getBytes(), 0, line.length());
-                    }               
-                } else { 
-                    log.debug("in XML part is: " + line);
-                    out.append(line).append("\n");
-                }
-
-            } else {
-                log.debug("not in XML part: " + line);
-                out.append(line).append("\n");
-                boundaryFound = line.startsWith(boundary);
-                if (boundaryFound) {
-                    log.debug("Boundardy found!");
-                    inXmlOrJsonPart = true;
-                }
-            }
-        }
-        in.close();        
-        log.debug("End parsing multipart.");
-        
-        return out.toString();
-    }
-
-    @SuppressWarnings("rawtypes")
-    private void logHeaders(LoggingRequestWrapper req, StringBuffer sb) {
-        sb.append(req.getMethod());
-        sb.append(" ");
-        sb.append(req.getRequestURI());
-        String queryString = req.getQueryString();
-        if (null != queryString && queryString.length() > 0) {
-            sb.append("?");
-            sb.append(queryString);
-        }
-        sb.append(" ");
-        sb.append(req.getProtocol());
-        sb.append("\n");
-        Enumeration headerNames = req.getHeaderNames();
-        while (headerNames.hasMoreElements()) {
-            String headerName = headerNames.nextElement().toString();
-            headerName = headerName.substring(0, 1).toUpperCase() + headerName.substring(1);
-            sb.append(headerName + ": ");
-            sb.append(req.getHeader(headerName));
-            sb.append("\n");
-        }
-        sb.append("\n");
-    }
-
-    private void logHeaders(LoggingResponseWrapper resp, String protocol, StringBuffer sb) {
-        sb.append(protocol);
-        sb.append(" ");
-        sb.append(String.valueOf(resp.getStatus()));
-        sb.append("\n");
-        Map<String, String> headers = resp.getHeaders();
-        for ( Map.Entry<String, String> header: headers.entrySet()) {
-            sb.append(header.getKey());
-            sb.append(": ");
-            sb.append(header.getValue());
-            sb.append("\n");            
-        }
-        sb.append("\n");
-    }
-
-    private String getRequestFileName(int no) {
-        return logDir + String.format("%05d-request.log", no);
-    }
-    
-    private String getResponseFileName(int no) {
-        return logDir + String.format("%05d-response.log", no);
-    }
-    
-    private static synchronized int getNextRequestNumber() {
-        return REQUEST_NO++;
-    }
-    
-    private class LoggingRequestWrapper extends HttpServletRequestWrapper {
-        
-        private LoggingInputStream is;
-   
-        public LoggingRequestWrapper(HttpServletRequest request) throws IOException {
-           super(request);
-        }
-   
-        @Override
-        public ServletInputStream getInputStream() throws IOException {
-            this.is = new LoggingInputStream(super.getInputStream());
-            return is;
-        }
-   
-        public String getPayload() {
-           return null == is ? "" : is.getPayload();
-        }
-     }
-   
-     private class LoggingInputStream extends ServletInputStream {
-   
-        private ByteArrayOutputStream baous = new ByteArrayOutputStream();
-        private ServletInputStream is;
-   
-        public LoggingInputStream(ServletInputStream is) {
-           super();
-           this.is = is;
-        }
-   
-        // Since we are not sure which method is used just overwrite all 4 of them:
-        @Override
-        public int read() throws IOException {
-           int ch = is.read();
-           if (ch != -1) {
-              baous.write(ch);
-           }
-           return ch;
-        }
-   
-        @Override
-        public int read(byte[] b) throws IOException {
-           int ch = is.read(b);
-           if (ch != -1) {
-              baous.write(b, 0, ch);
-           }
-           return ch;
-        }
-   
-        @Override
-        public int read(byte[] b, int o, int l) throws IOException {
-           int ch = is.read(b, o, l);
-           if (ch != -1) {
-              baous.write(b, o, ch);
-           }
-           return ch;
-        }
-        
-        @Override
-        public int readLine(byte[] b, int o, int l) throws IOException {
-           int ch = is.readLine(b, o, l);
-           if (ch != -1) {
-               baous.write(b, o, ch);
-           }
-           return ch;
-        }
-   
-        public String getPayload() {
-           return baous.toString();
-        }
-     }
-     
-     private class LoggingResponseWrapper extends HttpServletResponseWrapper {
-         
-         private LoggingOutputStream os;
-         private PrintWriter writer;
-         private int statusCode;
-         private Map<String, String> headers = new HashMap<String, String>();
-         String encoding;
-         
-         public LoggingResponseWrapper(HttpServletResponse response) throws IOException {
-            super(response);
-            this.os = new LoggingOutputStream(response.getOutputStream());
-         }
-    
-         @Override
-         public PrintWriter getWriter() {
-            try {
-                if (null == writer)
-                    writer = new PrintWriter(this.getOutputStream());
-                return writer;
-            } catch (IOException e) {
-                log.error("Failed to get PrintWriter in LoggingFilter: "+ e);
-                e.printStackTrace();
-                return null;             
-            }
-         }
-         
-         @Override
-         public ServletOutputStream getOutputStream() throws IOException {
-            return os;
-         }
-    
-         public String getPayload() {
-            return os.getPayload();
-         }
-         
-         @Override
-         public void addCookie(Cookie cookie) {
-             super.addCookie(cookie);
-             String value;
-             if (headers.containsKey("Cookie")) {
-                 value = headers.get("Cookie") + "; " + cookie.toString();
-             } else
-                 value = cookie.toString();
-             headers.put("Cookie", value);
-         }
-         
-         @Override
-         public void setContentType(String type) {
-             super.setContentType(type);
-             if (headers.containsKey("Content-Type")) {
-                 String cType = headers.get("Content-Type");
-                 int pos = cType.indexOf(";charset=");
-                 if (pos < 0 && encoding != null)
-                     type = cType + ";charset=" + encoding;
-                 else if (pos >= 0)
-                     encoding = null;                 
-             }
-             headers.put("Content-Type", type);             
-         }
-         
-         @Override         
-         public void setCharacterEncoding(java.lang.String charset) {
-             super.setCharacterEncoding(charset);
-             encoding = charset;
-             if (headers.containsKey("Content-Type")) {
-                 String cType = headers.get("Content-Type");
-                 int pos = cType.indexOf(";charset=");
-                 if (pos >=0)
-                     cType = cType.substring(0, pos) + ";charset=" + encoding;
-                 else
-                     cType = cType + ";charset=" + encoding;
-                 headers.put("Content-Type", cType);
-             }
-         }
-         
-         @Override
-         public void setContentLength(int len) {
-             super.setContentLength(len);
-             headers.put("Content-Length", String.valueOf(len));                          
-         }
-         
-         private String getDateString(long date) {
-             return FORMAT.format(new Date(date));             
-         }
-         
-         @Override
-         public void setDateHeader(String name, long date) {
-             super.setDateHeader(name, date);
-             headers.put(name, String.valueOf(getDateString(date)));
-         }
-         
-         @Override
-         public void addDateHeader(String name, long date) {
-             super.addDateHeader(name, date);
-             if (headers.containsKey(name)) {
-                 headers.put(name, headers.get(name) + "; " + getDateString(date));
-             } else {
-                 headers.put(name, String.valueOf(getDateString(date)));
-             }
-         }
-         
-         @Override
-         public void setHeader(String name, String value) {
-             super.setHeader(name, value);
-             headers.put(name, String.valueOf(value));
-         }
-
-         @Override
-         public void addHeader(String name, String value) {
-             super.addHeader(name, value);
-             if (headers.containsKey(name)) {
-                 headers.put(name, headers.get(name) + "; " + value);
-             } else {
-                 headers.put(name, String.valueOf(value));
-             }
-         }
-         
-         @Override
-         public void setIntHeader(String name, int value) {
-             super.setIntHeader(name, value);
-             headers.put(name, String.valueOf(value));
-         }
-         
-         @Override
-         public void addIntHeader(String name, int value) {
-             super.addIntHeader(name, value);
-             if (headers.containsKey(name)) {
-                 headers.put(name, headers.get(name) + "; " + String.valueOf(value));
-             } else {
-                 headers.put(name, String.valueOf(value));
-             }
-         }
-         
-         @Override
-         public void sendError(int sc) throws IOException {
-             statusCode = sc;
-             super.sendError(sc);
-         }
-
-         @Override
-         public void sendError(int sc, String msg) throws IOException {
-             statusCode = sc;
-             super.sendError(sc, msg);
-         }
-
-         @Override
-         public void sendRedirect(String location) throws IOException {
-             statusCode = 302;
-             super.sendRedirect(location);
-         }
-
-         @Override
-         public void setStatus(int sc) {
-             statusCode = sc;
-             super.setStatus(sc);
-         }
-
-         public int getStatus() {
-             return statusCode;
-         }
-
-         public Map<String, String> getHeaders() {
-             return headers;
-         }
-      }
-    
-      private class LoggingOutputStream extends ServletOutputStream {
-          private ByteArrayOutputStream baous = new ByteArrayOutputStream();
-          private ServletOutputStream os;
-     
-          public LoggingOutputStream(ServletOutputStream os) {
-             super();
-             this.os = os;
-          }
-          
-          public String getPayload() {
-              return new String(baous.toString());
-           }
-
-        @Override
-        public void write(byte[] b, int off, int len) {
-            try {
-                baous.write(b, off, len);
-                os.write(b, off, len);
-            } catch (IOException e) {
-                throw new RuntimeException(e);
-            }
-        }
-        
-        @Override
-        public
-        void write(byte[] b) {
-            try {
-                baous.write(b);
-                os.write(b);
-            } catch (IOException e) {
-                throw new RuntimeException(e);
-            }
-        }
-         
-        @Override
-        public void write(int ch) throws IOException {
-            baous.write(ch);
-            os.write(ch);
-        }
-      }
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.chemistry.opencmis.server.support.filter;
+
+import java.io.BufferedReader;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.io.Writer;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Scanner;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletInputStream;
+import javax.servlet.ServletOutputStream;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.Cookie;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletRequestWrapper;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpServletResponseWrapper;
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Source;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.stream.StreamResult;
+import javax.xml.transform.stream.StreamSource;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class LoggingFilter implements Filter {
+
+    private static final Logger log = LoggerFactory.getLogger(LoggingFilter.class);
+    private static int REQUEST_NO = 0;
+    private static final SimpleDateFormat FORMAT = new SimpleDateFormat("EEE MMM dd hh:mm:ss a z yyyy", Locale.US);
+    private String logDir;
+    private boolean prettyPrint = true;
+    private boolean logHeaders = true;
+    private int indent = -1;
+
+    public void init(FilterConfig cfg) throws ServletException {
+        
+        String val; 
+        logDir = cfg.getInitParameter("LogDir");
+        if (null == logDir || logDir.length() == 0)
+            logDir = System.getProperty("java.io.tmpdir");
+        if (null == logDir|| logDir.length() == 0)
+            logDir = "." + File.separator;
+
+        if (!logDir.endsWith(File.separator))
+            logDir += File.separator;
+
+        val = cfg.getInitParameter("Indent");
+        if (null != val)
+            indent = Integer.parseInt(val);
+        if (indent < 0)
+            indent = 4;
+
+        val = cfg.getInitParameter("PrettyPrint");
+        if (null != val)
+            prettyPrint = Boolean.parseBoolean(val);
+
+        val = cfg.getInitParameter("LogHeaders");
+        if (null != val)
+            logHeaders = Boolean.parseBoolean(val);
+    }
+
+    public void destroy() {
+    }
+
+    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException,
+            ServletException {
+        log.debug("Logging filter doFilter");
+
+        if (resp instanceof HttpServletResponse && req instanceof HttpServletRequest) {
+            LoggingRequestWrapper logReq = new LoggingRequestWrapper((HttpServletRequest)req);
+            LoggingResponseWrapper logResponse = new LoggingResponseWrapper((HttpServletResponse)resp);
+            
+            chain.doFilter(logReq, logResponse);
+
+            int reqNo = getNextRequestNumber();
+            String requestFileName = getRequestFileName(reqNo);
+            String cType = logReq.getContentType();
+            String xmlRequest = logReq.getPayload();
+            StringBuffer sb = new StringBuffer();
+            
+            if (logHeaders)
+                logHeaders(logReq, sb);
+
+            if (xmlRequest == null || xmlRequest.length() == 0)
+                xmlRequest = "";
+
+            if (prettyPrint && cType != null) {
+                if (cType.startsWith("multipart")) {
+                    xmlRequest = processMultipart(cType, xmlRequest);
+                } else if (cType.contains("xml")) { 
+                    xmlRequest = prettyPrintXml(xmlRequest, indent);
+                }
+            }
+            
+            xmlRequest = sb.toString() + xmlRequest;
+            log.debug("Found request: " + requestFileName + ": " + xmlRequest);
+            writeTextToFile(requestFileName, xmlRequest);
+            
+
+            sb = new StringBuffer();
+            cType = logResponse.getContentType();
+            String xmlResponse = logResponse.getPayload();
+            String responseFileName = getResponseFileName(reqNo);
+            
+            if (logHeaders) {
+                logHeaders(logResponse, req.getProtocol(), sb);
+            }
+            
+            if (xmlResponse == null || xmlResponse.length() == 0) 
+                xmlResponse = "";
+
+            if (prettyPrint && cType != null) {
+                if (cType.startsWith("multipart")) {
+                    xmlResponse = processMultipart(cType, xmlResponse);
+                } else if (cType.contains("xml")) { 
+                    xmlResponse = prettyPrintXml(xmlResponse, indent);
+                } else if (cType.contains("json")) { 
+                    xmlResponse = prettyPrintJson(xmlResponse, indent);
+                }
+            }
+                
+            xmlResponse = sb.toString() + xmlResponse;
+            log.debug("Found response: " + responseFileName  + ": " + xmlResponse);
+            writeTextToFile(responseFileName, xmlResponse);
+        } else {            
+            chain.doFilter(req, resp);
+        }
+    }
+    
+    private void writeTextToFile(String filename, String content) {
+        PrintWriter pw = null;
+        FileWriter fw = null;
+        try {
+            fw = new FileWriter(filename);
+            pw = new PrintWriter(fw);
+
+            Scanner scanner = new Scanner(content);
+            while (scanner.hasNextLine()) {
+                String line = scanner.nextLine();
+                pw.println(line);
+            }
+
+            pw.flush();
+        } catch (IOException e) {
+            e.printStackTrace();
+        } finally {
+            if (pw != null)
+                pw.close();
+            if (fw != null)
+                try {
+                    fw.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+        }
+    }
+    
+    private static String prettyPrintXml(String input, int indent) {
+        try {
+            Source xmlInput = new StreamSource(new StringReader(input));
+            StringWriter stringWriter = new StringWriter();
+            StreamResult xmlOutput = new StreamResult(stringWriter);
+            TransformerFactory transformerFactory = TransformerFactory.newInstance();
+            transformerFactory.setAttribute("indent-number", indent);
+            Transformer transformer = transformerFactory.newTransformer(); 
+            transformer.setOutputProperty(OutputKeys.INDENT, "yes");
+            transformer.transform(xmlInput, xmlOutput);
+            return xmlOutput.getWriter().toString();
+        } catch (Exception e) {
+            throw new RuntimeException(e); // simple exception handling, please review it
+        }
+    }
+    
+    private static String prettyPrintJson(String input, int indent) {
+        JsonPrettyPrinter pp = new JsonPrettyPrinter(indent);
+        return pp.prettyPrint(input);
+    }
+    
+    private String processMultipart(String cType, String messageBody) throws IOException {
+        int beginIndex = cType.indexOf("boundary=\"") + 10;
+        int endIndex = cType.indexOf("\"", beginIndex);
+        if (endIndex < 0)
+            endIndex = cType.length();
+        String boundary = "--" + cType.substring(beginIndex, endIndex);
+        log.debug("Boundary = " + boundary);
+        BufferedReader in = new BufferedReader(new StringReader(messageBody));
+        StringBuffer out = new StringBuffer();
+        String line;
+        ByteArrayOutputStream xmlBodyBuffer = new ByteArrayOutputStream();
+        boolean boundaryFound;
+        
+        boolean inXmlOrJsonBody = false;
+        boolean inXmlOrJsonPart = false;
+        boolean isXml;
+        while ((line = in.readLine()) != null) {
+            if (inXmlOrJsonPart) {
+                if (line.startsWith("<?xml") || line.startsWith("{")) {
+                    inXmlOrJsonBody = true;
+                    isXml = line.startsWith("<?xml");
+                    xmlBodyBuffer.write(line.getBytes(), 0, line.length());                   
+                    while (inXmlOrJsonBody)  {
+                        line = in.readLine();
+                        boundaryFound = line.startsWith(boundary);
+                        if (boundaryFound) {
+                            log.debug("Leaving XML body: " + line);
+                            inXmlOrJsonBody = false;
+                            inXmlOrJsonPart = false;
+                            if (isXml)
+                                out.append(prettyPrintXml(xmlBodyBuffer.toString(), indent));
+                            else
+                                out.append(prettyPrintJson(xmlBodyBuffer.toString(), indent));
+                            out.append(line).append("\n");
+                        } else
+                            xmlBodyBuffer.write(line.getBytes(), 0, line.length());
+                    }               
+                } else { 
+                    log.debug("in XML part is: " + line);
+                    out.append(line).append("\n");
+                }
+
+            } else {
+                log.debug("not in XML part: " + line);
+                out.append(line).append("\n");
+                boundaryFound = line.startsWith(boundary);
+                if (boundaryFound) {
+                    log.debug("Boundardy found!");
+                    inXmlOrJsonPart = true;
+                }
+            }
+        }
+        in.close();        
+        log.debug("End parsing multipart.");
+        
+        return out.toString();
+    }
+
+    @SuppressWarnings("rawtypes")
+    private void logHeaders(LoggingRequestWrapper req, StringBuffer sb) {
+        sb.append(req.getMethod());
+        sb.append(" ");
+        sb.append(req.getRequestURI());
+        String queryString = req.getQueryString();
+        if (null != queryString && queryString.length() > 0) {
+            sb.append("?");
+            sb.append(queryString);
+        }
+        sb.append(" ");
+        sb.append(req.getProtocol());
+        sb.append("\n");
+        Enumeration headerNames = req.getHeaderNames();
+        while (headerNames.hasMoreElements()) {
+            String headerName = headerNames.nextElement().toString();
+            headerName = headerName.substring(0, 1).toUpperCase() + headerName.substring(1);
+            sb.append(headerName + ": ");
+            sb.append(req.getHeader(headerName));
+            sb.append("\n");
+        }
+        sb.append("\n");
+    }
+
+    private void logHeaders(LoggingResponseWrapper resp, String protocol, StringBuffer sb) {
+        sb.append(protocol);
+        sb.append(" ");
+        sb.append(String.valueOf(resp.getStatus()));
+        sb.append("\n");
+        Map<String, String> headers = resp.getHeaders();
+        for ( Map.Entry<String, String> header: headers.entrySet()) {
+            sb.append(header.getKey());
+            sb.append(": ");
+            sb.append(header.getValue());
+            sb.append("\n");            
+        }
+        sb.append("\n");
+    }
+
+    private String getRequestFileName(int no) {
+        return logDir + String.format("%05d-request.log", no);
+    }
+    
+    private String getResponseFileName(int no) {
+        return logDir + String.format("%05d-response.log", no);
+    }
+    
+    private static synchronized int getNextRequestNumber() {
+        return REQUEST_NO++;
+    }
+    
+    private class LoggingRequestWrapper extends HttpServletRequestWrapper {
+        
+        private LoggingInputStream is;
+   
+        public LoggingRequestWrapper(HttpServletRequest request) throws IOException {
+           super(request);
+        }
+   
+        @Override
+        public ServletInputStream getInputStream() throws IOException {
+            this.is = new LoggingInputStream(super.getInputStream());
+            return is;
+        }
+   
+        public String getPayload() {
+           return null == is ? "" : is.getPayload();
+        }
+     }
+   
+     private class LoggingInputStream extends ServletInputStream {
+   
+        private ByteArrayOutputStream baous = new ByteArrayOutputStream();
+        private ServletInputStream is;
+   
+        public LoggingInputStream(ServletInputStream is) {
+           super();
+           this.is = is;
+        }
+   
+        // Since we are not sure which method is used just overwrite all 4 of them:
+        @Override
+        public int read() throws IOException {
+           int ch = is.read();
+           if (ch != -1) {
+              baous.write(ch);
+           }
+           return ch;
+        }
+   
+        @Override
+        public int read(byte[] b) throws IOException {
+           int ch = is.read(b);
+           if (ch != -1) {
+              baous.write(b, 0, ch);
+           }
+           return ch;
+        }
+   
+        @Override
+        public int read(byte[] b, int o, int l) throws IOException {
+           int ch = is.read(b, o, l);
+           if (ch != -1) {
+              baous.write(b, o, ch);
+           }
+           return ch;
+        }
+        
+        @Override
+        public int readLine(byte[] b, int o, int l) throws IOException {
+           int ch = is.readLine(b, o, l);
+           if (ch != -1) {
+               baous.write(b, o, ch);
+           }
+           return ch;
+        }
+   
+        public String getPayload() {
+           return baous.toString();
+        }
+     }
+     
+     private class LoggingResponseWrapper extends HttpServletResponseWrapper {
+         
+         private LoggingOutputStream os;
+         private PrintWriter writer;
+         private int statusCode;
+         private Map<String, String> headers = new HashMap<String, String>();
+         String encoding;
+         
+         public LoggingResponseWrapper(HttpServletResponse response) throws IOException {
+            super(response);
+            this.os = new LoggingOutputStream(response.getOutputStream());
+         }
+    
+         @Override
+         public PrintWriter getWriter() {
+            try {
+                if (null == writer)
+                    writer = new PrintWriter(this.getOutputStream());
+                return writer;
+            } catch (IOException e) {
+                log.error("Failed to get PrintWriter in LoggingFilter: "+ e);
+                e.printStackTrace();
+                return null;             
+            }
+         }
+         
+         @Override
+         public ServletOutputStream getOutputStream() throws IOException {
+            return os;
+         }
+    
+         public String getPayload() {
+            return os.getPayload();
+         }
+         
+         @Override
+         public void addCookie(Cookie cookie) {
+             super.addCookie(cookie);
+             String value;
+             if (headers.containsKey("Cookie")) {
+                 value = headers.get("Cookie") + "; " + cookie.toString();
+             } else
+                 value = cookie.toString();
+             headers.put("Cookie", value);
+         }
+         
+         @Override
+         public void setContentType(String type) {
+             super.setContentType(type);
+             if (headers.containsKey("Content-Type")) {
+                 String cType = headers.get("Content-Type");
+                 int pos = cType.indexOf(";charset=");
+                 if (pos < 0 && encoding != null)
+                     type = cType + ";charset=" + encoding;
+                 else if (pos >= 0)
+                     encoding = null;                 
+             }
+             headers.put("Content-Type", type);             
+         }
+         
+         @Override         
+         public void setCharacterEncoding(java.lang.String charset) {
+             super.setCharacterEncoding(charset);
+             encoding = charset;
+             if (headers.containsKey("Content-Type")) {
+                 String cType = headers.get("Content-Type");
+                 int pos = cType.indexOf(";charset=");
+                 if (pos >=0)
+                     cType = cType.substring(0, pos) + ";charset=" + encoding;
+                 else
+                     cType = cType + ";charset=" + encoding;
+                 headers.put("Content-Type", cType);
+             }
+         }
+         
+         @Override
+         public void setContentLength(int len) {
+             super.setContentLength(len);
+             headers.put("Content-Length", String.valueOf(len));                          
+         }
+         
+         private String getDateString(long date) {
+             return FORMAT.format(new Date(date));             
+         }
+         
+         @Override
+         public void setDateHeader(String name, long date) {
+             super.setDateHeader(name, date);
+             headers.put(name, String.valueOf(getDateString(date)));
+         }
+         
+         @Override
+         public void addDateHeader(String name, long date) {
+             super.addDateHeader(name, date);
+             if (headers.containsKey(name)) {
+                 headers.put(name, headers.get(name) + "; " + getDateString(date));
+             } else {
+                 headers.put(name, String.valueOf(getDateString(date)));
+             }
+         }
+         
+         @Override
+         public void setHeader(String name, String value) {
+             super.setHeader(name, value);
+             headers.put(name, String.valueOf(value));
+         }
+
+         @Override
+         public void addHeader(String name, String value) {
+             super.addHeader(name, value);
+             if (headers.containsKey(name)) {
+                 headers.put(name, headers.get(name) + "; " + value);
+             } else {
+                 headers.put(name, String.valueOf(value));
+             }
+         }
+         
+         @Override
+         public void setIntHeader(String name, int value) {
+             super.setIntHeader(name, value);
+             headers.put(name, String.valueOf(value));
+         }
+         
+         @Override
+         public void addIntHeader(String name, int value) {
+             super.addIntHeader(name, value);
+             if (headers.containsKey(name)) {
+                 headers.put(name, headers.get(name) + "; " + String.valueOf(value));
+             } else {
+                 headers.put(name, String.valueOf(value));
+             }
+         }
+         
+         @Override
+         public void sendError(int sc) throws IOException {
+             statusCode = sc;
+             super.sendError(sc);
+         }
+
+         @Override
+         public void sendError(int sc, String msg) throws IOException {
+             statusCode = sc;
+             super.sendError(sc, msg);
+         }
+
+         @Override
+         public void sendRedirect(String location) throws IOException {
+             statusCode = 302;
+             super.sendRedirect(location);
+         }
+
+         @Override
+         public void setStatus(int sc) {
+             statusCode = sc;
+             super.setStatus(sc);
+         }
+
+         public int getStatus() {
+             return statusCode;
+         }
+
+         public Map<String, String> getHeaders() {
+             return headers;
+         }
+      }
+    
+      private class LoggingOutputStream extends ServletOutputStream {
+          private ByteArrayOutputStream baous = new ByteArrayOutputStream();
+          private ServletOutputStream os;
+     
+          public LoggingOutputStream(ServletOutputStream os) {
+             super();
+             this.os = os;
+          }
+          
+          public String getPayload() {
+              return new String(baous.toString());
+           }
+
+        @Override
+        public void write(byte[] b, int off, int len) {
+            try {
+                baous.write(b, off, len);
+                os.write(b, off, len);
+            } catch (IOException e) {
+                throw new RuntimeException(e);
+            }
+        }
+        
+        @Override
+        public
+        void write(byte[] b) {
+            try {
+                baous.write(b);
+                os.write(b);
+            } catch (IOException e) {
+                throw new RuntimeException(e);
+            }
+        }
+         
+        @Override
+        public void write(int ch) throws IOException {
+            baous.write(ch);
+            os.write(ch);
+        }
+      }
+}

Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/QueryObject.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/QueryObject.java?rev=1331791&r1=1331790&r2=1331791&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/QueryObject.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/QueryObject.java Sat Apr 28 16:33:35 2012
@@ -31,8 +31,8 @@ import org.antlr.runtime.tree.Tree;
 import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
 import org.apache.chemistry.opencmis.server.support.TypeManager;
 import org.apache.chemistry.opencmis.server.support.TypeValidator;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 
 /**
@@ -44,7 +44,7 @@ import org.apache.commons.logging.LogFac
  */
 public class QueryObject {
 
-    private static final Log LOG = LogFactory.getLog(QueryObject.class);
+    private static final Logger LOG = LoggerFactory.getLogger(QueryObject.class);
 
     // For error handling see:
     // http://www.antlr.org/pipermail/antlr-interest/2008-April/027600.html

Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/test/java/org/apache/chemistry/opencmis/server/support/query/AbstractParserTest.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/test/java/org/apache/chemistry/opencmis/server/support/query/AbstractParserTest.java?rev=1331791&r1=1331790&r2=1331791&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/test/java/org/apache/chemistry/opencmis/server/support/query/AbstractParserTest.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/test/java/org/apache/chemistry/opencmis/server/support/query/AbstractParserTest.java Sat Apr 28 16:33:35 2012
@@ -31,8 +31,8 @@ import org.antlr.runtime.Lexer;
 import org.antlr.runtime.TokenStream;
 import org.antlr.runtime.tree.CommonTree;
 import org.antlr.stringtemplate.StringTemplate;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  *  This class is clone of org.antlr.gunit.gUnitBase class adapted to Java style
@@ -42,7 +42,7 @@ import org.apache.commons.logging.LogFac
  */
 public class AbstractParserTest{
 
-    private static final Log log = LogFactory.getLog(AbstractParserTest.class);
+    private static final Logger log = LoggerFactory.getLogger(AbstractParserTest.class);
 
     protected String superGrammarName;
     Class<?> lexer;

Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/test/java/org/apache/chemistry/opencmis/server/support/query/TestParserExt.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/test/java/org/apache/chemistry/opencmis/server/support/query/TestParserExt.java?rev=1331791&r1=1331790&r2=1331791&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/test/java/org/apache/chemistry/opencmis/server/support/query/TestParserExt.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/test/java/org/apache/chemistry/opencmis/server/support/query/TestParserExt.java Sat Apr 28 16:33:35 2012
@@ -18,15 +18,15 @@
  */
 package org.apache.chemistry.opencmis.server.support.query;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 
 public class TestParserExt extends AbstractParserTest {
 
-    private static final Log log = LogFactory.getLog(TestParserStrict.class);
+    private static final Logger log = LoggerFactory.getLogger(TestParserStrict.class);
 
     @Before
     public void setUp() throws Exception {

Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/test/java/org/apache/chemistry/opencmis/server/support/query/TestParserStrict.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/test/java/org/apache/chemistry/opencmis/server/support/query/TestParserStrict.java?rev=1331791&r1=1331790&r2=1331791&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/test/java/org/apache/chemistry/opencmis/server/support/query/TestParserStrict.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/test/java/org/apache/chemistry/opencmis/server/support/query/TestParserStrict.java Sat Apr 28 16:33:35 2012
@@ -18,8 +18,8 @@
  */
 package org.apache.chemistry.opencmis.server.support.query;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -30,7 +30,7 @@ import org.junit.Test;
  */
 public class TestParserStrict extends AbstractParserTest{
 
-    private static final Log log = LogFactory.getLog(TestParserStrict.class);
+    private static final Logger log = LoggerFactory.getLogger(TestParserStrict.class);
 
     @Before
     public void setUp() {

Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/test/java/org/apache/chemistry/opencmis/server/support/query/TestParserTextSearch.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/test/java/org/apache/chemistry/opencmis/server/support/query/TestParserTextSearch.java?rev=1331791&r1=1331790&r2=1331791&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/test/java/org/apache/chemistry/opencmis/server/support/query/TestParserTextSearch.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/test/java/org/apache/chemistry/opencmis/server/support/query/TestParserTextSearch.java Sat Apr 28 16:33:35 2012
@@ -1,510 +1,510 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.server.support.query;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-
-public class TestParserTextSearch extends AbstractParserTest{
-
-    //private static final Log log = LogFactory.getLog(TestParserTextSearch.class);
-
-    @Before
-    public void setUp() {
-        super.setUp(TextSearchLexer.class, TextSearchParser.class, null);
-    }
-
-    @Override
-    @After
-    public void tearDown() {
-        super.tearDown();
-    }
-
-    // full text search parser
-    //    OR:
-    //    <<
-    //    OR
-    //    >> OK
-    @Test
-    public void testOR1() {
-      testLexerOk("OR", "OR");
-    }
-    
-    //
-    //    TEXT_SEARCH_WORD_LIT:
-    //    <<
-    //    abc
-    //    >> OK
-    @Test
-    public void testTEXT_SEARCH_WORD_LIT2() {
-      testLexerOk("TEXT_SEARCH_WORD_LIT", "abc");
-    }
-    
-    //
-    //    <<
-    //    "ab c"
-    //    >> FAIL
-    @Test
-    public void testTEXT_SEARCH_WORD_LIT3() {
-        testLexerFail("TEXT_SEARCH_WORD_LIT", "\"ab c\"");
-    }
-    
-    //
-    //    <<
-    //    "'abc'" 
-    //    >> FAIL
-    @Test
-    public void testTEXT_SEARCH_WORD_LIT4() {
-        testLexerFail("TEXT_SEARCH_WORD_LIT", "\"\'abc\'\"");
-    }
-    
-    //
-    //    <<
-    //    "ab\'c"
-    //    >> OK
-    @Test
-    public void testTEXT_SEARCH_WORD_LIT5() {
-        testLexerOk("TEXT_SEARCH_WORD_LIT", "\"ab\\'c\"");
-    }
-    
-    //
-    //    <<
-    //    "ab\\c"
-    //    >> OK
-    @Test
-    public void testTEXT_SEARCH_WORD_LIT6() {
-      testLexerOk("TEXT_SEARCH_WORD_LIT", "\"ab\\\\c\"");
-    }
-    
-    //
-    //    /*
-    //    <<
-    //    ab''c
-    //    >> OK
-    //    */
-    /*
-     * double quotes not supported in text search
-     */
-    /*
-    @Test
-    public void testTEXT_SEARCH_WORD_LIT7() {
-      testLexerOk("TEXT_SEARCH_WORD_LIT", "ab''c");
-    }
-    */
-    
-    //
-    //    phrase:
-    //
-    //    <<
-    //    \'abc\'
-    //    >> FAIL
-    @Test
-    public void testPhrase1() {
-        testParserFail("phrase", "\\'abc\\'");
-    }
-    
-    //
-    //    <<
-    //    "abc"
-    //    >> FAIL
-    @Test
-    public void testPhrase2() {
-        testParserFail("phrase", "\"abc\"");
-    }
-    
-    //
-    //    <<
-    //    'abc'
-    //    >> OK
-    @Test
-    public void testPhrase3() {
-      testParserOk("phrase", "'abc'");
-    }
-    
-    //
-    //    <<
-    //    'abc def'
-    //    >> OK
-    @Test
-    public void testPhrase4() {
-      testParserOk("phrase", "'abc def'");
-    }
-    
-    //
-    //    <<
-    //    'ab\-c'
-    //    >> OK
-    @Test
-    public void testPhrase5() {
-      testParserOk("phrase", "'ab\\-c'");
-    }
-    
-    //
-    //    <<
-    //    'ab\\c'
-    //    >> OK
-    @Test
-    public void testPhrase6() {
-      testParserOk("phrase", "'ab\\\\c'");
-    }
-    
-    //
-    //    <<
-    //    'ab\c'
-    //    >> FAIL
-    @Test
-    public void testPhrase7() {
-        testParserFail("phrase", "'ab\\c'");
-    }
-    
-    //
-    //    <<
-    //    'ab\\\c'
-    //    >> FAIL
-    @Test
-    public void testPhrase8() {
-        testParserFail("phrase", "'ab\\\\\\c'");
-    }
-    
-    //
-    //    <<
-    //    'ab\'c'
-    //    >> OK
-    @Test
-    public void testPhrase9() {
-      testParserOk("phrase", "'ab\\'c'");
-    }
-    
-    //
-    //    <<
-    //    'abc def'
-    //    >> OK
-    @Test
-    public void testPhrase10() {
-      testParserOk("phrase", "'abc def'");
-    }
-    
-    //
-    //    <<
-    //    '\'abc\''
-    //    >> OK
-    @Test
-    public void testPhrase11() {
-      testParserOk("phrase", "'\\'abc\\''");
-    }
-    
-    //
-    //    <<
-    //    'abc AND def'
-    //    >> OK
-    @Test
-    public void testPhrase12() {
-      testParserOk("phrase", "'abc AND def'");
-    }
-    
-    //
-    //    << 
-    //    'AND'
-    //    >> OK
-    @Test
-    public void testPhrase13() {
-      testParserOk("phrase", "'AND'");
-    }
-    
-    //
-    //    word:
-    //
-    //    << 
-    //    abc
-    //    >> OK
-    @Test
-    public void testWord1() {
-      testParserOk("word", "abc");
-    }
-    
-    //
-    //    << 
-    //    312#+!&abc
-    //    >> OK
-    @Test
-    public void testWord2() {
-      testParserOk("word", "312#+!&abc");
-    }
-    
-    //
-    //    << 
-    //    \'abc\'
-    //    >> OK
-    @Test
-    public void testWord3() {
-      testParserOk("word", "\\'abc\\'");
-    }
-    
-    //
-    //    << 
-    //    'abc'
-    //    >> FAIL
-    @Test
-    public void testWord4() {
-        testParserFail("word", "'abc'");
-    }    
-    
-    //
-    //    <<
-    //    ab\-c
-    //    >> OK
-    @Test
-    public void testWord6() {
-        testParserOk("word", "ab\\-c");
-    }
-    
-    //
-    //    <<
-    //    ab\\c
-    //    >> OK
-    @Test
-    public void testWord7() {
-        testParserOk("word", "ab\\\\c");
-    }
-    
-    //
-    //    <<
-    //    ab\'c
-    //    >> OK
-    @Test
-    public void testWord8() {
-        testParserOk("word", "ab\\'c");
-    }
-    
-    //
-    //    <<
-    //    OR
-    //    >> FAIL
-    @Test
-    public void testWord9() {
-        testParserFail("word", "OR");
-    }
-    
-    //
-    //    <<
-    //    AND
-    //    >> FAIL
-    @Test
-    public void testWord10() {
-        testParserFail("word", "AND");
-    }
-    
-    //
-    //
-    //    term:
-    //
-    //    <<
-    //    -abc
-    //    >> OK
-    @Test
-    public void testWord11() {
-      testParserOk("term", "-abc");
-    }
-    
-    //
-    //    <<
-    //    abc
-    //    >> OK
-    @Test
-    public void testWord12() {
-      testParserOk("term", "abc");
-    }
-    
-    //
-    //    <<
-    //    'abc def'
-    //    >> OK
-    @Test
-    public void testWord13() {
-      testParserOk("term", "'abc def'");
-    }
-    
-    //
-    //    <<
-    //    -'abc def'
-    //    >> OK
-    @Test
-    public void testWord14() {
-      testParserOk("term", "-'abc def'");
-    }
-    
-    //
-    //    conjunct:
-    //
-    //    <<
-    //    abc def
-    //    >> OK
-    @Test
-    public void testConjunct1() {
-      testParserOk("conjunct", "abc def");
-    }
-    
-    //
-    //    <<
-    //    abc AND def
-    //    >> OK
-    @Test
-    public void testConjunct2() {
-      testParserOk("conjunct", "abc AND def");
-    }
-    
-    //
-    //    <<
-    //    abc AND def ghi John\'s
-    //    >> OK
-    @Test
-    public void testConjunct3() {
-      testParserOk("conjunct", "abc AND def ghi John\\'s");
-    }
-    
-    //
-    //    text_search_expression:
-    //
-    //    <<
-    //    cat mouse dog
-    //    >> OK
-    @Test
-    public void testTextSearchExpression1() {
-      testParserOk("text_search_expression", "cat mouse dog");
-    }
-    
-    //
-    //    <<
-    //    cat AND mouse AND dog
-    //    >> OK
-    @Test
-    public void testTextSearchExpression2() {
-      testParserOk("text_search_expression", "cat AND mouse AND dog");
-    }
-    
-    //
-    //    <<
-    //    cat OR mouse OR dog
-    //    >> OK
-    @Test
-    public void testTextSearchExpression3() {
-      testParserOk("text_search_expression", "cat OR mouse OR dog");
-    }
-    
-    //
-    //    <<
-    //    cat mouse OR dog
-    //    >> OK
-    @Test
-    public void testTextSearchExpression4() {
-      testParserOk("text_search_expression", "cat mouse OR dog");
-    }
-    
-    //
-    //    <<
-    //    cat AND mouse OR dog AND John\'s
-    //    >> OK
-    @Test
-    public void testTextSearchExpression5() {
-      testParserOk("text_search_expression", "cat AND mouse OR dog AND John\\'s");
-    }
-    
-    //
-    //    <<
-    //    'cat AND mouse'
-    //    >> OK
-    @Test
-    public void testTextSearchExpression6() {
-      testParserOk("text_search_expression", "'cat AND mouse'");
-    }
-    
-    //
-    //    <<
-    //    'text search expression'
-    //    >> OK
-    @Test
-    public void testTextSearchExpression7() {
-      testParserOk("text_search_expression", "'text search expression'");
-    }
-    
-    //
-    //    <<
-    //    'John\'s presentation'
-    //    >> OK
-    @Test
-    public void testTextSearchExpression8() {
-      testParserOk("text_search_expression", "'John\\'s presentation'");
-    }
-    
-    //
-    //    <<
-    //    'John\\'s presentation'
-    //    >> FAIL
-    @Test
-    public void testTextSearchExpression9() {
-        testParserFail("text_search_expression", "'John\\\\'s presentation'");
-    }
-    
-    //
-    //    <<
-    //    A\-1
-    //    >> OK
-    @Test
-    public void testTextSearchExpression10() {
-      testParserOk("text_search_expression", "A\\-1");
-    }
-    
-    //
-    //    <<
-    //    'c:\\My Documents'
-    //    >> OK
-    @Test
-    public void testTextSearchExpression11() {
-      testParserOk("text_search_expression", "'c:\\\\My Documents'");
-    }
-    
-    //
-    //    <<
-    //    'c:\\\My Documents'
-    //    >> FAIL
-    @Test
-    public void testTextSearchExpression13() {
-        testParserFail("text_search_expression", "'c:\\\\\\My Documents'");
-    }
-    
-    //
-    //    <<
-    //    'c:\My Documents'
-    //    >> FAIL
-    @Test
-    public void testTextSearchExpression14() {
-      testParserFail("text_search_expression", "'c:\\My Documents'");
-    }
-    
-    //
-    //    <<
-    //    c:\My Documents
-    //    >> FAIL
-    @Test
-    public void testTextSearchExpression15() {
-      testParserFail("text_search_expression", "c:\\My Documents");
-    }
-    
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.chemistry.opencmis.server.support.query;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+public class TestParserTextSearch extends AbstractParserTest{
+
+    //private static final Logger log = LoggerFactory.getLogger(TestParserTextSearch.class);
+
+    @Before
+    public void setUp() {
+        super.setUp(TextSearchLexer.class, TextSearchParser.class, null);
+    }
+
+    @Override
+    @After
+    public void tearDown() {
+        super.tearDown();
+    }
+
+    // full text search parser
+    //    OR:
+    //    <<
+    //    OR
+    //    >> OK
+    @Test
+    public void testOR1() {
+      testLexerOk("OR", "OR");
+    }
+    
+    //
+    //    TEXT_SEARCH_WORD_LIT:
+    //    <<
+    //    abc
+    //    >> OK
+    @Test
+    public void testTEXT_SEARCH_WORD_LIT2() {
+      testLexerOk("TEXT_SEARCH_WORD_LIT", "abc");
+    }
+    
+    //
+    //    <<
+    //    "ab c"
+    //    >> FAIL
+    @Test
+    public void testTEXT_SEARCH_WORD_LIT3() {
+        testLexerFail("TEXT_SEARCH_WORD_LIT", "\"ab c\"");
+    }
+    
+    //
+    //    <<
+    //    "'abc'" 
+    //    >> FAIL
+    @Test
+    public void testTEXT_SEARCH_WORD_LIT4() {
+        testLexerFail("TEXT_SEARCH_WORD_LIT", "\"\'abc\'\"");
+    }
+    
+    //
+    //    <<
+    //    "ab\'c"
+    //    >> OK
+    @Test
+    public void testTEXT_SEARCH_WORD_LIT5() {
+        testLexerOk("TEXT_SEARCH_WORD_LIT", "\"ab\\'c\"");
+    }
+    
+    //
+    //    <<
+    //    "ab\\c"
+    //    >> OK
+    @Test
+    public void testTEXT_SEARCH_WORD_LIT6() {
+      testLexerOk("TEXT_SEARCH_WORD_LIT", "\"ab\\\\c\"");
+    }
+    
+    //
+    //    /*
+    //    <<
+    //    ab''c
+    //    >> OK
+    //    */
+    /*
+     * double quotes not supported in text search
+     */
+    /*
+    @Test
+    public void testTEXT_SEARCH_WORD_LIT7() {
+      testLexerOk("TEXT_SEARCH_WORD_LIT", "ab''c");
+    }
+    */
+    
+    //
+    //    phrase:
+    //
+    //    <<
+    //    \'abc\'
+    //    >> FAIL
+    @Test
+    public void testPhrase1() {
+        testParserFail("phrase", "\\'abc\\'");
+    }
+    
+    //
+    //    <<
+    //    "abc"
+    //    >> FAIL
+    @Test
+    public void testPhrase2() {
+        testParserFail("phrase", "\"abc\"");
+    }
+    
+    //
+    //    <<
+    //    'abc'
+    //    >> OK
+    @Test
+    public void testPhrase3() {
+      testParserOk("phrase", "'abc'");
+    }
+    
+    //
+    //    <<
+    //    'abc def'
+    //    >> OK
+    @Test
+    public void testPhrase4() {
+      testParserOk("phrase", "'abc def'");
+    }
+    
+    //
+    //    <<
+    //    'ab\-c'
+    //    >> OK
+    @Test
+    public void testPhrase5() {
+      testParserOk("phrase", "'ab\\-c'");
+    }
+    
+    //
+    //    <<
+    //    'ab\\c'
+    //    >> OK
+    @Test
+    public void testPhrase6() {
+      testParserOk("phrase", "'ab\\\\c'");
+    }
+    
+    //
+    //    <<
+    //    'ab\c'
+    //    >> FAIL
+    @Test
+    public void testPhrase7() {
+        testParserFail("phrase", "'ab\\c'");
+    }
+    
+    //
+    //    <<
+    //    'ab\\\c'
+    //    >> FAIL
+    @Test
+    public void testPhrase8() {
+        testParserFail("phrase", "'ab\\\\\\c'");
+    }
+    
+    //
+    //    <<
+    //    'ab\'c'
+    //    >> OK
+    @Test
+    public void testPhrase9() {
+      testParserOk("phrase", "'ab\\'c'");
+    }
+    
+    //
+    //    <<
+    //    'abc def'
+    //    >> OK
+    @Test
+    public void testPhrase10() {
+      testParserOk("phrase", "'abc def'");
+    }
+    
+    //
+    //    <<
+    //    '\'abc\''
+    //    >> OK
+    @Test
+    public void testPhrase11() {
+      testParserOk("phrase", "'\\'abc\\''");
+    }
+    
+    //
+    //    <<
+    //    'abc AND def'
+    //    >> OK
+    @Test
+    public void testPhrase12() {
+      testParserOk("phrase", "'abc AND def'");
+    }
+    
+    //
+    //    << 
+    //    'AND'
+    //    >> OK
+    @Test
+    public void testPhrase13() {
+      testParserOk("phrase", "'AND'");
+    }
+    
+    //
+    //    word:
+    //
+    //    << 
+    //    abc
+    //    >> OK
+    @Test
+    public void testWord1() {
+      testParserOk("word", "abc");
+    }
+    
+    //
+    //    << 
+    //    312#+!&abc
+    //    >> OK
+    @Test
+    public void testWord2() {
+      testParserOk("word", "312#+!&abc");
+    }
+    
+    //
+    //    << 
+    //    \'abc\'
+    //    >> OK
+    @Test
+    public void testWord3() {
+      testParserOk("word", "\\'abc\\'");
+    }
+    
+    //
+    //    << 
+    //    'abc'
+    //    >> FAIL
+    @Test
+    public void testWord4() {
+        testParserFail("word", "'abc'");
+    }    
+    
+    //
+    //    <<
+    //    ab\-c
+    //    >> OK
+    @Test
+    public void testWord6() {
+        testParserOk("word", "ab\\-c");
+    }
+    
+    //
+    //    <<
+    //    ab\\c
+    //    >> OK
+    @Test
+    public void testWord7() {
+        testParserOk("word", "ab\\\\c");
+    }
+    
+    //
+    //    <<
+    //    ab\'c
+    //    >> OK
+    @Test
+    public void testWord8() {
+        testParserOk("word", "ab\\'c");
+    }
+    
+    //
+    //    <<
+    //    OR
+    //    >> FAIL
+    @Test
+    public void testWord9() {
+        testParserFail("word", "OR");
+    }
+    
+    //
+    //    <<
+    //    AND
+    //    >> FAIL
+    @Test
+    public void testWord10() {
+        testParserFail("word", "AND");
+    }
+    
+    //
+    //
+    //    term:
+    //
+    //    <<
+    //    -abc
+    //    >> OK
+    @Test
+    public void testWord11() {
+      testParserOk("term", "-abc");
+    }
+    
+    //
+    //    <<
+    //    abc
+    //    >> OK
+    @Test
+    public void testWord12() {
+      testParserOk("term", "abc");
+    }
+    
+    //
+    //    <<
+    //    'abc def'
+    //    >> OK
+    @Test
+    public void testWord13() {
+      testParserOk("term", "'abc def'");
+    }
+    
+    //
+    //    <<
+    //    -'abc def'
+    //    >> OK
+    @Test
+    public void testWord14() {
+      testParserOk("term", "-'abc def'");
+    }
+    
+    //
+    //    conjunct:
+    //
+    //    <<
+    //    abc def
+    //    >> OK
+    @Test
+    public void testConjunct1() {
+      testParserOk("conjunct", "abc def");
+    }
+    
+    //
+    //    <<
+    //    abc AND def
+    //    >> OK
+    @Test
+    public void testConjunct2() {
+      testParserOk("conjunct", "abc AND def");
+    }
+    
+    //
+    //    <<
+    //    abc AND def ghi John\'s
+    //    >> OK
+    @Test
+    public void testConjunct3() {
+      testParserOk("conjunct", "abc AND def ghi John\\'s");
+    }
+    
+    //
+    //    text_search_expression:
+    //
+    //    <<
+    //    cat mouse dog
+    //    >> OK
+    @Test
+    public void testTextSearchExpression1() {
+      testParserOk("text_search_expression", "cat mouse dog");
+    }
+    
+    //
+    //    <<
+    //    cat AND mouse AND dog
+    //    >> OK
+    @Test
+    public void testTextSearchExpression2() {
+      testParserOk("text_search_expression", "cat AND mouse AND dog");
+    }
+    
+    //
+    //    <<
+    //    cat OR mouse OR dog
+    //    >> OK
+    @Test
+    public void testTextSearchExpression3() {
+      testParserOk("text_search_expression", "cat OR mouse OR dog");
+    }
+    
+    //
+    //    <<
+    //    cat mouse OR dog
+    //    >> OK
+    @Test
+    public void testTextSearchExpression4() {
+      testParserOk("text_search_expression", "cat mouse OR dog");
+    }
+    
+    //
+    //    <<
+    //    cat AND mouse OR dog AND John\'s
+    //    >> OK
+    @Test
+    public void testTextSearchExpression5() {
+      testParserOk("text_search_expression", "cat AND mouse OR dog AND John\\'s");
+    }
+    
+    //
+    //    <<
+    //    'cat AND mouse'
+    //    >> OK
+    @Test
+    public void testTextSearchExpression6() {
+      testParserOk("text_search_expression", "'cat AND mouse'");
+    }
+    
+    //
+    //    <<
+    //    'text search expression'
+    //    >> OK
+    @Test
+    public void testTextSearchExpression7() {
+      testParserOk("text_search_expression", "'text search expression'");
+    }
+    
+    //
+    //    <<
+    //    'John\'s presentation'
+    //    >> OK
+    @Test
+    public void testTextSearchExpression8() {
+      testParserOk("text_search_expression", "'John\\'s presentation'");
+    }
+    
+    //
+    //    <<
+    //    'John\\'s presentation'
+    //    >> FAIL
+    @Test
+    public void testTextSearchExpression9() {
+        testParserFail("text_search_expression", "'John\\\\'s presentation'");
+    }
+    
+    //
+    //    <<
+    //    A\-1
+    //    >> OK
+    @Test
+    public void testTextSearchExpression10() {
+      testParserOk("text_search_expression", "A\\-1");
+    }
+    
+    //
+    //    <<
+    //    'c:\\My Documents'
+    //    >> OK
+    @Test
+    public void testTextSearchExpression11() {
+      testParserOk("text_search_expression", "'c:\\\\My Documents'");
+    }
+    
+    //
+    //    <<
+    //    'c:\\\My Documents'
+    //    >> FAIL
+    @Test
+    public void testTextSearchExpression13() {
+        testParserFail("text_search_expression", "'c:\\\\\\My Documents'");
+    }
+    
+    //
+    //    <<
+    //    'c:\My Documents'
+    //    >> FAIL
+    @Test
+    public void testTextSearchExpression14() {
+      testParserFail("text_search_expression", "'c:\\My Documents'");
+    }
+    
+    //
+    //    <<
+    //    c:\My Documents
+    //    >> FAIL
+    @Test
+    public void testTextSearchExpression15() {
+      testParserFail("text_search_expression", "c:\\My Documents");
+    }
+    
+}

Modified: chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-browser/src/main/java/org/apache/chemistry/opencmis/browser/BrowseServlet.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-browser/src/main/java/org/apache/chemistry/opencmis/browser/BrowseServlet.java?rev=1331791&r1=1331790&r2=1331791&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-browser/src/main/java/org/apache/chemistry/opencmis/browser/BrowseServlet.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-browser/src/main/java/org/apache/chemistry/opencmis/browser/BrowseServlet.java Sat Apr 28 16:33:35 2012
@@ -46,8 +46,8 @@ import javax.xml.transform.dom.DOMSource
 import javax.xml.transform.stream.StreamResult;
 import javax.xml.transform.stream.StreamSource;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.w3c.dom.Document;
 
 /**
@@ -57,7 +57,7 @@ public class BrowseServlet extends HttpS
 
     private static final long serialVersionUID = 1L;
 
-    private static final Log log = LogFactory.getLog(BrowseServlet.class);
+    private static final Logger log = LoggerFactory.getLogger(BrowseServlet.class);
 
     private static final String CONTEXT_PREFIX = "{ctx}";
     private static final String PARAM_URL = "url";