Java tutorial
package com.smash.revolance.ui.comparator.element; /* * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * ui-monitoring-comparator * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Copyright (C) 2012 - 2014 RevoLance * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public * License along with this program. If not, see * <http://www.gnu.org/licenses/gpl-3.0.html>. * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ import com.smash.revolance.ui.comparator.NoMatchFound; import com.smash.revolance.ui.model.element.api.ElementBean; import org.apache.commons.lang3.ArrayUtils; import java.util.ArrayList; import java.util.Collection; import java.util.List; /** * User: wsmash * Date: 09/06/13 * Time: 13:01 */ public class ElementMatchMaker implements IElementMatchMaker { @Override public ElementMatch getBestMatch(Collection<ElementMatch> matches) throws NoMatchFound, IllegalArgumentException { if (matches.isEmpty()) { throw new IllegalArgumentException("Empty collection of matches cannot be analysed."); } ElementMatch bestMatch = new ElementMatch(); for (ElementMatch match : matches) { if (match.getRate() > bestMatch.getRate()) { bestMatch = match; } } if (bestMatch.getMatch() == null) { throw new NoMatchFound("Unable to find a match."); } else { return bestMatch; } } @Override public Collection<ElementMatch> findMatch(Collection<ElementBean> elements, ElementBean element, ElementSearchMethod... methods) throws NoMatchFound, IllegalArgumentException { if (elements == null) { throw new IllegalArgumentException("Null content cannot be parsed"); } if (element == null) { throw new IllegalArgumentException("Null element cannot be matched."); } if (elements.isEmpty()) { throw new NoMatchFound("Unable to find a single match. Empty element collection passed in."); } Collection<ElementBean> localElements = new ArrayList<ElementBean>(); localElements.addAll(elements); if (localElements.contains(element)) { localElements.remove(element); } List<ElementMatch> matches = getElementMatches(element, localElements, methods); if (matches.isEmpty()) { throw new NoMatchFound("Unable to find a single match."); } else { return matches; } } private List<ElementMatch> getElementMatches(ElementBean element, Collection<ElementBean> elements, ElementSearchMethod... methods) { List<ElementMatch> results = new ArrayList<ElementMatch>(); ElementBean match = null; if (ArrayUtils.contains(methods, ElementSearchMethod.LOOK)) { match = null; if ((match = findElementByLook(elements, element)) != null) { ElementMatch elementMatch = new ElementMatch(match); elementMatch.setMatch(element, 1); results.add(elementMatch); } } if (ArrayUtils.contains(methods, ElementSearchMethod.VALUE)) { match = null; if ((match = findElementByContent(elements, element)) != null) { ElementMatch elementMatch = new ElementMatch(match); elementMatch.setMatch(element, 1); results.add(elementMatch); } } if (ArrayUtils.contains(methods, ElementSearchMethod.POS)) { match = null; if ((match = findElementByLocation(elements, element)) != null) { ElementMatch elementMatch = new ElementMatch(match); elementMatch.setMatch(element, 1); results.add(elementMatch); } } if (ArrayUtils.contains(methods, ElementSearchMethod.TARGET) && (element.getImpl().contentEquals("Button") || element.getImpl().contentEquals("Link"))) { match = null; if ((match = findElementByTarget(elements, element)) != null) { ElementMatch elementMatch = new ElementMatch(match); elementMatch.setMatch(element, 1); results.add(elementMatch); } } return results; } public static ElementBean findElementByLocation(Collection<ElementBean> elements, ElementBean element) { for (ElementBean elem : elements) { if (ElementComparator.posEquals(element, elem)) { return elem; } } return null; } public static ElementBean findElementByTarget(Collection<ElementBean> elements, ElementBean element) { for (ElementBean elem : elements) { if (ElementComparator.targetEquals(element, elem)) { return elem; } } return null; } public static ElementBean findElementByContent(Collection<ElementBean> elements, ElementBean element) { for (ElementBean elem : elements) { if (ElementComparator.valueEquals(element, elem)) { return elem; } } return null; } public static ElementBean findElementByLook(Collection<ElementBean> elements, ElementBean element) { for (ElementBean elementBean : elements) { if (ElementComparator.lookEquals(element, elementBean)) { return elementBean; } } return null; } }