com.comcast.viper.flume2storm.zookeeper.ZkUtilies.java Source code

Java tutorial

Introduction

Here is the source code for com.comcast.viper.flume2storm.zookeeper.ZkUtilies.java

Source

/**
 * Copyright 2014 Comcast Cable Communications Management, LLC
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.comcast.viper.flume2storm.zookeeper;

import org.apache.commons.lang.StringUtils;
import org.apache.zookeeper.common.PathUtils;

import com.google.common.base.Preconditions;

/**
 * Utilies for ZkClient
 */
public class ZkUtilies {
    protected static final Character SEPARATOR_CHAR = '/';
    protected static final String SEPARATOR = SEPARATOR_CHAR.toString();

    /**
     * Builds a valid (guaranteed) ZNode path made of the components passed in
     * parameter. This method handles the path separator between component, so it
     * can be called with or without them.
     * 
     * @param components
     *          A bunch of ZNode path elements. Some may be null.
     * @return The concatenated path of all the elements
     * @throws IllegalArgumentException
     *           if the path is invalid (empty for example)
     */
    public static String buildZkPath(final String... components) {
        Preconditions.checkArgument(components != null, "No path element specified");
        boolean isFirst = true;
        final StringBuilder result = new StringBuilder();
        for (int i = 0; i < components.length; i++) {
            if (StringUtils.isEmpty(components[i])) {
                continue;
            }
            assert components[i] != null;
            // Checking path separator
            if (isFirst) {
                // First element must start with /
                if (!components[i].startsWith(SEPARATOR)) {
                    result.append(SEPARATOR);
                }
                result.append(components[i]);
            } else {
                if (!SEPARATOR_CHAR.equals(result.charAt(result.length() - 1))
                        && !components[i].startsWith(SEPARATOR)) {
                    result.append(SEPARATOR);
                    result.append(components[i]);
                } else if (SEPARATOR_CHAR.equals(result.charAt(result.length() - 1))
                        && components[i].startsWith(SEPARATOR)) {
                    result.append(components[i].substring(1));
                } else {
                    result.append(components[i]);
                }
            }
            isFirst = false;
        }
        final String path = result.toString();
        PathUtils.validatePath(path);
        return path;
    }
}