package rocks.inspectit.server.service.rest;
import static org.springframework.web.bind.annotation.RequestMethod.GET;
import java.util.Collection;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import rocks.inspectit.server.service.rest.error.JsonError;
import rocks.inspectit.shared.all.communication.data.cmr.ApplicationData;
import rocks.inspectit.shared.all.communication.data.cmr.BusinessTransactionData;
import rocks.inspectit.shared.cs.cmr.service.IBusinessContextManagementService;
/**
* @author Mario Mann
*
*/
@Controller
@RequestMapping(value = "/bc/app")
public class BusinessContextRestfultService {
/**
* Reference to the existing {@link IBusinessContextManagementService}.
*/
@Autowired
private IBusinessContextManagementService businessContextManagementService;
/**
* Handling of all the exceptions happening in this controller.
*
* @param exception
* Exception being thrown
* @return {@link ModelAndView}
*/
@ExceptionHandler(Exception.class)
public ModelAndView handleAllException(Exception exception) {
return new JsonError(exception).asModelAndView();
}
/**
* Provides informations of business context instances.
*
* <p>
* <i> Example URL: /bc/app</i>
* </p>
*
* @return a list of {@link ApplicationData}.
*/
@RequestMapping(method = GET, value = "")
@ResponseBody
public Collection<ApplicationData> getApplications() {
return businessContextManagementService.getApplications();
}
/**
* Provides detail information of a business context instances (application).
*
* <p>
* <i> Example URL: /bc/app/{id}</i>
* </p>
*
* @param id
* Application ID.
*
* @return detail information of an {@link ApplicationData}.
*/
@RequestMapping(method = GET, value = "{id}")
@ResponseBody
public ApplicationData getApplication(@PathVariable int id) {
return businessContextManagementService.getApplicationForId(id);
}
/**
* Provides information of all business transactions of an application.
*
* <p>
* <i> Example URL: /bc/app/{id}/btx</i>
* </p>
*
* @param id
* Application ID.
*
* @return a list of {@link BusinessTransactionData}.
*/
@RequestMapping(method = GET, value = "{id}/btx")
@ResponseBody
public Collection<BusinessTransactionData> getBusinessTransactions(@PathVariable int id) {
return businessContextManagementService.getBusinessTransactions(id);
}
/**
* Provides detail information of a business transaction and application.
*
* <p>
* <i> Example URL: /bc/app/{id}/btx/{businessTxId}</i>
* </p>
*
* @param id
* Application ID.
* @param businessTxId
* Business transaction ID.
*
* @return detail information of a {@link BusinessTransactionData}.
*/
@RequestMapping(method = GET, value = "{id}/btx/{businessTxId}")
@ResponseBody
public BusinessTransactionData getBusinessTransaction(@PathVariable int id, @PathVariable int businessTxId) {
return businessContextManagementService.getBusinessTransactionForId(id, businessTxId);
}
/**
* Header information for swagger requests.
*
* @param response
* Response information
*/
@ModelAttribute
public void setVaryResponseHeader(HttpServletResponse response) {
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
}
}