/* * (C) Copyright 2015 Netcentric AG. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ package biz.netcentric.cq.tools.actool.validators; import java.util.LinkedHashSet; import java.util.Map; import java.util.Set; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang.StringUtils; import biz.netcentric.cq.tools.actool.configmodel.AceBean; import biz.netcentric.cq.tools.actool.helper.AcHelper; import biz.netcentric.cq.tools.actool.helper.Constants; public class YamlConfigurationsValidator implements ConfigurationsValidator { /* * (non-Javadoc) * * @see biz.netcentric.cq.tools.actool.validators.ConfigurationsValidator# validateDoubleGroups(java.util.Set, java.util.Set, * java.lang.String) */ @Override public void validateDuplicateAuthorizables(final Set<String> groupsFromAllConfig, final Set<String> groupsFromCurrentConfig, final String configPath) throws IllegalArgumentException { if (CollectionUtils.containsAny(groupsFromAllConfig, groupsFromCurrentConfig)) { String errorMessage = "Already defined authorizable: "; // find the name of the doubled defined group and add it to error // message for (String group : groupsFromCurrentConfig) { if (groupsFromAllConfig.contains(group)) { errorMessage = errorMessage + group + " found in configuration file: " + configPath + "!"; errorMessage += " This authorizable was already defined in another configuration file on the system!"; break; } } throw new IllegalArgumentException(errorMessage); } } /* * (non-Javadoc) * * @see biz.netcentric.cq.tools.actool.validators.ConfigurationsValidator# validateSectionIdentifiers(java.util.Set, java.lang.String) */ @Override public void validateSectionIdentifiers( final Set<String> sectionIdentifiers, final String filePath) throws IllegalArgumentException { // check for invalid section identifiers if (!Constants.VALID_CONFIG_SECTION_IDENTIFIERS .containsAll(sectionIdentifiers)) { for (String identifier : sectionIdentifiers) { if (!Constants.VALID_CONFIG_SECTION_IDENTIFIERS .contains(identifier)) { throw new IllegalArgumentException( "invalid section identifier: " + identifier + " in configuration file: " + filePath + "\n" + "valid configuration section identifiers are: " + Constants.VALID_CONFIG_SECTION_IDENTIFIERS); } } } } @Override public void validateInitialContentForNoDuplicates(Set<AceBean> aceBeansFromConfig) throws IllegalArgumentException { Map<String, Set<AceBean>> pathBasedAceMapFromConfig = AcHelper .getPathBasedAceMap(aceBeansFromConfig, AcHelper.ACE_ORDER_ACTOOL_BEST_PRACTICE); for (String path : pathBasedAceMapFromConfig.keySet()) { Set<AceBean> aceBeanSet = pathBasedAceMapFromConfig.get(path); String initialContent = null; for (AceBean aceBean : aceBeanSet) { if (StringUtils.isNotBlank(aceBean.getInitialContent())) { if (initialContent == null) { initialContent = aceBean.getInitialContent(); } else { throw new IllegalArgumentException("Duplicate 'initialContent' for path " + path); } } } } } @Override public void validateKeepOrder(Set<AceBean> aceBeansFromAllConfigs, Set<AceBean> aceBeansFromCurrentConfig, String sourceFile) { Set<String> pathsWithKeepOrderSet = new LinkedHashSet<String>(); for (AceBean aceBean : aceBeansFromAllConfigs) { if (aceBean.isKeepOrder()) { pathsWithKeepOrderSet.add(aceBean.getJcrPath()); } } if (aceBeansFromCurrentConfig != null) { for (AceBean aceBean : aceBeansFromCurrentConfig) { if (aceBean.isKeepOrder() && pathsWithKeepOrderSet.contains(aceBean.getJcrPath())) { throw new IllegalArgumentException( "If keepOrder=true is used, the ACE definitions for one particular path must only be defined in one source file (ACE for " + aceBean.getJcrPath() + " and group " + aceBean.getPrincipalName() + " as defined in " + sourceFile + " was defined before) "); } } } } }