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
