package com.embracesource.config; import java.io.UnsupportedEncodingException; import java.text.SimpleDateFormat; import java.util.Date; import org.I0Itec.zkclient.ZkClient; import org.I0Itec.zkclient.exception.ZkMarshallingError; import org.I0Itec.zkclient.serialize.ZkSerializer; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; public class ZkUtils { private static final Logger logger = Logger.getLogger(ZkUtils.class); public static String getZkPath(String rootNode, String key) { if (!StringUtils.isEmpty(rootNode)) { if (key.startsWith("/")) { key = key.substring(1); } if (rootNode.endsWith("/")) { return rootNode + key; } return rootNode + "/" + key; } return key; } public static void mkPaths(ZkClient client, String path) { String[] subs = path.split("\\/"); if (subs.length < 2) { return; } String curPath = ""; for (int i = 1; i < subs.length; i++) { curPath = curPath + "/" + subs[i]; if (!client.exists(curPath)) { if (logger.isDebugEnabled()) { logger.debug("Trying to create zk node: " + curPath); } client.createPersistent(curPath); if (logger.isDebugEnabled()) logger.debug("Zk node created successfully: " + curPath); } } } public static String formatAsMonthDate(Date requestTime) { return new SimpleDateFormat("MMdd").format(requestTime); } public static class StringSerializer implements ZkSerializer { private String encoding; public StringSerializer(String encoding) { this.encoding = encoding; } public Object deserialize(byte[] abyte0) throws ZkMarshallingError { try { return new String(abyte0, this.encoding); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e); } } public byte[] serialize(Object obj) throws ZkMarshallingError { if (obj == null) { return null; } if (!(obj instanceof String)) { throw new ZkMarshallingError( "The input obj must be an instance of String."); } try { return ((String) obj).getBytes(this.encoding); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e); } } } }