/** * Copyright (c) 2009--2010 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 com.redhat.rhn.manager.channel; import com.redhat.rhn.common.util.RpmVersionComparator; import com.redhat.rhn.frontend.dto.EssentialChannelDto; import org.apache.commons.lang.StringUtils; import java.util.Comparator; /** * EusReleaseComparator * * Compare two RHEL releases, where the behavior can differ depending on which version * of RHEL we're dealing with. (RHEL 4 in particular needs special attention.) * * "Release" in this context ends up appearing more like what we'd call a version, * i.e. 5.3.0.3. Thus a simple string comparison will not suffice. (5.10 > 5.9) * * Additionally, for all versions of RHEL, we may need to trim pieces of the version * off to do the comparison. * * Sample releases: * RHEL 4: 7.6, 8, 9 * RHEL 5: 5.1.0.1, 5.2.0.2, 5.3.0.3 */ public class EusReleaseComparator implements Comparator<EssentialChannelDto> { private final String rhelVersion; /** * Constructor * * @param rhelVersionIn RHEL version we're comparing release for. (5Server, 4AS, 4ES) */ public EusReleaseComparator(String rhelVersionIn) { this.rhelVersion = rhelVersionIn; } /** * Compare two EUS channel releases. * * @param chan1 First channel. * @param chan2 Second channel. * @return 1 if first is > second, 0 if they are equal, -1 is first is < second. */ public int compare(EssentialChannelDto chan1, EssentialChannelDto chan2) { return compare(chan1.getRelease(), chan2.getRelease()); } /** * Compare two EUS channel releases. * * @param rhelRelease1 First channel release. * @param rhelRelease2 Second channel release. * @return 1 if first is > second, 0 if they are equal, -1 is first is < second. */ public int compare(String rhelRelease1, String rhelRelease2) { // Here we normalize the release to drop extra parts of the version: rhelRelease1 = ChannelManager.normalizeRhelReleaseForMapping(rhelVersion, rhelRelease1); rhelRelease2 = ChannelManager.normalizeRhelReleaseForMapping(rhelVersion, rhelRelease2); RpmVersionComparator cmp = new RpmVersionComparator(); int c = cmp.compare(StringUtils.defaultString(rhelRelease1), StringUtils.defaultString(rhelRelease2)); return c; } }