| /** |
| * 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. |
| */ |
| package org.apache.camel.component.zookeeper; |
| |
| import java.util.List; |
| |
| import org.apache.camel.Exchange; |
| import org.apache.camel.Message; |
| import org.apache.camel.component.zookeeper.operations.WatchedEventProvider; |
| import org.apache.camel.component.zookeeper.operations.ZooKeeperOperation; |
| import org.apache.camel.util.ExchangeHelper; |
| import org.apache.zookeeper.CreateMode; |
| import org.apache.zookeeper.WatchedEvent; |
| import org.apache.zookeeper.ZooDefs.Ids; |
| import org.apache.zookeeper.data.ACL; |
| |
| /** |
| * <code>ZooKeeperUtils</code> contains static utility functions mostly for |
| * retrieving optional message properties from Message headers. |
| */ |
| public final class ZooKeeperUtils { |
| |
| private ZooKeeperUtils() { } |
| |
| /** |
| * Pulls a createMode flag from the header keyed by |
| * {@link ZooKeeperMessage#ZOOKEEPER_CREATE_MODE} in the given message and |
| * attempts to parse a {@link CreateMode} from it. |
| * |
| * @param message the message that may contain a ZOOKEEPER_CREATE_MODE |
| * header. |
| * @return the parsed {@link CreateMode} or null if the header was null or |
| * not a valid mode flag. |
| */ |
| public static CreateMode getCreateMode(Message message, CreateMode defaultMode) { |
| CreateMode mode = null; |
| |
| try { |
| mode = message.getHeader(ZooKeeperMessage.ZOOKEEPER_CREATE_MODE, CreateMode.class); |
| } catch (Exception e) { |
| } |
| |
| if (mode == null) { |
| String modeHeader = message.getHeader(ZooKeeperMessage.ZOOKEEPER_CREATE_MODE, String.class); |
| mode = getCreateModeFromString(modeHeader, defaultMode); |
| } |
| return mode == null ? defaultMode : mode; |
| } |
| |
| public static CreateMode getCreateModeFromString(String modeHeader, CreateMode defaultMode) { |
| |
| CreateMode mode = null; |
| if (modeHeader != null) { |
| try { |
| mode = CreateMode.valueOf(modeHeader); |
| } catch (Exception e) { |
| } |
| } |
| return mode == null ? defaultMode : mode; |
| } |
| |
| /** |
| * Pulls the target node from the header keyed by |
| * {@link ZooKeeperMessage#ZOOKEEPER_NODE}. This node is then typically used |
| * in place of the configured node extracted from the endpoint uri. |
| * |
| * @param message the message that may contain a ZOOKEEPER_NODE header. |
| * @return the node property or null if the header was null |
| */ |
| public static String getNodeFromMessage(Message message, String defaultNode) { |
| return getZookeeperProperty(message, ZooKeeperMessage.ZOOKEEPER_NODE, defaultNode, String.class); |
| } |
| |
| public static Integer getVersionFromMessage(Message message) { |
| return getZookeeperProperty(message, ZooKeeperMessage.ZOOKEEPER_NODE_VERSION, -1, Integer.class); |
| } |
| |
| public static byte[] getPayloadFromExchange(Exchange exchange) { |
| return ExchangeHelper.convertToType(exchange, byte[].class, exchange.getIn().getBody()); |
| } |
| |
| @SuppressWarnings("unchecked") |
| public static List<ACL> getAclListFromMessage(Message in) { |
| return getZookeeperProperty(in, ZooKeeperMessage.ZOOKEEPER_ACL, Ids.OPEN_ACL_UNSAFE, List.class); |
| } |
| |
| public static <T> T getZookeeperProperty(Message m, String propertyName, T defaultValue, Class<? extends T> type) { |
| T value = m.getHeader(propertyName, type); |
| if (value == null) { |
| value = defaultValue; |
| } |
| return value; |
| } |
| |
| public static WatchedEvent getWatchedEvent(ZooKeeperOperation<?> zooKeeperOperation) { |
| WatchedEvent watchedEvent = null; |
| if (zooKeeperOperation instanceof WatchedEventProvider) { |
| watchedEvent = ((WatchedEventProvider)zooKeeperOperation).getWatchedEvent(); |
| } |
| return watchedEvent; |
| } |
| |
| public static boolean hasWatchedEvent(ZooKeeperOperation<?> zooKeeperOperation) { |
| return getWatchedEvent(zooKeeperOperation) != null; |
| } |
| } |