package com.smash.revolance.ui.comparator.application;
/*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* 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.comparator.page.*;
import com.smash.revolance.ui.model.page.api.PageBean;
import com.smash.revolance.ui.model.sitemap.SiteMap;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
/**
* User: wsmash
* Date: 09/06/13
* Time: 12:08
*/
@Service
public class ApplicationComparator implements IApplicationComparator
{
IPageMatchMaker pageMatchMaker = new PageMatchMaker();
IPageComparator pageComparator = new PageComparator();
@Override
public ApplicationComparison compare(SiteMap reference, SiteMap sitemap) throws IllegalArgumentException
{
if ( reference == null )
{
throw new IllegalArgumentException( "Null sitemap reference passed in." );
}
if ( sitemap == null )
{
throw new IllegalArgumentException( "Null sitemap passed in." );
}
ApplicationComparison comparison = new ApplicationComparison();
List<PageBean> refPages = new ArrayList<PageBean>();
for ( PageBean refPage : reference.getPages() )
{
refPages.add( refPage );
}
List<PageBean> pages = new ArrayList<PageBean>();
pages.addAll( sitemap.getPages() );
while ( !refPages.isEmpty() )
{
PageBean page = refPages.get( 0 );
if ( !page.isBroken() && !page.isExternal() )
{
try
{
Collection<PageMatch> matches = pageMatchMaker.findMatch( pages, page, PageSearchMethod.URL, PageSearchMethod.TITLE, PageSearchMethod.CONTENT );
PageMatch bestMatch = pageMatchMaker.getBestMatch( matches );
if ( bestMatch.getReference() != null && bestMatch.getMatch() != null )
{
PageComparison pageComparison = pageComparator.compare( bestMatch.getMatch(), bestMatch.getReference() );
comparison.addPageComparison( pageComparison );
refPages.remove( bestMatch.getReference() );
pages.remove( bestMatch.getMatch() );
}
}
catch (NoMatchFound noMatchFound)
{
// Then the page is added
comparison.addRemovedPage( page );
refPages.remove( page );
}
}
else
{
refPages.remove( page );
}
}
for ( PageBean page : pages )
{
comparison.addNewPage( page );
}
return comparison;
}
}