package org.softeg.slartus.forpdaplus.devdb.helpers;
import com.google.gson.Gson;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.softeg.slartus.forpdaplus.devdb.model.CommentsModel;
import org.softeg.slartus.forpdaplus.devdb.model.DiscussionModel;
import org.softeg.slartus.forpdaplus.devdb.model.FirmwareModel;
import org.softeg.slartus.forpdaplus.devdb.model.PricesModel;
import org.softeg.slartus.forpdaplus.devdb.model.ReviewsModel;
import org.softeg.slartus.forpdaplus.devdb.model.SpecModel;
import java.util.ArrayList;
import java.util.List;
/**
* Created by isanechek on 23.11.15.
*/
public class ParseHelper {
private ParsedModel parsed = new ParsedModel();
public ParsedModel parseHelper(String page) {
Element main = Jsoup.parse(page).select(".device-frame").first();
parseTitle(main);
parseSpec(main);
parseFirmware(main);
parseComments(main);
parseReviews(main);
parseDiscussions(main);
parsePrices(main);
return parsed;
}
private void parseTitle(Element main){
parsed.setTitle(main.select(".product-name").first().text());
}
private void parseSpec(Element main){
SpecModel specModel = new SpecModel();
Element spec = main.select("#specification").first();
for(Element element:spec.select(".item-visual .item-gallery a")){
specModel.getGalleryLinks().add(element.attr("href"));
specModel.getGalleryImages().add(element.select("img").first().attr("src"));
}
Elements temp = spec.select(".item-main .price-box .price strong");
if(!temp.text().isEmpty())
specModel.setPrice(temp.first().text());
specModel.setSpecTable(spec.select(".item-content .content .specifications-list"));
parsed.setSpecModel(specModel);
}
private void parseDiscussions(Element main) {
String link, title, time, description;
List<DiscussionModel> cache = new ArrayList<>();
DiscussionModel model;
for (Element element : main.select("#discussions .article-list li")) {
link = element.select(".title a").first().attr("href");
title = element.select(".title").first().text();
time = element.select(".upd").first().text();
description = element.select(".description").first().text();
cache.add(new DiscussionModel(description, time, link, title));
}
parsed.setDiscussionModels(new Gson().toJson(cache));
}
private void parseComments(Element main) {
String comment, link, userName, date, ratingNum, ratingText;
List<CommentsModel> cache = new ArrayList<>();
ArrayList<String> dr = new ArrayList<>();
for (Element element1 : main.select("#comments .reviews li")) {
if (!element1.select(".text-box").text().isEmpty()) {
/**
* Тут короче если текст бокс не нуль, то и все остальное не нуль.
*/
Element element = element1.select(".text-box .w-toggle").first();
if(element==null)
element = element1.select(".text-box").first();
comment = element.text();
element = element1.select("div.name a").first();
link = element.attr("href");
userName = element.attr("title");
date = element1.select("div.date").first().text();
ratingNum = element1.select("span.num").first().text();
ratingText = element1.select("span.text").first().text();
// for detail dialog
Elements elements1 = element1.getElementsByClass("reviews-list");
if (elements1 != null)
for (Element element2 : elements1)
dr.add(element2.select("div.line").text());
cache.add(new CommentsModel(date, ratingNum, ratingText, comment, link, userName, dr));
}
}
parsed.setCommentsModels(new Gson().toJson(cache));
}
private void parsePrices(Element main) {
String link, title, time, description;
List<PricesModel> cache = new ArrayList<>();
Elements elements = main.select("#prices .article-list li");
for(Element element:elements){
link = element.select(".title a").first().attr("href");
title = element.select(".title").first().text();
time = element.select(".upd").first().text();
description = element.select(".description").first().text();
cache.add(new PricesModel(time, description, link, title));
}
parsed.setPricesModels(new Gson().toJson(cache));
}
private void parseFirmware(Element main) {
String link, title, time, description;
List<FirmwareModel> cache = new ArrayList<>();
for(Element element:main.select("#firmware .article-list li")){
link = element.select(".title a").first().attr("href");
title = element.select(".title").first().text();
time = element.select(".upd").first().text();
description = element.select(".description").first().text();
cache.add(new FirmwareModel(time, description, link, title));
}
parsed.setFirmwareModels(new Gson().toJson(cache));
}
private void parseReviews(Element main) {
String url, imgLink, title, date, description;
List<ReviewsModel> cache = new ArrayList<>();
for(Element element:main.select("#reviews .article-list li")){
url = element.select("a").first().attr("href");
imgLink = element.select(".article-img img").first().attr("src");
title = element.select(".title").first().text();
date = element.select(".upd").first().text();
description = element.select(".description").first().text();
cache.add(new ReviewsModel(date, imgLink, url, description, title));
}
parsed.setReviewsModels(new Gson().toJson(cache));
}
}