/* * Copyright (c) 2013, 2015 IBM Corporation and others. 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 org.opendaylight.openflowplugin.applications.statistics.manager.impl.helper; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match; /** * Provides comparator for comparing according to various {@link Match} attributes * */ public final class MatchComparatorFactory { private MatchComparatorFactory() { // NOOP } public static SimpleComparator<Match> createNull() { return new SimpleComparator<Match>() { /** * Comparation by whole object */ @Override public boolean areObjectsEqual(Match statsMatch, Match storedMatch) { return (statsMatch == null) == (storedMatch == null); } }; } public static SimpleComparator<Match> createVlan() { return new SimpleComparator<Match>() { /** * Comparation by VLAN */ @Override public boolean areObjectsEqual(Match statsMatch, Match storedMatch) { if (storedMatch == null) return false; if (storedMatch.getVlanMatch() == null) { if (statsMatch.getVlanMatch() != null) { return false; } } else if (!storedMatch.getVlanMatch().equals(statsMatch.getVlanMatch())) { return false; } return true; } }; } public static SimpleComparator<Match> createTunnel() { return new SimpleComparator<Match>() { /** * Comparation by tunnel */ @Override public boolean areObjectsEqual(Match statsMatch, Match storedMatch) { if (storedMatch == null) return false; if (storedMatch.getTunnel() == null) { if (statsMatch.getTunnel() != null) { return false; } } else if (!storedMatch.getTunnel().equals(statsMatch.getTunnel())) { return false; } return true; } }; } public static SimpleComparator<Match> createProtocolMatchFields() { return new SimpleComparator<Match>() { /** * Comparation by protocol fields */ @Override public boolean areObjectsEqual(Match statsMatch, Match storedMatch) { if (storedMatch == null) return false; if (storedMatch.getProtocolMatchFields() == null) { if (statsMatch.getProtocolMatchFields() != null) { return false; } } else if (!storedMatch.getProtocolMatchFields().equals(statsMatch.getProtocolMatchFields())) { return false; } return true; } }; } public static SimpleComparator<Match> createMetadata() { return new SimpleComparator<Match>() { /** * Comparation by metadata */ @Override public boolean areObjectsEqual(Match statsMatch, Match storedMatch) { if (storedMatch == null) return false; if (storedMatch.getMetadata() == null) { if (statsMatch.getMetadata() != null) { return false; } } else if (!storedMatch.getMetadata().equals(statsMatch.getMetadata())) { return false; } return true; } }; } public static SimpleComparator<Match> createL4() { return new SimpleComparator<Match>() { /** * Comparation by layer4 */ @Override public boolean areObjectsEqual(Match statsMatch, Match storedMatch) { if (storedMatch == null) return false; if (storedMatch.getLayer4Match() == null) { if (statsMatch.getLayer4Match() != null) { return false; } } else if (!storedMatch.getLayer4Match().equals(statsMatch.getLayer4Match())) { return false; } return true; } }; } public static SimpleComparator<Match> createL3() { return new SimpleComparator<Match>() { /** * Comparation by layer3 */ @Override public boolean areObjectsEqual(Match statsMatch, Match storedMatch) { if (storedMatch == null) return false; if (storedMatch.getLayer3Match() == null) { if (statsMatch.getLayer3Match() != null) { return false; } } else if (!MatchComparatorHelper.layer3MatchEquals(statsMatch.getLayer3Match(), storedMatch.getLayer3Match())) { return false; } return true; } }; } public static SimpleComparator<Match> createIp() { return new SimpleComparator<Match>() { /** * Comparation by Ip */ @Override public boolean areObjectsEqual(Match statsMatch, Match storedMatch) { if (storedMatch == null) return false; if (storedMatch.getIpMatch() == null) { if (statsMatch.getIpMatch() != null) { return false; } } else if (!storedMatch.getIpMatch().equals(statsMatch.getIpMatch())) { return false; } return true; } }; } public static SimpleComparator<Match> createInPort() { return new SimpleComparator<Match>() { /** * Comparation by InPort */ @Override public boolean areObjectsEqual(Match statsMatch, Match storedMatch) { if (storedMatch == null) return false; if (storedMatch.getInPort() == null) { if (statsMatch.getInPort() != null) { return false; } } else if (!storedMatch.getInPort().equals(statsMatch.getInPort())) { return false; } return true; } }; } public static SimpleComparator<Match> createInPhyPort() { return new SimpleComparator<Match>() { /** * Comparation by InPhyPort */ @Override public boolean areObjectsEqual(Match statsMatch, Match storedMatch) { if (storedMatch == null) return false; if (storedMatch.getInPhyPort() == null) { if (statsMatch.getInPhyPort() != null) { return false; } } else if (!storedMatch.getInPhyPort().equals(statsMatch.getInPhyPort())) { return false; } return true; } }; } public static SimpleComparator<Match> createEthernet() { return new SimpleComparator<Match>() { /** * Comparation by Ethernet */ @Override public boolean areObjectsEqual(Match statsMatch, Match storedMatch) { if (storedMatch == null) return false; if (storedMatch.getEthernetMatch() == null) { if (statsMatch.getEthernetMatch() != null) { return false; } } else if (!MatchComparatorHelper.ethernetMatchEquals(statsMatch.getEthernetMatch(), storedMatch.getEthernetMatch())) { return false; } return true; } }; } public static SimpleComparator<Match> createIcmpv4() { return new SimpleComparator<Match>() { /** * Comparation by Icmpv4 */ @Override public boolean areObjectsEqual(Match statsMatch, Match storedMatch) { if (storedMatch == null) return false; if (storedMatch.getIcmpv4Match() == null) { if (statsMatch.getIcmpv4Match() != null) { return false; } } else if (!storedMatch.getIcmpv4Match().equals(statsMatch.getIcmpv4Match())) { return false; } return true; } }; } }