Repository: stratos
Updated Branches:
  refs/heads/master 49cac9ba9 -> 87cb7630d


Validate application definition to have group with unique aliases


Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/f8f9f719
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/f8f9f719
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/f8f9f719

Branch: refs/heads/master
Commit: f8f9f7190956aef6f93a44f94f8641de12263914
Parents: 49cac9b
Author: Vishanth <[email protected]>
Authored: Thu Apr 30 16:13:52 2015 +0530
Committer: Vishanth <[email protected]>
Committed: Thu Apr 30 16:13:52 2015 +0530

----------------------------------------------------------------------
 .../rest/endpoint/api/StratosApiV41Utils.java   | 57 ++++++++++++++++++++
 1 file changed, 57 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/f8f9f719/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
 
b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
index ff8d36f..3ce4ab7 100644
--- 
a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
+++ 
b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
@@ -96,6 +96,7 @@ import 
org.wso2.carbon.utils.multitenancy.MultitenantConstants;
 
 import java.rmi.RemoteException;
 import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.regex.Pattern;
 
 
@@ -1070,6 +1071,10 @@ public class StratosApiV41Utils {
 
         validateApplication(appDefinition);
 
+        // To validate groups have unique alias in the application definition
+        validateGroupAliasesInApplicationDefinition(appDefinition);
+
+
         ApplicationContext applicationContext = 
ObjectConverter.convertApplicationDefinitionToStubApplicationContext(
                 appDefinition);
         
applicationContext.setTenantId(ApplicationManagementUtil.getTenantId(ctxt));
@@ -1222,6 +1227,58 @@ public class StratosApiV41Utils {
     }
 
     /**
+     * This method is to validate the application definition to have unique 
aliases among its groups
+     *
+     * @param applicationDefinition
+     * @return
+     */
+    private static void 
validateGroupAliasesInApplicationDefinition(ApplicationBean 
applicationDefinition) throws RestAPIException {
+
+        ConcurrentHashMap<String, GroupReferenceBean> 
groupsInApplicationDefinition = new ConcurrentHashMap<String, 
GroupReferenceBean>();
+
+        if ((applicationDefinition.getComponents().getGroups() != null) &&
+                
(!applicationDefinition.getComponents().getGroups().isEmpty())) {
+
+            //This is to validate the top level groups in the application 
definition
+            for (GroupReferenceBean group : 
applicationDefinition.getComponents().getGroups()) {
+                if (groupsInApplicationDefinition.get(group.getAlias()) != 
null) {
+                    String message = "Cartridge group alias exists more than 
once: [group-alias] " +
+                            group.getAlias();
+                    throw new RestAPIException(message);
+                }
+                groupsInApplicationDefinition.put(group.getAlias(), group);
+
+                if (group.getGroups() != null) {
+                    //This is to validate the groups aliases recursively
+                    validateGroupsRecursively(groupsInApplicationDefinition, 
group.getGroups());
+                }
+            }
+        }
+    }
+
+    /**
+     * This method validates group aliases recursively
+     *
+     * @param groupsSet - the group collection in which the groups are added to
+     * @param groups - the group collection in which it traverses through
+     */
+    private static void validateGroupsRecursively(ConcurrentHashMap<String, 
GroupReferenceBean> groupsSet,
+                                                  
Collection<GroupReferenceBean> groups) throws RestAPIException{
+        for (GroupReferenceBean group : groups) {
+            if (groupsSet.get(group.getAlias()) != null) {
+                String message = "Cartridge group alias exists more than once: 
[group-alias] " +
+                        group.getAlias();
+                throw new RestAPIException(message);
+            }
+            groupsSet.put(group.getAlias(), group);
+
+            if (group.getGroups() != null) {
+                validateGroupsRecursively(groupsSet, group.getGroups());
+            }
+        }
+    }
+
+    /**
      * Deploy application with an application policy.
      *
      * @param applicationId       Application ID

Reply via email to