package com.wk.cdi.query; import java.util.ArrayList; import java.util.List; import java.util.Map; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.wk.cdi.common.exception.RequestValidationUtil; import com.wk.cdi.domain.DomainType; import com.wk.cdi.query.template.Query; @RestController @RequestMapping(value="/auth") public class AuthQueryController { private static final Logger log = LoggerFactory.getLogger(AuthQueryController.class); private Map queryRouters; @Autowired private RequestValidationUtil requestValidationUtil; @Resource(name = "queryRouters") public void setQueryRouters(Map queryRouters) { this.queryRouters = queryRouters; } @RequestMapping(value="/route") @PreAuthorize("hasRole('ROLE_ADMIN') and #oauth2.hasScope('read') or (!#oauth2.isOAuth() and hasRole('ROLE_ADMIN'))") public ResponseEntity> all(HttpServletRequest req) { DomainType domainTypeEnum = DomainType.ROUTE; try { List resources = new ArrayList(); Map queryParameters = req.getParameterMap(); if (queryParameters.containsKey("subset_query")) { resources = queryRouters.get(domainTypeEnum).subset(queryParameters); } else if (queryParameters.size() == 0) { resources = queryRouters.get(domainTypeEnum).all(); } else if (queryParameters.size() == 1 && StringUtils.equalsIgnoreCase(queryParameters.keySet().iterator().next(), "fields")) { resources = queryRouters.get(domainTypeEnum).all(queryParameters.get("fields")); } else { resources = queryRouters.get(domainTypeEnum).allUsingParams(queryParameters); } return new ResponseEntity>(resources, resources.size() > 0 ? HttpStatus.OK : HttpStatus.NO_CONTENT); } catch(Exception ex) { throw requestValidationUtil.buildInternalError(ex, req); } } }