Search in sources :

Example 16 with Context

use of org.eclipse.jst.server.tomcat.core.internal.xml.server32.Context in project webtools.servertools by eclipse.

the class TomcatPublishModuleVisitor method getProjectContextXml.

/**
 * Load a META-INF/context.xml file from project, if available
 *
 * @param component web component containing the context.xml
 * @return context element containing the context.xml
 * @throws CoreException
 */
protected Context getProjectContextXml(IVirtualComponent component) throws CoreException {
    // load or create module's context.xml document
    IVirtualFile contextFile = (IVirtualFile) component.getRootFolder().findMember("META-INF/context.xml");
    Context contextElement = null;
    if (contextFile != null && contextFile.exists()) {
        Factory factory = new Factory();
        factory.setPackageName("org.eclipse.jst.server.tomcat.core.internal.xml.server40");
        InputStream fis = null;
        try {
            fis = contextFile.getUnderlyingFile().getContents();
            contextElement = (Context) factory.loadDocument(fis);
        } catch (Exception e) {
            Trace.trace(Trace.SEVERE, "Exception reading " + contextFile, e);
        } finally {
            try {
                fis.close();
            } catch (IOException e) {
            // ignore
            }
        }
    }
    return contextElement;
}
Also used : Context(org.eclipse.jst.server.tomcat.core.internal.xml.server40.Context) IVirtualFile(org.eclipse.wst.common.componentcore.resources.IVirtualFile) InputStream(java.io.InputStream) Factory(org.eclipse.jst.server.tomcat.core.internal.xml.Factory) IOException(java.io.IOException) CoreException(org.eclipse.core.runtime.CoreException) IOException(java.io.IOException)

Example 17 with Context

use of org.eclipse.jst.server.tomcat.core.internal.xml.server32.Context in project webtools.servertools by eclipse.

the class TomcatVersionHelper method cleanupCatalinaServer.

/**
 * Cleanup server instance location in preparation for next server publish.
 * This currently involves deleting work directories for currently
 * existing Contexts which will not be included in the next publish.
 * In addition, Context XML files which may have been created for these
 * Contexts are also deleted. If requested, Context XML files for
 * kept Contexts will be deleted since they will be kept in server.xml.
 *
 * @param baseDir path to server instance directory, i.e. catalina.base
 * @param installDir path to server installation directory (not currently used)
 * @param removeKeptContextFiles true if kept contexts should have a separate
 *  context XML file removed
 * @param modules list of currently added modules
 * @param monitor a progress monitor or null
 * @return MultiStatus containing results of the cleanup operation
 */
public static IStatus cleanupCatalinaServer(IPath baseDir, IPath installDir, boolean removeKeptContextFiles, List modules, IProgressMonitor monitor) {
    MultiStatus ms = new MultiStatus(TomcatPlugin.PLUGIN_ID, 0, Messages.cleanupServerTask, null);
    try {
        monitor = ProgressUtil.getMonitorFor(monitor);
        monitor.beginTask(Messages.cleanupServerTask, 200);
        monitor.subTask(Messages.detectingRemovedProjects);
        IPath serverXml = baseDir.append("conf").append("server.xml");
        ServerInstance oldInstance = TomcatVersionHelper.getCatalinaServerInstance(serverXml, null, null);
        if (oldInstance != null) {
            Map<String, Context> removedContextsMap = new HashMap<String, Context>();
            Map<String, Context> keptContextsMap = new HashMap<String, Context>();
            TomcatVersionHelper.getRemovedKeptCatalinaContexts(oldInstance, modules, removedContextsMap, keptContextsMap);
            monitor.worked(100);
            if (removedContextsMap.size() > 0) {
                // Delete context files and work directories for managed web modules that have gone away
                IProgressMonitor subMonitor = ProgressUtil.getSubMonitorFor(monitor, 100);
                subMonitor.beginTask(Messages.deletingContextFilesTask, removedContextsMap.size() * 200);
                Iterator iter = removedContextsMap.keySet().iterator();
                while (iter.hasNext()) {
                    String oldPath = (String) iter.next();
                    Context ctx = removedContextsMap.get(oldPath);
                    // Delete the corresponding context file, if it exists
                    IPath ctxFilePath = oldInstance.getContextFilePath(baseDir, ctx);
                    if (ctxFilePath != null) {
                        File ctxFile = ctxFilePath.toFile();
                        if (ctxFile.exists()) {
                            subMonitor.subTask(NLS.bind(Messages.deletingContextFile, ctxFile.getName()));
                            if (ctxFile.delete()) {
                                if (Trace.isTraceEnabled())
                                    Trace.trace(Trace.FINER, "Leftover context file " + ctxFile.getName() + " deleted.");
                                ms.add(new Status(IStatus.OK, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.deletedContextFile, ctxFile.getName()), null));
                            } else {
                                Trace.trace(Trace.SEVERE, "Could not delete obsolete context file " + ctxFilePath.toOSString());
                                ms.add(new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorCouldNotDeleteContextFile, ctxFilePath.toOSString()), null));
                            }
                        }
                    }
                    subMonitor.worked(100);
                    // Delete work directory associated with the removed context if it is within confDir.
                    // If it is outside of confDir, assume user is going to manage it.
                    IPath ctxWorkPath = oldInstance.getContextWorkDirectory(baseDir, ctx);
                    if (baseDir.isPrefixOf(ctxWorkPath)) {
                        File ctxWorkDir = ctxWorkPath.toFile();
                        if (ctxWorkDir.exists() && ctxWorkDir.isDirectory()) {
                            IStatus[] results = PublishHelper.deleteDirectory(ctxWorkDir, ProgressUtil.getSubMonitorFor(monitor, 100));
                            if (results.length > 0) {
                                Trace.trace(Trace.SEVERE, "Could not delete work directory " + ctxWorkDir.getPath() + " for removed context " + oldPath);
                                for (int i = 0; i < results.length; i++) {
                                    ms.add(results[i]);
                                }
                            }
                        } else
                            subMonitor.worked(100);
                    } else
                        subMonitor.worked(100);
                }
                subMonitor.done();
            }
            monitor.worked(100);
            // If requested, remove any separate context XML files for contexts being kept
            if (removeKeptContextFiles && keptContextsMap.size() > 0) {
                // Delete context files and work directories for managed web modules that have gone away
                IProgressMonitor subMonitor = ProgressUtil.getSubMonitorFor(monitor, 100);
                // TODO Improve task name
                subMonitor.beginTask(Messages.deletingContextFilesTask, keptContextsMap.size() * 100);
                Iterator iter = keptContextsMap.keySet().iterator();
                while (iter.hasNext()) {
                    String keptPath = (String) iter.next();
                    Context ctx = keptContextsMap.get(keptPath);
                    // Delete the corresponding context file, if it exists
                    IPath ctxFilePath = oldInstance.getContextFilePath(baseDir, ctx);
                    if (ctxFilePath != null) {
                        File ctxFile = ctxFilePath.toFile();
                        if (ctxFile.exists()) {
                            subMonitor.subTask(NLS.bind(Messages.deletingContextFile, ctxFile.getName()));
                            if (ctxFile.delete()) {
                                if (Trace.isTraceEnabled())
                                    Trace.trace(Trace.FINER, "Leftover context file " + ctxFile.getName() + " deleted.");
                                ms.add(new Status(IStatus.OK, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.deletedContextFile, ctxFile.getName()), null));
                            } else {
                                Trace.trace(Trace.SEVERE, "Could not delete obsolete context file " + ctxFilePath.toOSString());
                                ms.add(new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorCouldNotDeleteContextFile, ctxFilePath.toOSString()), null));
                            }
                        }
                    }
                    subMonitor.worked(100);
                }
                subMonitor.done();
            }
        } else // Else no server.xml.  Assume first publish to new temp directory
        {
            monitor.worked(200);
        }
        if (Trace.isTraceEnabled())
            Trace.trace(Trace.FINER, "Server cleaned");
    } catch (Exception e) {
        Trace.trace(Trace.SEVERE, "Could not cleanup server at " + baseDir.toOSString() + ": " + e.getMessage());
        ms.add(new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorCleanupServer, new String[] { e.getLocalizedMessage() }), e));
    } finally {
        monitor.done();
    }
    return ms;
}
Also used : Context(org.eclipse.jst.server.tomcat.core.internal.xml.server40.Context) MultiStatus(org.eclipse.core.runtime.MultiStatus) IStatus(org.eclipse.core.runtime.IStatus) Status(org.eclipse.core.runtime.Status) IStatus(org.eclipse.core.runtime.IStatus) IPath(org.eclipse.core.runtime.IPath) HashMap(java.util.HashMap) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) MultiStatus(org.eclipse.core.runtime.MultiStatus) IOException(java.io.IOException) FileNotFoundException(java.io.FileNotFoundException) SAXException(org.xml.sax.SAXException) IProgressMonitor(org.eclipse.core.runtime.IProgressMonitor) Iterator(java.util.Iterator) ServerInstance(org.eclipse.jst.server.tomcat.core.internal.xml.server40.ServerInstance) JarFile(java.util.jar.JarFile) File(java.io.File)

Example 18 with Context

use of org.eclipse.jst.server.tomcat.core.internal.xml.server32.Context in project webtools.servertools by eclipse.

the class TomcatVersionHelper method publishCatalinaContextConfig.

/**
 * Add context configuration found in META-INF/context.xml files
 * present in projects to published server.xml.  Used by
 * Tomcat 4.1, 5.0, and 5.5 which support use of META-INF/context.xml
 * in some form.
 *
 * @param baseDir absolute path to catalina instance directory
 * @param webappsDir absolute path to deployment directory
 * @param monitor a progress monitor or null
 * @return result of operation
 */
public static IStatus publishCatalinaContextConfig(IPath baseDir, IPath webappsDir, IProgressMonitor monitor) {
    if (Trace.isTraceEnabled())
        Trace.trace(Trace.FINER, "Apply context configurations");
    IPath confDir = baseDir.append("conf");
    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(confDir.append("server.xml").toFile()));
        ServerInstance publishedInstance = new ServerInstance(publishedServer, null, null);
        monitor.worked(100);
        boolean modified = false;
        MultiStatus ms = new MultiStatus(TomcatPlugin.PLUGIN_ID, 0, Messages.publishContextConfigTask, null);
        Context[] contexts = publishedInstance.getContexts();
        if (contexts != null) {
            for (int i = 0; i < contexts.length; i++) {
                Context context = contexts[i];
                monitor.subTask(NLS.bind(Messages.checkingContextTask, new String[] { context.getPath() }));
                if (addCatalinaContextConfig(webappsDir, context, ms)) {
                    modified = true;
                }
            }
        }
        monitor.worked(100);
        if (modified) {
            monitor.subTask(Messages.savingContextConfigTask);
            factory.save(confDir.append("server.xml").toOSString());
        }
        // If problem(s) occurred adding context configurations, return error status
        if (ms.getChildren().length > 0) {
            return ms;
        }
        if (Trace.isTraceEnabled())
            Trace.trace(Trace.FINER, "Server.xml updated with context.xml configurations");
        return Status.OK_STATUS;
    } catch (Exception e) {
        Trace.trace(Trace.WARNING, "Could not apply context configurations to published Tomcat configuration from " + 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();
    }
}
Also used : Context(org.eclipse.jst.server.tomcat.core.internal.xml.server40.Context) MultiStatus(org.eclipse.core.runtime.MultiStatus) IStatus(org.eclipse.core.runtime.IStatus) Status(org.eclipse.core.runtime.Status) IPath(org.eclipse.core.runtime.IPath) Server(org.eclipse.jst.server.tomcat.core.internal.xml.server40.Server) Factory(org.eclipse.jst.server.tomcat.core.internal.xml.Factory) MultiStatus(org.eclipse.core.runtime.MultiStatus) FileInputStream(java.io.FileInputStream) IOException(java.io.IOException) FileNotFoundException(java.io.FileNotFoundException) SAXException(org.xml.sax.SAXException) ServerInstance(org.eclipse.jst.server.tomcat.core.internal.xml.server40.ServerInstance)

Example 19 with Context

use of org.eclipse.jst.server.tomcat.core.internal.xml.server32.Context in project webtools.servertools by eclipse.

the class TomcatVersionHelper method loadContextFile.

private static Context loadContextFile(File contextFile) {
    FileInputStream fis = null;
    Context context = null;
    if (contextFile != null && contextFile.exists()) {
        try {
            Factory factory = new Factory();
            factory.setPackageName("org.eclipse.jst.server.tomcat.core.internal.xml.server40");
            fis = new FileInputStream(contextFile);
            context = (Context) factory.loadDocument(fis);
            if (context != null) {
                String path = context.getPath();
                // If path attribute is not set, derive from file name
                if (path == null) {
                    String fileName = contextFile.getName();
                    path = fileName.substring(0, fileName.length() - ".xml".length());
                    if ("ROOT".equals(path))
                        path = "";
                    // Assuming this use for "#" since Tomcat has "reserved" this use of "#" since 5.5.
                    path = path.replace('#', '/');
                    context.setPath("/" + path);
                }
            }
        } catch (Exception e) {
            // may be a spurious xml file in the host dir?
            Trace.trace(Trace.FINER, "Unable to read context " + contextFile.getAbsolutePath());
        } finally {
            try {
                fis.close();
            } catch (IOException e) {
            // ignore
            }
        }
    }
    return context;
}
Also used : Context(org.eclipse.jst.server.tomcat.core.internal.xml.server40.Context) Factory(org.eclipse.jst.server.tomcat.core.internal.xml.Factory) IOException(java.io.IOException) FileInputStream(java.io.FileInputStream) IOException(java.io.IOException) FileNotFoundException(java.io.FileNotFoundException) SAXException(org.xml.sax.SAXException)

Example 20 with Context

use of org.eclipse.jst.server.tomcat.core.internal.xml.server32.Context in project webtools.servertools by eclipse.

the class TomcatVersionHelper method addCatalinaContextConfig.

/**
 * If the specified Context is linked to a project, try to
 * update it with any configuration from a META-INF/context.xml found
 * relative to the specified web applications directory and context docBase.
 *
 * @param webappsDir Path to server's web applications directory.
 * @param context Context object to receive context.xml contents.
 * @param ms MultiStatus object to receive error status.
 * @return Returns true if context is modified.
 */
private static boolean addCatalinaContextConfig(IPath webappsDir, Context context, MultiStatus ms) {
    boolean modified = false;
    String source = context.getSource();
    if (source != null && source.length() > 0) {
        File docBase = new File(context.getDocBase());
        if (!docBase.isAbsolute())
            docBase = new File(webappsDir.toOSString(), docBase.getPath());
        try {
            Context contextConfig = loadCatalinaContextConfig(docBase);
            if (null != contextConfig) {
                if (context.hasChildNodes())
                    context.removeChildren();
                contextConfig.copyChildrenTo(context);
                Map attrs = contextConfig.getAttributes();
                Iterator iter = attrs.keySet().iterator();
                while (iter.hasNext()) {
                    String name = (String) iter.next();
                    if (!name.equalsIgnoreCase("path") && !name.equalsIgnoreCase("docBase") && !name.equalsIgnoreCase("source")) {
                        String value = (String) attrs.get(name);
                        context.setAttributeValue(name, value);
                    }
                }
                modified = true;
            }
        } catch (Exception e) {
            String contextPath = context.getPath();
            if (contextPath.startsWith("/")) {
                contextPath = contextPath.substring(1);
            }
            Trace.trace(Trace.SEVERE, "Error reading context.xml file for " + contextPath, e);
            IStatus s = new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorCouldNotLoadContextXml, contextPath), e);
            ms.add(s);
        }
    }
    return modified;
}
Also used : Context(org.eclipse.jst.server.tomcat.core.internal.xml.server40.Context) MultiStatus(org.eclipse.core.runtime.MultiStatus) IStatus(org.eclipse.core.runtime.IStatus) Status(org.eclipse.core.runtime.Status) IStatus(org.eclipse.core.runtime.IStatus) Iterator(java.util.Iterator) JarFile(java.util.jar.JarFile) File(java.io.File) HashMap(java.util.HashMap) Map(java.util.Map) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) IOException(java.io.IOException) FileNotFoundException(java.io.FileNotFoundException) SAXException(org.xml.sax.SAXException)

Aggregations

Context (org.eclipse.jst.server.tomcat.core.internal.xml.server40.Context)58 Context (com.microsoft.z3.Context)36 CoreException (org.eclipse.core.runtime.CoreException)34 Test (org.junit.Test)24 BoolExpr (com.microsoft.z3.BoolExpr)23 List (java.util.List)20 IOException (java.io.IOException)18 ServerInstance (org.eclipse.jst.server.tomcat.core.internal.xml.server40.ServerInstance)17 Context (org.kie.workbench.common.dmn.api.definition.v1_1.Context)17 HashMap (java.util.HashMap)16 Map (java.util.Map)14 File (java.io.File)13 ArrayList (java.util.ArrayList)13 Solver (com.microsoft.z3.Solver)12 Status (com.microsoft.z3.Status)12 IPath (org.eclipse.core.runtime.IPath)11 IStatus (org.eclipse.core.runtime.IStatus)11 Status (org.eclipse.core.runtime.Status)11 Factory (org.eclipse.jst.server.tomcat.core.internal.xml.Factory)11 Z3Exception (com.microsoft.z3.Z3Exception)9