122 lines
4.2 KiB
Java
122 lines
4.2 KiB
Java
package com.eactive.testmaster.api.service;
|
|
|
|
import com.eactive.testmaster.api.entity.MockCondition;
|
|
import com.eactive.testmaster.api.entity.MockResponse;
|
|
import com.eactive.testmaster.api.entity.MockRoute;
|
|
import com.eactive.testmaster.api.repository.MockRouteRepository;
|
|
import com.eactive.testmaster.common.exception.NotFoundException;
|
|
import org.apache.commons.beanutils.BeanUtils;
|
|
import org.hibernate.Hibernate;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.data.domain.Page;
|
|
import org.springframework.data.domain.Pageable;
|
|
import org.springframework.data.jpa.domain.Specification;
|
|
import org.springframework.stereotype.Service;
|
|
|
|
import javax.transaction.Transactional;
|
|
import java.lang.reflect.InvocationTargetException;
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
|
|
@Service
|
|
@Transactional
|
|
public class MockRouteService {
|
|
|
|
private static final String NOT_FOUND_MESSAGE = "Route Not Found";
|
|
|
|
@Autowired
|
|
MockRouteRepository mockRouteRepository;
|
|
|
|
private List<MockRoute> allRoutes = new ArrayList<>();
|
|
|
|
public List<MockRoute> getAllRoutes() {
|
|
return allRoutes;
|
|
}
|
|
|
|
public void setAllRoutes(List<MockRoute> allRoutes) {
|
|
this.allRoutes = allRoutes;
|
|
}
|
|
|
|
public Page<MockRoute> findAll(Specification<MockRoute> mockRouteSpecification, Pageable pageable) {
|
|
return mockRouteRepository.findAll(mockRouteSpecification, pageable);
|
|
}
|
|
|
|
public MockRoute findById(Long id) {
|
|
return mockRouteRepository.findById(id).orElseThrow(() -> new NotFoundException(NOT_FOUND_MESSAGE));
|
|
}
|
|
|
|
public void create(MockRoute mockRoute) {
|
|
|
|
if (!mockRoute.getPathPattern().startsWith("/")) {
|
|
mockRoute.setPathPattern("/" + mockRoute.getPathPattern());
|
|
}
|
|
|
|
for (MockResponse response : mockRoute.getResponses()) {
|
|
response.setRoute(mockRoute);
|
|
|
|
if (response.getConditions() != null) {
|
|
for (MockCondition condition : response.getConditions()) {
|
|
condition.setMockResponse(response);
|
|
}
|
|
}
|
|
}
|
|
mockRouteRepository.save(mockRoute);
|
|
}
|
|
|
|
public void deleteById(long id) {
|
|
mockRouteRepository.deleteById(id);
|
|
}
|
|
|
|
public void update(Long id, MockRoute updated) {
|
|
MockRoute route = mockRouteRepository.findById(id).orElseThrow(() -> new NotFoundException(NOT_FOUND_MESSAGE));
|
|
|
|
route.getResponses().clear();
|
|
|
|
route.setName(updated.getName());
|
|
route.setDescription(updated.getDescription());
|
|
// route.setMethod(updated.getMethod());
|
|
// route.setPathPattern(updated.getPathPattern());
|
|
if (!route.getPathPattern().startsWith("/")) {
|
|
route.setPathPattern("/" + route.getPathPattern());
|
|
}
|
|
|
|
route.getResponses().addAll(updated.getResponses());
|
|
for (MockResponse response : route.getResponses()) {
|
|
response.setRoute(route);
|
|
|
|
if (response.getConditions() != null) {
|
|
for (MockCondition condition : response.getConditions()) {
|
|
condition.setMockResponse(response);
|
|
}
|
|
}
|
|
|
|
}
|
|
mockRouteRepository.save(route);
|
|
|
|
}
|
|
|
|
public void initAllRoutes() {
|
|
allRoutes.clear();
|
|
List<MockRoute> routes = mockRouteRepository.findAll();
|
|
for (MockRoute route : routes) {
|
|
for (MockResponse response : route.getResponses()) {
|
|
if (response.getConditions() != null) {
|
|
for (MockCondition condition : response.getConditions()) {
|
|
Hibernate.initialize(condition.getMockResponse());
|
|
}
|
|
}
|
|
if (response.getHeaders() != null) {
|
|
Hibernate.initialize(response.getHeaders());
|
|
}
|
|
Hibernate.initialize(response);
|
|
}
|
|
try {
|
|
MockRoute cloned = (MockRoute) BeanUtils.cloneBean(route);
|
|
allRoutes.add(cloned);
|
|
} catch (IllegalAccessException | InstantiationException | InvocationTargetException | NoSuchMethodException e) {
|
|
throw new RuntimeException(e);
|
|
}
|
|
}
|
|
}
|
|
}
|