diff --git a/apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/repository/NamespaceRepository.java b/apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/repository/NamespaceRepository.java index 07107a3cf4c76a55ca711b4be998acac1d5ef0d1..c83cca3c6cf529effef65d05e9394ae4abbc1767 100644 --- a/apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/repository/NamespaceRepository.java +++ b/apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/repository/NamespaceRepository.java @@ -8,7 +8,7 @@ import com.ctrip.framework.apollo.biz.entity.Namespace; public interface NamespaceRepository extends PagingAndSortingRepository { - List findByAppIdAndClusterName(String appId, String clusterName); + List findByAppIdAndClusterNameOrderByIdAsc(String appId, String clusterName); Namespace findByAppIdAndClusterNameAndNamespaceName(String appId, String clusterName, String namespaceName); } diff --git a/apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/service/NamespaceService.java b/apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/service/NamespaceService.java index dbc4454ba0fb5735e1a8f6f60d0b28d71070e4f3..70ffc150a61b3d4df10d25d6aa98d93bed6eacf3 100644 --- a/apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/service/NamespaceService.java +++ b/apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/service/NamespaceService.java @@ -49,7 +49,7 @@ public class NamespaceService { } public List findNamespaces(String appId, String clusterName) { - List groups = namespaceRepository.findByAppIdAndClusterName(appId, clusterName); + List groups = namespaceRepository.findByAppIdAndClusterNameOrderByIdAsc(appId, clusterName); if (groups == null) { return Collections.emptyList(); } diff --git a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/api/AdminServiceAPI.java b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/api/AdminServiceAPI.java index 93ebdc1e36eadc6f46adbcf529139166ea1f54cb..d15dc1a000c7bbd3c92cfc07ed256c33c9537382 100644 --- a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/api/AdminServiceAPI.java +++ b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/api/AdminServiceAPI.java @@ -121,6 +121,10 @@ public class AdminServiceAPI { .format("apps/%s/clusters/%s/namespaces/%s/items", appId, clusterName, namespace), item, ItemDTO.class).getBody(); } + + public void deleteItem( Env env, long itemId){ + restTemplate.delete(getAdminServiceHost(env) + "items/" + itemId); + } } @Service diff --git a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/controller/PortalConfigController.java b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/controller/PortalConfigController.java index f00a4fd2d7b9a665376a3849af0629e534f9dd5a..709dacb079ca6cf3a2d8eed835a3c29471422779 100644 --- a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/controller/PortalConfigController.java +++ b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/controller/PortalConfigController.java @@ -77,6 +77,14 @@ public class PortalConfigController { return configService.createOrUpdateItem(appId, Env.valueOf(env), clusterName, namespaceName, item); } + @RequestMapping(value = "/envs/{env}/items/{itemId}", method = RequestMethod.DELETE) + public void deleteItem(@PathVariable String env, @PathVariable long itemId){ + if (itemId <= 0){ + throw new BadRequestException("item id invalid"); + } + configService.deleteItem(Env.valueOf(env), itemId); + } + @RequestMapping(value = "/apps/{appId}/env/{env}/clusters/{clusterName}/namespaces/{namespaceName}/release", method = RequestMethod.POST, consumes = { "application/json"}) public ReleaseDTO createRelease(@PathVariable String appId, diff --git a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/PortalConfigService.java b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/PortalConfigService.java index f8963f1df794bb172fb124adbd25df27cf4016b7..17620206df3e6bd94d6cfdf5a902302155a37bc8 100644 --- a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/PortalConfigService.java +++ b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/PortalConfigService.java @@ -81,7 +81,10 @@ public class PortalConfigService { item.setNamespaceId(namespace.getId()); return itemAPI.createOrUpdateItem(appId, env, clusterName, namespaceName, item); + } + public void deleteItem(Env env, long itemId){ + itemAPI.deleteItem(env, itemId); } /** * createRelease config items diff --git a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/txtresolver/PropertyResolver.java b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/txtresolver/PropertyResolver.java index 98587aeeeacfa7f6096413e50df0c55b7e36147c..fb1f517584d2ca9706b767ee983307c15bd879da 100644 --- a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/txtresolver/PropertyResolver.java +++ b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/txtresolver/PropertyResolver.java @@ -28,10 +28,6 @@ public class PropertyResolver implements ConfigTextResolver { @Override public ItemChangeSets resolve(long namespaceId, String configText, List baseItems) { - if (StringUtils.isEmpty(configText)){ - throw new BadRequestException("config text can not be empty"); - } - Map oldLineNumMapItem = BeanUtils.mapByKey("lineNum", baseItems); Map oldKeyMapItem = BeanUtils.mapByKey("key", baseItems); diff --git a/apollo-portal/src/main/resources/static/config.html b/apollo-portal/src/main/resources/static/config.html index 2fed902339cd5b70ebcba548d336d452589d842b..6d6b0aa90edd13aaf17762e3bf9a98e501dacf8b 100644 --- a/apollo-portal/src/main/resources/static/config.html +++ b/apollo-portal/src/main/resources/static/config.html @@ -198,7 +198,7 @@ + ng-click="setCommitNamespace(namespace)"> @@ -249,17 +249,17 @@ - - - + + + - - - + + + - - - + + + @@ -279,6 +279,12 @@ data-toggle="modal" data-target="#itemModal" ng-click="editItem(namespace, config.item)"> +   + @@ -358,6 +364,29 @@ + + +