use of org.kie.workbench.common.dmn.api.definition.v1_1.Context in project webtools.servertools by eclipse.
the class TomcatVersionHelper method moveContextsToSeparateFiles.
/**
* Moves contexts out of current published server.xml and into individual
* context XML files.
*
* @param baseDir directory where the Catalina instance is found
* @param noPath true if path attribute should be removed from the context
* @param serverStopped true if the server is stopped
* @param monitor a progress monitor
* @return result of operation
*/
public static IStatus moveContextsToSeparateFiles(IPath baseDir, boolean noPath, boolean serverStopped, 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;
Host host = publishedInstance.getHost();
Context[] wtpContexts = publishedInstance.getContexts();
if (wtpContexts != null && wtpContexts.length > 0) {
IPath contextPath = publishedInstance.getContextXmlDirectory(serverXml.removeLastSegments(1));
File contextDir = contextPath.toFile();
if (!contextDir.exists()) {
contextDir.mkdirs();
}
// Process in reverse order, since contexts may be removed
for (int i = wtpContexts.length - 1; i >= 0; i--) {
Context context = wtpContexts[i];
// TODO Handle non-project contexts when their removal can be addressed
if (context.getSource() == null)
continue;
String name = context.getPath();
if (name.startsWith("/")) {
name = name.substring(1);
}
// If the default context, adjust the file name
if (name.length() == 0) {
name = "ROOT";
}
// Update name if multi-level path. For 5.5 and later the "#" has been
// "reserved" as a legal file name placeholder for "/". For Tomcat 5.0,
// we just need a legal unique file name since "/" will fail. Prior to
// 5.0, this feature is not supported.
name = name.replace('/', '#');
// TODO Determine circumstances, if any, where setting antiResourceLocking true can cause the original docBase content to be deleted.
if (Boolean.valueOf(context.getAttributeValue("antiResourceLocking")).booleanValue())
context.setAttributeValue("antiResourceLocking", "false");
File contextFile = new File(contextDir, name + ".xml");
Context existingContext = loadContextFile(contextFile);
// If server is stopped or if contexts are not the equivalent, write the context file
if (serverStopped || !context.isEquivalent(existingContext)) {
// If requested, remove path attribute
if (noPath)
context.removeAttribute("path");
DocumentBuilder builder = XMLUtil.getDocumentBuilder();
Document contextDoc = builder.newDocument();
contextDoc.appendChild(contextDoc.importNode(context.getElementNode(), true));
XMLUtil.save(contextFile.getAbsolutePath(), contextDoc);
}
host.removeElement("Context", i);
modified = true;
}
}
monitor.worked(100);
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.kie.workbench.common.dmn.api.definition.v1_1.Context in project webtools.servertools by eclipse.
the class TomcatVersionHelper method loadCatalinaContextConfig.
/**
* Tries to read a META-INF/context.xml file relative to the
* specified web application path. If found, it creates a Context object
* containing the contexts of that file.
*
* @param docBase File with absolute path to the web application
* @return Context element created from context.xml, or null if not found.
* @throws SAXException If there is a error parsing the XML.
* @throws IOException If there is an error reading the file.
*/
private static Context loadCatalinaContextConfig(File docBase) throws IOException, SAXException {
File contextXML = new File(docBase, "META-INF" + File.separator + "context.xml");
if (contextXML.exists()) {
try {
InputStream is = new FileInputStream(contextXML);
Factory ctxFactory = new Factory();
ctxFactory.setPackageName("org.eclipse.jst.server.tomcat.core.internal.xml.server40");
Context ctx = (Context) ctxFactory.loadDocument(is);
is.close();
return ctx;
} catch (FileNotFoundException e) {
// Ignore, should never occur
}
}
return null;
}
use of org.kie.workbench.common.dmn.api.definition.v1_1.Context in project webtools.servertools by eclipse.
the class Tomcat40Configuration method getWebModules.
/**
* Return a list of the web modules in this server.
* @return java.util.List
*/
public List getWebModules() {
List<WebModule> list = new ArrayList<WebModule>();
try {
Context[] contexts = serverInstance.getContexts();
if (contexts != null) {
for (int i = 0; i < contexts.length; i++) {
Context context = contexts[i];
String reload = context.getReloadable();
if (reload == null)
reload = "false";
WebModule module = new WebModule(context.getPath(), context.getDocBase(), context.getSource(), reload.equalsIgnoreCase("true") ? true : false);
list.add(module);
}
}
} catch (Exception e) {
Trace.trace(Trace.SEVERE, "Error getting modules", e);
}
return list;
}
use of org.kie.workbench.common.dmn.api.definition.v1_1.Context in project webtools.servertools by eclipse.
the class Tomcat40Configuration method modifyWebModule.
/**
* Change a web module.
* @param index int
* @param docBase java.lang.String
* @param path java.lang.String
* @param reloadable boolean
*/
public void modifyWebModule(int index, String docBase, String path, boolean reloadable) {
try {
Context context = serverInstance.getContext(index);
if (context != null) {
context.setPath(path);
context.setDocBase(docBase);
context.setReloadable(reloadable ? "true" : "false");
isServerDirty = true;
WebModule module = new WebModule(path, docBase, null, reloadable);
firePropertyChangeEvent(MODIFY_WEB_MODULE_PROPERTY, new Integer(index), module);
}
} catch (Exception e) {
Trace.trace(Trace.SEVERE, "Error modifying web module " + index, e);
}
}
use of org.kie.workbench.common.dmn.api.definition.v1_1.Context in project webtools.servertools by eclipse.
the class Tomcat41Configuration method modifyWebModule.
/**
* Change a web module.
* @param index int
* @param docBase java.lang.String
* @param path java.lang.String
* @param reloadable boolean
*/
public void modifyWebModule(int index, String docBase, String path, boolean reloadable) {
try {
Context context = serverInstance.getContext(index);
if (context != null) {
context.setPath(path);
context.setDocBase(docBase);
context.setReloadable(reloadable ? "true" : "false");
isServerDirty = true;
WebModule module = new WebModule(path, docBase, null, reloadable);
firePropertyChangeEvent(MODIFY_WEB_MODULE_PROPERTY, new Integer(index), module);
}
} catch (Exception e) {
Trace.trace(Trace.SEVERE, "Error modifying web module " + index, e);
}
}
Aggregations