org.geoserver.importer.rest.ImportTransformController.java Source code

Java tutorial

Introduction

Here is the source code for org.geoserver.importer.rest.ImportTransformController.java

Source

/* (c) 2017 Open Source Geospatial Foundation - all rights reserved
 * This code is licensed under the GPL 2.0 license, available at the root
 * application directory.
 */
package org.geoserver.importer.rest;

import freemarker.template.ObjectWrapper;
import freemarker.template.Template;
import org.apache.commons.lang.NotImplementedException;
import org.geoserver.importer.ImportTask;
import org.geoserver.importer.Importer;
import org.geoserver.importer.transform.ImportTransform;
import org.geoserver.ows.util.OwsUtils;
import org.geoserver.rest.RestBaseController;
import org.geoserver.rest.converters.FreemarkerHTMLMessageConverter;
import org.geoserver.rest.util.MediaTypeExtensions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.MethodParameter;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.util.UriComponentsBuilder;

import java.lang.reflect.Type;

@RestController
@ControllerAdvice
@RequestMapping(path = RestBaseController.ROOT_PATH + "/imports/{importId}", produces = {
        MediaType.APPLICATION_JSON_VALUE, MediaType.TEXT_HTML_VALUE })
public class ImportTransformController extends ImportBaseController {

    @Autowired
    protected ImportTransformController(Importer importer) {
        super(importer);
    }

    @PostMapping(path = { "/tasks/{taskId}/transforms" })
    public ResponseEntity postTransform(@PathVariable Long importId, @PathVariable Integer taskId,
            @RequestParam(value = "expand", required = false) String expand,
            @RequestBody ImportTransform importTransform, UriComponentsBuilder builder) {

        ImportTransform tx = importTransform;
        ImportTask task = task(importId, taskId);
        task.getTransform().add(tx);

        HttpHeaders headers = new HttpHeaders();
        headers.setLocation(builder.path("/imports/{importId}/tasks/{taskId}/transforms/{transformId}")
                .buildAndExpand(importId.toString(), taskId.toString(),
                        task.getTransform().getTransforms().size() - 1)
                .toUri());
        return new ResponseEntity<String>("", headers, HttpStatus.CREATED);
    }

    @GetMapping(path = { "/tasks/{taskId}/transforms", "/tasks/{taskId}/transforms/{transformId}" })
    public ImportWrapper getTransform(@PathVariable Long importId, @PathVariable Integer taskId,
            @PathVariable(required = false) Integer transformId,
            @RequestParam(value = "expand", required = false) String expand) {

        return (writer, builder, converter) -> {
            ImportTransform tx = transform(importId, taskId, transformId, true);
            if (tx == null) {
                converter.transformChain(builder, task(importId, taskId), true, converter.expand(expand, 1));
            } else {
                ImportTask task = task(importId, taskId);
                int index = task.getTransform().getTransforms().indexOf(tx);

                converter.transform(builder, tx, index, task, true, converter.expand(expand, 1));
            }
        };
    }

    @PutMapping(path = { "/tasks/{taskId}/transforms/{transformId}" }, consumes = {
            MediaType.APPLICATION_JSON_VALUE, MediaTypeExtensions.TEXT_JSON_VALUE })
    public ImportWrapper putTransform(@PathVariable Long importId, @PathVariable Integer taskId,
            @PathVariable Integer transformId, @RequestParam(value = "expand", required = false) String expand,
            @RequestBody ImportTransform importTransform) {

        ImportTransform orig = transform(importId, taskId, transformId);
        OwsUtils.copy(importTransform, orig, (Class) orig.getClass());

        return (writer, builder, converter) -> {
            ImportTask task = task(importId, taskId);
            int index = task.getTransform().getTransforms().indexOf(orig);

            converter.transform(builder, orig, index, task, true, converter.expand(expand, 1));
        };
    }

    @DeleteMapping(path = { "/tasks/{taskId}/transforms/{transformId}" })
    public ResponseEntity deleteTransform(@PathVariable Long importId, @PathVariable Integer taskId,
            @PathVariable Integer transformId, @RequestParam(value = "expand", required = false) String expand) {

        ImportTask task = task(importId, taskId);
        ImportTransform tx = transform(importId, taskId, transformId);
        boolean result = task.getTransform().remove(tx);

        if (result) {
            return new ResponseEntity<String>("", HttpStatus.OK);
        } else {
            return new ResponseEntity<String>("", HttpStatus.NOT_FOUND);
        }
    }

    @Override
    public boolean supports(MethodParameter methodParameter, Type targetType,
            Class<? extends HttpMessageConverter<?>> converterType) {
        return ImportTransform.class.isAssignableFrom(methodParameter.getParameterType());
    }

    @Override
    protected String getTemplateName(Object object) {
        throw new NotImplementedException();
    }

    @Override
    protected <T> ObjectWrapper createObjectWrapper(Class<T> clazz) {
        throw new NotImplementedException();
    }

    @Override
    public void configureFreemarker(FreemarkerHTMLMessageConverter converter, Template template) {
        throw new NotImplementedException();
    }
}