// Path: src/main/java/org/mockenize/model/ProxyBean.java
// @Data
// public class ProxyBean implements Serializable, Cacheable {
// 
// 	private static final long serialVersionUID = 1L;
// 
// 	private static final String UNDERLINE = "_";
// 
// 	private static final String SLASH = "/";
// 
// 	@NotEmpty
// 	private String key;
// 
// 	@NotEmpty
// 	private String path;
// 
// 	@NotNull
// 	private String name;
// 
// 	@NotNull
// 	private URI url;
// 
// 	@Override
// 	public String getKey() {
// 		return path.toLowerCase().replaceAll(SLASH, UNDERLINE);
// 	}
// }
// 
// Path: src/main/java/org/mockenize/service/ProxyService.java
// @Service
// public class ProxyService implements ResponseService {
// 
// 	@Autowired
// 	private ProxyRepository proxyRepository;
// 
// 	@Context
// 	private HttpServletRequest request;
// 
// 	private Client client = ClientBuilder.newClient();
// 
// 	public Collection<ProxyBean> getAll() {
// 		return proxyRepository.findAll();
// 	}
// 
// 	public void save(ProxyBean proxyBean) {
// 		proxyRepository.save(proxyBean);
// 	}
// 
// 	public ProxyBean getByKey(String key) {
// 		return proxyRepository.findByKey(key);
// 	}
// 
// 	public ProxyBean delete(ProxyBean proxyBean) {
// 		return proxyRepository.delete(proxyBean);
// 	}
// 	
// 	public Collection<ProxyBean>  deleteAll(Collection<ProxyBean> proxyBeans) {
// 		Collection<ProxyBean> deletedProxies = new ArrayList<>();
// 		if(proxyBeans != null && !proxyBeans.isEmpty()) {
// 			for (ProxyBean bean : proxyBeans) {
// 				ProxyBean deleted = proxyRepository.delete(bean);
// 				if(deleted != null) {
// 					deletedProxies.add(deleted);
// 				}
// 			}
// 		} else {
// 			deletedProxies = proxyRepository.deleteAll();
// 		}
// 		return deletedProxies;
// 	}
// 	
// 	@Override
// 	public Response getResponse(HttpServletRequest request, JsonNode requestBody) {
// 		String path = request.getRequestURI();
// 		ProxyBean proxyBean = proxyRepository.findByKey(path);
// 		Builder requestBuilder = client.target(proxyBean.getUrl()).path(getRequestPath(proxyBean.getPath(), path))
// 				.request();
// 		addHeaders(request, requestBuilder);
// 		Entity<JsonNode> entity = Entity.entity(requestBody, getContentType(request));
// 		Response response = requestBuilder.build(request.getMethod(), entity).invoke();
// 		response.bufferEntity();
// 		return response;
// 	}
// 
// 	private String getRequestPath(String path, String requestedPath) {
// 		if (path.matches("/.+")) {
// 			Pattern pattern = Pattern.compile("/[^/\\.]+(.*)");
// 			Matcher matcher = pattern.matcher(requestedPath);
// 			if (matcher.matches()) {
// 				return matcher.group(1);
// 			} else {
// 				throw new ProxyPathException();
// 			}
// 		}
// 
// 		return null;
// 	}
// 
// 	private void addHeaders(HttpServletRequest request, Builder requestBuilder) {
// 		Enumeration<String> headerNames = request.getHeaderNames();
// 		while (headerNames.hasMoreElements()) {
// 			String key = headerNames.nextElement();
// 			requestBuilder.header(key, request.getHeader(key));
// 		}
// 	}
// 
// 	private String getContentType(HttpServletRequest request) {
// 		if (Strings.isNullOrEmpty(request.getContentType())) {
// 			return MediaType.TEXT_PLAIN;
// 		}
// 
// 		return request.getContentType();
// 	}
// 
// 	public boolean exists(String path) {
// 		return proxyRepository.exists(path);
// 	}
// 
// }


import java.util.Collection;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import org.mockenize.model.ProxyBean;
import org.mockenize.service.ProxyService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
package org.mockenize.controller;




@Controller
@Path("/_mockenize/proxies")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class ProxiesController {

	@Autowired
// Path: src/main/java/org/mockenize/model/ProxyBean.java
// @Data
// public class ProxyBean implements Serializable, Cacheable {
// 
// 	private static final long serialVersionUID = 1L;
// 
// 	private static final String UNDERLINE = "_";
// 
// 	private static final String SLASH = "/";
// 
// 	@NotEmpty
// 	private String key;
// 
// 	@NotEmpty
// 	private String path;
// 
// 	@NotNull
// 	private String name;
// 
// 	@NotNull
// 	private URI url;
// 
// 	@Override
// 	public String getKey() {
// 		return path.toLowerCase().replaceAll(SLASH, UNDERLINE);
// 	}
// }
// 
// Path: src/main/java/org/mockenize/service/ProxyService.java
// @Service
// public class ProxyService implements ResponseService {
// 
// 	@Autowired
// 	private ProxyRepository proxyRepository;
// 
// 	@Context
// 	private HttpServletRequest request;
// 
// 	private Client client = ClientBuilder.newClient();
// 
// 	public Collection<ProxyBean> getAll() {
// 		return proxyRepository.findAll();
// 	}
// 
// 	public void save(ProxyBean proxyBean) {
// 		proxyRepository.save(proxyBean);
// 	}
// 
// 	public ProxyBean getByKey(String key) {
// 		return proxyRepository.findByKey(key);
// 	}
// 
// 	public ProxyBean delete(ProxyBean proxyBean) {
// 		return proxyRepository.delete(proxyBean);
// 	}
// 	
// 	public Collection<ProxyBean>  deleteAll(Collection<ProxyBean> proxyBeans) {
// 		Collection<ProxyBean> deletedProxies = new ArrayList<>();
// 		if(proxyBeans != null && !proxyBeans.isEmpty()) {
// 			for (ProxyBean bean : proxyBeans) {
// 				ProxyBean deleted = proxyRepository.delete(bean);
// 				if(deleted != null) {
// 					deletedProxies.add(deleted);
// 				}
// 			}
// 		} else {
// 			deletedProxies = proxyRepository.deleteAll();
// 		}
// 		return deletedProxies;
// 	}
// 	
// 	@Override
// 	public Response getResponse(HttpServletRequest request, JsonNode requestBody) {
// 		String path = request.getRequestURI();
// 		ProxyBean proxyBean = proxyRepository.findByKey(path);
// 		Builder requestBuilder = client.target(proxyBean.getUrl()).path(getRequestPath(proxyBean.getPath(), path))
// 				.request();
// 		addHeaders(request, requestBuilder);
// 		Entity<JsonNode> entity = Entity.entity(requestBody, getContentType(request));
// 		Response response = requestBuilder.build(request.getMethod(), entity).invoke();
// 		response.bufferEntity();
// 		return response;
// 	}
// 
// 	private String getRequestPath(String path, String requestedPath) {
// 		if (path.matches("/.+")) {
// 			Pattern pattern = Pattern.compile("/[^/\\.]+(.*)");
// 			Matcher matcher = pattern.matcher(requestedPath);
// 			if (matcher.matches()) {
// 				return matcher.group(1);
// 			} else {
// 				throw new ProxyPathException();
// 			}
// 		}
// 
// 		return null;
// 	}
// 
// 	private void addHeaders(HttpServletRequest request, Builder requestBuilder) {
// 		Enumeration<String> headerNames = request.getHeaderNames();
// 		while (headerNames.hasMoreElements()) {
// 			String key = headerNames.nextElement();
// 			requestBuilder.header(key, request.getHeader(key));
// 		}
// 	}
// 
// 	private String getContentType(HttpServletRequest request) {
// 		if (Strings.isNullOrEmpty(request.getContentType())) {
// 			return MediaType.TEXT_PLAIN;
// 		}
// 
// 		return request.getContentType();
// 	}
// 
// 	public boolean exists(String path) {
// 		return proxyRepository.exists(path);
// 	}
// 
// }


// Path: src/main/java/org/mockenize/controller/ProxiesController.java
import java.util.Collection;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import org.mockenize.model.ProxyBean;
import org.mockenize.service.ProxyService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;

package org.mockenize.controller;




@Controller
@Path("/_mockenize/proxies")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class ProxiesController {

	@Autowired
	private ProxyService proxyService;