/**
* Copyright (c) 2009 - 2012 Red Hat, Inc.
*
* This software is licensed to you under the GNU General Public License,
* version 2 (GPLv2). There is NO WARRANTY for this software, express or
* implied, including the implied warranties of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
* along with this software; if not, see
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
*
* Red Hat trademarks are not licensed under GPLv2. No permission is
* granted to use or replicate Red Hat trademarks that are incorporated
* in this software or its documentation.
*/
package org.candlepin.util;
import org.candlepin.common.exceptions.BadRequestException;
import org.candlepin.controller.PoolManager;
import org.candlepin.model.Owner;
import com.google.inject.Inject;
import org.apache.commons.lang.StringUtils;
import org.xnap.commons.i18n.I18n;
import java.util.Collection;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
/**
* ContentOverrideValidator utility class used to validate
* ContentOverride and its subclasses. Includes column length
* checking and overrideRules to check against blacklisted
* name overrides
*/
public class ServiceLevelValidator {
private static final int MAX_COL_LENGTH = 255;
private I18n i18n;
private PoolManager poolManager;
@Inject
public ServiceLevelValidator(I18n i18n, PoolManager poolManager) {
this.i18n = i18n;
this.poolManager = poolManager;
}
public void validate(Owner owner, Collection<String> serviceLevels) {
Set<String> invalidServiceLevels = new HashSet<String>();
for (String serviceLevel : serviceLevels) {
if (!StringUtils.isBlank(serviceLevel)) {
boolean found = false;
for (String level : poolManager.retrieveServiceLevelsForOwner(
owner, false)) {
if (serviceLevel.equalsIgnoreCase(level)) {
found = true;
break;
}
}
if (!found) {
invalidServiceLevels.add(serviceLevel);
}
}
}
if (!invalidServiceLevels.isEmpty()) {
String error = i18n.tr("Service level ''{0}'' is not available " +
"to units of organization {1}.",
StringUtils.join(invalidServiceLevels, ", "), owner.getKey());
throw new BadRequestException(error);
}
}
public void validate(Owner owner, String serviceLevel) {
List<String> tmpList = new LinkedList<String>();
tmpList.add(serviceLevel);
validate(owner, tmpList);
}
}