com.dangdang.ddframe.rdb.sharding.hint.HintManagerHolder.java Source code

Java tutorial

Introduction

Here is the source code for com.dangdang.ddframe.rdb.sharding.hint.HintManagerHolder.java

Source

/*
 * Copyright 1999-2015 dangdang.com.
 * <p>
 * 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.
 * </p>
 */

package com.dangdang.ddframe.rdb.sharding.hint;

import com.dangdang.ddframe.rdb.sharding.api.HintManager;
import com.dangdang.ddframe.rdb.sharding.api.ShardingValue;
import com.google.common.base.Optional;
import com.google.common.base.Preconditions;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;

/**
 * ??.
 *
 * @author zhangliang
 */
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public final class HintManagerHolder {

    private static final ThreadLocal<HintManager> HINT_MANAGER_HOLDER = new ThreadLocal<>();

    /**
     * ?.
     *
     * @param hintManager ?
     */
    public static void setHintManager(final HintManager hintManager) {
        Preconditions.checkState(null == HINT_MANAGER_HOLDER.get(),
                "HintManagerHolder has previous value, please clear first.");
        HINT_MANAGER_HOLDER.set(hintManager);
    }

    /**
     * ??.
     * @return ??
     */
    public static boolean isUseShardingHint() {
        return null != HINT_MANAGER_HOLDER.get() && HINT_MANAGER_HOLDER.get().isShardingHint();
    }

    /**
     * ?.
     * 
     * @param shardingKey 
     * @return 
     */
    public static Optional<ShardingValue<?>> getDatabaseShardingValue(final ShardingKey shardingKey) {
        return isUseShardingHint()
                ? Optional.<ShardingValue<?>>fromNullable(
                        HINT_MANAGER_HOLDER.get().getDatabaseShardingValue(shardingKey))
                : Optional.<ShardingValue<?>>absent();
    }

    /**
     * ?.
     *
     * @param shardingKey 
     * @return 
     */
    public static Optional<ShardingValue<?>> getTableShardingValue(final ShardingKey shardingKey) {
        return isUseShardingHint()
                ? Optional.<ShardingValue<?>>fromNullable(
                        HINT_MANAGER_HOLDER.get().getTableShardingValue(shardingKey))
                : Optional.<ShardingValue<?>>absent();
    }

    /**
     * ????.
     * 
     * @return ????
     */
    public static boolean isMasterRouteOnly() {
        return null != HINT_MANAGER_HOLDER.get() && HINT_MANAGER_HOLDER.get().isMasterRouteOnly();
    }

    /**
     * ???.
     */
    public static void clear() {
        HINT_MANAGER_HOLDER.remove();
    }
}