/*
 * Copyright © 2015-2018 Santer Reply S.p.A.
 *
 * 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.
 */

package it.reply.orchestrator.controller;

import it.reply.orchestrator.dal.entity.AbstractResourceEntity;
import it.reply.orchestrator.dal.entity.Resource;
import it.reply.orchestrator.resource.BaseResource;
import it.reply.orchestrator.resource.BaseResourceAssembler;
import it.reply.orchestrator.service.ResourceService;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.data.web.PageableDefault;
import org.springframework.data.web.PagedResourcesAssembler;
import org.springframework.hateoas.PagedResources;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/deployments/{deploymentId}")
public class ResourceController {

  @Autowired
  private ResourceService resourceService;

  @Autowired
  BaseResourceAssembler baseResourceAssembler;

  /**
   * Get all resources associated to a deployment.
   */
  @ResponseStatus(HttpStatus.OK)
  @RequestMapping(value = "/resources", method = RequestMethod.GET,
      produces = MediaType.APPLICATION_JSON_VALUE)
  public PagedResources<BaseResource> getResources(
      @PathVariable("deploymentId") String deploymentId,
      @PageableDefault(sort = AbstractResourceEntity.CREATED_COLUMN_NAME,
          direction = Direction.DESC) Pageable pageable,
      PagedResourcesAssembler<Resource> pagedAssembler) {

    Page<Resource> resources = resourceService.getResources(deploymentId, pageable);

    PagedResources<BaseResource> pagedResources =
        pagedAssembler.toResource(resources, baseResourceAssembler);

    return pagedResources;
  }

  /**
   * Get resource by id.
   */
  @ResponseStatus(HttpStatus.OK)
  @RequestMapping(value = "/resources/{resourceId}", method = RequestMethod.GET,
      produces = MediaType.APPLICATION_JSON_VALUE)
  public BaseResource getResource(@PathVariable("deploymentId") String deploymentId,
      @PathVariable("resourceId") String resourceId) {

    Resource resource = resourceService.getResource(resourceId, deploymentId);
    return baseResourceAssembler.toResource(resource);
  }

}

/*
 * Copyright © 2015-2018 Santer Reply S.p.A.
 *
 * 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.
 */

package it.reply.orchestrator.controller;

import it.reply.orchestrator.dal.entity.AbstractResourceEntity;
import it.reply.orchestrator.dal.entity.Resource;
import it.reply.orchestrator.resource.BaseResource;
import it.reply.orchestrator.resource.BaseResourceAssembler;
import it.reply.orchestrator.service.ResourceService;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.data.web.PageableDefault;
import org.springframework.data.web.PagedResourcesAssembler;
import org.springframework.hateoas.PagedResources;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping(path = "/deployments/{deploymentId}")
public class ResourceController {

  @Autowired
  private ResourceService resourceService;

  @Autowired
  BaseResourceAssembler baseResourceAssembler;

  /**
   * Get all resources associated to a deployment.
   */
  @ResponseStatus(HttpStatus.OK)
  @RequestMapping(value = "/resources", method = RequestMethod.GET,
      produces = MediaType.APPLICATION_JSON_VALUE)
  public PagedResources<BaseResource> getResources(
      @PathVariable("deploymentId") String deploymentId,
      @PageableDefault(sort = AbstractResourceEntity.CREATED_COLUMN_NAME,
          direction = Direction.DESC) Pageable pageable,
      PagedResourcesAssembler<Resource> pagedAssembler) {

    Page<Resource> resources = resourceService.getResources(deploymentId, pageable);

    PagedResources<BaseResource> pagedResources =
        pagedAssembler.toResource(resources, baseResourceAssembler);

    return pagedResources;
  }

  /**
   * Get resource by id.
   */
  @ResponseStatus(HttpStatus.OK)
  @RequestMapping(value = "/resources/{resourceId}", method = RequestMethod.GET,
      produces = MediaType.APPLICATION_JSON_VALUE)
  public BaseResource getResource(@PathVariable("deploymentId") String deploymentId,
      @PathVariable("resourceId") String resourceId) {

    Resource resource = resourceService.getResource(resourceId, deploymentId);
    return baseResourceAssembler.toResource(resource);
  }

}

Fix ResourceController base path annotation