zookeeper-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From an...@apache.org
Subject [27/45] zookeeper git commit: ZOOKEEPER-3030: MAVEN MIGRATION - Step 1.3 - move contrib directories
Date Mon, 06 Aug 2018 12:13:52 GMT
http://git-wip-us.apache.org/repos/asf/zookeeper/blob/b0df8fe1/src/contrib/zktreeutil/src/ZkTreeUtil.cc
----------------------------------------------------------------------
diff --git a/src/contrib/zktreeutil/src/ZkTreeUtil.cc b/src/contrib/zktreeutil/src/ZkTreeUtil.cc
deleted file mode 100644
index 270bf31..0000000
--- a/src/contrib/zktreeutil/src/ZkTreeUtil.cc
+++ /dev/null
@@ -1,705 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
-
-#include "ZkTreeUtil.h"
-
-#include <map>
-#include <iostream>
-#include <log4cxx/logger.h>
-#include <boost/algorithm/string.hpp>
-#include <boost/algorithm/string/split.hpp>
-
-namespace zktreeutil
-{
-    using std::map;
-    using std::pair;
-
-    static ZkTreeNodeSptr loadZkTree_ (ZooKeeperAdapterSptr zkHandle,
-            const string& path)
-    {
-        // Extract the node value
-        string value = zkHandle->getNodeData(path);
-
-        // Extract nodename from the path
-        string nodename = "/";
-        if (path != "/")
-        {
-            vector< string > nodes;
-            boost::split(nodes, path, boost::is_any_of ("/") );
-            nodename = nodes[nodes.size()-1];
-        }
-
-        // Create tree-node with name and value
-        ZkTreeNodeSptr nodeSptr = ZkTreeNodeSptr (new ZkTreeNode (nodename, value));
-        std::cerr << "[zktreeutil] loaded nodename: "
-            << nodename
-            << " value: "
-            << value
-            << std::endl;
-
-        // Load all the children
-        vector< string > cnodes = zkHandle->getNodeChildren (path);
-        for (unsigned i = 0; i < cnodes.size(); i++)
-            nodeSptr->addChild (loadZkTree_ (zkHandle, cnodes[i]));
-
-        // Return the constructed node
-        return nodeSptr;
-    }
-
-    static ZkTreeNodeSptr loadZkTreeXml_ (xmlNode* xmlNodePtr)
-    {
-        // Null check
-        if (xmlNodePtr == NULL)
-        {
-            std::cerr << "[zktreeutil] empty XML node encountered" << std::endl;
-            exit (-1);
-        }
-
-        // Get the node name
-        xmlChar* name = xmlGetProp (xmlNodePtr, BAD_CAST "name");
-        string nameStr = (const char*)name;
-        std::cerr << "[zktreeutil] node name: " << nameStr;
-        xmlFree (name);
-        // Get the node value
-        string valueStr;
-        xmlChar* value = xmlGetProp (xmlNodePtr, BAD_CAST "value");
-        if (value)
-        {
-            valueStr = (const char*)value;
-            std::cerr << " value: " << valueStr;
-        }
-        xmlFree (value);
-        // Get the ignore flag
-        bool doIgnore = false;
-        xmlChar* ignore = xmlGetProp (xmlNodePtr, BAD_CAST "ignore");
-        if (ignore)
-        {
-            string ignoreStr = (const char*) ignore;
-            if (ignoreStr == "true" || ignoreStr == "yes" || ignoreStr == "1")
-            {
-                doIgnore = true;
-                std::cerr << " <ignore:>";
-            }
-        }
-        xmlFree (ignore);
-        std::cerr << std::endl;
-
-        // Create the zk node
-        ZkTreeNodeSptr nodeSptr =
-            ZkTreeNodeSptr (new ZkTreeNode (nameStr,
-                        ZkNodeData (valueStr, doIgnore)));
-
-        // Load the children
-        for (xmlNode* chldNode = xmlNodePtr->children;
-                chldNode;
-                chldNode = chldNode->next)
-            if (chldNode->type == XML_ELEMENT_NODE)
-                nodeSptr->addChild (loadZkTreeXml_ (chldNode));
-
-        // Return the loaded node
-        return nodeSptr;
-    }
-
-    static void writeZkTree_ (ZooKeeperAdapterSptr zkHandle,
-            const ZkTreeNodeSptr zkNodeSptr,
-            const string& path)
-    {
-        // Create the path in zk-tree
-        zkHandle->createNode(path.c_str(), "", 0, false);
-        std::cerr << "[zktreeutil] created key: " << path << std::endl;
-        // Set value for the path
-        string value = zkNodeSptr->getData().value;
-        if (value != "")
-        {
-            zkHandle->setNodeData (path.c_str(), value.c_str());
-            std::cerr << "[zktreeutil] set value: " << std::endl;
-        }
-
-        // Go deep to write the subtree rooted in the node, if not to be ignored
-        if (!(zkNodeSptr->getData().ignoreUpdate))
-        {
-            for (unsigned i=0; i < zkNodeSptr->numChildren(); i++)
-            {
-                ZkTreeNodeSptr childNodeSptr = zkNodeSptr->getChild (i);
-                // Add the node name into the path and write in zk-tree
-                string cpath = ((path != "/")? path : "")
-                    + string("/")
-                    + childNodeSptr->getKey();
-                writeZkTree_ (zkHandle, childNodeSptr, cpath);
-            }
-        }
-
-        return;
-    }
-
-    static void addTreeZkAction_ (const ZkTreeNodeSptr zkNodeSptr,
-            const string& path,
-            vector< ZkAction >& actions)
-    {
-        // Create the key
-        actions.push_back (ZkAction (ZkAction::CREATE, path));
-
-        // Set value for the new key
-        if (zkNodeSptr->getData().value != "")
-            actions.push_back (ZkAction (ZkAction::VALUE,
-                        path,
-                        zkNodeSptr->getData().value));
-
-        // Add all the children
-        for (unsigned i=0; i < zkNodeSptr->numChildren(); i++)
-        {
-            ZkTreeNodeSptr childSptr = zkNodeSptr->getChild (i);
-            string cpath = path + string("/") + childSptr->getKey();
-            addTreeZkAction_ (childSptr, cpath, actions);
-        }
-
-        return;
-    }
-
-    static xmlNodePtr dumpZkTreeXml_ (const ZkTreeNodeSptr zkNodeSptr)
-    {
-        // Create xml node with zknode name and value
-        string nodename = zkNodeSptr->getKey ();
-        string value = zkNodeSptr->getData().value;
-        xmlNodePtr node = xmlNewNode(NULL, BAD_CAST "zknode");
-        xmlNewProp (node, BAD_CAST "name", BAD_CAST nodename.c_str());
-        if (value.length())
-            xmlNewProp (node, BAD_CAST "value", BAD_CAST value.c_str());
-
-        // Add all the children rotted at this node
-        for (unsigned i=0; i < zkNodeSptr->numChildren(); i++)
-            xmlAddChild (node, dumpZkTreeXml_ (zkNodeSptr->getChild (i)));
-
-        // Return xml node
-        return node;
-    }
-
-    static void dumpZkTree_ (const ZkTreeNodeSptr zkNodeSptr,
-            int maxLevel,
-            int level,
-            vector< bool >& masks)
-    {
-        // Check the max. dlevel to be dumped
-        if (level > maxLevel)
-            return;
-
-        
-        // Create branch
-        for (int i=0; i < level; i++) 
-        {
-            if ( i== level-1) std::cout << "|   ";
-            else if (masks[i]) std::cout << "    ";
-            else std::cout << "|   ";
-        }
-        std::cout << std::endl;
-        for (int i=0; i < level-1; i++)
-        {
-            if (masks[i]) std::cout << "    ";
-            else std::cout << "|   ";
-        }
-
-        // Dump the node name and value
-        std::cout << "|--[" << zkNodeSptr->getKey();
-        if (zkNodeSptr->getData().value != "")
-            std::cout << " => " << zkNodeSptr->getData().value;
-        std::cout << "]" << std::endl;
-
-        // Dump all the children
-        for (unsigned i=0; i < zkNodeSptr->numChildren(); i++)
-        {
-            // Add mask for last child
-            if (i == zkNodeSptr->numChildren()-1)
-                masks.push_back(true);
-            else
-                masks.push_back(false);
-            dumpZkTree_ (zkNodeSptr->getChild (i), maxLevel, level+1, masks);
-        }
-
-        masks.pop_back();
-        return;
-    }
-
-    static ZkTreeNodeSptr traverseBranch_ (const ZkTreeNodeSptr& zkRootSptr,
-            const string& path)
-    {
-        // Check if the tree is loaded into memory
-        if (zkRootSptr == NULL)
-        {
-            string errMsg = "[zktreeutil] null root passed for traversing";
-            std::cout << errMsg << std::endl;
-            throw std::logic_error (errMsg);
-        }
-
-        // Split the path and add intermediate znodes
-        vector< string > nodes;
-        boost::split(nodes, path, boost::is_any_of ("/") );
-
-        // Start traversing the tree
-        ZkTreeNodeSptr currNodeSptr = zkRootSptr;
-        for (unsigned znode_idx = 1; znode_idx < nodes.size(); znode_idx++)
-        {
-            bool found = false;
-            for (unsigned i=0; i < currNodeSptr->numChildren(); i++)
-            {
-                ZkTreeNodeSptr  childNodeSptr = currNodeSptr->getChild(i);
-                if (childNodeSptr->getKey() == nodes[znode_idx])
-                {
-                    // Found! go to the znode
-                    currNodeSptr = childNodeSptr;
-                    found = true;
-                    break;
-                }
-            }
-            if (!found) // No such znode found; return NULL node-ptr
-            {
-                string errMsg = string("[zktreeutil] unknown znode during traversal: ")
-                    + nodes[znode_idx];
-                std::cout << errMsg << std::endl;
-                throw std::logic_error (errMsg);
-            }
-        }
-
-        return currNodeSptr;
-    }
-
-    static ZkTreeNodeSptr createAncestors_ (const string& path)
-    {
-        // Create the root znode
-        ZkTreeNodeSptr zkRootSptr = ZkTreeNodeSptr (new ZkTreeNode ("/"));
-        ZkTreeNodeSptr currNodeSptr = zkRootSptr;
-        // Split the path and add intermediate znodes
-        vector< string > nodes;
-        boost::split(nodes, path, boost::is_any_of ("/") );
-        for (unsigned i=1; i < nodes.size()-1; i++)
-        {
-            ZkTreeNodeSptr childNodeSptr = ZkTreeNodeSptr (new ZkTreeNode (nodes[i]));
-            currNodeSptr->addChild (childNodeSptr);
-            currNodeSptr = childNodeSptr;
-        }
-
-        //Return the root of the branch
-        return zkRootSptr;
-    }
-
-    ZooKeeperAdapterSptr ZkTreeUtil::get_zkHandle (const string& zkHosts)
-    {
-        try
-        {
-            // Create an instance of ZK adapter.
-            ZooKeeperConfig config (zkHosts, 10000);
-            ZooKeeperAdapterSptr zkHandleSptr =
-                ZooKeeperAdapterSptr (new ZooKeeperAdapter (config));
-            return zkHandleSptr;
-        }
-        catch (const ZooKeeperException &e)
-        {
-            std::cerr << "[zktreeutil] zooKeeper exception caught: "
-                << e.what()
-                << std::endl;
-            throw;
-        }
-        catch (std::exception &stde)
-        {
-            std::cerr << "[zktreeutil] standard exception caught: "
-                << stde.what()
-                << std::endl;
-            throw;
-        }
-        catch (...)
-        {
-            std::cerr
-                << "[zktreeutil] unknown exception while connecting to zookeeper"
-                << std::endl;
-            throw;
-        }
-    }
-
-
-    void ZkTreeUtil::loadZkTree (const string& zkHosts,
-            const string& path,
-            bool force)
-    {
-        // Check if already loaded
-        if (loaded_ && !force)
-        {
-            std::cerr << "[zktreeutil] zk-tree already loaded into memory"
-                << std::endl;
-            return;
-        }
-
-        // Connect to ZK server
-        ZooKeeperAdapterSptr zkHandle = get_zkHandle (zkHosts);
-        std::cerr << "[zktreeutil] connected to ZK serverfor reading"
-            << std::endl;
-
-        // Check the existence of the path to znode
-        if (!zkHandle->nodeExists (path))
-        {
-            string errMsg = string("[zktreeutil] path does not exists : ") + path;
-            std::cout << errMsg << std::endl;
-            throw std::logic_error (errMsg);
-        }
-
-        // Load the rooted (sub)tree
-        ZkTreeNodeSptr zkSubrootSptr = loadZkTree_ (zkHandle, path);
-
-        //  Create the ancestors before loading the rooted subtree
-        if (path != "/")
-        {
-            zkRootSptr_ = createAncestors_(path);
-            string ppath = path.substr (0, path.rfind('/'));
-            ZkTreeNodeSptr parentSptr = traverseBranch_( zkRootSptr_, ppath);
-            parentSptr->addChild (zkSubrootSptr);
-        }
-        else // Loaded entire zk-tree
-        {
-            zkRootSptr_ = zkSubrootSptr;
-        }
-
-        // Set load flag
-        loaded_ = true;
-        return;
-    }
-
-    void ZkTreeUtil::loadZkTreeXml (const string& zkXmlConfig,
-            bool force)
-    {
-        // Check if already loaded
-        if (loaded_ && !force)
-        {
-            std::cerr << "[zktreeutil] zk-tree already loaded into memory"
-                << std::endl;
-            return;
-        }
-
-        // Parse the file and get the DOM
-        xmlDocPtr docPtr = xmlReadFile(zkXmlConfig.c_str(), NULL, 0);
-        if (docPtr == NULL) {
-            std::cerr << "[zktreeutil] could not parse XML file "
-                << zkXmlConfig
-                << std::endl;
-            exit (-1);
-        }
-        std::cerr << "[zktreeutil] zk-tree XML parsing successful"
-            << std::endl;
-
-        // Get the root element node
-        xmlNodePtr rootPtr = xmlDocGetRootElement(docPtr);
-        // Create the root zk node
-        zkRootSptr_ = ZkTreeNodeSptr (new ZkTreeNode ("/"));
-        // Load the rooted XML tree
-        for (xmlNode* chldNode = rootPtr->children;
-                chldNode;
-                chldNode = chldNode->next)
-        {
-            if (chldNode->type == XML_ELEMENT_NODE)
-                zkRootSptr_->addChild (loadZkTreeXml_ (chldNode));
-        }
-
-        // set oad flag
-        loaded_ = true;
-        // Cleanup stuff
-        xmlFreeDoc(docPtr);
-        xmlCleanupParser();
-        return;
-    }
-
-    void ZkTreeUtil::writeZkTree (const string& zkHosts,
-            const string& path,
-            bool force) const
-    {
-        // Connect to ZK server
-        ZooKeeperAdapterSptr zkHandle = get_zkHandle (zkHosts);
-        std::cerr << "[zktreeutil] connected to ZK server for writing"
-            << std::endl;
-
-        // Go to the rooted subtree
-        ZkTreeNodeSptr zkRootSptr = traverseBranch_ (zkRootSptr_, path);
-
-        // Cleanup before write if forceful write enabled
-        if (force)
-        {
-            if (path != "/") // remove the subtree rooted at the znode
-            {
-                // Delete the subtree rooted at the znode before write
-                if (zkHandle->nodeExists (path))
-                {
-                    std::cerr << "[zktreeutil] deleting subtree rooted at "
-                        << path
-                        << "..."
-                        << std::endl;
-                    zkHandle->deleteNode (path, true);
-                }
-            }
-            else // remove the rooted znodes
-            {
-                std::cerr << "[zktreeutil] deleting rooted zk-tree"
-                    << "..."
-                    << std::endl;
-                // Get the root's children
-                vector< string > cnodes = zkHandle->getNodeChildren ("/");
-                for (unsigned i=0; i < cnodes.size(); i++)
-                {
-                    if ( cnodes[i] != "/zookeeper") // reserved for zookeeper use
-                        zkHandle->deleteNode(cnodes[i], true);
-                }
-            }
-        }
-
-        // Start tree construction
-        writeZkTree_ (zkHandle, zkRootSptr, path);
-        return;
-    }
-
-    void ZkTreeUtil::dumpZkTree (bool xml, int depth) const
-    {
-        if (xml)
-        {
-            // Creates a new document, a node and set it as a root node
-            xmlDocPtr docPtr = xmlNewDoc(BAD_CAST "1.0");
-            xmlNodePtr rootNode = xmlNewNode(NULL, BAD_CAST "root");
-            xmlDocSetRootElement(docPtr, rootNode);
-
-            // Add all the rooted children
-            for (unsigned i=0; i < zkRootSptr_->numChildren(); i++)
-                xmlAddChild (rootNode, dumpZkTreeXml_ (zkRootSptr_->getChild (i)));
-
-            // Dumping document to stdio or file
-            xmlSaveFormatFileEnc("-", docPtr, "UTF-8", 1);
-
-            // Cleanup stuff
-            xmlFreeDoc(docPtr);
-            xmlCleanupParser();
-            return;
-        }
-
-        // Dump text
-        std::cout << "/" << std::endl;
-        vector< bool > masks;
-        for (unsigned i=0; i < zkRootSptr_->numChildren(); i++)
-        {
-            if (i == zkRootSptr_->numChildren()-1)
-                masks.push_back(true);
-            else
-                masks.push_back(false);
-            dumpZkTree_ (zkRootSptr_->getChild (i), depth, 1, masks);
-        }
-
-        return;
-    }
-
-    vector< ZkAction > ZkTreeUtil::diffZkTree (const string& zkHosts,
-            const string& path) const
-    {
-        // Action container
-        vector< ZkAction > actions;
-
-        if (!loaded_)
-        {
-            std::cout << "[zktreeutil] zk-tree not loaded for diff"
-                << std::endl;
-            exit (-1);
-        }
-
-        // Load the rooted subtree from zookeeper
-        ZooKeeperAdapterSptr zkHandle = get_zkHandle (zkHosts);
-        std::cerr << "[zktreeutil] connected to ZK server for reading"
-            << std::endl;
-        ZkTreeNodeSptr zkLiveRootSptr = loadZkTree_ (zkHandle, path);
-
-        // Go to the saved rooted subtree
-        ZkTreeNodeSptr zkLoadedRootSptr =
-            traverseBranch_ (zkRootSptr_, path);
-
-        // Check the root value first
-        if (zkLoadedRootSptr->getData().value
-                != zkLiveRootSptr->getData().value)
-        {
-            actions.push_back (ZkAction (ZkAction::VALUE,
-                        path,
-                        zkLoadedRootSptr->getData().value,
-                        zkLiveRootSptr->getData().value));
-        }
-
-        // Start traversal from root
-        vector< string > ppaths;
-        vector< pair< ZkTreeNodeSptr, ZkTreeNodeSptr > > commonNodes;
-        ppaths.push_back ((path != "/")? path : "");
-        commonNodes.push_back (pair< ZkTreeNodeSptr, ZkTreeNodeSptr >
-                (zkLoadedRootSptr, zkLiveRootSptr));
-
-        for (unsigned j=0; j < commonNodes.size(); j++)
-        {
-            // Get children of loaded tree
-            map< string, ZkTreeNodeSptr > loadedChildren;
-            for (unsigned i=0; i < commonNodes[j].first->numChildren(); i++)
-            {
-                ZkTreeNodeSptr childSptr = commonNodes[j].first->getChild (i);
-                loadedChildren[childSptr->getKey()] = childSptr;
-            }
-            // Get children of live tree
-            map< string, ZkTreeNodeSptr > liveChildren;
-            for (unsigned i=0; i < commonNodes[j].second->numChildren(); i++)
-            {
-                ZkTreeNodeSptr childSptr = commonNodes[j].second->getChild (i);
-                liveChildren[childSptr->getKey()] = childSptr;
-            }
-
-            // Start comparing the children
-            for (map< string, ZkTreeNodeSptr >::const_iterator it =
-                    loadedChildren.begin();
-                    it != loadedChildren.end();
-                    it++)
-            {
-                bool ignoreKey = it->second->getData().ignoreUpdate;
-                string loadedVal = it->second->getData().value;
-                // Path to this node
-                string path = ppaths[j] + string("/") + it->first;
-
-                map< string, ZkTreeNodeSptr >::const_iterator jt =
-                    liveChildren.find (it->first);
-                if (jt != liveChildren.end())
-                {
-                    // Key is present in live zk-tree
-                    string liveVal = jt->second->getData().value;
-                    // Check value for the key, if not ignored
-                    if (!ignoreKey)
-                    {
-                        if (loadedVal != liveVal)
-                        {
-                            // Value differs, set the new value for the key
-                            actions.push_back (ZkAction (ZkAction::VALUE,
-                                        path,
-                                        loadedVal,
-                                        liveVal));
-                        }
-
-                        // Add node to common nodes
-                        ppaths.push_back (path);
-                        commonNodes.push_back (pair< ZkTreeNodeSptr, ZkTreeNodeSptr >
-                                (it->second, jt->second));
-                    }
-
-                    // Remove the live zk node
-                    liveChildren.erase (it->first);
-                }
-                else
-                {
-                    // Add the subtree rooted to this node, if not ignored
-                    if (!ignoreKey)
-                        addTreeZkAction_ (it->second, path, actions);
-                }
-            }
-
-            // Remaining live zk nodes to be deleted
-            for (map< string, ZkTreeNodeSptr >::const_iterator it = liveChildren.begin();
-                    it != liveChildren.end(); it++)
-            {
-                string path = ppaths[j] + string("/") + it->first;
-                actions.push_back (ZkAction (ZkAction::DELETE, path));
-            }
-        }
-        // return the diff actions
-        return actions;
-    }
-
-    void ZkTreeUtil::executeZkActions (const string& zkHosts,
-            const vector< ZkAction >& zkActions,
-            int execFlags) const
-    {
-        // Execute the diff zk actions
-        if (zkActions.size())
-        {
-            // Connect to Zookeeper for writing
-            ZooKeeperAdapterSptr zkHandleSptr;
-            if ((execFlags & EXECUTE)
-                    || (execFlags & INTERACTIVE))
-            {
-                zkHandleSptr = get_zkHandle (zkHosts);
-                std::cerr << "[zktreeutil] connected to ZK server for writing"
-                    << std::endl;
-            }
-
-            for (unsigned i=0; i < zkActions.size(); i++)
-            {
-                if (zkActions[i].action == ZkAction::CREATE)
-                {
-                    if (execFlags & PRINT)
-                        std::cout << "CREAT- key:" << zkActions[i].key << std::endl;
-                    if (execFlags & EXECUTE)
-                    {
-                        if (execFlags & INTERACTIVE)
-                        {
-                            string resp;
-                            std::cout << "Execute this action?[yes/no]: ";
-                            std::getline(std::cin, resp);
-                            if (resp != "yes")
-                                continue;
-                        }
-                        zkHandleSptr->createNode(zkActions[i].key.c_str(), "", 0, false);
-                    }
-                }
-                else if (zkActions[i].action == ZkAction::DELETE)
-                {
-                    if (execFlags & PRINT)
-                        std::cout << "DELET- key:" << zkActions[i].key << std::endl;
-                    if (execFlags & EXECUTE)
-                    {
-                        if (execFlags & INTERACTIVE)
-                        {
-                            string resp;
-                            std::cout << "Execute this action?[yes/no]: ";
-                            std::getline(std::cin, resp);
-                            if (resp != "yes")
-                                continue;
-                        }
-                        zkHandleSptr->deleteNode(zkActions[i].key.c_str(), true);
-                    }
-                }
-                else if (zkActions[i].action == ZkAction::VALUE)
-                {
-                    if (execFlags & PRINT)
-                    {
-                        std::cout << "VALUE- key:"
-                            << zkActions[i].key
-                            << " value:" << zkActions[i].newval;
-                        if (zkActions[i].oldval != "")
-                            std::cout << " old_value:" << zkActions[i].oldval;
-                        std::cout << std::endl;
-                    }
-                    if (execFlags & EXECUTE)
-                    {
-                        if (execFlags & INTERACTIVE)
-                        {
-                            string resp;
-                            std::cout << "Execute this action?[yes/no]: ";
-                            std::getline(std::cin, resp);
-                            if (resp != "yes")
-                                continue;
-                        }
-                        zkHandleSptr->setNodeData (zkActions[i].key, zkActions[i].newval);
-                    }
-                }
-            }
-        }
-
-        return;
-    }
-
-}
-

http://git-wip-us.apache.org/repos/asf/zookeeper/blob/b0df8fe1/src/contrib/zktreeutil/src/ZkTreeUtil.h
----------------------------------------------------------------------
diff --git a/src/contrib/zktreeutil/src/ZkTreeUtil.h b/src/contrib/zktreeutil/src/ZkTreeUtil.h
deleted file mode 100644
index 0a9be03..0000000
--- a/src/contrib/zktreeutil/src/ZkTreeUtil.h
+++ /dev/null
@@ -1,262 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
-
-#ifndef __ZK_TREE_UTIL_H__
-#define __ZK_TREE_UTIL_H__
-
-#include <libxml/parser.h>
-#include <libxml/tree.h>
-#include "SimpleTree.h"
-#include "ZkAdaptor.h"
-
-namespace zktreeutil
-{
-
-#define ZKTREEUTIL_INF 1000000000
-    /**
-     * \brief A structure containing ZK node data.
-     */
-    struct ZkNodeData
-    {
-        /**
-         * \brief The value string of the ZK node.
-         */
-        string value;
-
-        /**
-         * \brief The flag indicating whether children of the
-         * \brief node shduld be ignored during create/diff/update
-         */
-        bool ignoreUpdate;
-
-        /**
-         * \brief Constructor.
-         *
-         * @param val the value string
-         * @param ignore the flag indicating ignore any update/diff
-         */
-        ZkNodeData (const string& val, bool ignore=false)
-            : value (val), ignoreUpdate (ignore) {}
-
-        /**
-         * \brief Constructor.
-         *
-         * @param ignore the flag indicating ignore any update/diff
-         */
-        ZkNodeData (bool ignore=false)
-            : ignoreUpdate (ignore) {}
-    };
-
-    /**
-     * \brief The type representing a ZK Treenode
-     */
-    typedef SimpleTreeNode< string, ZkNodeData > ZkTreeNode;
-
-    /**
-     * \brief The type representing a ZK Treenode smart-pointer
-     */
-    typedef boost::shared_ptr< ZkTreeNode > ZkTreeNodeSptr;
-
-    /**
-     * \brief The type representing a ZK Adapter smart-pointer
-     */
-    typedef boost::shared_ptr< ZooKeeperAdapter > ZooKeeperAdapterSptr;
-
-    /**
-     * \brief A structure defining a particular action on ZK node;
-     * \brief the action can be any of -
-     * \brief        CREAT- <zknode>                : creates <zknode> recussively
-     * \brief        DELET- <zknode>              : deletes <zknode> recursively
-     * \brief        VALUE- <zknode> <value>     : sets <value> to <zknode>
-     */
-    struct ZkAction
-    {
-        /**
-         * \brief The action type; any of create/delete/setvalue.
-         */
-        enum ZkActionType
-        {
-            NONE,
-            CREATE,
-            DELETE,
-            VALUE,
-        };
-
-        /**
-         * \brief action of this instance
-         */
-        ZkActionType action;
-
-        /**
-         * \brief ZK node key
-         */
-        string key;
-
-        /**
-         * \brief value to be set, if action is setvalue
-         */
-        string newval;
-
-        /**
-         * \brief existing value of the ZK node key
-         */
-        string oldval;
-
-        /**
-         * \brief Constructor.
-         */
-        ZkAction ()
-            : action (ZkAction::NONE) {}
-
-        /**
-         * \brief Constructor.
-         *
-         * @param act the action to be taken
-         * @param k the key on which action to be taken
-         */
-        ZkAction (ZkActionType act, const string& k)
-            : action(act),
-            key(k) {}
-
-        /**
-         * \brief Constructor.
-         *
-         * @param act the action to be taken
-         * @param k the key on which action to be taken
-         * @param v the value of the ZK node key
-         */
-        ZkAction (ZkActionType act, const string& k, const string& v)
-            : action(act),
-            key(k),
-            newval(v) {}
-
-        /**
-         * \brief Constructor.
-         *
-         * @param act the action to be taken
-         * @param k the key on which action to be taken
-         * @param nv the new value of the ZK node key
-         * @param ov the old value of the ZK node key
-         */
-        ZkAction (ZkActionType act, const string& k, const string& nv, const string& ov)
-            : action (act),
-            key(k),
-            newval(nv),
-            oldval(ov) {}
-    };
-
-    /**
-     * \brief The ZK tree utility class; supports loading ZK tree from ZK server OR
-     * \brief from saved XML file, saving ZK tree into XML file, dumping the ZK tree
-     * \brief on standard output, creting a diff between saved ZK tree and live ZK
-     * \brief tree and incremental update of the live ZK tree.
-     */
-    class ZkTreeUtil
-    {
-        public:
-            /**
-             * \brief Execution flag on ZkAction
-             */
-            enum ZkActionExecuteFlag
-            {
-                NONE = 0,
-                PRINT = 1,
-                EXECUTE = 2,
-                INTERACTIVE = 5,
-            };
-
-        public:
-            /**
-             * \brief Connects to zookeeper and returns a valid ZK handle
-             *
-             * @param zkHosts comma separated list of host:port forming ZK quorum
-             * @param a valid ZK handle
-             */
-            static ZooKeeperAdapterSptr get_zkHandle (const string& zkHosts);
-
-
-        public:
-            /**
-             * \brief Constructor.
-             */
-            ZkTreeUtil () : loaded_(false) {}
-
-            /**
-             * \brief loads the ZK tree from ZK server into memory
-             *
-             * @param zkHosts comma separated list of host:port forming ZK quorum
-             * @param path path to the subtree to be loaded into memory
-             * @param force forces reloading in case tree already loaded into memory
-             */
-            void loadZkTree (const string& zkHosts, const string& path="/", bool force=false);
-
-            /**
-             * \brief loads the ZK tree from XML file into memory
-             *
-             * @param zkXmlConfig ZK tree XML file
-             * @param force forces reloading in case tree already loaded into memory
-             */
-            void loadZkTreeXml (const string& zkXmlConfig, bool force=false);
-
-            /**
-             * \brief writes the in-memory ZK tree on to ZK server
-             *
-             * @param zkHosts comma separated list of host:port forming ZK quorum
-             * @param path path to the subtree to be written to ZK tree
-             * @param force forces cleanup of the ZK tree on the ZK server before writing
-             */
-            void writeZkTree (const string& zkHosts, const string& path="/", bool force=false) const;
-
-            /**
-             * \brief dupms the in-memory ZK tree on the standard output device;
-             *
-             * @param xml flag indicates whether tree should be dumped in XML format
-             * @param depth the depth of the tree to be dumped for non-xml dump
-             */
-            void dumpZkTree (bool xml=false, int depth=ZKTREEUTIL_INF) const;
-
-            /** 
-             * \brief returns a list of actions after taking a diff of in-memory
-             * \brief ZK tree and live ZK tree.
-             *
-             * @param zkHosts comma separated list of host:port forming ZK quorum
-             * @param path path to the subtree in consideration while taking diff with ZK tree
-             * @return a list of ZKAction instances to be performed on live ZK tree
-             */
-            vector< ZkAction > diffZkTree (const string& zkHosts, const string& path="/") const;
-
-            /**
-             * \brief performs create/delete/setvalue by executing a set of
-             * ZkActions on a live ZK tree.
-             *
-             * @param zkHosts comma separated list of host:port forming ZK quorum
-             * @param zkActions set of ZkActions
-             * @param execFlags flags indicating print/execute/interactive etc
-             */
-            void executeZkActions (const string& zkHosts,
-                    const vector< ZkAction >& zkActions,
-                    int execFlags) const;
-
-        private:
-
-            ZkTreeNodeSptr zkRootSptr_;     // ZK tree root node
-            bool loaded_;                        // Falg indicating whether ZK tree loaded into memory
-    };
-}
-
-#endif // __ZK_TREE_UTIL_H__

http://git-wip-us.apache.org/repos/asf/zookeeper/blob/b0df8fe1/src/contrib/zktreeutil/src/ZkTreeUtilMain.cc
----------------------------------------------------------------------
diff --git a/src/contrib/zktreeutil/src/ZkTreeUtilMain.cc b/src/contrib/zktreeutil/src/ZkTreeUtilMain.cc
deleted file mode 100644
index 8afebf6..0000000
--- a/src/contrib/zktreeutil/src/ZkTreeUtilMain.cc
+++ /dev/null
@@ -1,247 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <unistd.h>
-#ifndef _GNU_SOURCE
-#define _GNU_SOURCE
-#endif
-#include <getopt.h>
-#include <iostream>
-#include "ZkTreeUtil.h"
-
-using namespace zktreeutil;
-
-// The set of "long" options accepted by this program.
-static struct option long_options[] = {
-    {"help",         no_argument,             0, 'h'},
-    {"import",        no_argument,             0, 'I'},
-    {"export",     no_argument,             0, 'E'},
-    {"update",     no_argument,             0, 'U'},
-    {"diff",         no_argument,             0, 'F'},
-    {"dump",         no_argument,             0, 'D'},
-    {"force",         no_argument,             0, 'f'},
-    {"xmlfile",     required_argument,     0, 'x'},
-    {"path",         required_argument,     0, 'p'},
-    {"depth",         required_argument,     0, 'd'},
-    {"zookeeper", required_argument,     0, 'z'},
-    {0, 0, 0, 0}
-};
-static char *short_options = "IEUFDfx:p:d:hz:";
-
-static void usage(int argc, char *argv[])
-{
-    std::cout << "ZK-tree utility for managing ZK-tree with XML import/export," << std::endl;
-    std::cout << "viewing diff between live and saved ZK-tree and performing" << std::endl;
-    std::cout << "incremental update of the same." << std::endl;
-    std::cout << "Usage: " << argv[0] << " [args-and-values]+" << std::endl;
-    std::cout 
-        << "\t--import or -I: " 
-        << std::endl
-        << "\t  Imports the zookeeper tree from XML file. Must be specified with"
-        << std::endl
-        << "\t  --zookeeper AND --xmlfile options. Optionally takes --path for"
-        << std::endl
-        << "\t  importing subtree"
-        << std::endl;
-    std::cout 
-        << "\t--export or -E: " 
-        << std::endl
-        << "\t  Exports the zookeeper tree to XML file. Must be specified with"
-        << std::endl
-        << "\t  --zookeeper option. Optionally takes --path for exporting subtree"
-        << std::endl;
-    std::cout
-        << "\t--update or -U: "
-        << std::endl
-        << "\t  Updates zookeeper tree with changes from XML file. Update operation"
-        << std::endl
-        << "\t  is interactive unless specified with --force option. Must be speci-"
-        << std::endl
-        << "\t  fied with --zookeeper AND --xmlfile options. Optionally takes --path"
-        << std::endl
-        << "\t  for updating subtree."
-        << std::endl;
-    std::cout
-        << "\t--diff or -F: "
-        << std::endl
-        << "\t  Creates a list of diff actions on ZK tree based on XML data. Must"
-        << std::endl
-        << "\t  be specified with --zookeeper OR --xmlfile options. Optionally takes"
-        << std::endl
-        << "\t  --path for subtree diff"
-        << std::endl;
-    std::cout
-        << "\t--dump or -D: "
-        << std::endl
-        << "\t  Dumps the entire ZK (sub)tree to standard output. Must be specified"
-        << std::endl
-        << "\t  with --zookeeper OR --xmlfile options. Optionally takes --path and"
-        << std::endl
-        << "\t  --depth for dumping subtree."
-        << std::endl;
-    std::cout
-        << "\t--xmlfile=<filename> or -x <filename>: "
-        << std::endl
-        << "\t  Zookeeper tree-data XML file."
-        << std::endl;
-    std::cout
-        << "\t--path=<znodepath> or -p <znodepath>: "
-        << std::endl
-        << "\t  Path to the zookeeper subtree rootnode."
-        << std::endl;
-    std::cout
-        << "\t--depth=<tree-depth> or -d <tree-depth>: "
-        << std::endl
-        << "\t  Depth of the ZK tree to be dumped (ignored for XML dump)."
-        << std::endl;
-    std::cout
-        << "\t--force or -f: Forces cleanup before import; also used for forceful"
-        << std::endl
-        << "\t  update. Optionally be specified with --import and --update."
-        << std::endl;
-    std::cout
-        << "\t--help or -h: "
-        << std::endl
-        << "\t  prints this message"
-        << std::endl;
-    std::cout
-        << "\t--zookeeper=<zkhosts> or -z <zkhosts>: "
-        << std::endl
-        << "\t  specifies information to connect to zookeeper."
-        << std::endl;
-}
-
-int main(int argc, char **argv)
-{
-    if (argc == 1) {
-        usage(argc, argv);
-        exit(0);
-    }
-
-    // Parse the arguments.
-     int op = 0;
-     bool force = false;
-     string zkHosts;
-     string xmlFile;
-     string path = "/";
-     int depth = 0;
-     while (1)
-     {
-         int c = getopt_long(argc, argv, short_options, long_options, 0);
-         if (c == -1)
-             break;
-
-         switch (c) {
-             case 'I': op = c;
-                          break;
-             case 'E': op = c;
-                          break;
-             case 'U': op = c;
-                          break;
-             case 'F': op = c;
-                          break;
-             case 'D': op = c;
-                          break;
-             case 'f': force = true;
-                          break;
-             case 'x': xmlFile = optarg;
-                          break;
-             case 'p': path = optarg;
-                          break;
-             case 'd': depth = atoi (optarg);
-                          break;
-             case 'z': zkHosts = optarg;
-                          break;
-             case 'h': usage (argc, argv);
-                          exit(0);
-         }
-     }
-
-     ZkTreeUtil zkTreeUtil;
-     switch (op)
-     {
-         case 'I':    {
-                            if (zkHosts == "" || xmlFile == "")
-                            {
-                                std::cout << "[zktreeutil] missing params; please see usage" << std::endl;
-                                exit (-1);
-                            }
-                            zkTreeUtil.loadZkTreeXml (xmlFile);
-                            zkTreeUtil.writeZkTree (zkHosts, path, force);
-                            std::cout << "[zktreeutil] import successful!" << std::endl;
-                            break;
-                        }
-         case 'E':    {
-                            if (zkHosts == "")
-                            {
-                                std::cout << "[zktreeutil] missing params; please see usage" << std::endl;
-                                exit (-1);
-                            }
-                            zkTreeUtil.loadZkTree (zkHosts, path);
-                            zkTreeUtil.dumpZkTree (true);
-                            break;
-                        }
-         case 'U':    {
-                            if (zkHosts == "" || xmlFile == "")
-                            {
-                                std::cout << "[zktreeutil] missing params; please see usage" << std::endl;
-                                exit (-1);
-                            }
-                            zkTreeUtil.loadZkTreeXml (xmlFile);
-                            vector< ZkAction > zkActions = zkTreeUtil.diffZkTree (zkHosts, path);
-                            int flags = ZkTreeUtil::EXECUTE;
-                            if (!force) flags |= ZkTreeUtil::INTERACTIVE;
-                            zkTreeUtil.executeZkActions (zkHosts, zkActions, flags);
-                            std::cout << "[zktreeutil] update successful!" << std::endl;
-                            break;
-                        }
-         case 'F':    {
-                            if (zkHosts == "" || xmlFile == "")
-                            {
-                                std::cout << "[zktreeutil] missing params; please see usage" << std::endl;
-                                exit (-1);
-                            }
-                            zkTreeUtil.loadZkTreeXml (xmlFile);
-                            vector< ZkAction > zkActions = zkTreeUtil.diffZkTree (zkHosts, path);
-                            zkTreeUtil.executeZkActions (zkHosts, zkActions, ZkTreeUtil::PRINT);
-                            break;
-                        }
-         case 'D':    {
-                            if (zkHosts != "")
-                                zkTreeUtil.loadZkTree (zkHosts, path);
-                            else if (xmlFile != "")
-                                zkTreeUtil.loadZkTreeXml (xmlFile);
-                            else
-                            {
-                                std::cout << "[zktreeutil] missing params; please see usage" << std::endl;
-                                exit (-1);
-                            }
-                            // Dump the ZK tree
-                            if (depth) zkTreeUtil.dumpZkTree (false, depth);
-                            else zkTreeUtil.dumpZkTree (false);
-                            break;
-                        }
-     }
-
-     exit(0);
-}
-

http://git-wip-us.apache.org/repos/asf/zookeeper/blob/b0df8fe1/src/contrib/zktreeutil/tests/zk_sample.xml
----------------------------------------------------------------------
diff --git a/src/contrib/zktreeutil/tests/zk_sample.xml b/src/contrib/zktreeutil/tests/zk_sample.xml
deleted file mode 100644
index 6e97daa..0000000
--- a/src/contrib/zktreeutil/tests/zk_sample.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  See the NOTICE file distributed with
-   this work for additional information regarding copyright ownership.
-   The ASF licenses this file to You 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.
--->
-
-<root>
-  <zknode name="myapp">
-    <zknode name="version-1.0">
-      <zknode name="clientConfig">
-        <zknode name="testClient" value="cluster.id=local;server.host=localhost;server.port=4080"/>
-      </zknode>
-      <zknode name="configuration" value="v4.0">
-        <zknode name="cacheControl" value="on"/>
-        <zknode name="healthCheck" value="on"/>
-      </zknode>
-      <zknode name="distributions">
-        <zknode name="http">
-          <zknode name="goldenShards" value="0,4294967296,server,localhost:8085;"/>
-          <zknode name="versionedShards" value="33;0,4294967296,server,localhost:8086;"/>
-          <zknode name="shards" value="0,4294967296,server,localhost:8086;"/>
-        </zknode>
-      </zknode>
-      <zknode name="tmp" ignore="yes">
-        <zknode name="alerts" value="test"/>
-        <zknode name="locks"/>
-        <zknode name="transactions"/>
-      </zknode>
-    </zknode>
-  </zknode>
-  <zknode name="zookeeper" ignore="true"/>
-</root>

http://git-wip-us.apache.org/repos/asf/zookeeper/blob/b0df8fe1/src/contrib/zooinspector/NOTICE.txt
----------------------------------------------------------------------
diff --git a/src/contrib/zooinspector/NOTICE.txt b/src/contrib/zooinspector/NOTICE.txt
deleted file mode 100644
index 5420ef0..0000000
--- a/src/contrib/zooinspector/NOTICE.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-src/java/com/nitido/utils/toaster/Toaster.java:
-This java file is copyright by Daniele Piras ("danielepiras80", no email known) released under the Apache Software License 2.0
-It has been downloaded in december 2009 from the CVS web interface of the sourceforge project http://sourceforge.net/projects/jtoaster/ . The web interface to CVS is not available anymore on sourceforge.
-
-The icons in src/main/resources/icons are taken from the Tango project
-downloaded from http://tango.freedesktop.org/releases on 2011-09-06.
-The Tango project is public domain.
-
-Distribution packagers should not include the icons in the package but rather depend on tango-icon-theme (Debian package name). ZooInspector will then try to get the icons from /usr/share/icons/Tango rather then from its jar file.

http://git-wip-us.apache.org/repos/asf/zookeeper/blob/b0df8fe1/src/contrib/zooinspector/README.txt
----------------------------------------------------------------------
diff --git a/src/contrib/zooinspector/README.txt b/src/contrib/zooinspector/README.txt
deleted file mode 100644
index 3c2a58f..0000000
--- a/src/contrib/zooinspector/README.txt
+++ /dev/null
@@ -1,94 +0,0 @@
-==========================================
-ZooInspector - Browser and Editor for ZooKeeper Instances
-Author: Colin Goodheart-Smithe
-Date: February 2010
-==========================================
-
-ZooInspector is a Java Swing based application for browsing and editing ZooKeeper instances.
-
-Contents
---------
-	- Features
-	- Pre-requisites
-	- Build Instructions
-	- Using ZooInspector
-	- Creating and Using Plugins
-	
-Features
---------
-	Below is a list of features in the current release of ZooInspector.
-	- Load connection settings from a zookeeper properties file
-	- Plugable DataEncryptionManagers to specify how data should be encrypted and decrypted in the Zookeeper instance
-	- Browseable tree view of the ZooKeeper instance
-	- View the data in a node
-	- View the ACL's currently applied to a node
-	- View the metadata for a node (Version, Number of Children, Last modified Tiem, etc.)
-	- Plugable NodeViewers interface
-	- Ability to save/load and set default Node Viewers
-	
-Pre-requisites
---------------
-	- The main zookeeper build script must have been run before building this module
-	
-Build Instructions
-------------------
-	1. Open a command line.
-	2. cd into this directory
-	3. Run command: ant
-	4. ZooInspector will be built to ../../../build/contrib/ZooInspector
-	5. Copy zookeeper-3.x.x.jar into the lib sub-directory (if you are using zookeeper-3.3.0.jar it will have been
-       copied to this directory during the build
-	6. By default the zookeeper.cmd and zookeeper.sh files expect zookeeper-3.3.0.jar.  If you are using another version
-	   you will need to change these files to point to the zookeeper-3.x.x.jar you copied to the lib directory
-	7. To run ZooInspector run zooInspector.cmd (on Windows) or zooInspector.sh (on Linux).  If you are using 
-	   zookeeper-3.3.0.jar and do not require any classpath changes you can run the zookeeper-dev-ZooInspector.jar
-	   directly
-
-Using ZooInspector
-------------------
-	To start ZooInspector run zooInspector.cmd (on Windows) or zooInspector.sh (on Linux).  If you are using 
-	zookeeper-3.3.0.jar and do not require any classpath changes you can run the zookeeper-dev-ZooInspector.jar
-	directly.
-	
-	Click the play button on the toolbar to bring up the connection dialog.  From here you can enter connection 
-	information for your zookeeper instance.  You can also load the connection properties from a file.  This file can 
-	have the format as a normal zookeeper properties file (i.e. hosts and timeout key-value pairs) and van optional have
-	an encryptionManager key-value pair to specify the DataEncryptionManager to use for this connection 
-	(DataEncryptionManagers are explained in further detail in the 'Creating and Using Plugins' section below).  You can
-	also set the entered information as the defaults so that when you first start ZooInspector these settings are 
-	automatically loaded into this dialog.  Pressing the OK button with connect to your ZooKeeper instance and show the
-	current node tree on the left of the main panel.
-	
-	Clicking a node in the node tree will load the data for that node into the node viewers.  Three node viewers are 
-	currently distributed with ZooInspector:
-		1. Node Data - This enables you to see the data current stored on that node.  This data can be modified and 
-		   saved.  The data is decrypted and encrypted using the DataEncryptionManager specified on the connection 
-		   dialog.
-		2. Node Metadata - This enables you to see the metadata associiated with this node.  This is Essentially the data
-		   obtained from the Stat object for this node.
-		3. Node ACLs - This allows you to see the ACLs currently applied to this node.  Currently there is no ability
-		   to change the ACLs on a node, but it is a feature I would like to add.
-	Other custom Node Viewers can be added, this is explained in the 'Creating and Using Plugins' section below.
-	
-
-Creating and Using Plugins
---------------------------
-	There are two types of plugin which can be used with ZooInspector:
-		1. DataEncryptionManager - This specifies how data should be encrypted and decrypted when working with a 
-		   zookeeper instance.
-		2. ZooInspectorNodeViewer - This is a GUI panel which provides a view of visualisation on a node.
-	More information on these interfaces can be found in the javadocs for this module.
-	
-	To use a plugin in ZooInspector, build the plugin to a jar and copy the jar to the lib sub-directory.  Edit the 
-	zooInspector.cmd and/or zooInspector.sh files to include your new jar on the classpath and run ZooInspector.
-	
-	For DataEncryptionManagers, click the play button to open the connection dialog and enter the full class name of 
-	your DataEncryptionManager in the 'Data Encryption Manager' field.  You can make this Data Encryption Manager the 
-	default by clicking 'Set As Default'.  Click the 'OK' button to instantiate and use your plugin.
-	
-	For ZooInspectorNodeViewers, Click the 'Change Node Viewers' button on the toolbar (looks like a tree with a pencil)
-	and enter the full classname for your Node Viewer in the field left of the 'Add' button, then click the 'Add' 
-	button.  The Node Viewer will be instantiated and should appear in the list.  You can change the order of the Node 
-	viewers by clicking the up and dpwn buttons and delete a Node Viewer by clicking the delete button.  You can save 
-	to configuration to a file or set it as the default if necessary. Then click the 'OK' button and your Node Viewer 
-	should appear in the tabs on the right of the main panel.
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/zookeeper/blob/b0df8fe1/src/contrib/zooinspector/TODO
----------------------------------------------------------------------
diff --git a/src/contrib/zooinspector/TODO b/src/contrib/zooinspector/TODO
deleted file mode 100644
index 404d5c9..0000000
--- a/src/contrib/zooinspector/TODO
+++ /dev/null
@@ -1,19 +0,0 @@
-- replace JToaster with standard notifications, see:
-  http://www.galago-project.org/specs/notification/
-  http://stackoverflow.com/questions/857154/freedesktop-org-notifications-in-java
-  DBus and Java:
-  http://bolta-gecko.blogspot.com/2009/06/using-d-bus-in-java.html
-  http://dbus.freedesktop.org/doc/dbus-java/ (packaged in Debian)
-
-- properly respect
-  http://standards.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html
-  http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html
-  http://standards.freedesktop.org/icon-theme-spec/icon-theme-spec-latest.html
-
-- Rename classes to avoid redundand "ZooInspector" prefix.
-
-- Ant build file has hard coded log4j dependency. (ZK will move to maven anyways...)
-
-- make directory for config files configurable via commandline parameter
-
-- Clean up the code! :-)

http://git-wip-us.apache.org/repos/asf/zookeeper/blob/b0df8fe1/src/contrib/zooinspector/build.xml
----------------------------------------------------------------------
diff --git a/src/contrib/zooinspector/build.xml b/src/contrib/zooinspector/build.xml
deleted file mode 100644
index 52f3eb1..0000000
--- a/src/contrib/zooinspector/build.xml
+++ /dev/null
@@ -1,139 +0,0 @@
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  See the NOTICE file distributed with
-   this work for additional information regarding copyright ownership.
-   The ASF licenses this file to You 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.
--->
-
-<project name="ZooInspector" default="jar">
-	<import file="../build-contrib.xml" />
-
-
-	<target name="setjarname">
-		<property name="jarname" value="${build.dir}/zookeeper-${version}-${name}.jar" />
-	</target>
-
-	<target name="init" depends="checkMainCompiled, zookeeperbuildcontrib.init">
-		<mkdir dir="${build.dir}/licences" />
-		<copy todir="${build.dir}/licences">
-			<fileset dir="${basedir}/licences" />
-		</copy>
-		<mkdir dir="${build.dir}/icons" />
-		<copy todir="${build.dir}/icons">
-			<fileset dir="${basedir}/src/main/resources/icons" />
-		</copy>
-		<mkdir dir="${build.dir}/config" />
-		<copy todir="${build.dir}/config">
-			<fileset dir="${basedir}/config" />
-		</copy>
-		<copy todir="${build.dir}/lib">
-			<fileset file="${basedir}/lib/log4j.properties" />
-		</copy>
-		<copy todir="${build.dir}/lib">
-			<fileset file="../../../build/zookeeper-${version}.jar" />
-		</copy>
-		<copy todir="${build.dir}">
-			<fileset dir="${basedir}" includes="*.*" excludes="build.xml,ivy.xml" />
-		</copy>
-	</target>
-
-	<!-- Override jar target to specify main class -->
-	<target name="jar" depends="setjarname, compile">
-		<echo message="contrib: ${name}" />
-
-		<jar jarfile="${jarname}">
-			<manifest>
-				<attribute name="Main-Class" value="org.apache.zookeeper.inspector.ZooInspector" />
-				<attribute name="Built-By" value="${user.name}" />
-				<attribute name="Built-At" value="${build.time}" />
-				<attribute name="Built-On" value="${host.name}" />
-				<attribute name="Implementation-Title" value="org.apache.zookeeper" />
-				<attribute name="Implementation-Version" value="${revision}" />
-				<attribute name="Implementation-Vendor" value="The Apache Software Foundation" />
-			</manifest>
-			<fileset file="${zk.root}/LICENSE.txt" />
-			<fileset dir="${build.classes}" />
-			<fileset dir="${basedir}/src/main/resources" />
-			<fileset dir="${basedir}/src/java" excludes="**/*.jar, **/*.java"/>
-		</jar>
-	</target>
-
-	<target name="compile" depends="ivy-retrieve,zookeeperbuildcontrib.compile" />
-
-	<target name="test" depends="checkMainTestCompiled,compile-test,test-init,test-category,junit.run" />
-
-	<target name="compile-test" depends="ivy-retrieve-test,compile">
-		<property name="target.jdk" value="${ant.java.version}" />
-		<property name="src.test.local" location="${basedir}/test" />
-		<mkdir dir="${build.test}" />
-		<javac srcdir="${src.test.local}" destdir="${build.test}" target="${target.jdk}" debug="on" encoding="${build.encoding}">
-			<classpath refid="classpath" />
-			<classpath>
-				<pathelement location="${zk.root}/build/test/classes" />
-			</classpath>
-		</javac>
-	</target>
-
-	<target name="test-init" depends="jar,compile-test">
-		<delete dir="${test.log.dir}" />
-		<delete dir="${test.tmp.dir}" />
-		<delete dir="${test.data.dir}" />
-		<mkdir dir="${test.log.dir}" />
-		<mkdir dir="${test.tmp.dir}" />
-		<mkdir dir="${test.data.dir}" />
-	</target>
-
-	<target name="test-category">
-		<property name="test.category" value="" />
-	</target>
-
-	<target name="junit.run">
-		<echo message="${test.src.dir}" />
-		<junit showoutput="${test.output}" printsummary="${test.junit.printsummary}" haltonfailure="${test.junit.haltonfailure}" fork="yes" forkmode="${test.junit.fork.mode}" maxmemory="${test.junit.maxmem}" dir="${basedir}" timeout="${test.timeout}" errorProperty="tests.failed" failureProperty="tests.failed">
-			<sysproperty key="build.test.dir" value="${test.tmp.dir}" />
-			<sysproperty key="test.data.dir" value="${test.data.dir}" />
-			<sysproperty key="log4j.configuration" value="file:${basedir}/conf/log4j.properties" />
-			<classpath refid="classpath" />
-			<classpath>
-				<pathelement path="${build.test}" />
-				<pathelement location="${zk.root}/build/test/classes" />
-			</classpath>
-			<formatter type="${test.junit.output.format}" />
-			<batchtest todir="${test.log.dir}" unless="testcase">
-				<fileset dir="${test.src.dir}" includes="**/*${test.category}Test.java" />
-			</batchtest>
-			<batchtest todir="${test.log.dir}" if="testcase">
-				<fileset dir="${test.src.dir}" includes="**/${testcase}.java" />
-			</batchtest>
-		</junit>
-		<fail if="tests.failed">Tests failed!</fail>
-	</target>
-
-	<target name="package" depends="jar, zookeeperbuildcontrib.package" unless="skip.contrib">
-
-		<copy file="${basedir}/build.xml" todir="${dist.dir}/contrib/${name}" />
-
-		<mkdir dir="${dist.dir}/contrib/${name}/src" />
-		<copy todir="${dist.dir}/contrib/${name}/src">
-			<fileset dir="${basedir}/src" />
-		</copy>
-		<mkdir dir="${dist.dir}/contrib/${name}/licences" />
-		<copy todir="${dist.dir}/contrib/${name}/licences">
-			<fileset dir="${basedir}/licences" />
-		</copy>
-		<mkdir dir="${dist.dir}/contrib/${name}/config" />
-		<copy todir="${dist.dir}/contrib/${name}/config">
-			<fileset dir="${basedir}/config" />
-		</copy>
-	</target>
-</project>

http://git-wip-us.apache.org/repos/asf/zookeeper/blob/b0df8fe1/src/contrib/zooinspector/config/defaultConnectionSettings.cfg
----------------------------------------------------------------------
diff --git a/src/contrib/zooinspector/config/defaultConnectionSettings.cfg b/src/contrib/zooinspector/config/defaultConnectionSettings.cfg
deleted file mode 100644
index 90f20ae..0000000
--- a/src/contrib/zooinspector/config/defaultConnectionSettings.cfg
+++ /dev/null
@@ -1,21 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You 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.
-#
-#Default connection for ZooInspector
-hosts=localhost\:2181
-encryptionManager=org.apache.zookeeper.inspector.encryption.BasicDataEncryptionManager
-timeout=5000
-authScheme=
-authData=
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/zookeeper/blob/b0df8fe1/src/contrib/zooinspector/config/defaultNodeViewers.cfg
----------------------------------------------------------------------
diff --git a/src/contrib/zooinspector/config/defaultNodeViewers.cfg b/src/contrib/zooinspector/config/defaultNodeViewers.cfg
deleted file mode 100644
index 38fe9a8..0000000
--- a/src/contrib/zooinspector/config/defaultNodeViewers.cfg
+++ /dev/null
@@ -1,17 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You 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.
-org.apache.zookeeper.inspector.gui.nodeviewer.NodeViewerData
-org.apache.zookeeper.inspector.gui.nodeviewer.NodeViewerMetaData
-org.apache.zookeeper.inspector.gui.nodeviewer.NodeViewerACL

http://git-wip-us.apache.org/repos/asf/zookeeper/blob/b0df8fe1/src/contrib/zooinspector/ivy.xml
----------------------------------------------------------------------
diff --git a/src/contrib/zooinspector/ivy.xml b/src/contrib/zooinspector/ivy.xml
deleted file mode 100644
index d841d18..0000000
--- a/src/contrib/zooinspector/ivy.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  See the NOTICE file distributed with
-   this work for additional information regarding copyright ownership.
-   The ASF licenses this file to You 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.
--->
-
-<ivy-module version="2.0"
-            xmlns:e="http://ant.apache.org/ivy/extra">
-
-  <info organisation="org.apache.zookeeper"
-        module="${name}" revision="${version}">
-    <license name="Apache 2.0"/>
-    <ivyauthor name="Apache Hadoop" url="http://hadoop.apache.org"/>
-    <description>ZooInspector</description>
-  </info>
-
-  <configurations defaultconfmapping="default">
-    <conf name="default"/>
-    <conf name="test"/>
-    <conf name="releaseaudit" visibility="private" description="Artifacts required for releaseaudit target"/>
-  </configurations>
-
-  <dependencies>
-    <dependency org="com.google.guava" name="guava" rev="18.0" />
-
-    <dependency org="org.slf4j" name="slf4j-api" rev="1.7.5"/>
-    <dependency org="org.slf4j" name="slf4j-log4j12" rev="1.7.5" transitive="false"/>
-            
-    <dependency org="log4j" name="log4j" rev="1.2.17" transitive="false"/>
-    <dependency org="junit" name="junit" rev="4.12" conf="test->default"/>
-    <dependency org="org.apache.rat" name="apache-rat-tasks" 
-                rev="0.6" conf="releaseaudit->default"/>
-    <dependency org="commons-lang" name="commons-lang" 
-                rev="2.4" conf="releaseaudit->default"/>
-    <dependency org="commons-collections" name="commons-collections" 
-                rev="3.2.2" conf="releaseaudit->default"/>
-  </dependencies>
-
-</ivy-module>

http://git-wip-us.apache.org/repos/asf/zookeeper/blob/b0df8fe1/src/contrib/zooinspector/lib/log4j.properties
----------------------------------------------------------------------
diff --git a/src/contrib/zooinspector/lib/log4j.properties b/src/contrib/zooinspector/lib/log4j.properties
deleted file mode 100644
index db05af4..0000000
--- a/src/contrib/zooinspector/lib/log4j.properties
+++ /dev/null
@@ -1,9 +0,0 @@
-# ***** Set root logger level to INFO and it appender to stdout.
-log4j.rootLogger=INFO,stdout
-
-# ***** stdout is set to be a ConsoleAppender.
-log4j.appender.stdout=org.apache.log4j.ConsoleAppender
-# ***** stdout uses PatternLayout.
-log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
-# ***** Pattern to output the caller's file name and line number.
-log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/zookeeper/blob/b0df8fe1/src/contrib/zooinspector/licences/Apache Software Licence v2.0.txt
----------------------------------------------------------------------
diff --git a/src/contrib/zooinspector/licences/Apache Software Licence v2.0.txt b/src/contrib/zooinspector/licences/Apache Software Licence v2.0.txt
deleted file mode 100644
index d645695..0000000
--- a/src/contrib/zooinspector/licences/Apache Software Licence v2.0.txt	
+++ /dev/null
@@ -1,202 +0,0 @@
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   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.


Mime
View raw message