Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * #%L
   * *********************************************************************************************************************
   *
   * NorthernWind - lightweight CMS
   * http://northernwind.tidalwave.it - hg clone https://bitbucket.org/tidalwave/northernwind-src
   * %%
   * Copyright (C) 2011 - 2014 Tidalwave s.a.s. (http://tidalwave.it)
   * %%
  * *********************************************************************************************************************
  *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
  * the License. You may obtain a copy of the License at
  *
  *     http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
  * specific language governing permissions and limitations under the License.
  *
  * *********************************************************************************************************************
  *
  * $Id: XsltMacroFilter.java,v f214f4c8488f 2014/01/03 18:03:50 fabrizio $
  *
  * *********************************************************************************************************************
  * #L%
  */
 package it.tidalwave.northernwind.core.impl.filter;
 
 import  javax.annotation.Nonnull;
 import  it.tidalwave.util.NotFoundException;
 import static org.springframework.core.Ordered.*;

Author(s):
Fabrizio Giudici
Version:
$Id: XsltMacroFilter.java,v f214f4c8488f 2014/01/03 18:03:50 fabrizio $ /
 
 public class XsltMacroFilter implements Filter
   {
     private static final String XSLT_TEMPLATES_PATH = "/XsltTemplates/.*";
 
     private static final String DOCTYPE_HTML = "<!DOCTYPE html>";
 
     @Inject @Nonnull
     private ApplicationContext context;
 
     @Inject @Nonnull
     private DocumentBuilderFactory factory;
 
     @Inject @Nonnull
 
     @Inject @Nonnull
     private Provider<SiteProvidersiteProvider;
 
     private String xslt = "";
 
     private volatile boolean initialized = false;

    
/
 
    // FIXME: this should be shared between instances
    private void initialize()
      throws IOException, NotFoundException
      {
        log.info("Retrieving XSLT templates");
        final String template = IOUtils.toString(getClass().getResourceAsStream("/it/tidalwave/northernwind/core/impl/filter/XsltTemplate.xslt"));
        final StringBuilder xsltBuffer = new StringBuilder();
        for (final Resource resource : .get().getSite().find(Resource.class).withRelativePath().results())
          {
            final ResourceFile file = resource.getFile();
            log.info(">>>> {}"file.getPath().asString());
            xsltBuffer.append(file.asText("UTF-8"));
          }
        final ST t = new ST(template'%''%').add("content"xsltBuffer.toString());
         = t.render();
      }

    
/
    @Override @Nonnull
    public String filter (final @Nonnull String textfinal @Nonnull String mimeType)
      {
        if (!mimeType.equals("application/xhtml+xml"))
          {
            log.warn("Cannot filter resources not in XHTML: {}"mimeType);
            return text;
          }
        // FIXME: buggy and cumbersome
        if (!)
          {
            try
              {
                synchronized (this)
                  {
                    if (!)
                      {
                        initialize();
                         = true;
                      }
                  }
              }
            catch (IOException | NotFoundException e)
              {
                throw new RuntimeException(e);
              }
          }
        try
          {
            final DOMResult result = new DOMResult();
            final Transformer transformer = createTransformer();
            // Fix for NW-100
            transformer.transform(new DOMSource(stringToNode(text.replace("xml:lang""xml_lang"))), result);
            final StringWriter stringWriter = new StringWriter();
            if (text.startsWith())
              {
                stringWriter.append().append("\n");
              }
            // Fix for NW-96
            final XhtmlMarkupSerializer xhtmlSerializer = new XhtmlMarkupSerializer(stringWriter);
            xhtmlSerializer.serialize(result.getNode());
            return stringWriter.toString().replace("xml_lang""xml:lang").replace(" xmlns=\"\""""); // FIXME:
          }
        catch (SAXParseException e)
          {
            log.error("XML parse error: {} at l{}:c{}"e.getMessage(), e.getLineNumber(), e.getColumnNumber());
            log.error(text);
            throw new RuntimeException(e);
          }
        catch (TransformerException e)
          {
            log.error("XSL error: {} at {}"e.toString(), e.getLocationAsString());
            log.error();
            throw new RuntimeException(e);
          }
        catch (IOException | SAXException | ParserConfigurationException e)
          {
            throw new RuntimeException(e);
          }
      }

    
/
    @Nonnull
    private Transformer createTransformer()
      {
        final Source transformation = new StreamSource(new StringReader());
        final Transformer transformer = .newTransformer(transformation);
        try
          {
            final URIResolver uriResolver = .getBean(URIResolver.class);
            log.trace("Using URIResolver: {}"uriResolver.getClass());
            transformer.setURIResolver(uriResolver);
          }
        catch (NoSuchBeanDefinitionException e)
          {
            // ok, not installed
          }
        return transformer;
      }

    
/
    @Nonnull
    private Node stringToNode (final @Nonnull String string)
      {
        .setValidating(false);
        final DocumentBuilder builder = .newDocumentBuilder();
        final InputSource source = new InputSource(new StringReader(string));
        final Document document = builder.parse(source);
        return document;
      }
  }
New to GrepCode? Check out our FAQ X