1 /* 2 * Licensed under the GPL License. You may not use this file except in compliance with the License. 3 * You may obtain a copy of the License at 4 * 5 * https://www.gnu.org/licenses/old-licenses/gpl-2.0.html 6 * 7 * THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, 8 * WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR 9 * PURPOSE. 10 */ 11 package psiprobe; 12 13 import java.io.File; 14 import java.io.IOException; 15 import java.io.InputStream; 16 import java.util.List; 17 18 import javax.naming.NamingException; 19 20 import org.apache.catalina.Context; 21 import org.apache.catalina.Wrapper; 22 import org.apache.catalina.connector.Connector; 23 24 import psiprobe.model.ApplicationParam; 25 import psiprobe.model.ApplicationResource; 26 import psiprobe.model.FilterInfo; 27 import psiprobe.model.FilterMapping; 28 import psiprobe.model.jsp.Summary; 29 30 /** 31 * Part of Tomcat container version abstraction layer. 32 */ 33 public interface TomcatContainer { 34 35 /** 36 * Finds a context based on its path. 37 * 38 * @param name the context path 39 * 40 * @return the context deployed to that path 41 */ 42 Context findContext(String name); 43 44 /** 45 * Formats a context name to a path that the container will recognize. Usually this means 46 * prepending a {@code /} character, although there is special behavior for the root context. 47 * 48 * @param name the context name 49 * 50 * @return the context name formatted as the container expects 51 */ 52 String formatContextName(String name); 53 54 /** 55 * Formats a context name so that it can be used as a step for the context descriptor .xml or 56 * deployed .war file. Usually this means stripping a leading {@code /} character, although there 57 * is special behavior for the root context. 58 * 59 * @param contextName the context name 60 * 61 * @return the filename stem for this context 62 */ 63 String formatContextFilename(String contextName); 64 65 /** 66 * Find contexts. 67 * 68 * @return all contexts 69 */ 70 List<Context> findContexts(); 71 72 /** 73 * Find connectors. 74 * 75 * @return all connectors 76 */ 77 List<Connector> findConnectors(); 78 79 /** 80 * Stops the context with the given name. 81 * 82 * @param name the name of the context to stop 83 * 84 * @throws Exception if stopping the context fails spectacularly 85 */ 86 void stop(String name) throws Exception; 87 88 /** 89 * Starts the context with the given name. 90 * 91 * @param name the name of the context to start 92 * 93 * @throws Exception if starting the context fails spectacularly 94 */ 95 void start(String name) throws Exception; 96 97 /** 98 * Undeploys a context. 99 * 100 * @param name the context path 101 * 102 * @throws Exception if undeployment fails spectacularly 103 */ 104 void remove(String name) throws Exception; 105 106 /** 107 * Installs .war file at the given context name. 108 * 109 * @param name the name of the context 110 * 111 * @throws Exception if installing the .war fails spectacularly 112 */ 113 void installWar(String name) throws Exception; 114 115 /** 116 * This method always returns absolute path, no matter what Tomcat is up to. 117 * 118 * @return absolute path to applications base (normally "webapps") 119 */ 120 File getAppBase(); 121 122 /** 123 * Returns the context descriptor filename for the given context. 124 * 125 * @param context the context 126 * 127 * @return the context descriptor filename, or {@code null} 128 */ 129 File getConfigFile(Context context); 130 131 /** 132 * Gets the config base. 133 * 134 * @return the config base 135 */ 136 String getConfigBase(); 137 138 /** 139 * Sets the wrapper. 140 * 141 * @param wrapper the new wrapper 142 */ 143 void setWrapper(Wrapper wrapper); 144 145 /** 146 * Indicates whether this adapter can bind to the container. 147 * 148 * @param binding the ServerInfo of the container 149 * 150 * @return true if binding is possible 151 */ 152 boolean canBoundTo(String binding); 153 154 /** 155 * Deploys a context, assuming an context descriptor file exists on the server already. 156 * 157 * @param contextName the context path, which should match the filename 158 * 159 * @return {@code true} if deployment was successful 160 * 161 * @throws Exception if deployment fails spectacularly 162 */ 163 boolean installContext(String contextName) throws Exception; 164 165 /** 166 * Lists and optionally compiles all JSPs for the given context. Compilation details are added to 167 * the summary. 168 * 169 * @param context the context 170 * @param summary the summary in which the output is stored 171 * @param compile whether to compile all of the JSPs or not 172 */ 173 void listContextJsps(Context context, Summary summary, boolean compile); 174 175 /** 176 * Compiles a list of JSPs. Names of JSP files are expected to be relative to the webapp root. The 177 * method updates summary with compilation details. 178 * 179 * @param context the context 180 * @param summary the summary in which the output is stored 181 * @param names the list of JSPs to compile 182 */ 183 void recompileJsps(Context context, Summary summary, List<String> names); 184 185 /** 186 * Deletes the "work" directory of the given context. 187 * 188 * @param context the context 189 */ 190 void discardWorkDir(Context context); 191 192 /** 193 * Gets the host name. 194 * 195 * @return the host name 196 */ 197 String getHostName(); 198 199 /** 200 * Gets the name. 201 * 202 * @return the name 203 */ 204 String getName(); 205 206 /** 207 * Returns the JSP servlet filename for the given JSP file. 208 * 209 * @param context the context 210 * @param jspName the JSP filename 211 * 212 * @return the name of the JSP servlet 213 */ 214 String getServletFileNameForJsp(Context context, String jspName); 215 216 /** 217 * Gets the application filter maps. 218 * 219 * @param context the context 220 * 221 * @return the application filter maps 222 */ 223 List<FilterMapping> getApplicationFilterMaps(Context context); 224 225 /** 226 * Gets the available. 227 * 228 * @param context the context 229 * 230 * @return the available 231 */ 232 boolean getAvailable(Context context); 233 234 /** 235 * Adds the context resource. 236 * 237 * @param context the context 238 * @param resourceList the resource list 239 */ 240 void addContextResource(Context context, List<ApplicationResource> resourceList); 241 242 /** 243 * Adds the context resource link. 244 * 245 * @param context the context 246 * @param resourceList the resource list 247 */ 248 void addContextResourceLink(Context context, List<ApplicationResource> resourceList); 249 250 /** 251 * Gets the application filters. 252 * 253 * @param context the context 254 * 255 * @return the application filters 256 */ 257 List<FilterInfo> getApplicationFilters(Context context); 258 259 /** 260 * Gets the application init params. 261 * 262 * @param context the context 263 * 264 * @return the application init params 265 */ 266 List<ApplicationParam> getApplicationInitParams(Context context); 267 268 /** 269 * Resource exists. 270 * 271 * @param name the name 272 * @param context the context 273 * 274 * @return true, if successful 275 */ 276 boolean resourceExists(String name, Context context); 277 278 /** 279 * Gets the resource stream. 280 * 281 * @param name the name 282 * @param context the context 283 * 284 * @return the resource stream 285 * 286 * @throws IOException Signals that an I/O exception has occurred. 287 */ 288 InputStream getResourceStream(String name, Context context) throws IOException; 289 290 /** 291 * Gets the resource attributes. 292 * 293 * @param name the name 294 * @param context the context 295 * 296 * @return the resource attributes 297 */ 298 Long[] getResourceAttributes(String name, Context context); 299 300 /** 301 * Binds a naming context to the current thread's classloader. 302 * 303 * @param context the catalina context 304 * 305 * @throws NamingException if binding the classloader fails 306 */ 307 void bindToContext(Context context) throws NamingException; 308 309 /** 310 * Unbinds a naming context from the current thread's classloader. 311 * 312 * @param context the catalina context 313 * 314 * @throws NamingException if unbinding the classloader fails 315 */ 316 void unbindFromContext(Context context) throws NamingException; 317 }