Untitled
@Service public class HttpClientImpl implements IScheduleHttpClient { private final WebClient webClient; private final IStateManager stateManager; public HttpClientImpl(WebClient webClient, IStateManager stateManager) { this.webClient = webClient; this.stateManager = stateManager; } public String getInitialPage() { try { String body = webClient.get().retrieve().bodyToMono(String.class).block(); stateManager.updateStates(body, true); return changeDepartment(); } catch (Exception e) { stateManager.clearState(); throw e; } } public String makePostRequest(Map<String, String> params) { try { String formParams = buildFormParams(params, stateManager.getEmulatedStates()); String response = webClient.post().uri("/").header("Content-Type", "application/x-www-form-urlencoded") .bodyValue(formParams).retrieve().bodyToMono(String.class).block(); if (response != null) { stateManager.updateStates(response, false); return response.split("\\|")[7]; } return null; } catch (Exception e) { stateManager.clearState(); throw e; } } private String buildFormParams(Map<String, String> baseParams, Map<String, String> stateParams) { return Stream.concat(baseParams.entrySet().stream(), stateParams.entrySet().stream()).map( entry -> URLEncoder.encode(entry.getKey(), StandardCharsets.UTF_8) + "=" + URLEncoder.encode( entry.getValue(), StandardCharsets.UTF_8)).collect(Collectors.joining("&")); } public String getDetails(String id) { Map<String, String> params = Map.ofEntries( Map.entry("RadScriptManager1", "RadToolTipManager1RTMPanel|RadToolTipManager1RTMPanel"), Map.entry("__EVENTTARGET", "RadToolTipManager1RTMPanel"), Map.entry("__EVENTARGUMENT", ""), Map.entry("RadToolTipManager1_ClientState", "{\"AjaxTargetControl\":\"{html_id}\",\"Value\":\"{html_id}\"}".replace("{html_id}", id))); return makePostRequest(params); } public String changeDepartment() { Map<String, String> params = Map.ofEntries(Map.entry("RadScriptManager1", "RadAjaxPanel1Panel|WydzialComboBox"), Map.entry("__EVENTTARGET", "WydzialComboBox"), Map.entry("__EVENTARGUMENT", "{\"Command\":\"Select\",\"Index\":1}"), Map.entry("WydzialComboBox", "Gdańsk"), Map.entry("WydzialComboBox_ClientState", "{\"logEntries\":[],\"value\":\"2\",\"text\":\"Gdańsk\",\"enabled\":true,\"checkedIndices\":[],\"checkedItemsTextOverflows\":false}"), Map.entry("__ASYNCPOST", "true"), Map.entry("RadAJAXControlID", "RadAjaxPanel1")); return makePostRequest(params); } public String changeDate(String targetDate) { Map<String, String> params = Map.ofEntries(Map.entry("RadScriptManager1", "RadAjaxPanel1Panel|DataPicker"), Map.entry("__EVENTTARGET", "DataPicker"), Map.entry("__EVENTARGUMENT", ""), Map.entry("DataPicker", targetDate), Map.entry("DataPicker$dateInput", targetDate), Map.entry("DataPicker_ClientState", ""), Map.entry("DataPicker_dateInput_ClientState", String.format( "{\"enabled\":true,\"emptyMessage\":\"\",\"validationText\":\"%s-00-00-00\",\"valueAsString\":\"%s-00-00-00\",\"minDateStr\":\"1980-01-01-00-00-00\",\"maxDateStr\":\"2099-12-31-00-00-00\",\"lastSetTextBoxValue\":\"%s\"}", targetDate, targetDate, targetDate)), Map.entry("__ASYNCPOST", "true"), Map.entry("RadAJAXControlID", "RadAjaxPanel1")); return makePostRequest(params); } public boolean checkDate(String body, String targetDate) { Document document = Jsoup.parse(body); Element dateElement = document.getElementById("DataPicker_dateInput"); if (dateElement == null) return false; return !(dateElement.attr("value").equals(targetDate)); } }
Leave a Comment