Example usage for com.google.common.net MediaType PNG

List of usage examples for com.google.common.net MediaType PNG

Introduction

In this page you can find the example usage for com.google.common.net MediaType PNG.

Prototype

MediaType PNG

To view the source code for com.google.common.net MediaType PNG.

Click Source Link

Usage

From source file:org.haiku.haikudepotserver.pkg.controller.PkgIconController.java

private void handleHeadOrGetPkgIcon(RequestMethod requestMethod, HttpServletResponse response, Integer size,
        String format, String pkgName, Boolean fallback) throws IOException {

    if (null == format) {
        throw new MissingOrBadFormat();
    }// w ww .j  a va 2 s .c  o m

    if (Strings.isNullOrEmpty(pkgName) || !Pkg.PATTERN_NAME.matcher(pkgName).matches()) {
        throw new MissingPkgName();
    }

    ObjectContext context = serverRuntime.newContext();
    Optional<Pkg> pkg = Pkg.tryGetByName(context, pkgName); // cached

    if (!pkg.isPresent()) {
        LOGGER.debug("request for icon for package '{}', but no such package was able to be found", pkgName);
        throw new PkgNotFound();
    }

    switch (format) {

    case org.haiku.haikudepotserver.dataobjects.MediaType.EXTENSION_HAIKUVECTORICONFILE:
        Optional<PkgIcon> hvifPkgIcon = pkg.get().getPkgIcon(
                org.haiku.haikudepotserver.dataobjects.MediaType.getByExtension(context, format).get(), null);

        if (hvifPkgIcon.isPresent()) {
            byte[] data = hvifPkgIcon.get().getPkgIconImage().getData();
            response.setHeader(HttpHeaders.CONTENT_LENGTH, Integer.toString(data.length));
            response.setContentType(
                    org.haiku.haikudepotserver.dataobjects.MediaType.MEDIATYPE_HAIKUVECTORICONFILE);
            response.setDateHeader(HttpHeaders.LAST_MODIFIED,
                    pkg.get().getModifyTimestampSecondAccuracy().getTime());

            if (requestMethod == RequestMethod.GET) {
                OutputStream outputStream = response.getOutputStream();
                outputStream.write(data);
                outputStream.flush();
            }
        } else {
            throw new PkgIconNotFound();
        }
        break;

    case org.haiku.haikudepotserver.dataobjects.MediaType.EXTENSION_PNG:

        if (null == size) {
            throw new IllegalArgumentException("the size must be provided when requesting a PNG");
        }

        size = normalizeSize(size);
        Optional<byte[]> pngImageData = renderedPkgIconRepository.render(size, context, pkg.get());

        if (!pngImageData.isPresent()) {
            if ((null == fallback) || !fallback) {
                throw new PkgIconNotFound();
            }

            handleGenericHeadOrGet(requestMethod, response, size, true);
        } else {
            byte[] data = pngImageData.get();
            response.setHeader(HttpHeaders.CONTENT_LENGTH, Integer.toString(data.length));
            response.setContentType(MediaType.PNG.toString());
            response.setDateHeader(HttpHeaders.LAST_MODIFIED,
                    pkg.get().getModifyTimestampSecondAccuracy().getTime());

            if (requestMethod == RequestMethod.GET) {
                OutputStream outputStream = response.getOutputStream();
                outputStream.write(data);
                outputStream.flush();
            }
        }
        break;

    default:
        throw new IllegalStateException("unexpected format; " + format);

    }

}