package recovery;
import java.io.IOException;
import java.util.Calendar;
import java.util.Date;
import log.Logger;
import utils.MonthsMap;
import utils.NameFactory;
import utils.StringUtils;
import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import connectivity.Client;
import connectivity.LinkFactory;
public class AdRetrieval
{
private static AdRetrievalCache cache = new AdRetrievalCache();
public static Ad retrieveAd(String id) throws UnknownAdException
{
try
{
Ad ad = new Ad();
String content = cache.getById(id);
String formPageXmlStr = null;
if(content == null)
{
WebClient client = Client.get();
String pageName = LinkFactory.AD_WINE_LINK + id + ".htm";
Logger.traceINFO_NoNewLine("GET: " + pageName);
final HtmlPage formPage = client.getPage(pageName);
Logger.traceINFO_NoBaseLine(" [DONE]");
formPageXmlStr = formPage.asXml();
cache.updateId(id, formPageXmlStr);
}
else
{
formPageXmlStr = content;
}
if (formPageXmlStr.contains("Annonce introuvable") && formPageXmlStr.contains("Cette annonce est d"))
{
throw new UnknownAdException();
}
formPageXmlStr = StringUtils.truncBefore(formPageXmlStr, "upload_by");
String name = formPageXmlStr.substring(formPageXmlStr.indexOf("'utilisateur_v2','N')\">") + "'utilisateur_v2','N')\">".length(), formPageXmlStr.indexOf("</a>")).trim();
name = name.trim();
formPageXmlStr = StringUtils.truncBefore(formPageXmlStr, "Mise en ligne");
formPageXmlStr = StringUtils.truncAfter(formPageXmlStr, ".");
String dateStr = formPageXmlStr;
ad.dateOfPost = extractDate(dateStr);
ad.name = name;
return ad;
}
catch (FailingHttpStatusCodeException | IOException e)
{
throw new UnknownAdException();
}
}
public static Date extractDate(String dateStr)
{
// le 9 f�vrier � 23:11.
int dayOfMonth = StringUtils.extractInt(dateStr);
dateStr = StringUtils.truncBeforeAndOverSymbol(dateStr, String.valueOf(dayOfMonth));
// f�vrier � 23:11.
dateStr = dateStr.trim();
String month = StringUtils.truncAfter(dateStr, " ").trim();
Integer monthId = MonthsMap.getMonthId(month);
// � 23:11.
int hourTime = StringUtils.extractInt(dateStr);
dateStr = StringUtils.truncBeforeAndOverSymbol(dateStr, String.valueOf(hourTime));
// 11.
int minTime = StringUtils.extractInt(dateStr);
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, NameFactory.ORIG_YEAR);
calendar.set(Calendar.MONTH, monthId);
calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
calendar.set(Calendar.HOUR_OF_DAY, hourTime);
calendar.set(Calendar.MINUTE, minTime);
return calendar.getTime();
}
}