package org.agnitas.service; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.Vector; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; import org.agnitas.beans.TrackableLink; import org.agnitas.dao.LinkcheckerDao; public class LinkcheckService { private LinkcheckerDao linkcheckerDao; // injected by Spring. /** * this method checks every item of the given link-list if the * appropriate url is available. * The returned list contains all urls which sent no response or have other failures. * @param linkList * @return */ public Collection<String> checkAvailability(Collection<TrackableLink> linkList) { // create usual <String> List Vector<String> checkList = new Vector<String>(); TrackableLink tmpLink = null; Iterator<TrackableLink> it = linkList.iterator(); while (it.hasNext()) { tmpLink = it.next(); checkList.add(tmpLink.getFullUrl()); } return checkURLAvailability(checkList); } /** * @param linkList * @return */ public Vector<String> checkURLAvailability(Vector<String> linkList) { // create Pool ExecutorService executor = Executors.newFixedThreadPool(linkcheckerDao.getThreadCount()); ArrayList<String> loopList = new ArrayList<String>(); loopList.addAll(linkList); // create runnables for (String url : loopList) { executor.execute(new LinkcheckWorker(linkcheckerDao.getLinkTimeout(), linkList, url)); } executor.shutdown(); // no new task are scheduled try { executor.awaitTermination((linkcheckerDao.getLinkTimeout() + 1000), TimeUnit.MILLISECONDS ); } catch (InterruptedException e) { e.printStackTrace(); } return linkList; } public LinkcheckerDao getLinkcheckerDao() { return linkcheckerDao; } public void setLinkcheckerDao(LinkcheckerDao linkcheckerDao) { this.linkcheckerDao = linkcheckerDao; } }