001    /**
002     *  Licensed to the Apache Software Foundation (ASF) under one or more
003     *  contributor license agreements.  See the NOTICE file distributed with
004     *  this work for additional information regarding copyright ownership.
005     *  The ASF licenses this file to You under the Apache License, Version 2.0
006     *  (the "License"); you may not use this file except in compliance with
007     *  the License.  You may obtain a copy of the License at
008     *
009     *     http://www.apache.org/licenses/LICENSE-2.0
010     *
011     *  Unless required by applicable law or agreed to in writing, software
012     *  distributed under the License is distributed on an "AS IS" BASIS,
013     *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014     *  See the License for the specific language governing permissions and
015     *  limitations under the License.
016     */
017    
018    package org.apache.geronimo.console.infomanager;
019    
020    import java.io.IOException;
021    import java.util.ArrayList;
022    import java.util.List;
023    import java.util.StringTokenizer;
024    import java.util.Map;
025    import java.util.TreeMap;
026    
027    import javax.portlet.ActionRequest;
028    import javax.portlet.ActionResponse;
029    import javax.portlet.PortletConfig;
030    import javax.portlet.PortletException;
031    import javax.portlet.PortletRequestDispatcher;
032    import javax.portlet.RenderRequest;
033    import javax.portlet.RenderResponse;
034    import javax.portlet.WindowState;
035    
036    import org.apache.geronimo.console.BasePortlet;
037    import org.apache.geronimo.console.util.PortletManager;
038    
039    public class JavaSystemInfoPortlet extends BasePortlet {
040    
041        private static final String NORMALVIEW_JSP = "/WEB-INF/view/infomanager/javaSysNormal.jsp";
042    
043        private static final String MAXIMIZEDVIEW_JSP = "/WEB-INF/view/infomanager/javaSysMaximized.jsp";
044    
045        private static final String HELPVIEW_JSP = "/WEB-INF/view/infomanager/javaSysHelp.jsp";
046    
047        private PortletRequestDispatcher normalView;
048    
049        private PortletRequestDispatcher maximizedView;
050    
051        private PortletRequestDispatcher helpView;
052    
053        public void processAction(ActionRequest actionRequest,
054                ActionResponse actionResponse) throws PortletException, IOException {
055        }
056    
057        protected void doView(RenderRequest renderRequest,
058                RenderResponse renderResponse) throws IOException, PortletException {
059            if (WindowState.MINIMIZED.equals(renderRequest.getWindowState())) {
060                return;
061            }
062    
063            ShrinkingMap javaSysProps = new ShrinkingMap(PortletManager.getCurrentJVM(renderRequest).getSystemProperties());
064    
065            renderRequest.setAttribute("javaSysProps", javaSysProps);
066    
067            String sep = (String) javaSysProps.get("path.separator");
068    
069            String test = (String) javaSysProps.get("sun.boot.class.path");
070            if (test != null) {
071                javaSysProps.put("sun.boot.class.path", split(test, sep));
072            }
073            test = (String) javaSysProps.get("sun.boot.library.path");
074            if (test != null) {
075                javaSysProps.put("sun.boot.library.path", split(test, sep));
076            }
077            test = (String) javaSysProps.get("java.library.path");
078            if (test != null) {
079                javaSysProps.put("java.library.path", split(test, sep));
080            }
081            test = (String) javaSysProps.get("java.class.path");
082            if (test != null) {
083                javaSysProps.put("java.class.path", split(test, sep));
084            }
085            test = (String) javaSysProps.get("java.endorsed.dirs");
086            if (test != null) {
087                javaSysProps.put("java.endorsed.dirs", split(test, sep));
088            }
089            test = (String) javaSysProps.get("java.ext.dirs");
090            if (test != null) {
091                javaSysProps.put("java.ext.dirs", split(test, sep));
092            }
093            test = (String) javaSysProps.get("common.loader");
094            if (test != null) {
095                javaSysProps.put("common.loader", test.replace(',',' '));
096            }
097    
098            // Remove a few properties for security reasons
099            javaSysProps.remove("javax.net.ssl.keyStore");
100            javaSysProps.remove("javax.net.ssl.keyStorePassword");
101            javaSysProps.remove("javax.net.ssl.trustStore");
102            javaSysProps.remove("javax.net.ssl.trustStorePassword");
103    
104            javaSysProps.setShrinking(true);
105    
106            if (WindowState.NORMAL.equals(renderRequest.getWindowState())) {
107                normalView.include(renderRequest, renderResponse);
108            } else {
109                maximizedView.include(renderRequest, renderResponse);
110            }
111        }
112    
113        private List split(String path, String sep) {
114            StringTokenizer st = new StringTokenizer(path, sep);
115    
116            List l = new ArrayList();
117    
118            while (st.hasMoreTokens()) {
119                l.add(st.nextToken());
120            }
121            return l;
122        }
123    
124        protected void doHelp(RenderRequest renderRequest,
125                RenderResponse renderResponse) throws PortletException, IOException {
126            helpView.include(renderRequest, renderResponse);
127        }
128    
129        public void init(PortletConfig portletConfig) throws PortletException {
130            super.init(portletConfig);
131            normalView = portletConfig.getPortletContext().getRequestDispatcher(
132                    NORMALVIEW_JSP);
133            maximizedView = portletConfig.getPortletContext().getRequestDispatcher(
134                    MAXIMIZEDVIEW_JSP);
135            helpView = portletConfig.getPortletContext().getRequestDispatcher(
136                    HELPVIEW_JSP);
137        }
138    
139        public void destroy() {
140            normalView = null;
141            maximizedView = null;
142            helpView = null;
143            super.destroy();
144        }
145    
146    }