// Path: src/main/java/org/mongodb/connection/ServerAddress.java
// public class ServerAddress implements Serializable {
// 
//     private static final long serialVersionUID = 4027873363095395504L;
// 
//     private final String host;
//     private final int port;
// 
//     /**
//      * Returns the default database host: "127.0.0.1"
//      * 
//      * @return IP address of default host.
//      */
//     public static String getDefaultHost() {
//         return "127.0.0.1"; // NOPMD
//     }
// 
//     /**
//      * Returns the default database port: 27017
//      * 
//      * @return the default port
//      */
//     public static int getDefaultPort() {
//         return 27017;
//     }
// 
//     /**
//      * Creates a ServerAddress with default host and port
//      */
//     public ServerAddress() {
//         this(getDefaultHost(), getDefaultPort());
//     }
// 
//     /**
//      * Creates a ServerAddress with default port
//      * 
//      * @param host
//      *            hostname
//      */
//     public ServerAddress(final String host) {
//         this(host, getDefaultPort());
//     }
// 
//     /**
//      * Creates a ServerAddress
//      * 
//      * @param host
//      *            hostname
//      * @param port
//      *            mongod port
//      */
//     public ServerAddress(final String host, final int port) {
//         String hostToUse = host;
//         if (hostToUse == null) {
//             hostToUse = getDefaultHost();
//         }
//         hostToUse = hostToUse.trim();
//         if (hostToUse.length() == 0) {
//             hostToUse = getDefaultHost();
//         }
// 
//         int portToUse = port;
// 
//         if (hostToUse.startsWith("[")) {
//             int idx = host.indexOf("]");
//             if (idx == -1) {
//                 throw new IllegalArgumentException("an IPV6 address must be encosed with '[' and ']'" + " according to RFC 2732.");
//             }
// 
//             int portIdx = host.indexOf("]:");
//             if (portIdx != -1) {
//                 if (port != getDefaultPort()) {
//                     throw new IllegalArgumentException("can't specify port in construct and via host");
//                 }
//                 portToUse = Integer.parseInt(host.substring(portIdx + 2));
//             }
//             hostToUse = host.substring(1, idx);
//         }
//         else {
//             int idx = hostToUse.indexOf(":");
//             if (idx > 0) {
//                 if (port != getDefaultPort()) {
//                     throw new IllegalArgumentException("can't specify port in construct and via host");
//                 }
//                 portToUse = Integer.parseInt(hostToUse.substring(idx + 1));
//                 hostToUse = hostToUse.substring(0, idx).trim();
//             }
//         }
// 
//         this.host = hostToUse;
//         this.port = portToUse;
//     }
// 
//     @Override
//     public boolean equals(final Object o) {
//         if (this == o) {
//             return true;
//         }
//         if (o == null || getClass() != o.getClass()) {
//             return false;
//         }
// 
//         ServerAddress that = (ServerAddress) o;
// 
//         if (port != that.port) {
//             return false;
//         }
// 
//         if (!host.equals(that.host)) {
//             return false;
//         }
// 
//         return true;
//     }
// 
//     @Override
//     public int hashCode() {
//         int result = host.hashCode();
//         result = 31 * result + port;
//         return result;
//     }
// 
//     /**
//      * Gets the hostname
//      * 
//      * @return hostname
//      */
//     public String getHost() {
//         return host;
//     }
// 
//     /**
//      * Gets the port number
//      * 
//      * @return port
//      */
//     public int getPort() {
//         return port;
//     }
// 
//     /**
//      * Gets the underlying socket address
//      * 
//      * @return socket address
//      */
//     public InetSocketAddress getSocketAddress() throws UnknownHostException {
//         return new InetSocketAddress(InetAddress.getByName(host), port);
//     }
// 
//     @Override
//     public String toString() {
//         return host + ":" + port;
//     }
// }


import org.mongodb.connection.ServerAddress;
import com.mongodb.DBCursor;
package org.mongodb;



public class MongoQueryCursor<T> implements MongoCursor<T> {

    private DBCursor surrogate;

    public MongoQueryCursor(final DBCursor cursor) {
        this.surrogate = cursor;

    }

    @SuppressWarnings("unchecked")
    public T next() {
        return (T) new Document(surrogate.next());
    }

    public boolean hasNext() {
        return surrogate.hasNext();
    }

// Path: src/main/java/org/mongodb/connection/ServerAddress.java
// public class ServerAddress implements Serializable {
// 
//     private static final long serialVersionUID = 4027873363095395504L;
// 
//     private final String host;
//     private final int port;
// 
//     /**
//      * Returns the default database host: "127.0.0.1"
//      * 
//      * @return IP address of default host.
//      */
//     public static String getDefaultHost() {
//         return "127.0.0.1"; // NOPMD
//     }
// 
//     /**
//      * Returns the default database port: 27017
//      * 
//      * @return the default port
//      */
//     public static int getDefaultPort() {
//         return 27017;
//     }
// 
//     /**
//      * Creates a ServerAddress with default host and port
//      */
//     public ServerAddress() {
//         this(getDefaultHost(), getDefaultPort());
//     }
// 
//     /**
//      * Creates a ServerAddress with default port
//      * 
//      * @param host
//      *            hostname
//      */
//     public ServerAddress(final String host) {
//         this(host, getDefaultPort());
//     }
// 
//     /**
//      * Creates a ServerAddress
//      * 
//      * @param host
//      *            hostname
//      * @param port
//      *            mongod port
//      */
//     public ServerAddress(final String host, final int port) {
//         String hostToUse = host;
//         if (hostToUse == null) {
//             hostToUse = getDefaultHost();
//         }
//         hostToUse = hostToUse.trim();
//         if (hostToUse.length() == 0) {
//             hostToUse = getDefaultHost();
//         }
// 
//         int portToUse = port;
// 
//         if (hostToUse.startsWith("[")) {
//             int idx = host.indexOf("]");
//             if (idx == -1) {
//                 throw new IllegalArgumentException("an IPV6 address must be encosed with '[' and ']'" + " according to RFC 2732.");
//             }
// 
//             int portIdx = host.indexOf("]:");
//             if (portIdx != -1) {
//                 if (port != getDefaultPort()) {
//                     throw new IllegalArgumentException("can't specify port in construct and via host");
//                 }
//                 portToUse = Integer.parseInt(host.substring(portIdx + 2));
//             }
//             hostToUse = host.substring(1, idx);
//         }
//         else {
//             int idx = hostToUse.indexOf(":");
//             if (idx > 0) {
//                 if (port != getDefaultPort()) {
//                     throw new IllegalArgumentException("can't specify port in construct and via host");
//                 }
//                 portToUse = Integer.parseInt(hostToUse.substring(idx + 1));
//                 hostToUse = hostToUse.substring(0, idx).trim();
//             }
//         }
// 
//         this.host = hostToUse;
//         this.port = portToUse;
//     }
// 
//     @Override
//     public boolean equals(final Object o) {
//         if (this == o) {
//             return true;
//         }
//         if (o == null || getClass() != o.getClass()) {
//             return false;
//         }
// 
//         ServerAddress that = (ServerAddress) o;
// 
//         if (port != that.port) {
//             return false;
//         }
// 
//         if (!host.equals(that.host)) {
//             return false;
//         }
// 
//         return true;
//     }
// 
//     @Override
//     public int hashCode() {
//         int result = host.hashCode();
//         result = 31 * result + port;
//         return result;
//     }
// 
//     /**
//      * Gets the hostname
//      * 
//      * @return hostname
//      */
//     public String getHost() {
//         return host;
//     }
// 
//     /**
//      * Gets the port number
//      * 
//      * @return port
//      */
//     public int getPort() {
//         return port;
//     }
// 
//     /**
//      * Gets the underlying socket address
//      * 
//      * @return socket address
//      */
//     public InetSocketAddress getSocketAddress() throws UnknownHostException {
//         return new InetSocketAddress(InetAddress.getByName(host), port);
//     }
// 
//     @Override
//     public String toString() {
//         return host + ":" + port;
//     }
// }


// Path: src/main/java/org/mongodb/MongoQueryCursor.java
import org.mongodb.connection.ServerAddress;
import com.mongodb.DBCursor;

package org.mongodb;



public class MongoQueryCursor<T> implements MongoCursor<T> {

    private DBCursor surrogate;

    public MongoQueryCursor(final DBCursor cursor) {
        this.surrogate = cursor;

    }

    @SuppressWarnings("unchecked")
    public T next() {
        return (T) new Document(surrogate.next());
    }

    public boolean hasNext() {
        return surrogate.hasNext();
    }

    @Override