public boolean hasNext()

in aliyun-sdk-opensearch/src/main/java/com/aliyun/opensearch/search/DeepPageingIterator.java [70:139]


	public boolean hasNext() {
		if (null == cursorMark) {
			SearchResult searchResult;
			try {
				searchResult = searcherClient.execute(searchParams);
				String result = searchResult.getResult();
				JSONObject json = new JSONObject(result);
				String status = json.getString("status");
				JSONObject resultPart = (JSONObject) json.get("result");
				int total = resultPart.getInt("total");
				String next_scroll_id = resultPart.getString("scroll_id");

				this.remain = total;
				if ("OK".equals(status)) {
					if (remain == 0) {
						LOG.warn("no result found.");
					} else {
						cursorMark = next_scroll_id;
					}
				} else {
					return false;
				}
			} catch (Exception e) {
				return false;
			}
		}

		if (remain == 0)
			return false;

		try {
			Thread.sleep(this.pagingIntervals);
		} catch (InterruptedException e1) {
		}

		// retrieve current result and perpare for next.
		Preconditions.checkNotNull(cursorMark);
		searchParams.getDeepPaging().setScrollId(cursorMark);
		SearchResult searchResult;
		try {
			searchResult = searcherClient.execute(searchParams);
			String result = searchResult.getResult();
			JSONObject json = new JSONObject(result);
			String status = json.getString("status");
			JSONObject resultPart = (JSONObject) json.get("result");
			int total = resultPart.getInt("total");
			int num = resultPart.getInt("num");
			String next_scroll_id = resultPart.getString("scroll_id");

			this.remain = total;
			this.next = result;
			if ("OK".equals(status)) {
				if (remain == 0) {
					LOG.warn("no result remain for next paging.");
					return false;
				} else if (num == 0) {
					LOG.warn("result found, but shows nothing.");
					return false;
				} else {
					cursorMark = next_scroll_id;
					return true;
				}
			} else {
				remain = -1;
				return true;
			}
		} catch (Exception e) {
			throw new IllegalStateException(e.getMessage(), e);
		}
	}