/*
* JBoss, Home of Professional Open Source.
* Copyright 2012, Red Hat Middleware LLC, and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jboss.as.controller.interfaces;
import java.util.Set;
import org.jboss.as.controller.logging.ControllerLogger;
/**
*
* @author <a href="kabir.khan@jboss.com">Kabir Khan</a>
*/
class CriteriaValidator {
final Set<InterfaceCriteria> criteria;
CriteriaValidator(Set<InterfaceCriteria> criteria) {
this.criteria = criteria;
}
String validate() {
for (InterfaceCriteria current : criteria) {
Validation validation = getValidation(current);
if (validation == null) {
continue;
}
for (InterfaceCriteria candidate : criteria) {
if (current == candidate) {
continue;
}
String error = validation.validate(current, candidate);
if (error != null) {
return error;
}
}
}
return null;
}
Validation getValidation(InterfaceCriteria criteria) {
if (criteria instanceof LoopbackInterfaceCriteria) {
return LOOPBACK_INTERFACE;
} else if (criteria instanceof LinkLocalInterfaceCriteria) {
//TODO
//return LINK_LOCAL_INTERFACE;
return null;
} else if (criteria instanceof NotInterfaceCriteria) {
return NOT_INTERFACE;
}
return null;
}
interface Validation {
String validate(InterfaceCriteria current, InterfaceCriteria candidate);
}
static Validation LOOPBACK_INTERFACE = new Validation() {
@Override
public String validate(InterfaceCriteria current, InterfaceCriteria candidate) {
if (candidate instanceof InetAddressMatchInterfaceCriteria) {
return ControllerLogger.ROOT_LOGGER.cantHaveBothLoopbackAndInetAddressCriteria();
}
return null;
}
};
//TODO This needs to check the inet address match interface criteria is not link local
// static Validation LINK_LOCAL_INTERFACE = new Validation() {
//
// @Override
// public String validate(InterfaceCriteria current, InterfaceCriteria candidate) {
// if (candidate instanceof InetAddressMatchInterfaceCriteria) {
// return MESSAGES.cantHaveBothLinkLocalAndInetAddressCriteria();
// }
// return null;
// }
// };
static Validation NOT_INTERFACE = new Validation() {
@Override
public String validate(InterfaceCriteria current, InterfaceCriteria candidate) {
for (InterfaceCriteria curr : ((NotInterfaceCriteria)current).getAllCriteria()) {
if (curr.equals(candidate)) {
return ControllerLogger.ROOT_LOGGER.cantHaveSameCriteriaForBothNotAndInclusion(candidate);
}
}
return null;
}
};
}