// Path: monica-registry/src/main/java/monica/registry/Registration.java
// @SPI(ZookeeperRegistration.NAME)
// public interface Registration {
// 	final Logger log = Logger.getLogger(Registration.class);
// 
// 	public void register(UriSpec uri, RegistryType type) throws Exception;
// 
// 	public boolean done();
// 
// }
// 
// Path: monica-registry/src/main/java/monica/registry/base/RegistryType.java
// public enum RegistryType {
// 	SERVER, CLIENT
// }
// 
// Path: monica-registry/src/main/java/monica/registry/base/UriSpec.java
// public class UriSpec {
// 	private String scheme;
// 	private String ip;
// 	private String port;
// 
// 	public String getScheme() {
// 		return scheme;
// 	}
// 
// 	public void setScheme(String scheme) {
// 		this.scheme = scheme;
// 	}
// 
// 	public String getIp() {
// 		return ip;
// 	}
// 
// 	public void setIp(String ip) {
// 		this.ip = ip;
// 	}
// 
// 	public String getPort() {
// 		return port;
// 	}
// 
// 	public void setPort(String port) {
// 		this.port = port;
// 	}
// 
// 	public String toString() {
// 		StringBuilder sb = new StringBuilder();
// 		if (null == scheme || scheme.equals("")) {
// 			sb.append("monica://");
// 		} else {
// 			sb.append(scheme);
// 		}
// 		if (null != ip && !ip.equals("")) {
// 			sb.append(ip);
// 		}
// 		sb.append(":");
// 		if (null != port && !port.equals("")) {
// 			sb.append(port);
// 		}
// 		return sb.toString();
// 	}
// 
// }
// 
// Path: monica-registry/src/main/java/monica/registry/context/RegistryContext.java
// public class RegistryContext {
// 	// caheKey: curatorClient providers server usefulProviders
// 	public static ConcurrentHashMap<String, Object> clientCache = new ConcurrentHashMap<String, Object>();
// }


import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.api.CuratorWatcher;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.WatchedEvent;
import monica.registry.Registration;
import monica.registry.base.RegistryType;
import monica.registry.base.UriSpec;
import monica.registry.context.RegistryContext;

package monica.registry.service;




/**
 * 
 * @author lucy@polarcoral.com
 *
 *         2017-08-29
 */
public class ZookeeperRegistration implements Registration {
	public final static String NAME = "zookeeper";
	public final String ZK_NAMESPACE = "monica";

	public void register(UriSpec uri, RegistryType type) throws Exception {

// Path: monica-registry/src/main/java/monica/registry/Registration.java
// @SPI(ZookeeperRegistration.NAME)
// public interface Registration {
// 	final Logger log = Logger.getLogger(Registration.class);
// 
// 	public void register(UriSpec uri, RegistryType type) throws Exception;
// 
// 	public boolean done();
// 
// }
// 
// Path: monica-registry/src/main/java/monica/registry/base/RegistryType.java
// public enum RegistryType {
// 	SERVER, CLIENT
// }
// 
// Path: monica-registry/src/main/java/monica/registry/base/UriSpec.java
// public class UriSpec {
// 	private String scheme;
// 	private String ip;
// 	private String port;
// 
// 	public String getScheme() {
// 		return scheme;
// 	}
// 
// 	public void setScheme(String scheme) {
// 		this.scheme = scheme;
// 	}
// 
// 	public String getIp() {
// 		return ip;
// 	}
// 
// 	public void setIp(String ip) {
// 		this.ip = ip;
// 	}
// 
// 	public String getPort() {
// 		return port;
// 	}
// 
// 	public void setPort(String port) {
// 		this.port = port;
// 	}
// 
// 	public String toString() {
// 		StringBuilder sb = new StringBuilder();
// 		if (null == scheme || scheme.equals("")) {
// 			sb.append("monica://");
// 		} else {
// 			sb.append(scheme);
// 		}
// 		if (null != ip && !ip.equals("")) {
// 			sb.append(ip);
// 		}
// 		sb.append(":");
// 		if (null != port && !port.equals("")) {
// 			sb.append(port);
// 		}
// 		return sb.toString();
// 	}
// 
// }
// 
// Path: monica-registry/src/main/java/monica/registry/context/RegistryContext.java
// public class RegistryContext {
// 	// caheKey: curatorClient providers server usefulProviders
// 	public static ConcurrentHashMap<String, Object> clientCache = new ConcurrentHashMap<String, Object>();
// }


// Path: monica-registry/src/main/java/monica/registry/service/ZookeeperRegistration.java
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.api.CuratorWatcher;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.WatchedEvent;
import monica.registry.Registration;
import monica.registry.base.RegistryType;
import monica.registry.base.UriSpec;
import monica.registry.context.RegistryContext;

package monica.registry.service;




/**
 * 
 * @author lucy@polarcoral.com
 *
 *         2017-08-29
 */
public class ZookeeperRegistration implements Registration {
	public final static String NAME = "zookeeper";
	public final String ZK_NAMESPACE = "monica";

	public void register(UriSpec uri, RegistryType type) throws Exception {

		CuratorFramework client = (CuratorFramework) RegistryContext.clientCache.get("curatorClient");
