// Path: src/main/java/com/github/rwitzel/couchrepository/api/ViewResult.java
// public class ViewResult {
// 
//     protected long totalRows;
// 
//     protected long updateSeq;
// 
//     protected int offset;
// 
//     protected List<ViewResultRow> rows;
// 
//     public long getTotalRows() {
//         return totalRows;
//     }
// 
//     public void setTotalRows(long totalRows) {
//         this.totalRows = totalRows;
//     }
// 
//     public long getUpdateSeq() {
//         return updateSeq;
//     }
// 
//     public void setUpdateSeq(long updateSeq) {
//         this.updateSeq = updateSeq;
//     }
// 
//     public int getOffset() {
//         return offset;
//     }
// 
//     public void setOffset(int offset) {
//         this.offset = offset;
//     }
// 
//     public List<ViewResultRow> getRows() {
//         if (rows == null) {
//             rows = new ArrayList<ViewResultRow>();
//         }
//         return rows;
//     }
// 
//     public void setRows(List<ViewResultRow> rows) {
//         this.rows = rows;
//     }
// 
//     @Override
//     public String toString() {
//         return "ViewResult [totalRows=" + totalRows + ", updateSeq=" + updateSeq + ", offset=" + offset + ", rows="
//                 + rows + "]";
//     }
// }
// 
// Path: src/main/java/com/github/rwitzel/couchrepository/api/ViewResultRow.java
// public class ViewResultRow {
// 
//     /**
//      * The CouchDB ID of the document.
//      */
//     protected String id;
// 
//     protected Object key;
// 
//     protected Object value;
// 
//     protected Object doc;
// 
//     public String getId() {
//         return id;
//     }
// 
//     public void setId(String id) {
//         this.id = id;
//     }
// 
//     @SuppressWarnings("unchecked")
//     public <K> K getKey() {
//         return (K) key;
//     }
// 
//     public void setKey(Object key) {
//         this.key = key;
//     }
// 
//     @SuppressWarnings("unchecked")
//     public <V> V getValue() {
//         return (V) value;
//     }
// 
//     public void setValue(Object value) {
//         this.value = value;
//     }
// 
//     @SuppressWarnings("unchecked")
//     public <D> D getDoc() {
//         return (D) doc;
//     }
// 
//     public void setDoc(Object doc) {
//         this.doc = doc;
//     }
// 
//     @Override
//     public String toString() {
//         return "ViewResultRow [id=" + id + ", key=" + key + ", value=" + value + ", doc=" + doc + "]";
//     }
//     
// }


import java.util.ArrayList;
import java.util.List;
import com.github.rwitzel.couchrepository.api.ViewResult;
import com.github.rwitzel.couchrepository.api.ViewResultRow;
package com.github.rwitzel.couchrepository.internal;



/**
 * Transforms Spring Data specific values to CouchDB driver specific values and the other way around. 
 * 
 * @author rwitzel
 */
public class AdapterUtils {

    /**
     * Copies the elements of {@link Iterable} into a list and returns them.
     * 
     * @param iter the iterable that contains the elements
     * @param <E> the type of the elements
     * @return Returns the elements of the {@link Iterable}.
     */
    public static <E> List<E> toList(Iterable<E> iter) {
        List<E> list = new ArrayList<E>();
        for (E item : iter) {
            list.add(item);
        }
        return list;
    }

    /**
     * Transforms the view result to a list of keys or values or documents or IDs depending on the given return type. If
     * the return type is null, the view result is not transformed.
     * 
     * @param viewResult the original view result
     * @param returnType
     *            null or "key or "value" or "doc" or "id"
     * @param <E> the type of the elements
     * @return Returns the transformed view result.
     */
    @SuppressWarnings("unchecked")
// Path: src/main/java/com/github/rwitzel/couchrepository/api/ViewResult.java
// public class ViewResult {
// 
//     protected long totalRows;
// 
//     protected long updateSeq;
// 
//     protected int offset;
// 
//     protected List<ViewResultRow> rows;
// 
//     public long getTotalRows() {
//         return totalRows;
//     }
// 
//     public void setTotalRows(long totalRows) {
//         this.totalRows = totalRows;
//     }
// 
//     public long getUpdateSeq() {
//         return updateSeq;
//     }
// 
//     public void setUpdateSeq(long updateSeq) {
//         this.updateSeq = updateSeq;
//     }
// 
//     public int getOffset() {
//         return offset;
//     }
// 
//     public void setOffset(int offset) {
//         this.offset = offset;
//     }
// 
//     public List<ViewResultRow> getRows() {
//         if (rows == null) {
//             rows = new ArrayList<ViewResultRow>();
//         }
//         return rows;
//     }
// 
//     public void setRows(List<ViewResultRow> rows) {
//         this.rows = rows;
//     }
// 
//     @Override
//     public String toString() {
//         return "ViewResult [totalRows=" + totalRows + ", updateSeq=" + updateSeq + ", offset=" + offset + ", rows="
//                 + rows + "]";
//     }
// }
// 
// Path: src/main/java/com/github/rwitzel/couchrepository/api/ViewResultRow.java
// public class ViewResultRow {
// 
//     /**
//      * The CouchDB ID of the document.
//      */
//     protected String id;
// 
//     protected Object key;
// 
//     protected Object value;
// 
//     protected Object doc;
// 
//     public String getId() {
//         return id;
//     }
// 
//     public void setId(String id) {
//         this.id = id;
//     }
// 
//     @SuppressWarnings("unchecked")
//     public <K> K getKey() {
//         return (K) key;
//     }
// 
//     public void setKey(Object key) {
//         this.key = key;
//     }
// 
//     @SuppressWarnings("unchecked")
//     public <V> V getValue() {
//         return (V) value;
//     }
// 
//     public void setValue(Object value) {
//         this.value = value;
//     }
// 
//     @SuppressWarnings("unchecked")
//     public <D> D getDoc() {
//         return (D) doc;
//     }
// 
//     public void setDoc(Object doc) {
//         this.doc = doc;
//     }
// 
//     @Override
//     public String toString() {
//         return "ViewResultRow [id=" + id + ", key=" + key + ", value=" + value + ", doc=" + doc + "]";
//     }
//     
// }


// Path: src/main/java/com/github/rwitzel/couchrepository/internal/AdapterUtils.java
import java.util.ArrayList;
import java.util.List;
import com.github.rwitzel.couchrepository.api.ViewResult;
import com.github.rwitzel.couchrepository.api.ViewResultRow;

package com.github.rwitzel.couchrepository.internal;



/**
 * Transforms Spring Data specific values to CouchDB driver specific values and the other way around. 
 * 
 * @author rwitzel
 */
public class AdapterUtils {

    /**
     * Copies the elements of {@link Iterable} into a list and returns them.
     * 
     * @param iter the iterable that contains the elements
     * @param <E> the type of the elements
     * @return Returns the elements of the {@link Iterable}.
     */
    public static <E> List<E> toList(Iterable<E> iter) {
        List<E> list = new ArrayList<E>();
        for (E item : iter) {
            list.add(item);
        }
        return list;
    }

    /**
     * Transforms the view result to a list of keys or values or documents or IDs depending on the given return type. If
     * the return type is null, the view result is not transformed.
     * 
     * @param viewResult the original view result
     * @param returnType
     *            null or "key or "value" or "doc" or "id"
     * @param <E> the type of the elements
     * @return Returns the transformed view result.
     */
    @SuppressWarnings("unchecked")
    public static <E> E transformViewResult(ViewResult viewResult, String returnType) {