/
PageParser.java
87 lines (68 loc) · 2.78 KB
/
PageParser.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
package com.bingbong.mywoowacoursepulls.utils;
/*
* 아래 글을 참고하여 작성했습니다.
* https://github.com/eclipse/egit-github/blob/master/org.eclipse.egit.github.core/src/org/eclipse/egit/github/core/client/PageLinks.java#L43-75
*
* */
public class PageParser {
private static final String LINKS_DELIMITER = ",";
private static final String LINK_DELIMITER = ";";
private static final String KEY_VALUE_DELIMITER = "=";
private static final String META_REL = "rel";
private static final String META_LAST = "\"last\"";
private static final String PARAM_DELIMITER = "&";
private static final String PARAMS_DELIMITER = "\\?";
private static final String DEFAULT_PARSE_KEY = "page";
private static final int DEFAULT_ACCESS_INDEX = 2;
public static int getLastPageIndex(String pageLink) {
final String[] links = pageLink.split(LINKS_DELIMITER);
for (String link : links) {
String[] linkSegment = link.split(LINK_DELIMITER);
if (isAccessibleIndex(linkSegment)) {
continue;
}
if (isRelValue(linkSegment[1])) {
continue;
}
String htmlUrl = linkSegment[0].trim();
if (isHtmlUrl(htmlUrl)) {
continue;
}
htmlUrl = htmlUrl.substring(1, htmlUrl.length() - 1);
String[] htmlUrlSegment = htmlUrl.split(PARAMS_DELIMITER);
if (isAccessibleIndex(htmlUrlSegment)) {
continue;
}
String[] params = htmlUrlSegment[1].split(PARAM_DELIMITER);
for (String param : params) {
String[] paramSegment = param.split(KEY_VALUE_DELIMITER);
if (isAccessibleIndex(paramSegment)) {
continue;
}
String paramSegmentKey = paramSegment[0];
String paramSegmentValue = paramSegment[1];
if (!paramSegmentKey.equals(DEFAULT_PARSE_KEY)) {
continue;
}
return Integer.parseInt(paramSegmentValue);
}
}
return -1;
}
private static boolean isHtmlUrl(String htmlUrl) {
return !htmlUrl.startsWith("<") || !htmlUrl.endsWith(">");
}
private static boolean isRelValue(String rel) {
String[] relSegment = rel.trim()
.split(KEY_VALUE_DELIMITER);
if (isAccessibleIndex(relSegment)) {
return true;
}
String relSegmentKey = relSegment[0];
String relSegmentValue = relSegment[1];
return !relSegmentKey.equals(META_REL) || !relSegmentValue.equals(META_LAST);
}
private static boolean isAccessibleIndex(String[] segment) {
return segment.length < DEFAULT_ACCESS_INDEX;
}
}