001package gu.dtalk.redis;
002
003import static com.google.common.base.Preconditions.checkNotNull;
004
005import java.net.URI;
006import java.util.Collections;
007import java.util.Map;
008
009import com.google.common.base.MoreObjects;
010import com.google.common.base.Predicates;
011import com.google.common.collect.ImmutableMap;
012import com.google.common.collect.Maps;
013
014import gu.simplemq.redis.JedisPoolLazy.PropName;
015
016/**
017 * 自定义配置默认实现
018 * @author guyadong
019 *
020 */
021public class DefaultCustomRedisConfigProvider implements RedisConfigProvider {
022
023        private static final Map<PropName, Object> redisParameters = Maps.newHashMap();
024
025        public DefaultCustomRedisConfigProvider() {
026        }
027
028        @Override
029        public String getHost() {
030                return (String) redisParameters.get(PropName.host);
031        }
032
033        @Override
034        public void setHost(String host) {
035                redisParameters.put(PropName.host, host);
036        }
037
038        @Override
039        public int getPort() {
040                return (int) MoreObjects.firstNonNull(redisParameters.get(PropName.port),0);
041        }
042
043        @Override
044        public void setPort(int port) {
045                redisParameters.put(PropName.port, port);
046        }
047
048        @Override
049        public String getPassword() {
050                return (String) redisParameters.get(PropName.password);
051        }
052
053        @Override
054        public void setPassword(String password) {
055                redisParameters.put(PropName.password, password);
056        }
057
058        @Override
059        public int getDatabase() {
060                return  (int) MoreObjects.firstNonNull(redisParameters.get(PropName.database),0);
061        }
062
063        @Override
064        public void setDatabase(int database) {
065                redisParameters.put(PropName.database, database);
066        }
067
068        @Override
069        public int getTimeout() {
070                return (int) MoreObjects.firstNonNull(redisParameters.get(PropName.timeout),0);
071        }
072
073        @Override
074        public void setTimeout(int timeout) {
075                redisParameters.put(PropName.timeout, timeout);
076        }
077
078        @Override
079        public URI getURI() {
080                return (URI) redisParameters.get(PropName.uri);
081        }
082
083        @Override
084        public void setURI(URI uri) {
085                redisParameters.put(PropName.uri, uri);
086        }
087
088        @Override
089        public final RedisConfigType type() {
090                return RedisConfigType.CUSTOM;
091        }
092
093        /**
094         * 初始化redis参数
095         * @param redisParameters redis参数
096         */
097        public static void initredisParameters(Map<PropName, Object> redisParameters){
098                redisParameters = MoreObjects.firstNonNull(redisParameters, Collections.<PropName, Object>emptyMap());
099                DefaultCustomRedisConfigProvider.redisParameters.clear();
100                DefaultCustomRedisConfigProvider.redisParameters.putAll(redisParameters);
101        }
102        /**
103         * 设置redis的访问地址<br>
104         * 调用此方法后才能使用{@link RedisConfigType#CUSTOM}实例的方法
105         * @param redisLocation
106         */
107        public static void setRedisLocation(URI redisLocation) {
108                initredisParameters(ImmutableMap.of(PropName.uri,checkNotNull((Object)redisLocation,"redisLocation is null")));
109        }
110        /**
111         * @return redisparameters
112         */
113        public static Map<PropName, Object> readRedisparameters() {
114                return Maps.filterValues(redisParameters, Predicates.notNull());
115        }
116}