use of org.eclipse.jst.server.tomcat.core.internal.xml.server40.ServerInstance in project webtools.servertools by eclipse.
the class Tomcat85Configuration method load.
/**
* @see TomcatConfiguration#load(IPath, IProgressMonitor)
*/
public void load(IPath path, IProgressMonitor monitor) throws CoreException {
try {
monitor = ProgressUtil.getMonitorFor(monitor);
monitor.beginTask(Messages.loadingTask, 7);
// check for catalina.policy to verify that this is a v5.5 config
InputStream in = new FileInputStream(path.append("catalina.policy").toFile());
in.read();
in.close();
monitor.worked(1);
serverFactory = new Factory();
serverFactory.setPackageName("org.eclipse.jst.server.tomcat.core.internal.xml.server40");
server = (Server) serverFactory.loadDocument(new FileInputStream(path.append("server.xml").toFile()));
serverInstance = new ServerInstance(server, null, null);
monitor.worked(1);
webAppDocument = new WebAppDocument(path.append("web.xml"));
monitor.worked(1);
File file = path.append("context.xml").toFile();
if (file.exists())
contextDocument = XMLUtil.getDocumentBuilder().parse(new InputSource(new FileInputStream(file)));
monitor.worked(1);
tomcatUsersDocument = XMLUtil.getDocumentBuilder().parse(new InputSource(new FileInputStream(path.append("tomcat-users.xml").toFile())));
monitor.worked(1);
// load policy file
policyFile = TomcatVersionHelper.getFileContents(new FileInputStream(path.append("catalina.policy").toFile()));
monitor.worked(1);
// load properties file
file = path.append("catalina.properties").toFile();
if (file.exists())
propertiesFile = TomcatVersionHelper.getFileContents(new FileInputStream(file));
else
propertiesFile = null;
monitor.worked(1);
if (monitor.isCanceled())
return;
monitor.done();
} catch (Exception e) {
Trace.trace(Trace.WARNING, "Could not load Tomcat v8.5 configuration from " + path.toOSString() + ": " + e.getMessage());
throw new CoreException(new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorCouldNotLoadConfiguration, path.toOSString()), e));
}
}
use of org.eclipse.jst.server.tomcat.core.internal.xml.server40.ServerInstance in project webtools.servertools by eclipse.
the class Tomcat85Configuration method load.
/**
* @see TomcatConfiguration#load(IFolder, IProgressMonitor)
*/
public void load(IFolder folder, IProgressMonitor monitor) throws CoreException {
try {
monitor = ProgressUtil.getMonitorFor(monitor);
monitor.beginTask(Messages.loadingTask, 1200);
// check for catalina.policy to verify that this is a v4.0 config
IFile file = folder.getFile("catalina.policy");
if (!file.exists())
throw new CoreException(new Status(IStatus.WARNING, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorCouldNotLoadConfiguration, folder.getFullPath().toOSString()), null));
// load server.xml
file = folder.getFile("server.xml");
InputStream in = file.getContents();
serverFactory = new Factory();
serverFactory.setPackageName("org.eclipse.jst.server.tomcat.core.internal.xml.server40");
server = (Server) serverFactory.loadDocument(in);
serverInstance = new ServerInstance(server, null, null);
monitor.worked(200);
// load web.xml
file = folder.getFile("web.xml");
webAppDocument = new WebAppDocument(file);
monitor.worked(200);
// load context.xml
file = folder.getFile("context.xml");
if (file.exists()) {
in = file.getContents();
contextDocument = XMLUtil.getDocumentBuilder().parse(new InputSource(in));
} else
contextDocument = null;
monitor.worked(200);
// load tomcat-users.xml
file = folder.getFile("tomcat-users.xml");
in = file.getContents();
tomcatUsersDocument = XMLUtil.getDocumentBuilder().parse(new InputSource(in));
monitor.worked(200);
// load catalina.policy
file = folder.getFile("catalina.policy");
in = file.getContents();
policyFile = TomcatVersionHelper.getFileContents(in);
monitor.worked(200);
// load catalina.properties
file = folder.getFile("catalina.properties");
if (file.exists()) {
in = file.getContents();
propertiesFile = TomcatVersionHelper.getFileContents(in);
} else
propertiesFile = null;
monitor.worked(200);
if (monitor.isCanceled())
throw new Exception("Cancelled");
monitor.done();
} catch (Exception e) {
Trace.trace(Trace.WARNING, "Could not reload Tomcat v8.5 configuration from: " + folder.getFullPath() + ": " + e.getMessage());
throw new CoreException(new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorCouldNotLoadConfiguration, folder.getFullPath().toOSString()), e));
}
}
use of org.eclipse.jst.server.tomcat.core.internal.xml.server40.ServerInstance in project webtools.servertools by eclipse.
the class TomcatVersionHelper method updateContextsToServeDirectly.
/**
* Update Contexts to serve web projects directly.
*
* @param baseDir directory where the Catalina instance is found
* @param loader name of the catalina.properties loader to use for global
* classpath entries
* @param monitor a progress monitor
* @return result of update operation
*/
public static IStatus updateContextsToServeDirectly(IPath baseDir, String tomcatVersion, String loader, boolean enableMetaInfResources, IProgressMonitor monitor) {
IPath confDir = baseDir.append("conf");
IPath serverXml = confDir.append("server.xml");
try {
monitor = ProgressUtil.getMonitorFor(monitor);
monitor.beginTask(Messages.publishConfigurationTask, 300);
monitor.subTask(Messages.publishContextConfigTask);
Factory factory = new Factory();
factory.setPackageName("org.eclipse.jst.server.tomcat.core.internal.xml.server40");
Server publishedServer = (Server) factory.loadDocument(new FileInputStream(serverXml.toFile()));
ServerInstance publishedInstance = new ServerInstance(publishedServer, null, null);
monitor.worked(100);
boolean modified = false;
boolean isTomcat80 = tomcatVersion.startsWith("8.0");
boolean isTomcat85 = tomcatVersion.startsWith("8.5");
boolean isTomcat9 = tomcatVersion.startsWith("9.");
// care about top-level modules only
TomcatPublishModuleVisitor visitor;
if (isTomcat80) {
visitor = new Tomcat80PublishModuleVisitor(baseDir, tomcatVersion, publishedInstance, loader, enableMetaInfResources);
} else if (isTomcat85) {
visitor = new Tomcat85PublishModuleVisitor(baseDir, tomcatVersion, publishedInstance, loader, enableMetaInfResources);
} else if (isTomcat9) {
visitor = new Tomcat90PublishModuleVisitor(baseDir, tomcatVersion, publishedInstance, loader, enableMetaInfResources);
} else {
visitor = new TomcatPublishModuleVisitor(baseDir, tomcatVersion, publishedInstance, loader, enableMetaInfResources);
}
Context[] contexts = publishedInstance.getContexts();
for (int i = 0; i < contexts.length; i++) {
String moduleId = contexts[i].getSource();
if (moduleId != null && moduleId.length() > 0) {
IModule module = ServerUtil.getModule(moduleId);
ModuleTraverser.traverse(module, visitor, monitor);
modified = true;
}
}
if (modified) {
monitor.subTask(Messages.savingContextConfigTask);
factory.save(serverXml.toOSString());
}
monitor.worked(100);
if (Trace.isTraceEnabled())
Trace.trace(Trace.FINER, "Context docBase settings updated in server.xml.");
} catch (Exception e) {
Trace.trace(Trace.SEVERE, "Could not modify context configurations to serve directly for Tomcat configuration " + confDir.toOSString() + ": " + e.getMessage());
return new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorPublishConfiguration, new String[] { e.getLocalizedMessage() }), e);
} finally {
monitor.done();
}
return Status.OK_STATUS;
}
use of org.eclipse.jst.server.tomcat.core.internal.xml.server40.ServerInstance in project webtools.servertools by eclipse.
the class TomcatVersionHelper method getRemovedKeptCatalinaContexts.
/**
* Gets the paths for Contexts that are being removed in the
* next server publish. Reads the old server.xml to determine
* what Contexts were previously servered and returns those
* that are not included in the specified list of modules.
*
* @param oldServerInstance for server.xml from previous server publish
* @param modules list of currently added modules
* @param removedContextsMap Map to receive removed contexts mapped by path
* @param keptContextsMap Map to receive kept contexts mapped by path
*/
public static void getRemovedKeptCatalinaContexts(ServerInstance oldServerInstance, List modules, Map<String, Context> removedContextsMap, Map<String, Context> keptContextsMap) {
// Collect paths of old web modules managed by WTP
Context[] contexts = oldServerInstance.getContexts();
if (contexts != null) {
for (int i = 0; i < contexts.length; i++) {
String source = contexts[i].getSource();
if (source != null && source.length() > 0) {
removedContextsMap.put(contexts[i].getPath(), contexts[i]);
}
}
}
// Remove paths for web modules that are staying around
int size = modules.size();
for (int i = 0; i < size; i++) {
WebModule module = (WebModule) modules.get(i);
String modulePath = module.getPath();
// normalize "/" to ""
if (modulePath.equals("/"))
modulePath = "";
Context context = removedContextsMap.remove(modulePath);
if (context != null)
keptContextsMap.put(context.getPath(), context);
}
}
use of org.eclipse.jst.server.tomcat.core.internal.xml.server40.ServerInstance in project webtools.servertools by eclipse.
the class TomcatVersionHelper method localizeConfiguration.
/**
* If modules are not being deployed to the "webapps" directory, the
* context for the published modules is updated to contain the
* corrected docBase.
*
* @param baseDir runtime base directory for the server
* @param deployDir deployment directory for the server
* @param server server being localized
* @param monitor a progress monitor
* @return result of operation
*/
public static IStatus localizeConfiguration(IPath baseDir, IPath deployDir, TomcatServer server, IProgressMonitor monitor) {
try {
if (Trace.isTraceEnabled())
Trace.trace(Trace.FINER, "Localizing configuration at " + baseDir);
monitor = ProgressUtil.getMonitorFor(monitor);
monitor.beginTask(Messages.publishConfigurationTask, 300);
IPath serverXml = baseDir.append("conf/server.xml");
Factory factory = new Factory();
factory.setPackageName("org.eclipse.jst.server.tomcat.core.internal.xml.server40");
Server publishedServer = (Server) factory.loadDocument(new FileInputStream(serverXml.toFile()));
ServerInstance publishedInstance = new ServerInstance(publishedServer, null, null);
monitor.worked(100);
if (monitor.isCanceled())
return Status.CANCEL_STATUS;
boolean modified = false;
// Only add root module if running in a test env (i.e. not on the installation)
boolean addRootWebapp = server.isTestEnvironment();
// If not deploying to "webapps", context docBase attributes need updating
// TODO Improve to compare with appBase value instead of hardcoded "webapps"
boolean deployingToAppBase = "webapps".equals(server.getDeployDirectory());
Map<String, String> pathMap = new HashMap<String, String>();
MultiStatus ms = new MultiStatus(TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorPublishServer, server.getServer().getName()), null);
Context[] contexts = publishedInstance.getContexts();
if (contexts != null) {
for (int i = 0; i < contexts.length; i++) {
Context context = contexts[i];
// Normalize path and check for duplicates
String path = context.getPath();
if (path != null) {
// Save a copy of original in case it's "/"
String origPath = path;
// Normalize "/" to ""
if ("/".equals(path)) {
if (Trace.isTraceEnabled())
Trace.trace(Trace.FINER, "Context path is being changed from \"/\" to \"\".");
path = "";
context.setPath(path);
modified = true;
}
// Context paths that are the same or differ only in case are not allowed
String lcPath = path.toLowerCase();
if (!pathMap.containsKey(lcPath)) {
pathMap.put(lcPath, origPath);
} else {
String otherPath = pathMap.get(lcPath);
IStatus s = new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, origPath.equals(otherPath) ? NLS.bind(Messages.errorPublishPathDup, origPath) : NLS.bind(Messages.errorPublishPathConflict, origPath, otherPath));
ms.add(s);
}
} else {
IStatus s = new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, Messages.errorPublishPathMissing);
ms.add(s);
}
// TODO Need to add a root context if deploying to webapps but with auto-deploy off
if (addRootWebapp && "".equals(context.getPath())) {
// A default webapp is being deployed, don't add one
addRootWebapp = false;
}
// If not deploying to appBase, convert to absolute path under deploy dir
if (!deployingToAppBase) {
String source = context.getSource();
if (source != null && source.length() > 0) {
context.setDocBase(deployDir.append(context.getDocBase()).toOSString());
modified = true;
}
}
}
}
// If errors are present, return status
if (!ms.isOK())
return ms;
if (addRootWebapp) {
// Add a context for the default webapp
Context rootContext = publishedInstance.createContext(0);
rootContext.setPath("");
rootContext.setDocBase(deployDir.append("ROOT").toOSString());
rootContext.setReloadable("false");
modified = true;
}
monitor.worked(100);
if (monitor.isCanceled())
return Status.CANCEL_STATUS;
if (modified) {
monitor.subTask(Messages.savingContextConfigTask);
factory.save(serverXml.toOSString());
}
monitor.worked(100);
if (Trace.isTraceEnabled())
Trace.trace(Trace.FINER, "Context docBase settings updated in server.xml.");
} catch (Exception e) {
Trace.trace(Trace.WARNING, "Could not localize server configuration published to " + baseDir.toOSString() + ": " + e.getMessage());
return new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorPublishConfiguration, new String[] { e.getLocalizedMessage() }), e);
} finally {
monitor.done();
}
return Status.OK_STATUS;
}
Aggregations