Coverage Report - com.ctrip.framework.apollo.portal.controller.PortalAppController
 
Classes in this File Line Coverage Branch Coverage Complexity
PortalAppController
15%
6/40
11%
2/18
3.5
 
 1  
 package com.ctrip.framework.apollo.portal.controller;
 2  
 
 3  
 import org.springframework.beans.factory.annotation.Autowired;
 4  
 import org.springframework.http.HttpStatus;
 5  
 import org.springframework.http.ResponseEntity;
 6  
 import org.springframework.web.bind.annotation.PathVariable;
 7  
 import org.springframework.web.bind.annotation.RequestBody;
 8  
 import org.springframework.web.bind.annotation.RequestMapping;
 9  
 import org.springframework.web.bind.annotation.RequestMethod;
 10  
 import org.springframework.web.bind.annotation.RestController;
 11  
 import org.springframework.web.client.HttpClientErrorException;
 12  
 
 13  
 import com.ctrip.framework.apollo.common.http.MultiResponseEntity;
 14  
 import com.ctrip.framework.apollo.common.http.RichResponseEntity;
 15  
 import com.ctrip.framework.apollo.core.dto.AppDTO;
 16  
 import com.ctrip.framework.apollo.core.enums.Env;
 17  
 import com.ctrip.framework.apollo.core.exception.BadRequestException;
 18  
 import com.ctrip.framework.apollo.core.utils.StringUtils;
 19  
 import com.ctrip.framework.apollo.portal.PortalSettings;
 20  
 import com.ctrip.framework.apollo.portal.entity.vo.EnvClusterInfo;
 21  
 import com.ctrip.framework.apollo.portal.service.PortalAppService;
 22  
 
 23  
 import java.util.List;
 24  
 
 25  
 @RestController
 26  
 @RequestMapping("/apps")
 27  1
 public class PortalAppController {
 28  
 
 29  
   @Autowired
 30  
   private PortalAppService appService;
 31  
 
 32  
   @Autowired
 33  
   private PortalSettings portalSettings;
 34  
 
 35  
   @RequestMapping("/envs/{env}")
 36  
   public List<AppDTO> findAllApp(@PathVariable String env){
 37  
 
 38  0
     if (StringUtils.isEmpty(env)){
 39  0
       throw new BadRequestException("env can not be empty");
 40  
     }
 41  0
     return appService.findAll(Env.valueOf(env));
 42  
   }
 43  
 
 44  
   @RequestMapping("/{appId}/navtree")
 45  
   public MultiResponseEntity<EnvClusterInfo> nav(@PathVariable String appId) {
 46  
 
 47  0
     if (StringUtils.isEmpty(appId)) {
 48  0
       throw new BadRequestException("app id can not be empty.");
 49  
     }
 50  0
     MultiResponseEntity<EnvClusterInfo> response = MultiResponseEntity.ok();
 51  0
     List<Env> envs = portalSettings.getActiveEnvs();
 52  0
     for (Env env : envs) {
 53  
       try {
 54  0
         response.addResponseEntity(RichResponseEntity.ok(appService.createEnvNavNode(env, appId)));
 55  0
       } catch (Exception e) {
 56  0
         response.addResponseEntity(RichResponseEntity.error(HttpStatus.INTERNAL_SERVER_ERROR,
 57  0
                                                             "load env:" + env.name() + " cluster error." + e
 58  0
                                                                 .getMessage()));
 59  0
       }
 60  0
     }
 61  0
     return response;
 62  
   }
 63  
 
 64  
   @RequestMapping(value = "/envs/{env}", method = RequestMethod.POST, consumes = {"application/json"})
 65  
   public ResponseEntity<Void> create(@PathVariable String env, @RequestBody AppDTO app) {
 66  1
     if (isInvalidApp(app)){
 67  0
       throw new BadRequestException("request payload contains empty");
 68  
     }
 69  1
     if ("ALL".equals(env)){
 70  1
       appService.createAppInAllEnvs(app);
 71  
     } else {
 72  0
       appService.createApp(Env.valueOf(env), app);
 73  
     }
 74  1
     return ResponseEntity.ok().build();
 75  
   }
 76  
 
 77  
   @RequestMapping(value = "/{appId}", method = RequestMethod.GET)
 78  
   public AppDTO load(@PathVariable String appId){
 79  0
     if (StringUtils.isEmpty(appId)){
 80  0
       throw new BadRequestException("app id can not be empty.");
 81  
     }
 82  0
     return appService.load(appId);
 83  
   }
 84  
 
 85  
   @RequestMapping(value = "/{appId}/miss_envs")
 86  
   public MultiResponseEntity<Env> findMissEnvs(@PathVariable String appId) {
 87  0
     MultiResponseEntity<Env> response = MultiResponseEntity.ok();
 88  0
     for (Env env : portalSettings.getActiveEnvs()) {
 89  
       try {
 90  0
         appService.load(env, appId);
 91  0
       } catch (Exception e) {
 92  0
         if (e instanceof HttpClientErrorException &&
 93  0
             ((HttpClientErrorException)e).getStatusCode() == HttpStatus.NOT_FOUND){
 94  0
           response.addResponseEntity(RichResponseEntity.ok(env));
 95  
         } else {
 96  0
           response.addResponseEntity(RichResponseEntity.error(HttpStatus.INTERNAL_SERVER_ERROR,
 97  
                                                               String
 98  0
                                                                   .format("load appId:%s from env %s error.", appId,
 99  
                                                                           env)
 100  0
                                                               + e.getMessage()));
 101  
         }
 102  0
       }
 103  
 
 104  0
     }
 105  
 
 106  0
     return response;
 107  
 
 108  
   }
 109  
 
 110  
   private boolean isInvalidApp(AppDTO app) {
 111  1
     return StringUtils.isContainEmpty(app.getName(), app.getAppId(), app.getOwnerEmail(), app.getOwnerName());
 112  
   }
 113  
 }
 114