74 lines
2.9 KiB
Java
74 lines
2.9 KiB
Java
package ru.ulstu.grant.service;
|
||
|
||
import com.gargoylesoftware.htmlunit.WebClient;
|
||
import com.gargoylesoftware.htmlunit.html.DomNode;
|
||
import com.gargoylesoftware.htmlunit.html.HtmlPage;
|
||
import org.springframework.stereotype.Service;
|
||
import ru.ulstu.configuration.ApplicationProperties;
|
||
import ru.ulstu.grant.model.GrantDto;
|
||
import ru.ulstu.grant.page.KiasPage;
|
||
import ru.ulstu.user.service.UserService;
|
||
|
||
import java.io.IOException;
|
||
import java.text.ParseException;
|
||
import java.util.ArrayList;
|
||
import java.util.Arrays;
|
||
import java.util.Calendar;
|
||
import java.util.List;
|
||
|
||
@Service
|
||
public class KiasService {
|
||
private final static String BASE_URL = "https://www.rfbr.ru/rffi/ru/contest_search?CONTEST_STATUS_ID=%s&CONTEST_TYPE=%s&CONTEST_YEAR=%s";
|
||
private final static String CONTEST_STATUS_ID = "1";
|
||
private final static String CONTEST_TYPE = "-1";
|
||
|
||
private final UserService userService;
|
||
private final ApplicationProperties applicationProperties;
|
||
|
||
public KiasService(UserService userService,
|
||
ApplicationProperties applicationProperties) {
|
||
this.userService = userService;
|
||
this.applicationProperties = applicationProperties;
|
||
}
|
||
|
||
public List<GrantDto> getNewGrantsDto() throws ParseException, IOException {
|
||
Integer leaderId = userService.findOneByLoginIgnoreCase("admin").getId();
|
||
List<GrantDto> grants = new ArrayList<>();
|
||
try (final WebClient webClient = new WebClient()) {
|
||
for (Integer year : generateGrantYears()) {
|
||
final HtmlPage page = webClient.getPage(String.format(BASE_URL, CONTEST_STATUS_ID, CONTEST_TYPE, year));
|
||
grants.addAll(getKiasGrants(page));
|
||
}
|
||
}
|
||
grants.forEach(grantDto -> grantDto.setLeaderId(leaderId));
|
||
return grants;
|
||
}
|
||
|
||
public List<GrantDto> getKiasGrants(HtmlPage page) throws ParseException {
|
||
List<GrantDto> newGrants = new ArrayList<>();
|
||
KiasPage kiasPage = new KiasPage(page);
|
||
do {
|
||
newGrants.addAll(getGrantsFromPage(kiasPage));
|
||
} while (kiasPage.goToNextPage()); //проверка существования следующей страницы с грантами
|
||
return newGrants;
|
||
}
|
||
|
||
private List<GrantDto> getGrantsFromPage(KiasPage kiasPage) throws ParseException {
|
||
List<GrantDto> grants = new ArrayList<>();
|
||
for (DomNode grantElement : kiasPage.getPageOfGrants()) {
|
||
if (kiasPage.isTableRowGrantLine(grantElement)) {
|
||
GrantDto grantDto = new GrantDto(
|
||
kiasPage.getGrantTitle(grantElement),
|
||
kiasPage.parseDeadLineDate(grantElement));
|
||
grants.add(grantDto);
|
||
}
|
||
}
|
||
return grants;
|
||
}
|
||
|
||
private List<Integer> generateGrantYears() {
|
||
return Arrays.asList(Calendar.getInstance().get(Calendar.YEAR),
|
||
Calendar.getInstance().get(Calendar.YEAR) + 1);
|
||
}
|
||
}
|