+ private static class NextLink {
+
+ private final int position;
+ private final LinkType linkType;
+
+ private NextLink(int position, LinkType linkType) {
+ this.position = position;
+ this.linkType = linkType;
+ }
+
+ public int getPosition() {
+ return position;
+ }
+
+ public LinkType getLinkType() {
+ return linkType;
+ }
+
+ public static Optional<NextLink> findNextLink(String line) {
+ int earliestLinkPosition = Integer.MAX_VALUE;
+ LinkType linkType = null;
+ for (LinkType possibleLinkType : LinkType.values()) {
+ int nextLinkPosition = line.indexOf(possibleLinkType.getScheme());
+ if (nextLinkPosition > -1) {
+ if (nextLinkPosition < earliestLinkPosition) {
+ earliestLinkPosition = nextLinkPosition;
+ linkType = possibleLinkType;
+ }
+ }
+ }
+ return earliestLinkPosition < Integer.MAX_VALUE ?
+ Optional.of(new NextLink(earliestLinkPosition, linkType)) : Optional.<NextLink>absent();
+ }
+
+ }
+