/* * Copyright 2012-2015, the original author or authors. * * Licensed 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 com.flipkart.phantom.runtime.impl.jetty; import org.eclipse.jetty.webapp.WebAppContext; import org.springframework.beans.factory.FactoryBean; import org.trpr.platform.runtime.impl.config.FileLocator; import java.io.File; /** * The Spring factory bean for creating the Jetty WebAppContext using resources found on the classpath * * @author Regunath B * @version 1.0, 14 Mar 2013 */ public class JettyWebAppContextFactory implements FactoryBean<WebAppContext> { /** The default max form contents size*/ public static final int DEFAULT_MAX_FORM_SIZE = 2000000; /** The name of the web app context */ private String contextName; /** The web app context path i.e. where WEB-INF is located*/ private String contextPath; /** The max form size property*/ private int maxFormContentSize = DEFAULT_MAX_FORM_SIZE; /** * Interface method implementation. Returns the Jetty WebAppContext type * @see org.springframework.beans.factory.FactoryBean#getObjectType() */ public Class<WebAppContext> getObjectType() { return WebAppContext.class; } /** * Interface method implementation. Returns true * @see org.springframework.beans.factory.FactoryBean#isSingleton() */ public boolean isSingleton() { return true; } /** * Interface method implementation. Creates and returns a WebAppContext instance * @see org.springframework.beans.factory.FactoryBean#getObject() */ public WebAppContext getObject() throws Exception { String path = null; File[] files = FileLocator.findDirectories(this.getContextPath(), null); for (File file : files) { // we need only WEB-INF from runtime project and none else even by mistake String fileToString = file.toString(); if (fileToString.contains(".jar!") && fileToString.startsWith("file:/")) { fileToString = fileToString.replace("file:/","jar:file:/"); if (fileToString.contains("runtime-")) { path = fileToString; break; } } else { if (fileToString.contains("runtime")) { path = fileToString; break; } } } // trim off the "WEB-INF" part as the WebAppContext path should refer to the parent directory if (path.endsWith("WEB-INF")) { path = path.replace("WEB-INF", ""); } WebAppContext webAppContext = new WebAppContext(path, this.getContextName()); webAppContext.setMaxFormContentSize(this.getMaxFormContentSize()); return webAppContext; } /** Getter/Setter methods */ public String getContextName() { return this.contextName; } public void setContextName(String contextName) { this.contextName = contextName; } public String getContextPath() { return this.contextPath; } public void setContextPath(String contextPath) { this.contextPath = contextPath; } public int getMaxFormContentSize() { return this.maxFormContentSize; } public void setMaxFormContentSize(int maxFormContentSize) { this.maxFormContentSize = maxFormContentSize; } /** End Getter/Setter methods */ }