/* * Copyright 2015 herd contributors * * 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 org.finra.herd.rest; import java.util.Set; import io.swagger.annotations.Api; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.annotation.Secured; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.finra.herd.model.api.xml.BusinessObjectDefinition; import org.finra.herd.model.api.xml.BusinessObjectDefinitionCreateRequest; import org.finra.herd.model.api.xml.BusinessObjectDefinitionDescriptiveInformationUpdateRequest; import org.finra.herd.model.api.xml.BusinessObjectDefinitionIndexSearchRequest; import org.finra.herd.model.api.xml.BusinessObjectDefinitionIndexSearchResponse; import org.finra.herd.model.api.xml.BusinessObjectDefinitionKey; import org.finra.herd.model.api.xml.BusinessObjectDefinitionKeys; import org.finra.herd.model.api.xml.BusinessObjectDefinitionSearchRequest; import org.finra.herd.model.api.xml.BusinessObjectDefinitionSearchResponse; import org.finra.herd.model.api.xml.BusinessObjectDefinitionUpdateRequest; import org.finra.herd.model.dto.SecurityFunctions; import org.finra.herd.service.BusinessObjectDefinitionService; import org.finra.herd.ui.constants.UiConstants; /** * The REST controller that handles business object definition REST requests. */ @RestController @RequestMapping(value = UiConstants.REST_URL_BASE, produces = {"application/xml", "application/json"}) @Api(tags = "Business Object Definition") public class BusinessObjectDefinitionRestController extends HerdBaseController { @Autowired private BusinessObjectDefinitionService businessObjectDefinitionService; /** * Creates a new business object definition. <p>Requires WRITE permission on namespace</p> * * @param request the information needed to create the business object definition. * * @return the created business object definition. */ @RequestMapping(value = "/businessObjectDefinitions", method = RequestMethod.POST, consumes = {"application/xml", "application/json"}) @Secured(SecurityFunctions.FN_BUSINESS_OBJECT_DEFINITIONS_POST) public BusinessObjectDefinition createBusinessObjectDefinition(@RequestBody BusinessObjectDefinitionCreateRequest request) { return businessObjectDefinitionService.createBusinessObjectDefinition(request); } /** * Updates an existing business object definition by key. <p>Requires WRITE permission on namespace</p> * * @param namespace the namespace code * @param businessObjectDefinitionName the name of the business object definition to update * @param request the information needed to update the business object definition * * @return the updated business object definition */ @RequestMapping(value = "/businessObjectDefinitions/namespaces/{namespace}/businessObjectDefinitionNames/{businessObjectDefinitionName}", method = RequestMethod.PUT, consumes = {"application/xml", "application/json"}) @Secured(SecurityFunctions.FN_BUSINESS_OBJECT_DEFINITIONS_PUT) public BusinessObjectDefinition updateBusinessObjectDefinition(@PathVariable("namespace") String namespace, @PathVariable("businessObjectDefinitionName") String businessObjectDefinitionName, @RequestBody BusinessObjectDefinitionUpdateRequest request) { BusinessObjectDefinitionKey businessObjectDefinitionKey = new BusinessObjectDefinitionKey(namespace, businessObjectDefinitionName); return businessObjectDefinitionService.updateBusinessObjectDefinition(businessObjectDefinitionKey, request); } /** * Updates an existing business object definition descriptive information by key. <p>Requires no Namespace level security</p> * * @param namespace the namespace code * @param businessObjectDefinitionName the name of the business object definition to update * @param request the information needed to update the business object definition * * @return the updated business object definition */ @RequestMapping( value = "/businessObjectDefinitionDescriptiveInformation/namespaces/{namespace}/businessObjectDefinitionNames/{businessObjectDefinitionName}", method = RequestMethod.PUT, consumes = {"application/xml", "application/json"}) @Secured(SecurityFunctions.FN_BUSINESS_OBJECT_DEFINITIONS_DESCRIPTIVE_INFO_PUT) public BusinessObjectDefinition updateBusinessObjectDefinitionDescriptiveInformation(@PathVariable("namespace") String namespace, @PathVariable("businessObjectDefinitionName") String businessObjectDefinitionName, @RequestBody BusinessObjectDefinitionDescriptiveInformationUpdateRequest request) { BusinessObjectDefinitionKey businessObjectDefinitionKey = new BusinessObjectDefinitionKey(namespace, businessObjectDefinitionName); return businessObjectDefinitionService.updateBusinessObjectDefinitionDescriptiveInformation(businessObjectDefinitionKey, request); } /** * Gets an existing business object definition by key. * * @param namespace the namespace code * @param businessObjectDefinitionName the business object definition name * * @return the retrieved business object definition. */ @RequestMapping(value = "/businessObjectDefinitions/namespaces/{namespace}/businessObjectDefinitionNames/{businessObjectDefinitionName}", method = RequestMethod.GET) @Secured(SecurityFunctions.FN_BUSINESS_OBJECT_DEFINITIONS_GET) public BusinessObjectDefinition getBusinessObjectDefinition(@PathVariable("namespace") String namespace, @PathVariable("businessObjectDefinitionName") String businessObjectDefinitionName) { BusinessObjectDefinitionKey businessObjectDefinitionKey = new BusinessObjectDefinitionKey(namespace, businessObjectDefinitionName); return businessObjectDefinitionService.getBusinessObjectDefinition(businessObjectDefinitionKey); } /** * Deletes an existing business object definition by key. <p>Requires WRITE permission on namespace</p> * * @param namespace the namespace code * @param businessObjectDefinitionName the business object definition name * * @return the business object definition information of the entity that got deleted */ @RequestMapping(value = "/businessObjectDefinitions/namespaces/{namespace}/businessObjectDefinitionNames/{businessObjectDefinitionName}", method = RequestMethod.DELETE) @Secured(SecurityFunctions.FN_BUSINESS_OBJECT_DEFINITIONS_DELETE) public BusinessObjectDefinition deleteBusinessObjectDefinition(@PathVariable("namespace") String namespace, @PathVariable("businessObjectDefinitionName") String businessObjectDefinitionName) { BusinessObjectDefinitionKey businessObjectDefinitionKey = new BusinessObjectDefinitionKey(namespace, businessObjectDefinitionName); return businessObjectDefinitionService.deleteBusinessObjectDefinition(businessObjectDefinitionKey); } /** * Gets the list of business object definitions that are defined in the system. * * @return the retrieved business object definition list. */ @RequestMapping(value = "/businessObjectDefinitions", method = RequestMethod.GET) @Secured(SecurityFunctions.FN_BUSINESS_OBJECT_DEFINITIONS_ALL_GET) public BusinessObjectDefinitionKeys getBusinessObjectDefinitions() { return businessObjectDefinitionService.getBusinessObjectDefinitions(); } /** * Gets the list of business object definitions that are defined in the system. * * @param namespace the namespace code * * @return the retrieved business object definition list */ @RequestMapping(value = "/businessObjectDefinitions/namespaces/{namespace}", method = RequestMethod.GET) @Secured(SecurityFunctions.FN_BUSINESS_OBJECT_DEFINITIONS_ALL_GET) public BusinessObjectDefinitionKeys getBusinessObjectDefinitions(@PathVariable("namespace") String namespace) { return businessObjectDefinitionService.getBusinessObjectDefinitions(namespace); } /** * Searches across all business object definitions that are defined in the system per specified search filters and keys * * @param fields A comma-separated list of fields to be retrieved with each business object definition entity. Valid options: dataProviderName, * shortDescription, displayName * @param request the information needed to search across the business object definitions * * @return the retrieved business object definition list */ @RequestMapping(value = "/businessObjectDefinitions/search", method = RequestMethod.POST, consumes = {"application/xml", "application/json"}) @Secured(SecurityFunctions.FN_BUSINESS_OBJECT_DEFINITIONS_SEARCH_POST) public BusinessObjectDefinitionSearchResponse searchBusinessObjectDefinitions( @RequestParam(value = "fields", required = false, defaultValue = "") Set<String> fields, @RequestBody BusinessObjectDefinitionSearchRequest request) { return businessObjectDefinitionService.searchBusinessObjectDefinitions(request, fields); } /** * Searches across all business object definitions that are in search index per specified search filters and keys * * @param fields A comma-separated list of fields to be retrieved with each business object definition entity. Valid options: dataProviderName, * shortDescription, displayName * @param request the information needed to search across the business object definitions * * @return the retrieved business object definition list */ @RequestMapping(value = "/businessObjectDefinitions/indexSearch", method = RequestMethod.POST, consumes = {"application/xml", "application/json"}) @Secured(SecurityFunctions.FN_BUSINESS_OBJECT_DEFINITIONS_INDEX_SEARCH_POST) public BusinessObjectDefinitionIndexSearchResponse indexSearchBusinessObjectDefinitions( @RequestParam(value = "fields", required = false, defaultValue = "") Set<String> fields, @RequestBody BusinessObjectDefinitionIndexSearchRequest request) { return businessObjectDefinitionService.indexSearchBusinessObjectDefinitions(request, fields); } }