Java tutorial
package com.smash.revolance.ui.comparator.page; /* * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * 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 com.smash.revolance.ui.model.page.api.PageBean; 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: 11:07 */ public class PageMatchMaker implements IPageMatchMaker { public PageMatch getBestMatch(final Collection<PageMatch> matches) throws IllegalArgumentException, NoMatchFound { if (matches == null) { throw new IllegalArgumentException("Null collection of matches cannot be parsed."); } PageMatch bestMatch = new PageMatch(); for (PageMatch 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<PageMatch> findMatch(final Collection<PageBean> pages, final PageBean page, PageSearchMethod... methods) throws NoMatchFound, IllegalArgumentException { if (pages == null) { throw new IllegalArgumentException("Null collection of pages to be parsed"); } if (page == null) { throw new IllegalArgumentException("Null page cannot be matched."); } Collection<PageBean> localPages = new ArrayList<PageBean>(); localPages.addAll(pages); if (localPages.contains(page)) { pages.remove(page); } List<PageMatch> matches = getPageMatches(page, localPages, methods); if (matches.isEmpty()) { throw new NoMatchFound("Unable to find a single match."); } else { return matches; } } private List<PageMatch> getPageMatches(PageBean page, Collection<PageBean> localPages, PageSearchMethod... methods) { List<PageMatch> results = new ArrayList<PageMatch>(); PageBean match = null; if (ArrayUtils.contains(methods, PageSearchMethod.URL)) { if ((match = findPageByUrl(localPages, page.getUrl())) != null) { PageMatch pageMatch = new PageMatch(page); pageMatch.setMatch(match, 1); results.add(pageMatch); } } if (ArrayUtils.contains(methods, PageSearchMethod.TITLE)) { match = null; if ((match = findPageByTitle(localPages, page.getTitle())) != null) { PageMatch pageMatch = new PageMatch(page); pageMatch.setMatch(match, 1); results.add(pageMatch); } } if (ArrayUtils.contains(methods, PageSearchMethod.CONTENT)) { match = null; if ((match = findPageByContentValue(localPages, getContentValue(page.getContent()))) != null) { PageMatch pageMatch = new PageMatch(page); pageMatch.setMatch(match, 1); results.add(pageMatch); } } if (ArrayUtils.contains(methods, PageSearchMethod.LOOK)) { match = null; if ((match = findPageByLook(localPages, page.getCaption())) != null) { PageMatch pageMatch = new PageMatch(page); pageMatch.setMatch(match, 1); results.add(pageMatch); } } return results; } public static List<String> getContentValue(Collection<ElementBean> content) { List<String> contentValues = new ArrayList<String>(); for (ElementBean element : content) { String contentValue = element.getContent(); if (contentValue != null && !contentValue.isEmpty()) { contentValues.add(contentValue); } } return contentValues; } public static PageBean findPageByLook(Collection<PageBean> pages, String caption) { for (PageBean page : pages) { if (page.getCaption().contentEquals(caption)) { return page; } } return null; } public static PageBean findPageByTitle(Collection<PageBean> pages, String title) { for (PageBean page : pages) { if (page.getTitle().contentEquals(title)) { return page; } } return null; } public static PageBean findPageByUrl(Collection<PageBean> pages, String url) { for (PageBean page : pages) { if (page.getUrl().toLowerCase().contentEquals(url.toLowerCase())) { return page; } } return null; } public static PageBean findPageByContentValue(Collection<PageBean> pages, List<String> contentValues) { for (PageBean page : pages) { List<String> pageContentValues = getContentValue(page.getContent()); for (String value : contentValues) { if (pageContentValues.contains(value)) { pageContentValues.remove(value); } if (pageContentValues.isEmpty()) { break; } } if (pageContentValues.isEmpty()) { return page; } } return null; } }