Coverage Report - com.ctrip.framework.apollo.biz.service.AppNamespaceService
 
Classes in this File Line Coverage Branch Coverage Complexity
AppNamespaceService
33%
16/48
8%
1/12
1.857
 
 1  
 package com.ctrip.framework.apollo.biz.service;
 2  
 
 3  
 import com.google.common.base.Preconditions;
 4  
 
 5  
 import java.util.List;
 6  
 import java.util.Objects;
 7  
 
 8  
 import org.springframework.beans.factory.annotation.Autowired;
 9  
 import org.springframework.stereotype.Service;
 10  
 import org.springframework.transaction.annotation.Transactional;
 11  
 
 12  
 import com.ctrip.framework.apollo.biz.entity.Cluster;
 13  
 import com.ctrip.framework.apollo.biz.entity.Namespace;
 14  
 import com.ctrip.framework.apollo.common.entity.AppNamespace;
 15  
 import com.ctrip.framework.apollo.biz.entity.Audit;
 16  
 import com.ctrip.framework.apollo.biz.repository.AppNamespaceRepository;
 17  
 import com.ctrip.framework.apollo.common.utils.BeanUtils;
 18  
 import com.ctrip.framework.apollo.core.ConfigConsts;
 19  
 import com.ctrip.framework.apollo.core.enums.ConfigFileFormat;
 20  
 import com.ctrip.framework.apollo.core.exception.ServiceException;
 21  
 import com.ctrip.framework.apollo.core.utils.StringUtils;
 22  
 
 23  
 @Service
 24  1
 public class AppNamespaceService {
 25  
 
 26  
   @Autowired
 27  
   private AppNamespaceRepository appNamespaceRepository;
 28  
   @Autowired
 29  
   private NamespaceService namespaceService;
 30  
   @Autowired
 31  
   private ClusterService clusterService;
 32  
   @Autowired
 33  
   private AuditService auditService;
 34  
   
 35  
   public boolean isAppNamespaceNameUnique(String appId, String namespaceName) {
 36  5
     Objects.requireNonNull(appId, "AppId must not be null");
 37  5
     Objects.requireNonNull(namespaceName, "Namespace must not be null");
 38  5
     return Objects.isNull(appNamespaceRepository.findByAppIdAndName(appId, namespaceName));
 39  
   }
 40  
 
 41  
   public AppNamespace findPublicNamespaceByName(String namespaceName) {
 42  0
     Preconditions.checkArgument(namespaceName != null, "Namespace must not be null");
 43  0
     return appNamespaceRepository.findByNameAndIsPublicTrue(namespaceName);
 44  
   }
 45  
 
 46  
   public List<AppNamespace> findPrivateAppNamespace(String appId){
 47  5
     return appNamespaceRepository.findByAppIdAndIsPublic(appId, false);
 48  
   }
 49  
 
 50  
   public AppNamespace findOne(String appId, String namespaceName){
 51  0
     Preconditions.checkArgument(!StringUtils.isContainEmpty(appId, namespaceName), "appId or Namespace must not be null");
 52  0
     return appNamespaceRepository.findByAppIdAndName(appId, namespaceName);
 53  
   }
 54  
 
 55  
   @Transactional
 56  
   public void createDefaultAppNamespace(String appId, String createBy) {
 57  5
     if (!isAppNamespaceNameUnique(appId, ConfigConsts.NAMESPACE_APPLICATION)) {
 58  0
       throw new ServiceException("appnamespace not unique");
 59  
     }
 60  5
     AppNamespace appNs = new AppNamespace();
 61  5
     appNs.setAppId(appId);
 62  5
     appNs.setName(ConfigConsts.NAMESPACE_APPLICATION);
 63  5
     appNs.setComment("default app namespace");
 64  5
     appNs.setFormat(ConfigFileFormat.Properties.getValue());
 65  5
     appNs.setDataChangeCreatedBy(createBy);
 66  5
     appNs.setDataChangeLastModifiedBy(createBy);
 67  5
     appNamespaceRepository.save(appNs);
 68  
 
 69  5
     auditService.audit(AppNamespace.class.getSimpleName(), appNs.getId(), Audit.OP.INSERT,
 70  
                        createBy);
 71  5
   }
 72  
 
 73  
   @Transactional
 74  
   public AppNamespace createAppNamespace(AppNamespace appNamespace){
 75  0
     String createBy = appNamespace.getDataChangeCreatedBy();
 76  0
     if (!isAppNamespaceNameUnique(appNamespace.getAppId(), appNamespace.getName())) {
 77  0
       throw new ServiceException("appnamespace not unique");
 78  
     }
 79  0
     appNamespace.setId(0);//protection
 80  0
     appNamespace.setDataChangeCreatedBy(createBy);
 81  0
     appNamespace.setDataChangeLastModifiedBy(createBy);
 82  0
     appNamespace = appNamespaceRepository.save(appNamespace);
 83  
     //所有的cluster下面link新建的appnamespace
 84  0
     if (!appNamespace.isPublic()){
 85  0
       String appId = appNamespace.getAppId();
 86  0
       String namespaceName = appNamespace.getName();
 87  
 
 88  0
       List<Cluster> clusters = clusterService.findClusters(appId);
 89  0
       for (Cluster cluster: clusters){
 90  0
         Namespace namespace = new Namespace();
 91  0
         namespace.setClusterName(cluster.getName());
 92  0
         namespace.setAppId(appId);
 93  0
         namespace.setNamespaceName(namespaceName);
 94  0
         namespace.setDataChangeCreatedBy(createBy);
 95  0
         namespace.setDataChangeLastModifiedBy(createBy);
 96  0
         namespaceService.save(namespace);
 97  0
       }
 98  
 
 99  
     }
 100  0
     auditService.audit(AppNamespace.class.getSimpleName(), appNamespace.getId(), Audit.OP.INSERT,
 101  
                        createBy);
 102  0
     return appNamespace;
 103  
   }
 104  
 
 105  
   public AppNamespace update(AppNamespace appNamespace){
 106  0
     AppNamespace managedNs = appNamespaceRepository.findByAppIdAndName(appNamespace.getAppId(), appNamespace.getName());
 107  0
     BeanUtils.copyEntityProperties(appNamespace, managedNs);
 108  0
     managedNs = appNamespaceRepository.save(managedNs);
 109  
 
 110  0
     auditService.audit(AppNamespace.class.getSimpleName(), managedNs.getId(), Audit.OP.UPDATE, managedNs.getDataChangeLastModifiedBy());
 111  
 
 112  0
     return managedNs;
 113  
   }
 114  
 }