rafaelweingartner closed pull request #2462: [CLOUDSTACK-10301] Allow updating 
the network ACL list name and Description
URL: https://github.com/apache/cloudstack/pull/2462
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/api/src/main/java/com/cloud/network/vpc/NetworkACLService.java 
b/api/src/main/java/com/cloud/network/vpc/NetworkACLService.java
index dd7c862d46b..378b15ce940 100644
--- a/api/src/main/java/com/cloud/network/vpc/NetworkACLService.java
+++ b/api/src/main/java/com/cloud/network/vpc/NetworkACLService.java
@@ -22,6 +22,7 @@
 import org.apache.cloudstack.api.command.user.network.ListNetworkACLListsCmd;
 import org.apache.cloudstack.api.command.user.network.ListNetworkACLsCmd;
 import org.apache.cloudstack.api.command.user.network.UpdateNetworkACLItemCmd;
+import org.apache.cloudstack.api.command.user.network.UpdateNetworkACLListCmd;
 
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.utils.Pair;
@@ -38,7 +39,7 @@
     NetworkACL getNetworkACL(long id);
 
     /**
-     * List NetworkACLs by Id/Name/Network or Vpc it belongs to
+     * List NetworkACLs by Id/Name/Network or VPC it belongs to
      */
     Pair<List<? extends NetworkACL>, Integer> 
listNetworkACLs(ListNetworkACLListsCmd cmd);
 
@@ -87,6 +88,6 @@
      */
     boolean replaceNetworkACLonPrivateGw(long aclId, long privateGatewayId) 
throws ResourceUnavailableException;
 
-    NetworkACL updateNetworkACL(Long id, String customId, Boolean forDisplay);
+    NetworkACL updateNetworkACL(UpdateNetworkACLListCmd 
updateNetworkACLListCmd);
 
 }
diff --git 
a/api/src/main/java/org/apache/cloudstack/api/command/user/network/UpdateNetworkACLListCmd.java
 
b/api/src/main/java/org/apache/cloudstack/api/command/user/network/UpdateNetworkACLListCmd.java
index aa1f557e72b..22eaf2180ca 100644
--- 
a/api/src/main/java/org/apache/cloudstack/api/command/user/network/UpdateNetworkACLListCmd.java
+++ 
b/api/src/main/java/org/apache/cloudstack/api/command/user/network/UpdateNetworkACLListCmd.java
@@ -31,8 +31,7 @@
 import com.cloud.network.vpc.NetworkACL;
 import com.cloud.user.Account;
 
-@APICommand(name = "updateNetworkACLList", description = "Updates network ACL 
list", responseObject = SuccessResponse.class, since = "4.4",
-        requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
+@APICommand(name = "updateNetworkACLList", description = "Updates network ACL 
list", responseObject = SuccessResponse.class, since = "4.4", 
requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
 public class UpdateNetworkACLListCmd extends BaseAsyncCustomIdCmd {
     public static final Logger s_logger = 
Logger.getLogger(UpdateNetworkACLListCmd.class.getName());
     private static final String s_name = "updatenetworkacllistresponse";
@@ -44,9 +43,16 @@
     @Parameter(name = ApiConstants.ID, type = CommandType.UUID, entityType = 
NetworkACLResponse.class, required = true, description = "the ID of the network 
ACL")
     private Long id;
 
-    @Parameter(name = ApiConstants.FOR_DISPLAY, type = CommandType.BOOLEAN, 
description = "an optional field, whether to the display the list to the end 
user or not", since = "4.4", authorized = {RoleType.Admin})
+    @Parameter(name = ApiConstants.FOR_DISPLAY, type = CommandType.BOOLEAN, 
description = "an optional field, whether to the display the list to the end 
user or not", since = "4.4", authorized = {
+            RoleType.Admin})
     private Boolean display;
 
+    @Parameter(name = ApiConstants.NAME, type = CommandType.STRING, 
description = "Name of the network ACL list")
+    private String name;
+
+    @Parameter(name = ApiConstants.DESCRIPTION, type = CommandType.STRING, 
description = "Description of the network ACL list")
+    private String description;
+
     /////////////////////////////////////////////////////
     /////////////////// Accessors ///////////////////////
     /////////////////////////////////////////////////////
@@ -85,7 +91,7 @@ public long getEntityOwnerId() {
 
     @Override
     public void execute() throws ResourceUnavailableException {
-        NetworkACL acl = _networkACLService.updateNetworkACL(id, 
this.getCustomId(), getDisplay());
+        NetworkACL acl = _networkACLService.updateNetworkACL(this);
         NetworkACLResponse aclResponse = 
_responseGenerator.createNetworkACLResponse(acl);
         setResponseObject(aclResponse);
         aclResponse.setResponseName(getCommandName());
@@ -97,4 +103,12 @@ public void checkUuid() {
             _uuidMgr.checkUuid(this.getCustomId(), NetworkACL.class);
         }
     }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public String getName() {
+        return name;
+    }
 }
diff --git 
a/engine/schema/src/main/java/com/cloud/network/vpc/NetworkACLVO.java 
b/engine/schema/src/main/java/com/cloud/network/vpc/NetworkACLVO.java
index fb6a239c58d..4eaa2b575e0 100644
--- a/engine/schema/src/main/java/com/cloud/network/vpc/NetworkACLVO.java
+++ b/engine/schema/src/main/java/com/cloud/network/vpc/NetworkACLVO.java
@@ -101,4 +101,12 @@ public void setVpcId(long vpcId) {
     public boolean isDisplay() {
         return display;
     }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
 }
diff --git 
a/server/src/main/java/com/cloud/network/vpc/NetworkACLServiceImpl.java 
b/server/src/main/java/com/cloud/network/vpc/NetworkACLServiceImpl.java
index bfa842807f9..6c9f29fcf89 100644
--- a/server/src/main/java/com/cloud/network/vpc/NetworkACLServiceImpl.java
+++ b/server/src/main/java/com/cloud/network/vpc/NetworkACLServiceImpl.java
@@ -28,6 +28,7 @@
 import org.apache.cloudstack.api.command.user.network.ListNetworkACLListsCmd;
 import org.apache.cloudstack.api.command.user.network.ListNetworkACLsCmd;
 import org.apache.cloudstack.api.command.user.network.UpdateNetworkACLItemCmd;
+import org.apache.cloudstack.api.command.user.network.UpdateNetworkACLListCmd;
 import org.apache.cloudstack.context.CallContext;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang.StringUtils;
@@ -904,20 +905,30 @@ protected NetworkACLItemVO 
validateNetworkAclRuleIdAndRetrieveIt(UpdateNetworkAC
 
     @Override
     @ActionEvent(eventType = EventTypes.EVENT_NETWORK_ACL_UPDATE, 
eventDescription = "updating network acl", async = true)
-    public NetworkACL updateNetworkACL(final Long id, final String customId, 
final Boolean forDisplay) {
-        final NetworkACLVO acl = _networkACLDao.findById(id);
-        final Vpc vpc = _entityMgr.findById(Vpc.class, acl.getVpcId());
-        final Account caller = CallContext.current().getCallingAccount();
+    public NetworkACL updateNetworkACL(UpdateNetworkACLListCmd 
updateNetworkACLListCmd) {
+        Long id = updateNetworkACLListCmd.getId();
+        NetworkACLVO acl = _networkACLDao.findById(id);
+        Vpc vpc = _entityMgr.findById(Vpc.class, acl.getVpcId());
+
+        Account caller = CallContext.current().getCallingAccount();
         _accountMgr.checkAccess(caller, null, true, vpc);
 
-        if (customId != null) {
+        String name = updateNetworkACLListCmd.getName();
+        if (StringUtils.isNotBlank(name)) {
+            acl.setName(name);
+        }
+        String description = updateNetworkACLListCmd.getDescription();
+        if (StringUtils.isNotBlank(description)) {
+            acl.setDescription(description);
+        }
+        String customId = updateNetworkACLListCmd.getCustomId();
+        if (StringUtils.isNotBlank(customId)) {
             acl.setUuid(customId);
         }
-
+        Boolean forDisplay = updateNetworkACLListCmd.getDisplay();
         if (forDisplay != null) {
             acl.setDisplay(forDisplay);
         }
-
         _networkACLDao.update(id, acl);
         return _networkACLDao.findById(id);
     }
diff --git 
a/server/src/test/java/com/cloud/network/vpc/NetworkACLServiceImplTest.java 
b/server/src/test/java/com/cloud/network/vpc/NetworkACLServiceImplTest.java
index ee7a474bd19..3afae14af70 100644
--- a/server/src/test/java/com/cloud/network/vpc/NetworkACLServiceImplTest.java
+++ b/server/src/test/java/com/cloud/network/vpc/NetworkACLServiceImplTest.java
@@ -23,6 +23,7 @@
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.command.user.network.CreateNetworkACLCmd;
 import org.apache.cloudstack.api.command.user.network.UpdateNetworkACLItemCmd;
+import org.apache.cloudstack.api.command.user.network.UpdateNetworkACLListCmd;
 import org.apache.cloudstack.context.CallContext;
 import org.junit.Assert;
 import org.junit.Before;
@@ -46,12 +47,14 @@
 import com.cloud.network.dao.NetworkVO;
 import com.cloud.network.vpc.NetworkACLItem.Action;
 import com.cloud.network.vpc.NetworkACLItem.TrafficType;
+import com.cloud.network.vpc.dao.NetworkACLDao;
 import com.cloud.user.Account;
 import com.cloud.user.AccountManager;
 import com.cloud.utils.db.EntityManager;
 import com.cloud.utils.exception.CloudRuntimeException;
 
 @RunWith(PowerMockRunner.class)
+@PrepareForTest(CallContext.class)
 public class NetworkACLServiceImplTest {
 
     @Spy
@@ -64,9 +67,11 @@
     @Mock
     private NetworkACLItemDao networkAclItemDaoMock;
     @Mock
-    private EntityManager EntityManagerMock;
+    private EntityManager entityManagerMock;
     @Mock
-    private AccountManager AccountManager;
+    private AccountManager accountManagerMock;
+    @Mock
+    private NetworkACLDao networkAclDaoMock;
 
     @Mock
     private CreateNetworkACLCmd createNetworkAclCmdMock;
@@ -78,13 +83,22 @@
     private NetworkACL networkAclMock;
     @Mock
     private NetworkACLItemVO networkAclItemVoMock;
+    @Mock
+    private NetworkACLVO networkACLVOMock;
+    @Mock
+    private UpdateNetworkACLListCmd updateNetworkACLListCmdMock;
 
     private Long networkAclMockId = 1L;
     private Long networkOfferingMockId = 2L;
     private Long networkMockVpcMockId = 3L;
+    private long networkAclListId = 1l;
 
     @Before
     public void befoteTest() {
+        PowerMockito.mockStatic(CallContext.class);
+        
PowerMockito.when(CallContext.current()).thenReturn(Mockito.mock(CallContext.class));
+
+        
Mockito.when(networkAclDaoMock.findById(networkAclListId)).thenReturn(networkACLVOMock);
         Mockito.when(createNetworkAclCmdMock.getNetworkId()).thenReturn(1L);
         Mockito.when(createNetworkAclCmdMock.getProtocol()).thenReturn("tcp");
 
@@ -215,7 +229,7 @@ public void 
createAclListForNetworkAndReturnAclListIdTestServicesNotSupportedByN
     @Test(expected = InvalidParameterValueException.class)
     public void 
createAclListForNetworkAndReturnAclListIdTestServicesSupportedByNetworkOfferingButVpcNotFound()
 {
         
Mockito.doReturn(true).when(networkModelMock).areServicesSupportedByNetworkOffering(networkOfferingMockId,
 Network.Service.NetworkACL);
-        Mockito.doReturn(null).when(EntityManagerMock).findById(Vpc.class, 
networkMockVpcMockId);
+        Mockito.doReturn(null).when(entityManagerMock).findById(Vpc.class, 
networkMockVpcMockId);
 
         
networkAclServiceImpl.createAclListForNetworkAndReturnAclListId(createNetworkAclCmdMock,
 networkMock);
     }
@@ -223,7 +237,7 @@ public void 
createAclListForNetworkAndReturnAclListIdTestServicesSupportedByNetw
     @Test(expected = CloudRuntimeException.class)
     public void 
createAclListForNetworkAndReturnAclListIdTestCreateNetworkAclReturnsNull() {
         
Mockito.doReturn(true).when(networkModelMock).areServicesSupportedByNetworkOffering(networkOfferingMockId,
 Network.Service.NetworkACL);
-        
Mockito.doReturn(Mockito.mock(Vpc.class)).when(EntityManagerMock).findById(Vpc.class,
 networkMockVpcMockId);
+        
Mockito.doReturn(Mockito.mock(Vpc.class)).when(entityManagerMock).findById(Vpc.class,
 networkMockVpcMockId);
         
Mockito.doReturn(null).when(networkAclManager).createNetworkACL(Mockito.anyString(),
 Mockito.anyString(), Mockito.anyLong(), Mockito.anyBoolean());
 
         
networkAclServiceImpl.createAclListForNetworkAndReturnAclListId(createNetworkAclCmdMock,
 networkMock);
@@ -232,7 +246,7 @@ public void 
createAclListForNetworkAndReturnAclListIdTestCreateNetworkAclReturns
     @Test(expected = CloudRuntimeException.class)
     public void 
createAclListForNetworkAndReturnAclListIdTestAclNetworkIsCreatedButNotApplied() 
throws ResourceUnavailableException {
         
Mockito.doReturn(true).when(networkModelMock).areServicesSupportedByNetworkOffering(networkOfferingMockId,
 Network.Service.NetworkACL);
-        
Mockito.doReturn(Mockito.mock(Vpc.class)).when(EntityManagerMock).findById(Vpc.class,
 networkMockVpcMockId);
+        
Mockito.doReturn(Mockito.mock(Vpc.class)).when(entityManagerMock).findById(Vpc.class,
 networkMockVpcMockId);
         
Mockito.doReturn(Mockito.mock(NetworkACL.class)).when(networkAclManager).createNetworkACL(Mockito.anyString(),
 Mockito.anyString(), Mockito.anyLong(), Mockito.anyBoolean());
         
Mockito.doReturn(false).when(networkAclManager).replaceNetworkACL(Mockito.any(NetworkACL.class),
 Mockito.any(NetworkVO.class));
 
@@ -246,7 +260,7 @@ public void 
createAclListForNetworkAndReturnAclListIdTestAclNetworkIsCreatedButN
     @Test(expected = CloudRuntimeException.class)
     public void 
createAclListForNetworkAndReturnAclListIdTestAclNetworkIsCreatedButNotAppliedWithException()
 throws ResourceUnavailableException {
         
Mockito.doReturn(true).when(networkModelMock).areServicesSupportedByNetworkOffering(networkOfferingMockId,
 Network.Service.NetworkACL);
-        
Mockito.doReturn(Mockito.mock(Vpc.class)).when(EntityManagerMock).findById(Vpc.class,
 networkMockVpcMockId);
+        
Mockito.doReturn(Mockito.mock(Vpc.class)).when(entityManagerMock).findById(Vpc.class,
 networkMockVpcMockId);
         
Mockito.doReturn(Mockito.mock(NetworkACL.class)).when(networkAclManager).createNetworkACL(Mockito.anyString(),
 Mockito.anyString(), Mockito.anyLong(), Mockito.anyBoolean());
 
         
Mockito.doThrow(ResourceUnavailableException.class).when(networkAclManager).replaceNetworkACL(Mockito.any(NetworkACL.class),
 Mockito.any(NetworkVO.class));
@@ -261,7 +275,7 @@ public void 
createAclListForNetworkAndReturnAclListIdTestAclNetworkIsCreatedButN
     @Test
     public void 
createAclListForNetworkAndReturnAclListIdTestAclIsCreatedAndAppliedWithSuccess()
 throws ResourceUnavailableException {
         
Mockito.doReturn(true).when(networkModelMock).areServicesSupportedByNetworkOffering(networkOfferingMockId,
 Network.Service.NetworkACL);
-        
Mockito.doReturn(Mockito.mock(Vpc.class)).when(EntityManagerMock).findById(Vpc.class,
 networkMockVpcMockId);
+        
Mockito.doReturn(Mockito.mock(Vpc.class)).when(entityManagerMock).findById(Vpc.class,
 networkMockVpcMockId);
 
         NetworkACL networkAclMock = Mockito.mock(NetworkACL.class);
         Long expectedNetworkAclId = 5L;
@@ -339,7 +353,7 @@ public void validateNetworkAclTestAclDefaulDeny() {
     @Test(expected = InvalidParameterValueException.class)
     public void validateNetworkAclTestAclNotDefaulWithoutVpc() {
         Mockito.when(networkAclMock.getId()).thenReturn(3L);
-        Mockito.doReturn(null).when(EntityManagerMock).findById(Vpc.class, 
networkMockVpcMockId);
+        Mockito.doReturn(null).when(entityManagerMock).findById(Vpc.class, 
networkMockVpcMockId);
         ;
 
         networkAclServiceImpl.validateNetworkAcl(networkAclMock);
@@ -357,13 +371,13 @@ public void validateNetworkAclTestAclNotDefaulWithVpc() {
         Mockito.when(networkAclMock.getId()).thenReturn(3L);
         
Mockito.when(networkAclMock.getVpcId()).thenReturn(networkMockVpcMockId);
 
-        
Mockito.doReturn(Mockito.mock(Vpc.class)).when(EntityManagerMock).findById(Vpc.class,
 networkMockVpcMockId);
-        
Mockito.doNothing().when(AccountManager).checkAccess(Mockito.any(Account.class),
 Mockito.isNull(AccessType.class), Mockito.eq(true), Mockito.any(Vpc.class));
+        
Mockito.doReturn(Mockito.mock(Vpc.class)).when(entityManagerMock).findById(Vpc.class,
 networkMockVpcMockId);
+        
Mockito.doNothing().when(accountManagerMock).checkAccess(Mockito.any(Account.class),
 Mockito.isNull(AccessType.class), Mockito.eq(true), Mockito.any(Vpc.class));
 
         networkAclServiceImpl.validateNetworkAcl(networkAclMock);
 
-        Mockito.verify(EntityManagerMock).findById(Vpc.class, 
networkMockVpcMockId);
-        Mockito.verify(AccountManager).checkAccess(Mockito.any(Account.class), 
Mockito.isNull(AccessType.class), Mockito.eq(true), Mockito.any(Vpc.class));
+        Mockito.verify(entityManagerMock).findById(Vpc.class, 
networkMockVpcMockId);
+        
Mockito.verify(accountManagerMock).checkAccess(Mockito.any(Account.class), 
Mockito.isNull(AccessType.class), Mockito.eq(true), Mockito.any(Vpc.class));
 
         PowerMockito.verifyStatic();
         CallContext.current();
@@ -771,4 +785,60 @@ public void 
transferDataToNetworkAclRulePojoTestAllValuesWithUpdateData() {
         
Mockito.verify(networkAclServiceImpl).validateAndCreateNetworkAclRuleAction("deny");
     }
 
+    @Test
+    @PrepareForTest(CallContext.class)
+    public void updateNetworkACLTestParametersNotNull() {
+        String name = "name";
+        String description = "desc";
+        String customId = "customId";
+
+        Mockito.when(updateNetworkACLListCmdMock.getName()).thenReturn(name);
+        
Mockito.when(updateNetworkACLListCmdMock.getDescription()).thenReturn(description);
+        
Mockito.when(updateNetworkACLListCmdMock.getCustomId()).thenReturn(customId);
+        
Mockito.when(updateNetworkACLListCmdMock.getId()).thenReturn(networkAclListId);
+        
Mockito.when(updateNetworkACLListCmdMock.getDisplay()).thenReturn(false);
+
+        networkAclServiceImpl.updateNetworkACL(updateNetworkACLListCmdMock);
+
+        InOrder inOrder = Mockito.inOrder(networkAclDaoMock, 
entityManagerMock, entityManagerMock, accountManagerMock, networkACLVOMock);
+
+        inOrder.verify(networkAclDaoMock).findById(networkAclListId);
+        inOrder.verify(entityManagerMock).findById(Mockito.eq(Vpc.class), 
Mockito.anyLong());
+        
inOrder.verify(accountManagerMock).checkAccess(Mockito.any(Account.class), 
Mockito.isNull(AccessType.class), Mockito.eq(true), Mockito.any(Vpc.class));
+
+        inOrder.verify(networkACLVOMock).setName(name);
+        inOrder.verify(networkACLVOMock).setDescription(description);
+        inOrder.verify(networkACLVOMock).setUuid(customId);
+        inOrder.verify(networkACLVOMock).setDisplay(false);
+
+        inOrder.verify(networkAclDaoMock).update(networkAclListId, 
networkACLVOMock);
+        inOrder.verify(networkAclDaoMock).findById(networkAclListId);
+    }
+
+    @Test
+    @PrepareForTest(CallContext.class)
+    public void updateNetworkACLTestParametersWithNullValues() {
+        Mockito.when(updateNetworkACLListCmdMock.getName()).thenReturn(null);
+        
Mockito.when(updateNetworkACLListCmdMock.getDescription()).thenReturn(null);
+        
Mockito.when(updateNetworkACLListCmdMock.getCustomId()).thenReturn(null);
+        
Mockito.when(updateNetworkACLListCmdMock.getId()).thenReturn(networkAclListId);
+        
Mockito.when(updateNetworkACLListCmdMock.getDisplay()).thenReturn(null);
+
+        networkAclServiceImpl.updateNetworkACL(updateNetworkACLListCmdMock);
+
+        InOrder inOrder = Mockito.inOrder(networkAclDaoMock, 
entityManagerMock, entityManagerMock, accountManagerMock, networkACLVOMock);
+
+        inOrder.verify(networkAclDaoMock).findById(networkAclListId);
+        inOrder.verify(entityManagerMock).findById(Mockito.eq(Vpc.class), 
Mockito.anyLong());
+        
inOrder.verify(accountManagerMock).checkAccess(Mockito.any(Account.class), 
Mockito.isNull(AccessType.class), Mockito.eq(true), Mockito.any(Vpc.class));
+
+        Mockito.verify(networkACLVOMock, Mockito.times(0)).setName(null);
+        inOrder.verify(networkACLVOMock, 
Mockito.times(0)).setDescription(null);
+        inOrder.verify(networkACLVOMock, Mockito.times(0)).setUuid(null);
+        inOrder.verify(networkACLVOMock, Mockito.times(0)).setDisplay(false);
+
+        inOrder.verify(networkAclDaoMock).update(networkAclListId, 
networkACLVOMock);
+        inOrder.verify(networkAclDaoMock).findById(networkAclListId);
+    }
+
 }
diff --git a/ui/l10n/ar.js b/ui/l10n/ar.js
index f6927437017..d4240f1ec85 100644
--- a/ui/l10n/ar.js
+++ b/ui/l10n/ar.js
@@ -317,6 +317,7 @@ var dictionary = {
     "label.add.accounts": "إضافة حسابات",
     "label.add.accounts.to": "إضافة حسابات إلى",
     "label.add.acl.list": "Add ACL List",
+    "label.edit.acl.list": "Edit ACL List",
     "label.add.affinity.group": "Add new affinity group",
     "label.add.baremetal.dhcp.device": "Add Baremetal DHCP Device",
     "label.add.baremetal.rack.configuration": "Add Baremetal Rack 
Configuration",
diff --git a/ui/l10n/ca.js b/ui/l10n/ca.js
index 276b3e51bfc..9ec8154679a 100644
--- a/ui/l10n/ca.js
+++ b/ui/l10n/ca.js
@@ -317,6 +317,7 @@ var dictionary = {
     "label.add.accounts": "Afegir comptes",
     "label.add.accounts.to": "Afegir comptes a",
     "label.add.acl.list": "Add ACL List",
+    "label.edit.acl.list": "Edit ACL List",
     "label.add.affinity.group": "Add new affinity group",
     "label.add.baremetal.dhcp.device": "Add Baremetal DHCP Device",
     "label.add.baremetal.rack.configuration": "Add Baremetal Rack 
Configuration",
diff --git a/ui/l10n/de_DE.js b/ui/l10n/de_DE.js
index 76374f63459..55ca0c59ba7 100644
--- a/ui/l10n/de_DE.js
+++ b/ui/l10n/de_DE.js
@@ -317,6 +317,7 @@ var dictionary = {
     "label.add.accounts": "Konten hinzufügen",
     "label.add.accounts.to": "Konten hinzufügen zu",
     "label.add.acl.list": "ACL-Liste hinzufügen",
+    "label.edit.acl.list": "Edit ACL List",
     "label.add.affinity.group": "Neue Affinitätsgruppe hinzufügen",
     "label.add.baremetal.dhcp.device": "Baremetal DHCP-Gerät hinzufügen",
     "label.add.baremetal.rack.configuration": "Baremetal Rackkonfiguration 
hinzufügen",
diff --git a/ui/l10n/en.js b/ui/l10n/en.js
index 6d994303f1a..76043684871 100644
--- a/ui/l10n/en.js
+++ b/ui/l10n/en.js
@@ -319,6 +319,7 @@ var dictionary = {
 "label.add.accounts":"Add accounts",
 "label.add.accounts.to":"Add accounts to",
 "label.add.acl.list":"Add ACL List",
+"label.edit.acl.list": "Edit ACL List",
 "label.add.affinity.group":"Add new affinity group",
 "label.add.baremetal.dhcp.device":"Add Baremetal DHCP Device",
 "label.add.baremetal.rack.configuration":"Add Baremetal Rack Configuration",
diff --git a/ui/l10n/es.js b/ui/l10n/es.js
index 37f8425ac05..29de8427710 100644
--- a/ui/l10n/es.js
+++ b/ui/l10n/es.js
@@ -317,6 +317,7 @@ var dictionary = {
     "label.add.accounts": "Agregar Cuentas",
     "label.add.accounts.to": "Agregar Cuentas a",
     "label.add.acl.list": "Agregar Lista ACL",
+    "label.edit.acl.list": "Edit ACL List",
     "label.add.affinity.group": "Agregar un nuevo grupo de afinidad",
     "label.add.baremetal.dhcp.device": "Agregar dispositivo DHCP Baremetal",
     "label.add.baremetal.rack.configuration": "Agregar Configuración de Rack 
Baremetal",
diff --git a/ui/l10n/fr_FR.js b/ui/l10n/fr_FR.js
index 2d03b64dcaa..a53ab2e2cea 100644
--- a/ui/l10n/fr_FR.js
+++ b/ui/l10n/fr_FR.js
@@ -317,6 +317,7 @@ var dictionary = {
     "label.add.accounts": "Ajouter des comptes",
     "label.add.accounts.to": "Ajouter des comptes sur",
     "label.add.acl.list": "Ajouter Liste ACL",
+    "label.edit.acl.list": "Edit ACL List",
     "label.add.affinity.group": "Ajouter nouveau groupe d'affinité",
     "label.add.baremetal.dhcp.device": "Ajouter un DHCP Baremetal",
     "label.add.baremetal.rack.configuration": "Ajouter Configuration Rack 
Baremetal",
diff --git a/ui/l10n/hu.js b/ui/l10n/hu.js
index f4d20e5be1c..dd5a9527fe8 100644
--- a/ui/l10n/hu.js
+++ b/ui/l10n/hu.js
@@ -317,6 +317,7 @@ var dictionary = {
     "label.add.accounts": "Számlák felvétele",
     "label.add.accounts.to": "Számla felvétele:",
     "label.add.acl.list": "ACL lista felvétele",
+    "label.edit.acl.list": "Edit ACL List",
     "label.add.affinity.group": "Új affinítási csoport felvétele",
     "label.add.baremetal.dhcp.device": "Baremetal DHCP eszköz felvétele",
     "label.add.baremetal.rack.configuration": "Baremetal rack konfiguráció 
felvétele",
diff --git a/ui/l10n/it_IT.js b/ui/l10n/it_IT.js
index bcc3a0fa661..f35e12e7884 100644
--- a/ui/l10n/it_IT.js
+++ b/ui/l10n/it_IT.js
@@ -317,6 +317,7 @@ var dictionary = {
     "label.add.accounts": "Aggiungere utenti",
     "label.add.accounts.to": "Aggiungere utenti a",
     "label.add.acl.list": "Add ACL List",
+    "label.edit.acl.list": "Edit ACL List",
     "label.add.affinity.group": "Aggiungere un nuovo gruppo di affinità",
     "label.add.baremetal.dhcp.device": "Add Baremetal DHCP Device",
     "label.add.baremetal.rack.configuration": "Add Baremetal Rack 
Configuration",
diff --git a/ui/l10n/ja_JP.js b/ui/l10n/ja_JP.js
index efa937a4856..741b71eca88 100644
--- a/ui/l10n/ja_JP.js
+++ b/ui/l10n/ja_JP.js
@@ -317,6 +317,7 @@ var dictionary = {
     "label.add.accounts": "アカウントの追加",
     "label.add.accounts.to": "アカウントの追加先:",
     "label.add.acl.list": "ACL 一覧の追加",
+    "label.edit.acl.list": "Edit ACL List",
     "label.add.affinity.group": "新しいアフィニティ グループの追加",
     "label.add.baremetal.dhcp.device": "ベアメタル DHCP デバイスの追加",
     "label.add.baremetal.rack.configuration": "ベアメタルラック設定の追加",
diff --git a/ui/l10n/ko_KR.js b/ui/l10n/ko_KR.js
index de2d6ba9c98..270d48d586a 100644
--- a/ui/l10n/ko_KR.js
+++ b/ui/l10n/ko_KR.js
@@ -317,6 +317,7 @@ var dictionary = {
     "label.add.accounts": "계정 정보 추가",
     "label.add.accounts.to": "계정 정보 추가:",
     "label.add.acl.list": "Add ACL List",
+    "label.edit.acl.list": "Edit ACL List",
     "label.add.affinity.group": "Add new affinity group",
     "label.add.baremetal.dhcp.device": "Add Baremetal DHCP Device",
     "label.add.baremetal.rack.configuration": "Add Baremetal Rack 
Configuration",
diff --git a/ui/l10n/nb_NO.js b/ui/l10n/nb_NO.js
index 57fda63e7e1..ce1281f0f4e 100644
--- a/ui/l10n/nb_NO.js
+++ b/ui/l10n/nb_NO.js
@@ -317,6 +317,7 @@ var dictionary = {
     "label.add.accounts": "Legg til kontoer",
     "label.add.accounts.to": "Legg kontoer til",
     "label.add.acl.list": "Legg til ACL liste",
+    "label.edit.acl.list": "Edit ACL List",
     "label.add.affinity.group": "Legg til affinitetsgruppe",
     "label.add.baremetal.dhcp.device": "Legg Til Barmetall DHCP Enhet",
     "label.add.baremetal.rack.configuration": "Legg Til Barmetall Rack 
Konfigurering",
diff --git a/ui/l10n/nl_NL.js b/ui/l10n/nl_NL.js
index 4bf253dd074..1fc847fb5b5 100644
--- a/ui/l10n/nl_NL.js
+++ b/ui/l10n/nl_NL.js
@@ -317,6 +317,7 @@ var dictionary = {
     "label.add.accounts": "Voeg accounts toe",
     "label.add.accounts.to": "Voeg accounts toe aan",
     "label.add.acl.list": "voeg een ACL lijst toe",
+    "label.edit.acl.list": "Verander een ACL lijst",
     "label.add.affinity.group": "Nieuwe affinity groep toevoegen",
     "label.add.baremetal.dhcp.device": "Voeg Baremetal DHCP Apparaat toe",
     "label.add.baremetal.rack.configuration": "voeg baremetal rek configuratie 
toe",
diff --git a/ui/l10n/pl.js b/ui/l10n/pl.js
index 7b7a89b316a..968c57bc590 100644
--- a/ui/l10n/pl.js
+++ b/ui/l10n/pl.js
@@ -317,6 +317,7 @@ var dictionary = {
     "label.add.accounts": "Dodaj konta",
     "label.add.accounts.to": "Dodaj konto do",
     "label.add.acl.list": "Add ACL List",
+    "label.edit.acl.list": "Edit ACL List",
     "label.add.affinity.group": "Add new affinity group",
     "label.add.baremetal.dhcp.device": "Add Baremetal DHCP Device",
     "label.add.baremetal.rack.configuration": "Add Baremetal Rack 
Configuration",
diff --git a/ui/l10n/pt_BR.js b/ui/l10n/pt_BR.js
index 45de2067fa7..110600de98f 100644
--- a/ui/l10n/pt_BR.js
+++ b/ui/l10n/pt_BR.js
@@ -317,6 +317,7 @@ var dictionary = {
     "label.add.accounts": "Adicionar contas",
     "label.add.accounts.to": "Adicionar contas para",
     "label.add.acl.list": "Adiciona Lista ACL",
+    "label.edit.acl.list": "Edit ACL List",
     "label.add.affinity.group": "Adicionar um grupo de afinidade",
     "label.add.baremetal.dhcp.device": "Adiciona Dispositivo DHCP Baremetal",
     "label.add.baremetal.rack.configuration": "Adicionar Configuração de Rack 
de Baremetal",
diff --git a/ui/l10n/ru_RU.js b/ui/l10n/ru_RU.js
index 0321f710cee..4cf5a1df6e4 100644
--- a/ui/l10n/ru_RU.js
+++ b/ui/l10n/ru_RU.js
@@ -317,6 +317,7 @@ var dictionary = {
     "label.add.accounts": "Добавить учётные записи",
     "label.add.accounts.to": "Добавить учётные записи",
     "label.add.acl.list": "Add ACL List",
+    "label.edit.acl.list": "Edit ACL List",
     "label.add.affinity.group": "Добавить новую affinity group",
     "label.add.baremetal.dhcp.device": "Add Baremetal DHCP Device",
     "label.add.baremetal.rack.configuration": "Add Baremetal Rack 
Configuration",
diff --git a/ui/l10n/zh_CN.js b/ui/l10n/zh_CN.js
index 1d617d6f630..e3e2ed4bbd3 100644
--- a/ui/l10n/zh_CN.js
+++ b/ui/l10n/zh_CN.js
@@ -317,6 +317,7 @@ var dictionary = {
     "label.add.accounts": "添加帐户",
     "label.add.accounts.to": "添加帐户至",
     "label.add.acl.list": "添加 ACL 列表",
+    "label.edit.acl.list": "Edit ACL List",
     "label.add.affinity.group": "添加新关联性组",
     "label.add.baremetal.dhcp.device": "添加裸机 DHCP 设备",
     "label.add.baremetal.rack.configuration": "添加 Baremetal Rack 配置",
diff --git a/ui/scripts/ui/widgets/detailView.js 
b/ui/scripts/ui/widgets/detailView.js
index 2ce72a25789..350ee839a4e 100644
--- a/ui/scripts/ui/widgets/detailView.js
+++ b/ui/scripts/ui/widgets/detailView.js
@@ -606,7 +606,7 @@
                                 } else {
                                     $loading.appendTo($detailView);
                                     cloudStack.ui.notifications.add(
-                                        $.extend(true, {}, 
action.notification, notificationArgs),
+                                        $.extend(true, {}, notificationArgs, 
action.notification),
                                         function(args) {
                                             replaceListViewItem($detailView, 
data);
 
diff --git a/ui/scripts/vpc.js b/ui/scripts/vpc.js
index 7a2a30205d0..6a65ed3b26a 100644
--- a/ui/scripts/vpc.js
+++ b/ui/scripts/vpc.js
@@ -1283,6 +1283,37 @@
                                 notification: {
                                     poll: pollAsyncJobResult
                                 }
+                            },
+                            edit: {
+                                label: 'label.edit.acl.list',
+                                action: function(args) {
+                                    var data = args.data;
+                                    data.id = args.context.aclLists[0].id;
+                                    $.ajax({
+                                        url: createURL('updateNetworkACLList'),
+                                        type: "POST",
+                                        data: data,
+                                        success: function(json) {
+                                            var jid = 
json.updatenetworkacllistresponse.jobid;
+                                            args.response.success({
+                                                _custom: {
+                                                    jobId: jid,
+                                                    getUpdatedItem: function() 
{
+                                                        
$(window).trigger('cloudStack.fullRefresh');
+                                                        
jQuery('div[id=breadcrumbs] ul:visible li span').last().html(data.name);
+                                                    }
+                                                }
+                                            });
+                                        },
+                                        error: function(json) {
+                                            
args.response.error(parseXMLHttpResponse(json));
+                                        }
+                                    });
+                                },
+                                notification: {
+                                    poll: pollAsyncJobResult,
+                                    desc: 'label.edit.acl.list'
+                                }
                             }
                         },
 
@@ -1295,7 +1326,8 @@
                                         isEditable: true
                                     },
                                     description: {
-                                        label: 'label.description'
+                                        label: 'label.description',
+                                        isEditable: true  
                                     },
                                     id: {
                                         label: 'label.id'
@@ -1310,6 +1342,7 @@
                                                 var allowedActions = [];
                                                 if (items.vpcid != null) {
                                                     
allowedActions.push("remove");
+                                                    
allowedActions.push("edit");
                                                 }
                                                 return allowedActions;
                                             }


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


With regards,
Apache Git Services

Reply via email to