<commit_before>/*
 * Copyright (C) 2012 tamtam180
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.arangodb.entity;

import java.util.Iterator;
import java.util.List;
import java.util.Map;

import com.arangodb.NonUniqueResultException;
import com.arangodb.util.CollectionUtils;

/**
 * Cursor entity that represents the result of a AQL query.
 *
 * @author tamtam180 - <EMAIL> at <EMAIL>
 * @author mrbatista
 *
 */
public class CursorEntity<T> extends BaseEntity implements Iterable<T> {

	/**
	 * True if the cursor has more results.
	 */
	boolean hasMore;

	/**
	 * The amount of results in the cursor
	 */
	int count = -1;

	/**
	 * The number of results before the final LIMIT
	 */
	int fullCount = -1;

	/**
	 * The cursor id
	 */
	long cursorId = -1;

	/**
	 * a boolean flag indicating whether the query result was served from the
	 * query cache or not. If the query result is served from the query cache,
	 * the extra return attribute will not contain any stats sub-attribute and
	 * no profile sub-attribute. (since ArangoDB 2.7)
	 */
	boolean cached = false;

	/**
	 * A list of bind variables returned by the query
	 */
	List<String> bindVars;

	/**
	 * A list of extra data returned by the query
	 */
	Map<String, Object> extra;

	/**
	 * A list of objects containing the results
	 */
	List<? extends T> results;

	/**
	 * A list of warnings
	 */
	List<WarningEntity> warnings;

	@SuppressWarnings("unchecked")
	@Override
	public Iterator<T> iterator() {
		return (Iterator<T>) CollectionUtils.safetyIterator(results);
	}

	/**
	 * The size of the cursor results.
	 *
	 * @return int
	 */
	public int size() {
		if (results == null) {
			return 0;
		}
		return results.size();
	}

	/**
	 * Returns the cursor element at position *index*
	 *
	 * @param index
	 * @return Object
	 */
	public T get(int index) {
		rangeCheck(index);
		return results.get(index);
	}

	private void rangeCheck(int index) {
		int size = size();
		if (index < 0 || index >= size) {
			throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + size);
		}
	}

	/**
	 * Returns the DocumentEntity objects of this CursorDocumentEntity
	 * 
	 * @return list of DocumentEntity objects
	 */
	public List<? extends T> getResults() {
		return results;
	}

	/**
	 * Return a single instance that matches the query, or null if the query
	 * returns no results.
	 * 
	 * Throws NonUniqueResultException (RuntimeException) if there is more than
	 * one matching result
	 * 
	 * @return the single result or null
	 */
	public T getUniqueResult() {
		int size = size();
		if (size == 0) {
			return null;<commit_msg>fixed sonar issue<commit_after>/*
 * Copyright (C) 2012 tamtam180
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.arangodb.entity;

import java.util.Iterator;
import java.util.List;
import java.util.Map;

import com.arangodb.NonUniqueResultException;
import com.arangodb.util.CollectionUtils;

/**
 * Cursor entity that represents the result of a AQL query.
 *
 * @author tamtam180 - kirscheless at g<EMAIL>
 * @author mrbatista
 *
 */
public class CursorEntity<T> extends BaseEntity implements Iterable<T> {

	/**
	 * True if the cursor has more results.
	 */
	boolean hasMore;

	/**
	 * The amount of results in the cursor
	 */
	int count = -1;

	/**
	 * The number of results before the final LIMIT
	 */
	int fullCount = -1;

	/**
	 * The cursor id
	 */
	long cursorId = -1;

	/**
	 * a boolean flag indicating whether the query result was served from the
	 * query cache or not. If the query result is served from the query cache,
	 * the extra return attribute will not contain any stats sub-attribute and
	 * no profile sub-attribute. (since ArangoDB 2.7)
	 */
	boolean cached = false;

	/**
	 * A list of bind variables returned by the query
	 */
	List<String> bindVars;

	/**
	 * A list of extra data returned by the query
	 */
	Map<String, Object> extra;

	/**
	 * A list of objects containing the results
	 */
	List<T> results;

	/**
	 * A list of warnings
	 */
	List<WarningEntity> warnings;

	@Override
	public Iterator<T> iterator() {
		return CollectionUtils.safetyIterator(results);
	}

	/**
	 * The size of the cursor results.
	 *
	 * @return int
	 */
	public int size() {
		if (results == null) {
			return 0;
		}
		return results.size();
	}

	/**
	 * Returns the cursor element at position *index*
	 *
	 * @param index
	 * @return Object
	 */
	public T get(int index) {
		rangeCheck(index);
		return results.get(index);
	}

	private void rangeCheck(int index) {
		int size = size();
		if (index < 0 || index >= size) {
			throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + size);
		}
	}

	/**
	 * Returns the DocumentEntity objects of this CursorDocumentEntity
	 * 
	 * @return list of DocumentEntity objects
	 */
	public List<T> getResults() {
		return results;
	}

	/**
	 * Return a single instance that matches the query, or null if the query
	 * returns no results.
	 * 
	 * Throws NonUniqueResultException (RuntimeException) if there is more than
	 * one matching result
	 * 
	 * @return the single result or null
	 */
	public T getUniqueResult() {
		int size = size();
		if (size == 0) {
			return null;
{'fraction_non_alphanumeric': 0.10318101081866624, 'fraction_numerical': 0.007104795737122558, 'mean_word_length': 3.1907983761840324, 'pattern_counts': {'":': 0, '<': 25, '<?xml version=': 0, '>': 25, 'https://': 0, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '366914', 'n_tokens_mistral': 1973, 'n_tokens_neox': 1787, 'n_words': 727}