All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.ja.smarkdown.Raw Maven / Gradle / Ivy

There is a newer version: 0.8.0
Show newest version
package com.ja.smarkdown;

import java.io.IOException;
import java.io.InputStream;

import javax.inject.Inject;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import lombok.extern.slf4j.Slf4j;

import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;

import com.ja.smarkdown.load.ResourceLoader;
import com.ja.smarkdown.model.ResourceInfo;

@WebServlet(urlPatterns = { "/raw/*" })
@Slf4j
public class Raw extends HttpServlet {

	private static final long serialVersionUID = 1L;
	@Inject
	private ResourceLoader resourceLoader;

	@Override
	protected void doGet(final HttpServletRequest req,
			final HttpServletResponse resp) throws ServletException,
			IOException {
		final String path = StringUtils.removeStart(req.getPathInfo(), "/");
		log.debug("path={}", path);
		final InputStream in = load(path);
		if (in != null) {
			try (InputStream i = in) {
				resp.setContentType(resolveContentType(path));
				IOUtils.copy(i, resp.getOutputStream());
			}
		} else {
			super.doGet(req, resp);
		}
	}

	private String resolveContentType(final String path) {
		final String extension = StringUtils.substringAfter(path, ".")
				.toLowerCase();
		switch (extension) {
		case "md":
			return "text/plain";
		case "txt":
			return "text/plain";
		case "html":
			return "text/html";
		case "htm":
			return "text/html";
		case "xml":
			return "text/xml";
		case "json":
			return "application/json";
		case "jpg":
			return "image/jpeg";
		case "jpeg":
			return "image/jpeg";
		case "png":
			return "image/png";
		case "gif":
			return "image/gif";
		case "svg":
			return "application/svg+xml";
		case "zip":
			return "application/zip";
		default:
			return "application/octet-stream";
		}
	}

	private InputStream load(final String path) {
		final ResourceInfo resource = resourceLoader.loadResource(path);
		if (resource != null) {
			log.debug("Resource found.");
		} else {
			log.debug("{} not found.", path);
		}
		return resource.getInputStream();
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy