// 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/service/ZookeeperRegistration.java
// 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");
// 		try {
// 			CuratorWatcher watcher = new CuratorWatcher() {
// 				public void process(WatchedEvent event) {
// 					handleChildrenChange("", event.getPath());
// 				}
// 			};
// 			String s = URLEncoder.encode(uri.toString(), "UTF-8");
// 			if (null == client.checkExists().forPath("/" + type.toString())) {
// 				client.create().forPath("/" + type.toString());
// 			}
// 			client.getChildren().usingWatcher(watcher).forPath("/SERVER");
// 			if (null == client.checkExists().forPath("/SERVER/" + s)) {
// 				client.create().withMode(CreateMode.EPHEMERAL).forPath("/SERVER/" + s);
// 			}
// 
// 			/*
// 			 * List<String> batch = batchCreate(); for (String ss : batch) { if
// 			 * (null == client.checkExists().forPath("/SERVER/" + ss)) {
// 			 * client.create().forPath("/SERVER/" + ss); } }
// 			 */
// 
// 			client.getChildren().usingWatcher(new CuratorWatcher() {
// 
// 				public void process(WatchedEvent event) throws Exception {
// 
// 					handleRoutersChildrenChange("", event.getType());
// 				}
// 
// 			}).forPath("/SERVER");
// 
// 			// Assert.assertEquals("", "/SERVER");
// 		} finally {
// 			// CloseableUtils.closeQuietly(client);
// 
// 		}
// 	}
// 
// 	private void handleChildrenChange(String name, Object value) {
// 		log.info("/socket/SERVER  NodeChildren changed !");
// 		// ServiceContext.hashmap.put(name, value);
// 	}
// 
// 	private void handleRoutersChildrenChange(String name, Object value) {
// 
// 	}
// 
// 	public boolean done() {
// 		return true;
// 	}
// 
// 	public List<String> batchCreate() {
// 		List<String> batchUri = new ArrayList();
// 		for (int i = 0; i < 2; i++) {
// 			String b = "monica://192.168.1.10";
// 			String e = ":8023";
// 			try {
// 				batchUri.add(URLEncoder.encode(b + i + e, "UTF-8"));
// 				System.out.println("batchString[" + i + "] ----   " + (b + i + e));
// 			} catch (UnsupportedEncodingException e1) {
// 				// TODO Auto-generated catch block
// 				e1.printStackTrace();
// 			}
// 		}
// 		return batchUri;
// 	}
// }


import org.apache.log4j.Logger;
import monica.framework.SPI;
import monica.registry.base.RegistryType;
import monica.registry.base.UriSpec;
import monica.registry.service.ZookeeperRegistration;

package monica.registry;



/**
 * 
 * plugin point for user to extend the registry-discovery way using the
 * different tech framework.
 * 
 * @author lucy@polarcoral.com
 *
 *         2017-08-29
 */

@SPI(ZookeeperRegistration.NAME)
public interface Registration {
	final Logger log = Logger.getLogger(Registration.class);


// 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/service/ZookeeperRegistration.java
// 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");
// 		try {
// 			CuratorWatcher watcher = new CuratorWatcher() {
// 				public void process(WatchedEvent event) {
// 					handleChildrenChange("", event.getPath());
// 				}
// 			};
// 			String s = URLEncoder.encode(uri.toString(), "UTF-8");
// 			if (null == client.checkExists().forPath("/" + type.toString())) {
// 				client.create().forPath("/" + type.toString());
// 			}
// 			client.getChildren().usingWatcher(watcher).forPath("/SERVER");
// 			if (null == client.checkExists().forPath("/SERVER/" + s)) {
// 				client.create().withMode(CreateMode.EPHEMERAL).forPath("/SERVER/" + s);
// 			}
// 
// 			/*
// 			 * List<String> batch = batchCreate(); for (String ss : batch) { if
// 			 * (null == client.checkExists().forPath("/SERVER/" + ss)) {
// 			 * client.create().forPath("/SERVER/" + ss); } }
// 			 */
// 
// 			client.getChildren().usingWatcher(new CuratorWatcher() {
// 
// 				public void process(WatchedEvent event) throws Exception {
// 
// 					handleRoutersChildrenChange("", event.getType());
// 				}
// 
// 			}).forPath("/SERVER");
// 
// 			// Assert.assertEquals("", "/SERVER");
// 		} finally {
// 			// CloseableUtils.closeQuietly(client);
// 
// 		}
// 	}
// 
// 	private void handleChildrenChange(String name, Object value) {
// 		log.info("/socket/SERVER  NodeChildren changed !");
// 		// ServiceContext.hashmap.put(name, value);
// 	}
// 
// 	private void handleRoutersChildrenChange(String name, Object value) {
// 
// 	}
// 
// 	public boolean done() {
// 		return true;
// 	}
// 
// 	public List<String> batchCreate() {
// 		List<String> batchUri = new ArrayList();
// 		for (int i = 0; i < 2; i++) {
// 			String b = "monica://192.168.1.10";
// 			String e = ":8023";
// 			try {
// 				batchUri.add(URLEncoder.encode(b + i + e, "UTF-8"));
// 				System.out.println("batchString[" + i + "] ----   " + (b + i + e));
// 			} catch (UnsupportedEncodingException e1) {
// 				// TODO Auto-generated catch block
// 				e1.printStackTrace();
// 			}
// 		}
// 		return batchUri;
// 	}
// }


// Path: monica-registry/src/main/java/monica/registry/Registration.java
import org.apache.log4j.Logger;
import monica.framework.SPI;
import monica.registry.base.RegistryType;
import monica.registry.base.UriSpec;
import monica.registry.service.ZookeeperRegistration;

package monica.registry;



/**
 * 
 * plugin point for user to extend the registry-discovery way using the
 * different tech framework.
 * 
 * @author lucy@polarcoral.com
 *
 *         2017-08-29
 */

@SPI(ZookeeperRegistration.NAME)
public interface Registration {
	final Logger log = Logger.getLogger(Registration.class);


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