package org.ovirt.engine.core.common.utils; import java.util.Objects; import org.ovirt.engine.core.common.validation.MaskValidator; public class SubnetUtils { private static SubnetUtils INSTANCE = new SubnetUtils(); private SubnetUtils() { } public static SubnetUtils getInstance() { return INSTANCE; } /*** * Check if two subnet represent the same value regardless of each prefix or netmask representation * @param subnetA * valid prefix or netmask format * @param subnetB * valid prefix or netmask format * @return true if both has equals subnet value false otherwise */ public boolean equalSubnet(String subnetA, String subnetB) { if (Objects.equals(subnetA, subnetB)) { return true; } else if (validNetmaskFormat(subnetA) && validPrefixFormat(subnetB)) { final String subnetBAsPrefix = convertStringToIpv4Address(subnetB); return subnetBAsPrefix.equals(subnetA); } else if (validNetmaskFormat(subnetB) && validPrefixFormat(subnetA)) { final String subnetAAsPrefix = convertStringToIpv4Address(subnetA); return subnetAAsPrefix.equals(subnetB); } return false; } protected String convertStringToIpv4Address(String subnetB) { return getIpAddressConverter().convertPrefixToNetmask(subnetB); } protected IPAddressConverter getIpAddressConverter() { return IPv4AddressConverter.getInstance(); } protected boolean validNetmaskFormat(String subnet) { return getMaskValidator().isValidNetmaskFormat(subnet); } protected boolean validPrefixFormat(String subnet) { return getMaskValidator().isPrefixValid(subnet); } protected MaskValidator getMaskValidator() { return MaskValidator.getInstance(); } }