Search in sources :

Example 81 with Context

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

the class Tomcat85Configuration 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 project refs", e);
    }
    return list;
}
Also used : Context(org.eclipse.jst.server.tomcat.core.internal.xml.server40.Context) ArrayList(java.util.ArrayList) CoreException(org.eclipse.core.runtime.CoreException)

Example 82 with Context

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

the class Tomcat85Configuration method addWebModule.

/**
 * @see ITomcatConfigurationWorkingCopy#addWebModule(int, ITomcatWebModule)
 */
public void addWebModule(int index, ITomcatWebModule module) {
    try {
        Context context = serverInstance.createContext(index);
        if (context != null) {
            context.setDocBase(module.getDocumentBase());
            context.setPath(module.getPath());
            context.setReloadable(module.isReloadable() ? "true" : "false");
            if (module.getMemento() != null && module.getMemento().length() > 0)
                context.setSource(module.getMemento());
            isServerDirty = true;
            firePropertyChangeEvent(ADD_WEB_MODULE_PROPERTY, null, module);
        }
    } catch (Exception e) {
        Trace.trace(Trace.SEVERE, "Error adding web module " + module.getPath(), e);
    }
}
Also used : Context(org.eclipse.jst.server.tomcat.core.internal.xml.server40.Context) CoreException(org.eclipse.core.runtime.CoreException)

Example 83 with Context

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

the class TomcatPublishModuleVisitor method includeProjectContextXml.

boolean includeProjectContextXml(IVirtualComponent component, Context context) throws CoreException {
    boolean dirty = false;
    // handle project context.xml
    Context projectContext = getProjectContextXml(component);
    if (projectContext != null) {
        // copy configuration to server context
        projectContext.copyChildrenTo(context);
        Map attrs = projectContext.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);
                String actualValue = context.getAttributeValue(name);
                if (!value.equals(actualValue)) {
                    context.setAttributeValue(name, value);
                    dirty = true;
                }
            }
        }
    }
    return dirty;
}
Also used : Context(org.eclipse.jst.server.tomcat.core.internal.xml.server40.Context) Iterator(java.util.Iterator) HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap) Map(java.util.Map)

Example 84 with Context

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

the class TomcatPublishModuleVisitor method endVisitWebComponent.

/**
 * {@inheritDoc}
 */
public void endVisitWebComponent(IVirtualComponent component) throws CoreException {
    // track context changes, don't rewrite if not needed
    boolean dirty = false;
    IModule module = ServerUtil.getModule(component.getProject());
    // we need this for the user-specified context path
    Context context = findContext(module);
    if (context == null) {
        String name = module != null ? module.getName() : component.getName();
        Trace.trace(Trace.SEVERE, "Could not find context for module " + name);
        throw new CoreException(new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorPublishContextNotFound, name), null));
    }
    dirty = includeProjectContextXml(component, context);
    dirty = updateDocBaseAndPath(component, context);
    context.getResources().setClassName("org.eclipse.jst.server.tomcat.loader.WtpDirContext");
    Loader loader = context.getLoader();
    loader.setClassName("org.eclipse.jst.server.tomcat.loader.WtpWebappLoader");
    // required for tomcat 5.5.20 due to the change in
    // http://issues.apache.org/bugzilla/show_bug.cgi?id=39704
    loader.setUseSystemClassLoaderAsParent(Boolean.FALSE.toString());
    // Build the virtual classPath setting
    // Filled with classes entries first, then jar entries added
    StringBuffer vcBuffer = new StringBuffer();
    // Filled with jar enteries only
    StringBuffer vcJarBuffer = new StringBuffer();
    // Build list of additional resource paths and check for additional jars
    StringBuffer rpBuffer = new StringBuffer();
    boolean isTomcat7 = tomcatVersion.startsWith("7.");
    // Add WEB-INF/classes elements to both settings
    for (Iterator iterator = virtualClassClasspathElements.iterator(); iterator.hasNext(); ) {
        Object element = iterator.next();
        if (vcBuffer.length() > 0) {
            vcBuffer.append(";");
        }
        vcBuffer.append(element);
        if (isTomcat7) {
            if (rpBuffer.length() > 0) {
                rpBuffer.append(";");
            }
            // Add to resource paths too, so resource artifacts can be found
            rpBuffer.append("/WEB-INF/classes").append("|").append(element);
        }
    }
    for (Iterator iterator = virtualJarClasspathElements.iterator(); iterator.hasNext(); ) {
        vcJarBuffer.append(iterator.next());
        if (iterator.hasNext()) {
            vcJarBuffer.append(";");
        }
    }
    virtualClassClasspathElements.clear();
    virtualJarClasspathElements.clear();
    Set<String> rtPathsProcessed = new HashSet<String>();
    Set<String> locationsIncluded = new HashSet<String>();
    String docBase = context.getDocBase();
    locationsIncluded.add(docBase);
    Map<String, String> retryLocations = new HashMap<String, String>();
    IVirtualResource[] virtualResources = component.getRootFolder().getResources("");
    // Loop over the module's resources
    for (int i = 0; i < virtualResources.length; i++) {
        String rtPath = virtualResources[i].getRuntimePath().toString();
        // If this runtime path has not yet been processed
        if (!rtPathsProcessed.contains(rtPath)) {
            // If not a Java related resource
            if (!"/WEB-INF/classes".equals(rtPath)) {
                // Get all resources for this runtime path
                IResource[] underlyingResources = virtualResources[i].getUnderlyingResources();
                // to a mapping in the .components file
                if ("/".equals(rtPath)) {
                    for (int j = 0; j < underlyingResources.length; j++) {
                        IPath resLoc = underlyingResources[j].getLocation();
                        String location = resLoc.toOSString();
                        if (!location.equals(docBase)) {
                            if (rpBuffer.length() != 0) {
                                rpBuffer.append(";");
                            }
                            // Add this location to extra paths setting
                            rpBuffer.append(location);
                            // Add to the set of locations included
                            locationsIncluded.add(location);
                            // If a "WEB-INF/classes" exists and is a directory, add to virtual classpath
                            File webInfClasses = resLoc.append("WEB-INF/classes").toFile();
                            if (webInfClasses.exists() && webInfClasses.isDirectory()) {
                                if (vcBuffer.length() != 0) {
                                    vcBuffer.append(";");
                                }
                                vcBuffer.append(webInfClasses.getPath());
                            }
                            // Check if this extra content location contains jars
                            File webInfLib = resLoc.append("WEB-INF/lib").toFile();
                            // its jars to the virtual classpath
                            if (webInfLib.exists() && webInfLib.isDirectory()) {
                                String[] jars = webInfLib.list(new FilenameFilter() {

                                    public boolean accept(File dir, String name) {
                                        File f = new File(dir, name);
                                        return f.isFile() && name.endsWith(".jar");
                                    }
                                });
                                for (int k = 0; k < jars.length; k++) {
                                    if (vcJarBuffer.length() != 0) {
                                        vcJarBuffer.append(";");
                                    }
                                    vcJarBuffer.append(webInfLib.getPath() + File.separator + jars[k]);
                                }
                            }
                        }
                    }
                } else // Else this runtime path is something other than "/"
                {
                    int idx = rtPath.lastIndexOf('/');
                    // If a "normal" runtime path
                    if (idx >= 0) {
                        // Get the name of the last segment in the runtime path
                        String lastSegment = rtPath.substring(idx + 1);
                        // Check the underlying resources to determine which correspond to mappings
                        for (int j = 0; j < underlyingResources.length; j++) {
                            IPath resLoc = underlyingResources[j].getLocation();
                            String location = resLoc.toOSString();
                            // from the .contents file.
                            if (!lastSegment.equals(resLoc.lastSegment())) {
                                if (rpBuffer.length() != 0) {
                                    rpBuffer.append(";");
                                }
                                // Add this location to extra paths setting
                                rpBuffer.append(rtPath).append("|").append(location);
                                // Add to the set of locations included
                                locationsIncluded.add(location);
                                // Check if this extra content location contains jars
                                File webInfLib = null;
                                File webInfClasses = null;
                                if ("/WEB-INF".equals(rtPath)) {
                                    webInfLib = resLoc.append("lib").toFile();
                                    webInfClasses = resLoc.append("classes").toFile();
                                } else if ("/WEB-INF/lib".equals(rtPath)) {
                                    webInfLib = resLoc.toFile();
                                } else if ("/WEB-INF/classes".equals(rtPath)) {
                                    webInfClasses = resLoc.toFile();
                                }
                                // If a "WEB-INF/classes" exists and is a directory, add to virtual classpath
                                if (webInfClasses != null && webInfClasses.exists() && webInfClasses.isDirectory()) {
                                    if (vcBuffer.length() != 0) {
                                        vcBuffer.append(";");
                                    }
                                    vcBuffer.append(webInfClasses.getPath());
                                }
                                // its jars to the virtual classpath
                                if (webInfLib != null && webInfLib.exists() && webInfLib.isDirectory()) {
                                    String[] jars = webInfLib.list(new FilenameFilter() {

                                        public boolean accept(File dir, String name) {
                                            File f = new File(dir, name);
                                            return f.isFile() && name.endsWith(".jar");
                                        }
                                    });
                                    for (int k = 0; k < jars.length; k++) {
                                        if (vcJarBuffer.length() != 0) {
                                            vcJarBuffer.append(";");
                                        }
                                        vcJarBuffer.append(webInfLib.getPath() + File.separator + jars[k]);
                                    }
                                }
                            } else // Else last segment of runtime path did match the last segment
                            // of the location.  We likely have a subfolder of a mapping
                            // that matches a portion of the runtime path.
                            {
                                // Since we can't be sure, save so it can be check again later
                                retryLocations.put(location, rtPath);
                            }
                        }
                    }
                }
            }
            // Add the runtime path to those already processed
            rtPathsProcessed.add(rtPath);
        }
    }
    // If there are locations to retry, add any not yet included in extra paths setting
    if (!retryLocations.isEmpty()) {
        // Remove retry locations already included in the extra paths
        for (Iterator iterator = retryLocations.keySet().iterator(); iterator.hasNext(); ) {
            String location = (String) iterator.next();
            for (Iterator iterator2 = locationsIncluded.iterator(); iterator2.hasNext(); ) {
                String includedLocation = (String) iterator2.next();
                if (location.equals(includedLocation) || location.startsWith(includedLocation + File.separator)) {
                    iterator.remove();
                    break;
                }
            }
        }
        // If any entries are left, include them in the extra paths
        if (!retryLocations.isEmpty()) {
            for (Iterator iterator = retryLocations.entrySet().iterator(); iterator.hasNext(); ) {
                Map.Entry entry = (Map.Entry) iterator.next();
                String location = (String) entry.getKey();
                String rtPath = (String) entry.getValue();
                if (rpBuffer.length() != 0) {
                    rpBuffer.append(";");
                }
                rpBuffer.append(rtPath).append("|").append(location);
                // Check if this extra content location contains jars
                File webInfLib = null;
                File webInfClasses = null;
                if ("/WEB-INF".equals(rtPath)) {
                    webInfLib = new File(location, "lib");
                    webInfClasses = new File(location, "classes");
                } else if ("/WEB-INF/lib".equals(rtPath)) {
                    webInfLib = new File(location);
                } else if ("/WEB-INF/classes".equals(rtPath)) {
                    webInfClasses = new File(location);
                }
                // If a "WEB-INF/classes" exists and is a directory, add to virtual classpath
                if (webInfClasses != null && webInfClasses.exists() && webInfClasses.isDirectory()) {
                    if (vcBuffer.length() != 0) {
                        vcBuffer.append(";");
                    }
                    vcBuffer.append(webInfClasses.getPath());
                }
                // its jars to the virtual classpath
                if (webInfLib != null && webInfLib.exists() && webInfLib.isDirectory()) {
                    String[] jars = webInfLib.list(new FilenameFilter() {

                        public boolean accept(File dir, String name) {
                            File f = new File(dir, name);
                            return f.isFile() && name.endsWith(".jar");
                        }
                    });
                    for (int k = 0; k < jars.length; k++) {
                        if (vcJarBuffer.length() != 0) {
                            vcJarBuffer.append(";");
                        }
                        vcJarBuffer.append(webInfLib.getPath() + File.separator + jars[k]);
                    }
                }
            }
        }
    }
    if (!virtualDependentResources.isEmpty()) {
        for (Iterator iterator = virtualDependentResources.entrySet().iterator(); iterator.hasNext(); ) {
            Map.Entry entry = (Map.Entry) iterator.next();
            String rtPath = (String) entry.getKey();
            List locations = (List) entry.getValue();
            for (Iterator iterator2 = locations.iterator(); iterator2.hasNext(); ) {
                String location = (String) iterator2.next();
                if (rpBuffer.length() != 0) {
                    rpBuffer.append(";");
                }
                if (rtPath.length() > 0) {
                    rpBuffer.append(entry.getKey()).append("|").append(location);
                } else {
                    rpBuffer.append(location);
                }
            }
        }
    }
    virtualDependentResources.clear();
    // Combine the classes and jar virtual classpaths
    if (vcJarBuffer.length() > 0) {
        if (vcBuffer.length() > 0) {
            vcBuffer.append(';');
        }
        vcBuffer.append(vcJarBuffer);
    }
    String vcp = vcBuffer.toString();
    String oldVcp = loader.getVirtualClasspath();
    if (!vcp.equals(oldVcp)) {
        // save only if needed
        dirty = true;
        loader.setVirtualClasspath(vcp);
        context.getResources().setVirtualClasspath(vcp);
    }
    String resPaths = rpBuffer.toString();
    String oldResPaths = context.getResources().getExtraResourcePaths();
    if (!resPaths.equals(oldResPaths)) {
        dirty = true;
        context.getResources().setExtraResourcePaths(resPaths);
    }
    if (enableMetaInfResources) {
        context.findElement("JarScanner").setAttributeValue("scanAllDirectories", "true");
    }
    if (dirty) {
    // TODO If writing to separate context XML files, save "dirty" status for later use
    }
}
Also used : IModule(org.eclipse.wst.server.core.IModule) HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap) Loader(org.eclipse.jst.server.tomcat.core.internal.xml.server40.Loader) FilenameFilter(java.io.FilenameFilter) Iterator(java.util.Iterator) ArrayList(java.util.ArrayList) List(java.util.List) HashSet(java.util.HashSet) LinkedHashSet(java.util.LinkedHashSet) Context(org.eclipse.jst.server.tomcat.core.internal.xml.server40.Context) IStatus(org.eclipse.core.runtime.IStatus) Status(org.eclipse.core.runtime.Status) IPath(org.eclipse.core.runtime.IPath) IVirtualResource(org.eclipse.wst.common.componentcore.resources.IVirtualResource) CoreException(org.eclipse.core.runtime.CoreException) IVirtualFile(org.eclipse.wst.common.componentcore.resources.IVirtualFile) File(java.io.File) HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap) Map(java.util.Map) IResource(org.eclipse.core.resources.IResource)

Example 85 with Context

use of org.eclipse.jst.server.tomcat.core.internal.xml.server32.Context 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;
}
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) IModule(org.eclipse.wst.server.core.IModule) 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) 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)

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