package run; import java.util.ArrayList; import java.util.List; import log.Logger; import persistence.PersistedObject; import recovery.AdRetrieval; import recovery.UnknownAdException; import utils.FormatConsoleTable; import com.gargoylesoftware.htmlunit.WebClient; import com.gargoylesoftware.htmlunit.html.HtmlPage; import com.gargoylesoftware.htmlunit.html.HtmlRadioButtonInput; import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput; import conf.ConfItem; import conf.ConfReader; import connectivity.Client; import connectivity.LinkFactory; public class MonitoringTask implements LeboncoinRunner { @Override public void run() { FormatConsoleTable nicelyFormattedConsoleTable = new FormatConsoleTable(); Logger.traceINFO("Generating the report, Please wait..."); List<ConfItem> foundItems = new ArrayList<>(); for (PersistedObject pObject : persistence.getPersistedObjects()) { ConfItem item = ConfReader.getConfItemFromHash(confReader, pObject.hash); if (item != null) { foundItems.add(item); if (pObject.id == null || pObject.id.isEmpty()) { nicelyFormattedConsoleTable.print(item.adtitle, item.limitPrice + " EUR", "VALIDATION_PENDING"); } else { try { AdRetrieval.retrieveAd(pObject.id); if (checkAdOnline(pObject.id)) { nicelyFormattedConsoleTable.print(item.adtitle, item.limitPrice + " EUR", "ONLINE"); } else { nicelyFormattedConsoleTable.print(item.adtitle, item.limitPrice + " EUR", "PENDING_DELETED"); persistence.remove(pObject); } } catch (UnknownAdException e) { nicelyFormattedConsoleTable.print(item.adtitle, item.limitPrice + " EUR", "OFFLINE"); } } } } List<ConfItem> allItems = confReader.getConfItems(); allItems.removeAll(foundItems); for (ConfItem item : allItems) { nicelyFormattedConsoleTable.print(item.adtitle, item.limitPrice + " EUR", "DELETED"); } nicelyFormattedConsoleTable.flush(); } public static boolean checkAdOnline(String adId) { try { WebClient client = Client.get(); String urlDelete = LinkFactory.AD_DELETE_LINK_1 + adId; final HtmlPage deletePage1 = client.getPage(urlDelete); HtmlRadioButtonInput deleteRadioButton = (HtmlRadioButtonInput) deletePage1.getElementById("cmd_delete"); deleteRadioButton.setChecked(true); HtmlSubmitInput continueButton = deletePage1.getElementByName("continue"); final HtmlPage deletePage2 = continueButton.click(); if (deletePage2.asXml().contains("dans quelques minutes") && deletePage2.asXml().contains("Vous ne pouvez pas")) { return false; } } catch (Exception e) { Logger.traceERROR(e); } return true; } }