This is an automated email from the ASF dual-hosted git repository.

lukaszlenart pushed a commit to branch WW-5190-match-action-proxy
in repository https://gitbox.apache.org/repos/asf/struts.git

commit 06290cef91779764c35f133d00632cd138cd25c4
Author: Lukasz Lenart <lukaszlen...@apache.org>
AuthorDate: Sat Jun 18 07:26:13 2022 +0200

    Fixes showing configuration of an action in Showcase app
---
 .../struts2/showcase/source/ViewSourceAction.java  | 385 ++++++++++-----------
 .../src/main/webapp/WEB-INF/viewSource.jsp         |  75 ++--
 2 files changed, 222 insertions(+), 238 deletions(-)

diff --git 
a/apps/showcase/src/main/java/org/apache/struts2/showcase/source/ViewSourceAction.java
 
b/apps/showcase/src/main/java/org/apache/struts2/showcase/source/ViewSourceAction.java
index 541adccff..ce5b5b949 100644
--- 
a/apps/showcase/src/main/java/org/apache/struts2/showcase/source/ViewSourceAction.java
+++ 
b/apps/showcase/src/main/java/org/apache/struts2/showcase/source/ViewSourceAction.java
@@ -22,16 +22,13 @@ package org.apache.struts2.showcase.source;
 
 import com.opensymphony.xwork2.ActionSupport;
 import com.opensymphony.xwork2.util.ClassLoaderUtil;
-import org.apache.struts2.ServletActionContext;
 import org.apache.struts2.action.ServletContextAware;
 
 import javax.servlet.ServletContext;
 import java.io.BufferedReader;
-import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
-import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.ArrayList;
 import java.util.List;
@@ -42,202 +39,192 @@ import java.util.List;
  */
 public class ViewSourceAction extends ActionSupport implements 
ServletContextAware {
 
-       private String page;
-       private String className;
-       private String config;
-
-       private List pageLines;
-       private List classLines;
-       private List configLines;
-
-       private int configLine;
-       private int padding = 10;
-
-       private ServletContext servletContext;
-
-       public String execute() throws MalformedURLException, IOException {
-
-               if (page != null) {
-
-                       InputStream in = 
ClassLoaderUtil.getResourceAsStream(page.substring(page.indexOf("//") + 1), 
getClass());
-                       page = page.replace("//", "/");
-
-                       if (in == null) {
-                               in = servletContext.getResourceAsStream(page);
-                               while (in == null && page.indexOf('/', 1) > 0) {
-                                       page = page.substring(page.indexOf('/', 
1));
-                                       in = 
servletContext.getResourceAsStream(page);
-                               }
-                       }
-                       pageLines = read(in, -1);
-
-                       if (in != null) {
-                               in.close();
-                       }
-               }
-
-               if (className != null) {
-                       className = "/" + className.replace('.', '/') + ".java";
-                       InputStream in = 
getClass().getResourceAsStream(className);
-                       if (in == null) {
-                               in = 
servletContext.getResourceAsStream("/WEB-INF/src" + className);
-                       }
-                       classLines = read(in, -1);
-
-                       if (in != null) {
-                               in.close();
-                       }
-               }
-
-                final String rootPath = 
ServletActionContext.getServletContext().getRealPath("/");
-                final String rootPathUnix = (rootPath != null ? 
rootPath.replace(File.separator, "/") : null);  // Make path Unix-like for 
comparison (e.g. on Windows)
-                final String rootPathFileURI = "file://" + rootPathUnix;
-                final String collapsedRootPathFileURI = 
rootPathFileURI.replace("//", "/");        // Config string may have been 
transformed
-                final String rootPathWarFileURI = "war:file://" + rootPathUnix;
-                final String collapsedRootPathWarFileURI = 
rootPathWarFileURI.replace("//", "/");  // Config string may have been 
transformed
-
-               if (config != null && (rootPath == null || 
config.startsWith(rootPath) ||
-                    config.startsWith(rootPathFileURI) || 
config.startsWith(collapsedRootPathFileURI) ||
-                    config.startsWith(rootPathWarFileURI) || 
config.startsWith(collapsedRootPathWarFileURI))) {
-                       int pos = config.lastIndexOf(':');
-                       configLine = Integer.parseInt(config.substring(pos + 
1));
-                       config = config.substring(0, pos).replace("//", "/");
-                       configLines = read(new URL(config).openStream(), 
configLine);
-               }
-               return SUCCESS;
-       }
-
-
-       /**
-        * @param className the className to set
-        */
-       public void setClassName(String className) {
-               if (className != null && className.trim().length() > 0) {
-                       this.className = className;
-               }
-       }
-
-       /**
-        * @param config the config to set
-        */
-       public void setConfig(String config) {
-               if (config != null && config.trim().length() > 0) {
-                       this.config = config;
-               }
-       }
-
-       /**
-        * @param page the page to set
-        */
-       public void setPage(String page) {
-               if (page != null && page.trim().length() > 0) {
-                       this.page = page;
-               }
-       }
-
-       /**
-        * @param padding the padding to set
-        */
-       public void setPadding(int padding) {
-               this.padding = padding;
-       }
-
-
-       /**
-        * @return the classLines
-        */
-       public List getClassLines() {
-               return classLines;
-       }
-
-       /**
-        * @return the configLines
-        */
-       public List getConfigLines() {
-               return configLines;
-       }
-
-       /**
-        * @return the pageLines
-        */
-       public List getPageLines() {
-               return pageLines;
-       }
-
-       /**
-        * @return the className
-        */
-       public String getClassName() {
-               return className;
-       }
-
-       /**
-        * @return the config
-        */
-       public String getConfig() {
-               return config;
-       }
-
-       /**
-        * @return the page
-        */
-       public String getPage() {
-               return page;
-       }
-
-       /**
-        * @return the configLine
-        */
-       public int getConfigLine() {
-               return configLine;
-       }
-
-       /**
-        * @return the padding
-        */
-       public int getPadding() {
-               return padding;
-       }
-
-       /**
-        * Reads in a stream, optionally only including the target line number
-        * and its padding
-        *
-        * @param in               The input stream
-        * @param targetLineNumber The target line number, negative to read all
-        * @return A list of lines
-        */
-       private List read(InputStream in, int targetLineNumber) {
-               List snippet = null;
-               if (in != null) {
-                       snippet = new ArrayList();
-                       int startLine = 0;
-                       int endLine = Integer.MAX_VALUE;
-                       if (targetLineNumber > 0) {
-                               startLine = targetLineNumber - padding;
-                               endLine = targetLineNumber + padding;
-                       }
-                       try {
-                               BufferedReader reader = new BufferedReader(new 
InputStreamReader(in));
-
-                               int lineno = 0;
-                               String line;
-                               while ((line = reader.readLine()) != null) {
-                                       lineno++;
-                                       if (lineno >= startLine && lineno <= 
endLine) {
-                                               snippet.add(line);
-                                       }
-                               }
-                       } catch (Exception ex) {
-                               // ignoring as snippet not available isn't a 
big deal
-                       }
-               }
-               return snippet;
-       }
-
-       public void withServletContext(ServletContext arg0) {
-               this.servletContext = arg0;
-       }
+    private String page;
+    private String className;
+    private String config;
+
+    private List<String> pageLines;
+    private List<String> classLines;
+    private List<String> configLines;
+
+    private int configLine;
+    private int padding = 10;
+
+    private ServletContext servletContext;
+
+    public String execute() throws IOException {
+
+        if (page != null) {
+
+            InputStream in = 
ClassLoaderUtil.getResourceAsStream(page.substring(page.indexOf("//") + 1), 
getClass());
+            page = page.replace("//", "/");
+
+            if (in == null) {
+                in = servletContext.getResourceAsStream(page);
+                while (in == null && page.indexOf('/', 1) > 0) {
+                    page = page.substring(page.indexOf('/', 1));
+                    in = servletContext.getResourceAsStream(page);
+                }
+            }
+            pageLines = read(in, -1);
+
+            if (in != null) {
+                in.close();
+            }
+        }
+
+        if (className != null) {
+            className = "/" + className.replace('.', '/') + ".java";
+            InputStream in = getClass().getResourceAsStream(className);
+            if (in == null) {
+                in = servletContext.getResourceAsStream("/WEB-INF/src/java" + 
className);
+            }
+            classLines = read(in, -1);
+
+            if (in != null) {
+                in.close();
+            }
+        }
+
+        if (config != null && config.startsWith("file:/")) {
+            int pos = config.lastIndexOf(':');
+            configLine = Integer.parseInt(config.substring(pos + 1));
+            configLines = read(new URL(config.substring(0, pos)).openStream(), 
configLine);
+        }
+        return SUCCESS;
+    }
+
+
+    /**
+     * @param className the className to set
+     */
+    public void setClassName(String className) {
+        if (className != null && className.trim().length() > 0) {
+            this.className = className;
+        }
+    }
+
+    /**
+     * @param config the config to set
+     */
+    public void setConfig(String config) {
+        if (config != null && config.trim().length() > 0) {
+            this.config = config;
+        }
+    }
+
+    /**
+     * @param page the page to set
+     */
+    public void setPage(String page) {
+        if (page != null && page.trim().length() > 0) {
+            this.page = page;
+        }
+    }
+
+    /**
+     * @param padding the padding to set
+     */
+    public void setPadding(int padding) {
+        this.padding = padding;
+    }
+
+
+    /**
+     * @return the classLines
+     */
+    public List<String> getClassLines() {
+        return classLines;
+    }
+
+    /**
+     * @return the configLines
+     */
+    public List<String> getConfigLines() {
+        return configLines;
+    }
+
+    /**
+     * @return the pageLines
+     */
+    public List<String> getPageLines() {
+        return pageLines;
+    }
+
+    /**
+     * @return the className
+     */
+    public String getClassName() {
+        return className;
+    }
+
+    /**
+     * @return the config
+     */
+    public String getConfig() {
+        return config;
+    }
+
+    /**
+     * @return the page
+     */
+    public String getPage() {
+        return page;
+    }
+
+    /**
+     * @return the configLine
+     */
+    public int getConfigLine() {
+        return configLine;
+    }
+
+    /**
+     * @return the padding
+     */
+    public int getPadding() {
+        return padding;
+    }
+
+    /**
+     * Reads in a stream, optionally only including the target line number
+     * and its padding
+     *
+     * @param in               The input stream
+     * @param targetLineNumber The target line number, negative to read all
+     * @return A list of lines
+     */
+    private List<String> read(InputStream in, int targetLineNumber) {
+        List<String> snippet = null;
+        if (in != null) {
+            snippet = new ArrayList<>();
+            int startLine = 0;
+            int endLine = Integer.MAX_VALUE;
+            if (targetLineNumber > 0) {
+                startLine = targetLineNumber - padding;
+                endLine = targetLineNumber + padding;
+            }
+            try {
+                BufferedReader reader = new BufferedReader(new 
InputStreamReader(in));
+
+                int lineno = 0;
+                String line;
+                while ((line = reader.readLine()) != null) {
+                    lineno++;
+                    if (lineno >= startLine && lineno <= endLine) {
+                        snippet.add(line);
+                    }
+                }
+            } catch (Exception ex) {
+                // ignoring as snippet not available isn't a big deal
+            }
+        }
+        return snippet;
+    }
+
+    public void withServletContext(ServletContext arg0) {
+        this.servletContext = arg0;
+    }
 
 
 }
diff --git a/apps/showcase/src/main/webapp/WEB-INF/viewSource.jsp 
b/apps/showcase/src/main/webapp/WEB-INF/viewSource.jsp
index 1255d2a3b..61bb6fc87 100644
--- a/apps/showcase/src/main/webapp/WEB-INF/viewSource.jsp
+++ b/apps/showcase/src/main/webapp/WEB-INF/viewSource.jsp
@@ -1,19 +1,19 @@
 <!--
 /*
 * Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
+* or more contributor license agreements. See the NOTICE file
 * distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
+* 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
+* with the License. You may obtain a copy of the License at
 *
-*  http://www.apache.org/licenses/LICENSE-2.0
+* 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
+* KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
@@ -26,49 +26,46 @@
 <body>
 
 <div class="container-fluid">
-       <div class="row">
-               <div class="col-md-12">
-                       <h1>View Sources</h1>
+    <div class="row">
+        <div class="col-md-12">
+            <h1>View Sources</h1>
 
-                       <ul class="nav nav-tabs" id="codeTab">
-                               <li class="active"><a href="#page">Page</a></li>
-                               <li><a href="#config">Configuration</a></li>
-                               <li><a href="#java">Java Action</a></li>
-                       </ul>
+            <ul class="nav nav-tabs" id="codeTab">
+                <li class="active"><a href="#page">Page</a></li>
+                <li><a href="#config">Configuration</a></li>
+                <li><a href="#java">Java Action</a></li>
+            </ul>
 
-                       <div class="tab-content">
-                               <div class="tab-pane active" id="page">
-                                       <h3><s:property default="Unknown page" 
value="page"/></h3>
-                                       <pre class="prettyprint lang-html 
linenums">
-                                               <s:iterator value="pageLines" 
status="row">
+            <div class="tab-content">
+                <div class="tab-pane active" id="page">
+                    <h3><s:property default="Unknown page" value="page"/></h3>
+                    <pre class="prettyprint lang-html linenums"><s:iterator 
value="pageLines" status="row">
 <s:property/></s:iterator>
-                                       </pre>
-                               </div>
-                               <div class="tab-pane" id="config">
-                                       <h3><s:property default="Unknown 
configuration" value="config"/></h3>
-                                       <pre class="prettyprint lang-xml 
linenums">
-                                               <s:iterator value="configLines" 
status="row">
+                    </pre>
+                </div>
+                <div class="tab-pane" id="config">
+                    <h3><s:property default="Unknown configuration" 
value="config"/></h3>
+                    <pre class="prettyprint lang-xml linenums"><s:iterator 
value="configLines" status="row">
 <s:property/></s:iterator>
-                                       </pre>
-                               </div>
-                               <div class="tab-pane" id="java">
-                                       <h3><s:property default="Unknown or 
unavailable Action class" value="className"/></h3>
-                                       <pre class="prettyprint lang-java 
linenums">
-                                               <s:iterator value="classLines" 
status="row">
+                    </pre>
+                </div>
+                <div class="tab-pane" id="java">
+                    <h3><s:property default="Unknown or unavailable Action 
class" value="className"/></h3>
+                    <pre class="prettyprint lang-java linenums"><s:iterator 
value="classLines" status="row">
 <s:property/></s:iterator>
-                                       </pre>
-                               </div>
-                       </div>
-               </div>
-       </div>
+                    </pre>
+                </div>
+            </div>
+        </div>
+    </div>
 </div>
 
 
 <s:script>
-       $('#codeTab a').click(function (e) {
-               e.preventDefault();
-               $(this).tab('show');
-       })
+    $('#codeTab a').click(function (e) {
+    e.preventDefault();
+    $(this).tab('show');
+    })
 </s:script>
 </body>
 </html>

Reply via email to