Search in sources :

Example 6 with Filters

use of org.jdom2.filter.Filters in project jspwiki by apache.

the class ModuleBean method doGet.

/**
 * {@inheritDoc}
 */
public String doGet(WikiContext context) {
    Collection<T> filters = modules();
    Element root = title();
    Element tb = containerForModuleDetail(root);
    Element trHead = heading();
    tb.addContent(trHead);
    for (T info : filters) {
        Element tr = rowBody(info);
        tb.addContent(tr);
    }
    return XhtmlUtil.serialize(root, XhtmlUtil.EXPAND_EMPTY_NODES);
}
Also used : Element(org.jdom2.Element)

Example 7 with Filters

use of org.jdom2.filter.Filters in project jspwiki by apache.

the class XmlUtil method parse.

/**
 * Parses the given XML file and returns the requested nodes. If there's an error accessing or parsing the file, an
 * empty list is returned.
 *
 * @param xml file to parse; matches all resources from classpath, filters repeated items.
 * @param requestedNodes requestd nodes on the xml file
 * @return the requested nodes of the XML file.
 */
public static List<Element> parse(String xml, String requestedNodes) {
    if (StringUtils.isNotEmpty(xml) && StringUtils.isNotEmpty(requestedNodes)) {
        Set<Element> readed = new HashSet<Element>();
        SAXBuilder builder = new SAXBuilder();
        try {
            Enumeration<URL> resources = XmlUtil.class.getClassLoader().getResources(xml);
            while (resources.hasMoreElements()) {
                URL resource = resources.nextElement();
                log.debug("reading " + resource.toString());
                Document doc = builder.build(resource);
                XPathFactory xpfac = XPathFactory.instance();
                XPathExpression<Element> xp = xpfac.compile(requestedNodes, Filters.element());
                // filter out repeated items
                readed.addAll(xp.evaluate(doc));
            }
            return new ArrayList<Element>(readed);
        } catch (IOException ioe) {
            log.error("Couldn't load all " + xml + " resources", ioe);
        } catch (JDOMException jdome) {
            log.error("error parsing " + xml + " resources", jdome);
        }
    }
    return Collections.<Element>emptyList();
}
Also used : SAXBuilder(org.jdom2.input.SAXBuilder) Element(org.jdom2.Element) ArrayList(java.util.ArrayList) IOException(java.io.IOException) Document(org.jdom2.Document) JDOMException(org.jdom2.JDOMException) URL(java.net.URL) XPathFactory(org.jdom2.xpath.XPathFactory) HashSet(java.util.HashSet)

Example 8 with Filters

use of org.jdom2.filter.Filters in project mycore by MyCoRe-Org.

the class MCRAutoDeploy method registerWebFragment.

private void registerWebFragment(final ServletContext servletContext, final MCRComponent comp) {
    if (!isHandledByServletContainer(servletContext, comp)) {
        try {
            final JarFile jar = new JarFile(comp.getJarFile());
            Collections.list(jar.entries()).stream().filter(file -> file.getName().equals(WEB_FRAGMENT)).findFirst().ifPresent(file -> {
                final SAXBuilder builder = new SAXBuilder();
                try {
                    final InputStream is = jar.getInputStream(file);
                    final Document doc = builder.build(is);
                    final Element root = doc.getRootElement();
                    final Namespace ns = root.getNamespace();
                    final List<Element> filters = root.getChildren("filter", ns);
                    final List<Element> fmaps = root.getChildren("filter-mapping", ns);
                    filters.forEach(filter -> {
                        final String name = filter.getChildText("filter-name", ns);
                        final String className = filter.getChildText("filter-class", ns);
                        fmaps.stream().filter(mapping -> mapping.getChildText("filter-name", ns).equals(name)).findFirst().ifPresent(mapping -> {
                            LOGGER.info("Register Filter {} ({})...", name, className);
                            Optional.ofNullable(servletContext.addFilter(name, className)).<Runnable>map(fr -> () -> {
                                final List<Element> dispatchers = mapping.getChildren("dispatcher", ns);
                                final EnumSet<DispatcherType> eDT = dispatchers.isEmpty() ? null : dispatchers.stream().map(d -> DispatcherType.valueOf(d.getTextTrim())).collect(Collectors.toCollection(() -> EnumSet.noneOf(DispatcherType.class)));
                                final List<Element> servletNames = mapping.getChildren("servlet-name", ns);
                                if (!servletNames.isEmpty()) {
                                    fr.addMappingForServletNames(eDT, false, servletNames.stream().map(sn -> {
                                        LOGGER.info("...add servlet mapping: {}", sn.getTextTrim());
                                        return sn.getTextTrim();
                                    }).toArray(String[]::new));
                                }
                                final List<Element> urlPattern = mapping.getChildren("url-pattern", ns);
                                if (!urlPattern.isEmpty()) {
                                    fr.addMappingForUrlPatterns(eDT, false, urlPattern.stream().map(url -> {
                                        LOGGER.info("...add url mapping: {}", url.getTextTrim());
                                        return url.getTextTrim();
                                    }).toArray(String[]::new));
                                }
                            }).orElse(() -> LOGGER.warn("Filter {} already registered!", name)).run();
                        });
                    });
                    final List<Element> servlets = root.getChildren("servlet", ns);
                    final List<Element> smaps = root.getChildren("servlet-mapping", ns);
                    servlets.forEach(servlet -> {
                        final String name = servlet.getChildText("servlet-name", ns);
                        final String className = servlet.getChildText("servlet-class", ns);
                        smaps.stream().filter(mapping -> mapping.getChildText("servlet-name", ns).equals(name)).findFirst().ifPresent(mapping -> {
                            LOGGER.info("Register Servlet {} ({})...", name, className);
                            Optional.ofNullable(servletContext.addServlet(name, className)).<Runnable>map(sr -> () -> mapping.getChildren("url-pattern", ns).stream().forEach(url -> {
                                LOGGER.info("...add url mapping: {}", url.getTextTrim());
                                sr.addMapping(url.getTextTrim());
                            })).orElse(() -> LOGGER.error("Servlet{} already registered!", name)).run();
                        });
                    });
                } catch (IOException | JDOMException e) {
                    LOGGER.error("Couldn't parse " + WEB_FRAGMENT, e);
                }
            });
            jar.close();
        } catch (final IOException e) {
            LOGGER.error("Couldn't parse JAR!", e);
        }
    }
}
Also used : SAXBuilder(org.jdom2.input.SAXBuilder) MCRRuntimeComponentDetector(org.mycore.common.config.MCRRuntimeComponentDetector) MCRComponent(org.mycore.common.config.MCRComponent) FileOutputStream(java.io.FileOutputStream) IOException(java.io.IOException) JarFile(java.util.jar.JarFile) Collectors(java.util.stream.Collectors) File(java.io.File) Document(org.jdom2.Document) List(java.util.List) Logger(org.apache.logging.log4j.Logger) JDOMException(org.jdom2.JDOMException) Optional(java.util.Optional) DispatcherType(javax.servlet.DispatcherType) ServletContext(javax.servlet.ServletContext) Namespace(org.jdom2.Namespace) MCRStartupHandler(org.mycore.common.events.MCRStartupHandler) Collections(java.util.Collections) LogManager(org.apache.logging.log4j.LogManager) EnumSet(java.util.EnumSet) InputStream(java.io.InputStream) Element(org.jdom2.Element) SAXBuilder(org.jdom2.input.SAXBuilder) InputStream(java.io.InputStream) Element(org.jdom2.Element) IOException(java.io.IOException) JarFile(java.util.jar.JarFile) Document(org.jdom2.Document) JDOMException(org.jdom2.JDOMException) Namespace(org.jdom2.Namespace) DispatcherType(javax.servlet.DispatcherType)

Aggregations

Element (org.jdom2.Element)8 IOException (java.io.IOException)2 ArrayList (java.util.ArrayList)2 Document (org.jdom2.Document)2 JDOMException (org.jdom2.JDOMException)2 SAXBuilder (org.jdom2.input.SAXBuilder)2 File (java.io.File)1 FileOutputStream (java.io.FileOutputStream)1 InputStream (java.io.InputStream)1 URL (java.net.URL)1 Collections (java.util.Collections)1 EnumSet (java.util.EnumSet)1 HashSet (java.util.HashSet)1 List (java.util.List)1 Optional (java.util.Optional)1 Properties (java.util.Properties)1 JarFile (java.util.jar.JarFile)1 Collectors (java.util.stream.Collectors)1 DispatcherType (javax.servlet.DispatcherType)1 ServletContext (javax.servlet.ServletContext)1