Github user Vishanth commented on a diff in the pull request:

    https://github.com/apache/stratos/pull/296#discussion_r30017859
  
    --- Diff: 
components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
 ---
    @@ -3200,4 +3202,124 @@ public static void updateUser(UserInfoBean 
userInfoBean) throws RestAPIException
             return userList;
         }
     
    +    /**
    +     * This method is to validate the cartridge duplication in the group 
definition recursively for group within groups
    +     *
    +     * @param groupBean - cartridge group definition
    +     * @throws InvalidCartridgeGroupDefinitionException - throws when the 
group definition is invalid
    +     */
    +    private static void 
validateCartridgeDuplicationInGroupDefinition(GroupBean groupBean)
    +            throws InvalidCartridgeGroupDefinitionException {
    +        if (groupBean == null) {
    +            return;
    +        }
    +        List<String> cartridges = new ArrayList<String>();
    +        if (groupBean.getCartridges() != null) {
    +            if (groupBean.getCartridges().size() > 1) {
    +                cartridges.addAll(groupBean.getCartridges());
    +                validateCartridgeDuplicationInGroup(cartridges);
    +            }
    +        }
    +        if (groupBean.getGroups() != null) {
    +            //Recursive because to check groups inside groups
    +            for (GroupBean group : groupBean.getGroups()) {
    +                validateCartridgeDuplicationInGroupDefinition(group);
    +            }
    +        }
    +    }
    +
    +    /**
    +     * This method is to validate the duplication of cartridges from the 
given list
    +     *
    +     * @param cartridges - list of strings which holds the cartridgeTypes 
values
    +     * @throws InvalidCartridgeGroupDefinitionException - throws when the 
cartridges are duplicated
    +     */
    +    private static void validateCartridgeDuplicationInGroup(List<String> 
cartridges)
    +            throws InvalidCartridgeGroupDefinitionException {
    +        List<String> checkList = new ArrayList<String>();
    +        for (String cartridge : cartridges) {
    +            if (!checkList.contains(cartridge)) {
    +                checkList.add(cartridge);
    +            } else {
    +                if (log.isDebugEnabled()) {
    +                    log.debug("duplicate cartridges defined: " + 
cartridge);
    +                }
    +                throw new 
InvalidCartridgeGroupDefinitionException("Invalid cartridge group definition, " 
+
    +                        "duplicate cartridges defined: " + cartridge);
    +            }
    +        }
    +    }
    +
    +
    +    /**
    +     * This is a wrapper method to invoke 
validateGroupDuplicationInGroupDefinition with a new arraylist of string
    +     *
    +     * @param groupBean     - cartridge group definition
    +     * @throws InvalidCartridgeGroupDefinitionException
    +     */
    +    private static void 
validateGroupDuplicationInGroupDefinition(GroupBean groupBean)
    +            throws InvalidCartridgeGroupDefinitionException {
    +        validateGroupDuplicationInGroupDefinition(groupBean, new 
ArrayList<String>());
    +    }
    +
    +        /**
    +         * This is to validate the group duplication in the group 
definition recursively for group within groups
    +         *
    +         * @param groupBean    - cartridge group definition
    +         * @param parentGroups - list of string which holds the parent 
group names (all parents in the hierarchy)
    +         * @throws InvalidCartridgeGroupDefinitionException - throws when 
the group definition is invalid
    +         */
    +    private static void 
validateGroupDuplicationInGroupDefinition(GroupBean groupBean, List<String> 
parentGroups)
    +            throws InvalidCartridgeGroupDefinitionException {
    +        if (groupBean == null) {
    +            return;
    +        }
    +        List<String> groups = new ArrayList<String>();
    +        parentGroups.add(groupBean.getName());
    +        if (groupBean.getGroups() != null) {
    +            if (!groupBean.getGroups().isEmpty()) {
    +                for (GroupBean g : groupBean.getGroups()) {
    +                    groups.add(g.getName());
    +                }
    +                validateGroupDuplicationInGroup(groups, parentGroups);
    +            }
    +        }
    +        if (groupBean.getGroups() != null) {
    +            //Recursive because to check groups inside groups
    +            for (GroupBean group : groupBean.getGroups()) {
    +                validateGroupDuplicationInGroupDefinition(group, 
parentGroups);
    +                parentGroups.remove(group.getName());
    +            }
    +        }
    +    }
    +
    +    /**
    +     * This method is to validate the duplication of groups in the same 
level and to validate cyclic behaviour of groups
    +     *
    +     * @param groups       - cartridge group definition
    +     * @param parentGroups - list of string which holds the parent group 
names (all parents in the hierarchy)
    +     * @throws InvalidCartridgeGroupDefinitionException - throws when 
group duplicate or when cyclic behaviour occurs
    +     */
    +    private static void validateGroupDuplicationInGroup(List<String> 
groups, List<String> parentGroups)
    +            throws InvalidCartridgeGroupDefinitionException {
    +        List<String> checkList = new ArrayList<String>();
    +        for (String group : groups) {
    +            if (!checkList.contains(group)) {
    +                checkList.add(group);
    +            } else {
    +                if (log.isDebugEnabled()) {
    +                    log.debug("duplicate group defined: " + group);
    +                }
    +                throw new 
InvalidCartridgeGroupDefinitionException("Invalid cartridge group definition, " 
+
    +                        "duplicate groups defined: " + group);
    +            }
    +            if (parentGroups.contains(group)) {
    +                if (log.isDebugEnabled()) {
    +                    log.debug("cyclic group behaviour identified 
[group-name]: " + group);
    --- End diff --
    
    Corrected in #301


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastruct...@apache.org or file a JIRA ticket
with INFRA.
---

Reply via email to