| %line | %branch | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| org.apache.jcs.admin.servlet.JCSAdminServlet |
|
|
| 1 | package org.apache.jcs.admin.servlet; |
|
| 2 | ||
| 3 | /* |
|
| 4 | * Licensed to the Apache Software Foundation (ASF) under one |
|
| 5 | * or more contributor license agreements. See the NOTICE file |
|
| 6 | * distributed with this work for additional information |
|
| 7 | * regarding copyright ownership. The ASF licenses this file |
|
| 8 | * to you under the Apache License, Version 2.0 (the |
|
| 9 | * "License"); you may not use this file except in compliance |
|
| 10 | * with the License. You may obtain a copy of the License at |
|
| 11 | * |
|
| 12 | * http://www.apache.org/licenses/LICENSE-2.0 |
|
| 13 | * |
|
| 14 | * Unless required by applicable law or agreed to in writing, |
|
| 15 | * software distributed under the License is distributed on an |
|
| 16 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
|
| 17 | * KIND, either express or implied. See the License for the |
|
| 18 | * specific language governing permissions and limitations |
|
| 19 | * under the License. |
|
| 20 | */ |
|
| 21 | ||
| 22 | import javax.servlet.http.HttpServletRequest; |
|
| 23 | import javax.servlet.http.HttpServletResponse; |
|
| 24 | ||
| 25 | import org.apache.jcs.admin.JCSAdminBean; |
|
| 26 | import org.apache.velocity.Template; |
|
| 27 | import org.apache.velocity.context.Context; |
|
| 28 | import org.apache.velocity.servlet.VelocityServlet; |
|
| 29 | ||
| 30 | /** |
|
| 31 | * A servlet which provides HTTP access to JCS. Allows a summary of regions to |
|
| 32 | * be viewed, and removeAll to be run on individual regions or all regions. Also |
|
| 33 | * provides the ability to remove items (any number of key arguments can be |
|
| 34 | * provided with action 'remove'). Should be initialized with a properties file |
|
| 35 | * that provides at least a classpath resource loader. Since this extends |
|
| 36 | * VelocityServlet, which uses the singleton model for velocity, it will share |
|
| 37 | * configuration with any other Velocity in the same JVM. |
|
| 38 | * <p> |
|
| 39 | * Initialization in a webapp will look something like this: |
|
| 40 | * <p> |
|
| 41 | * |
|
| 42 | * <pre> |
|
| 43 | * |
|
| 44 | * [servlet] |
|
| 45 | * [servlet-name]JCSAdminServlet[/servlet-name] |
|
| 46 | * [servlet-class]org.apache.jcs.admin.servlet.JCSAdminServlet[/servlet-class] |
|
| 47 | * [init-param] |
|
| 48 | * [param-name]properties[/param-name] |
|
| 49 | * [param-value]WEB-INF/conf/JCSAdminServlet.velocity.properties[/param-value] |
|
| 50 | * [/init-param] |
|
| 51 | * [/servlet] |
|
| 52 | * |
|
| 53 | * </pre> |
|
| 54 | * |
|
| 55 | * <p> |
|
| 56 | * FIXME: It would be nice to use the VelocityEngine model so this can be truly |
|
| 57 | * standalone. Right now if you run it in the same container as, say, turbine, |
|
| 58 | * turbine must be run first to ensure it's config takes precedence. |
|
| 59 | * <p> |
|
| 60 | */ |
|
| 61 | 0 | public class JCSAdminServlet |
| 62 | extends VelocityServlet |
|
| 63 | { |
|
| 64 | private static final long serialVersionUID = -5519844149238645275L; |
|
| 65 | ||
| 66 | private static final String DEFAULT_TEMPLATE_NAME = "/org/apache/jcs/admin/servlet/JCSAdminServletDefault.vm"; |
|
| 67 | ||
| 68 | private static final String REGION_DETAIL_TEMPLATE_NAME = "/org/apache/jcs/admin/servlet/JCSAdminServletRegionDetail.vm"; |
|
| 69 | ||
| 70 | // Keys for parameters |
|
| 71 | ||
| 72 | private static final String CACHE_NAME_PARAM = "cacheName"; |
|
| 73 | ||
| 74 | private static final String ACTION_PARAM = "action"; |
|
| 75 | ||
| 76 | private static final String KEY_PARAM = "key"; |
|
| 77 | ||
| 78 | private static final String SILENT_PARAM = "silent"; |
|
| 79 | ||
| 80 | // Possible values for 'action' parameter |
|
| 81 | ||
| 82 | private static final String CLEAR_ALL_REGIONS_ACTION = "clearAllRegions"; |
|
| 83 | ||
| 84 | private static final String CLEAR_REGION_ACTION = "clearRegion"; |
|
| 85 | ||
| 86 | private static final String REMOVE_ACTION = "remove"; |
|
| 87 | ||
| 88 | private static final String DETAIL_ACTION = "detail"; |
|
| 89 | ||
| 90 | /** |
|
| 91 | * Velocity based admin servlet. |
|
| 92 | * <p> |
|
| 93 | * @param request |
|
| 94 | * @param response |
|
| 95 | * @param context |
|
| 96 | * @return Template |
|
| 97 | * @throws Exception |
|
| 98 | * |
|
| 99 | */ |
|
| 100 | protected Template handleRequest( HttpServletRequest request, HttpServletResponse response, Context context ) |
|
| 101 | throws Exception |
|
| 102 | { |
|
| 103 | 0 | JCSAdminBean admin = new JCSAdminBean(); |
| 104 | ||
| 105 | 0 | String templateName = DEFAULT_TEMPLATE_NAME; |
| 106 | ||
| 107 | // Get cacheName for actions from request (might be null) |
|
| 108 | ||
| 109 | 0 | String cacheName = request.getParameter( CACHE_NAME_PARAM ); |
| 110 | ||
| 111 | // If an action was provided, handle it |
|
| 112 | ||
| 113 | 0 | String action = request.getParameter( ACTION_PARAM ); |
| 114 | ||
| 115 | 0 | if ( action != null ) |
| 116 | { |
|
| 117 | 0 | if ( action.equals( CLEAR_ALL_REGIONS_ACTION ) ) |
| 118 | { |
|
| 119 | 0 | admin.clearAllRegions(); |
| 120 | 0 | } |
| 121 | 0 | else if ( action.equals( CLEAR_REGION_ACTION ) ) |
| 122 | { |
|
| 123 | 0 | if ( cacheName != null ) |
| 124 | { |
|
| 125 | 0 | admin.clearRegion( cacheName ); |
| 126 | 0 | } |
| 127 | } |
|
| 128 | 0 | else if ( action.equals( REMOVE_ACTION ) ) |
| 129 | { |
|
| 130 | 0 | String[] keys = request.getParameterValues( KEY_PARAM ); |
| 131 | ||
| 132 | 0 | for ( int i = 0; i < keys.length; i++ ) |
| 133 | { |
|
| 134 | 0 | admin.removeItem( cacheName, keys[i] ); |
| 135 | } |
|
| 136 | ||
| 137 | 0 | templateName = REGION_DETAIL_TEMPLATE_NAME; |
| 138 | 0 | } |
| 139 | 0 | else if ( action.equals( DETAIL_ACTION ) ) |
| 140 | { |
|
| 141 | 0 | templateName = REGION_DETAIL_TEMPLATE_NAME; |
| 142 | } |
|
| 143 | } |
|
| 144 | ||
| 145 | 0 | if ( request.getParameter( SILENT_PARAM ) != null ) |
| 146 | { |
|
| 147 | // If silent parameter was passed, no output should be produced. |
|
| 148 | ||
| 149 | 0 | return null; |
| 150 | } |
|
| 151 | // Populate the context based on the template |
|
| 152 | ||
| 153 | 0 | if ( templateName == REGION_DETAIL_TEMPLATE_NAME ) |
| 154 | { |
|
| 155 | 0 | context.put( "cacheName", cacheName ); |
| 156 | 0 | context.put( "elementInfoRecords", admin.buildElementInfo( cacheName ) ); |
| 157 | 0 | } |
| 158 | 0 | else if ( templateName == DEFAULT_TEMPLATE_NAME ) |
| 159 | { |
|
| 160 | 0 | context.put( "cacheInfoRecords", admin.buildCacheInfo() ); |
| 161 | } |
|
| 162 | ||
| 163 | 0 | return getTemplate( templateName ); |
| 164 | } |
|
| 165 | } |
| This report is generated by jcoverage, Maven and Maven JCoverage Plugin. |