content: package com.ctrip.framework.apollo.adminservice.controller;
  
  import com.ctrip.framework.apollo.biz.entity.Namespace;
  import com.ctrip.framework.apollo.biz.service.AppNamespaceService;
  import com.ctrip.framework.apollo.biz.service.NamespaceService;
  import com.ctrip.framework.apollo.common.dto.AppNamespaceDTO;
  import com.ctrip.framework.apollo.common.dto.NamespaceDTO;
  import com.ctrip.framework.apollo.common.entity.AppNamespace;
  import com.ctrip.framework.apollo.common.exception.BadRequestException;
  import com.ctrip.framework.apollo.common.utils.BeanUtils;
  import com.ctrip.framework.apollo.core.enums.ConfigFileFormat;
  import com.ctrip.framework.apollo.core.utils.StringUtils;
  
  import org.springframework.beans.factory.annotation.Autowired;
  import org.springframework.data.domain.Pageable;
  import org.springframework.web.bind.annotation.PathVariable;
  import org.springframework.web.bind.annotation.RequestBody;
  import org.springframework.web.bind.annotation.RequestMapping;
  import org.springframework.web.bind.annotation.RequestMethod;
  import org.springframework.web.bind.annotation.RestController;
  
  import java.util.List;
  
  @RestController
  public class AppNamespaceController {
  
    @Autowired
    private AppNamespaceService appNamespaceService;
    @Autowired
    private NamespaceService namespaceService;
  
    @RequestMapping(value = "/apps/{appId}/appnamespaces", method = RequestMethod.POST)
    public AppNamespaceDTO create(@RequestBody AppNamespaceDTO appNamespace) {
  
      AppNamespace entity = BeanUtils.transfrom(AppNamespace.class, appNamespace);
      AppNamespace managedEntity = appNamespaceService.findOne(entity.getAppId(), entity.getName());
  
      if (managedEntity != null) {
        throw new BadRequestException("app namespaces already exist.");
      }
  
      if (StringUtils.isEmpty(entity.getFormat())){
        entity.setFormat(ConfigFileFormat.Properties.getValue());
      }
  
      entity = appNamespaceService.createAppNamespace(entity);
  
      return BeanUtils.transfrom(AppNamespaceDTO.class, entity);
  
    }
  
    @RequestMapping(value = "/appnamespaces/{publicNamespaceName}/namespaces", method = RequestMethod.GET)
    public List<NamespaceDTO> findPublicAppNamespaceAllNamespaces(@PathVariable String publicNamespaceName, Pageable pageable) {
  
      List<Namespace> namespaces = namespaceService.findPublicAppNamespaceAllNamespaces(publicNamespaceName, pageable);
  
      return BeanUtils.batchTransform(NamespaceDTO.class, namespaces);
    }
  
    @RequestMapping(value = "/appnamespaces/{publicNamespaceName}/associated-namespaces/count", method = RequestMethod.GET)
    public int countPublicAppNamespaceAssociatedNamespaces(@PathVariable String publicNamespaceName) {
      return namespaceService.countPublicAppNamespaceAssociatedNamespaces(publicNamespaceName);
    }
  
  }
  