// Path: src/main/java/io/openio/sds/common/Check.java
// public static void checkArgument(boolean condition, String msg) {
//     if (!condition)
//         throw new IllegalArgumentException(msg);
// }
// 
// Path: src/main/java/io/openio/sds/common/OioConstants.java
// public static final Charset OIO_CHARSET = Charset.forName("UTF-8");
// 
// Path: src/main/java/io/openio/sds/common/Strings.java
// public static boolean nullOrEmpty(String string) {
//     return null == string || 0 == string.length();
// }
// 
// Path: src/main/java/io/openio/sds/common/Hash.java
// public class Hash {
// 
// 	private MessageDigest md;
// 
// 	private Hash(MessageDigest md) {
// 		this.md = md;
// 	}
// 
// 	/**
// 	 * Returns an {@link Hash} instance ready to compute a md5 hash
// 	 * 
// 	 * @return an {@link Hash} instance ready to compute a md5 hash
// 	 */
// 	public static Hash md5() {
// 		try {
// 			return new Hash(MessageDigest.getInstance("MD5"));
// 		} catch (NoSuchAlgorithmException e) {
// 			throw new RuntimeException(e);
// 		}
// 	}
// 
// 	/**
// 	 * Returns an {@link Hash} instance ready to compute a md5 hash
// 	 * 
// 	 * @return an {@link Hash} instance ready to compute a md5 hash
// 	 */
// 	public static Hash sha256() {
// 		try {
// 			return new Hash(MessageDigest.getInstance("SHA-256"));
// 		} catch (NoSuchAlgorithmException e) {
// 			throw new RuntimeException(e);
// 		}
// 	}
// 
// 	/**
// 	 * Updates the current hash with the specified bytes
// 	 * 
// 	 * @param bytes
// 	 *            the bytes to add
// 	 * @return this
// 	 */
// 	public Hash putBytes(byte[] bytes) {
// 		this.md.update(bytes);
// 		return this;
// 	}
// 
// 	/**
// 	 * Completes the current hash computation
// 	 * 
// 	 * @return an {@link Hex} instance handling the computed hash
// 	 */
// 	public Hex hash() {
// 		return Hex.fromBytes(this.md.digest());
// 	}
// 
// 	/**
// 	 * Add a final update to the current hash and completes it
// 	 * 
// 	 * @param bytes
// 	 *            the final bytes to add
// 	 * @return an {@link Hex} instance handling the computed hash
// 	 */
// 	public Hex hashBytes(byte[] bytes) {
// 		return Hex.fromBytes(this.md.digest(bytes));
// 	}
// }
// 
// Path: src/main/java/io/openio/sds/common/MoreObjects.java
// public class MoreObjects {
// 
//     public static ToStringHelper toStringHelper(String name) {
//         return new ToStringHelper(name);
//     }
// 
//     public static ToStringHelper toStringHelper(Object o) {
//         return new ToStringHelper(o.getClass().getSimpleName());
//     }
// 
//     public static class ToStringHelper {
// 
//         private String name;
//         private HashMap<String, Object> fields = new HashMap<String, Object>();
//         private boolean skipNulls = false;
// 
//         private ToStringHelper(String name) {
//             this.name = name;
//         }
// 
//         public ToStringHelper add(String key, Object value) {
//             if (null != key && (null != value || !skipNulls))
//                 fields.put(key, value);
//             return this;
//         }
//         
//         public ToStringHelper omitNullValues(){
//             this.skipNulls = true;
//             return this;
//         }
// 
//         @Override
//         public String toString() {
//             StringBuilder sb = new StringBuilder(name)
//                     .append("={");
//             for (Entry<String, Object> e : fields.entrySet()) {
//                 sb.append("\"")
//                 .append(e.getKey())
//                 .append("\":\"")
//                 .append(e.getValue())
//                 .append("\",");
//             }
// 
//             return sb.replace(sb.length() - 1, sb.length(), "}")
//                     .toString();
//         }
//     }
// }


import static io.openio.sds.common.Check.checkArgument;
import static io.openio.sds.common.OioConstants.OIO_CHARSET;
import static io.openio.sds.common.Strings.nullOrEmpty;
import io.openio.sds.common.Hash;
import io.openio.sds.common.MoreObjects;
    public OioUrl object(String object) {
        this.object = object;
        return this;
    }

    public String cid() {
        return cid;
    }

    @Override
    public String toString() {
        return MoreObjects.toStringHelper(this)
                .omitNullValues()
                .add("namespace", ns)
                .add("account", account)
                .add("container", container)
                .add("object", object)
                .toString();
    }

    /**
     * Generates the container id from the specified account and container name
     * 
     * @param account
     *            the name of the account
     * @param container
     *            the name of the container
     * @return the generated id
     */
    public static String cid(String account, String container) {
// Path: src/main/java/io/openio/sds/common/Check.java
// public static void checkArgument(boolean condition, String msg) {
//     if (!condition)
//         throw new IllegalArgumentException(msg);
// }
// 
// Path: src/main/java/io/openio/sds/common/OioConstants.java
// public static final Charset OIO_CHARSET = Charset.forName("UTF-8");
// 
// Path: src/main/java/io/openio/sds/common/Strings.java
// public static boolean nullOrEmpty(String string) {
//     return null == string || 0 == string.length();
// }
// 
// Path: src/main/java/io/openio/sds/common/Hash.java
// public class Hash {
// 
// 	private MessageDigest md;
// 
// 	private Hash(MessageDigest md) {
// 		this.md = md;
// 	}
// 
// 	/**
// 	 * Returns an {@link Hash} instance ready to compute a md5 hash
// 	 * 
// 	 * @return an {@link Hash} instance ready to compute a md5 hash
// 	 */
// 	public static Hash md5() {
// 		try {
// 			return new Hash(MessageDigest.getInstance("MD5"));
// 		} catch (NoSuchAlgorithmException e) {
// 			throw new RuntimeException(e);
// 		}
// 	}
// 
// 	/**
// 	 * Returns an {@link Hash} instance ready to compute a md5 hash
// 	 * 
// 	 * @return an {@link Hash} instance ready to compute a md5 hash
// 	 */
// 	public static Hash sha256() {
// 		try {
// 			return new Hash(MessageDigest.getInstance("SHA-256"));
// 		} catch (NoSuchAlgorithmException e) {
// 			throw new RuntimeException(e);
// 		}
// 	}
// 
// 	/**
// 	 * Updates the current hash with the specified bytes
// 	 * 
// 	 * @param bytes
// 	 *            the bytes to add
// 	 * @return this
// 	 */
// 	public Hash putBytes(byte[] bytes) {
// 		this.md.update(bytes);
// 		return this;
// 	}
// 
// 	/**
// 	 * Completes the current hash computation
// 	 * 
// 	 * @return an {@link Hex} instance handling the computed hash
// 	 */
// 	public Hex hash() {
// 		return Hex.fromBytes(this.md.digest());
// 	}
// 
// 	/**
// 	 * Add a final update to the current hash and completes it
// 	 * 
// 	 * @param bytes
// 	 *            the final bytes to add
// 	 * @return an {@link Hex} instance handling the computed hash
// 	 */
// 	public Hex hashBytes(byte[] bytes) {
// 		return Hex.fromBytes(this.md.digest(bytes));
// 	}
// }
// 
// Path: src/main/java/io/openio/sds/common/MoreObjects.java
// public class MoreObjects {
// 
//     public static ToStringHelper toStringHelper(String name) {
//         return new ToStringHelper(name);
//     }
// 
//     public static ToStringHelper toStringHelper(Object o) {
//         return new ToStringHelper(o.getClass().getSimpleName());
//     }
// 
//     public static class ToStringHelper {
// 
//         private String name;
//         private HashMap<String, Object> fields = new HashMap<String, Object>();
//         private boolean skipNulls = false;
// 
//         private ToStringHelper(String name) {
//             this.name = name;
//         }
// 
//         public ToStringHelper add(String key, Object value) {
//             if (null != key && (null != value || !skipNulls))
//                 fields.put(key, value);
//             return this;
//         }
//         
//         public ToStringHelper omitNullValues(){
//             this.skipNulls = true;
//             return this;
//         }
// 
//         @Override
//         public String toString() {
//             StringBuilder sb = new StringBuilder(name)
//                     .append("={");
//             for (Entry<String, Object> e : fields.entrySet()) {
//                 sb.append("\"")
//                 .append(e.getKey())
//                 .append("\":\"")
//                 .append(e.getValue())
//                 .append("\",");
//             }
// 
//             return sb.replace(sb.length() - 1, sb.length(), "}")
//                     .toString();
//         }
//     }
// }


// Path: src/main/java/io/openio/sds/models/OioUrl.java
import static io.openio.sds.common.Check.checkArgument;
import static io.openio.sds.common.OioConstants.OIO_CHARSET;
import static io.openio.sds.common.Strings.nullOrEmpty;
import io.openio.sds.common.Hash;
import io.openio.sds.common.MoreObjects;

    public OioUrl object(String object) {
        this.object = object;
        return this;
    }

    public String cid() {
        return cid;
    }

    @Override
    public String toString() {
        return MoreObjects.toStringHelper(this)
                .omitNullValues()
                .add("namespace", ns)
                .add("account", account)
                .add("container", container)
                .add("object", object)
                .toString();
    }

    /**
     * Generates the container id from the specified account and container name
     * 
     * @param account
     *            the name of the account
     * @param container
     *            the name of the container
     * @return the generated id
     */
    public static String cid(String account, String container) {
        return Hash.sha256()