Package com.eclipsesource.jaxrs.connector.example.mvc

Source Code of com.eclipsesource.jaxrs.connector.example.mvc.MustacheTemplateProcessor

package com.eclipsesource.jaxrs.connector.example.mvc;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.ext.Provider;

import org.glassfish.jersey.server.mvc.Viewable;
import org.glassfish.jersey.server.mvc.spi.TemplateProcessor;

import com.github.mustachejava.DefaultMustacheFactory;
import com.github.mustachejava.Mustache;
import com.github.mustachejava.MustacheFactory;

@Provider
public class MustacheTemplateProcessor implements TemplateProcessor<Mustache> {

  private final MustacheFactory mustacheFactory;

  public MustacheTemplateProcessor() {
    mustacheFactory = new DefaultMustacheFactory();
  }

  @Override
  public Mustache resolve( String name, MediaType mediaType ) {
    InputStream stream = MustacheTemplateProcessor.class.getResourceAsStream( name );
    return mustacheFactory.compile( new InputStreamReader( stream ), name );
  }

  @Override
  public void writeTo( Mustache mustache,
                       Viewable viewable,
                       MediaType mediaType,
                       MultivaluedMap<String, Object> httpHeaders,
                       OutputStream out ) throws IOException
  {
    Charset encoding = createContentType( mediaType, httpHeaders );
    mustache.execute( new OutputStreamWriter( out, encoding ), viewable.getModel() ).flush();
  }

  private Charset createContentType( MediaType mediaType, MultivaluedMap<String, Object> httpHeaders ) {
    Charset encoding;
    final String charset = mediaType.getParameters().get( MediaType.CHARSET_PARAMETER );
    MediaType finalMediaType;
    if( charset == null ) {
      encoding = Charset.forName( "utf-8" );
      Map<String, String> params = new HashMap<String, String>( mediaType.getParameters() );
      params.put( MediaType.CHARSET_PARAMETER, encoding.name() );
      finalMediaType = new MediaType( mediaType.getType(), mediaType.getSubtype(), params );
    } else {
      encoding = Charset.forName( charset );
      finalMediaType = mediaType;
    }
    List<Object> typeList = new ArrayList<Object>( 1 );
    typeList.add( finalMediaType.toString() );
    httpHeaders.put( HttpHeaders.CONTENT_TYPE, typeList );
    return encoding;
  }
}
TOP

Related Classes of com.eclipsesource.jaxrs.connector.example.mvc.MustacheTemplateProcessor

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.