All Downloads are FREE. Search and download functionalities are using the official Maven repository.

devutility.external.redis.ext.com.BuilderFactory Maven / Gradle / Ivy

The newest version!
package devutility.external.redis.ext.com;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import devutility.external.redis.exception.JedisFatalException;
import devutility.external.redis.ext.model.ConsumerInfo;
import devutility.external.redis.ext.model.GroupInfo;
import devutility.external.redis.utils.JedisStreamUtils;
import devutility.internal.data.converter.ConverterUtils;
import redis.clients.jedis.Builder;
import redis.clients.jedis.StreamEntry;
import redis.clients.jedis.StreamEntryID;
import redis.clients.jedis.util.SafeEncoder;

/**
 * 
 * BuilderFactory
 * 
 * @author: Aldwin Su
 * @version: 2019-10-31 22:08:25
 */
public final class BuilderFactory {
	public static final Builder> STREAM_GROUPINFO_LIST = new Builder>() {
		@Override
		public List build(Object data) {
			List list = new LinkedList();

			if (null == data || !(data instanceof ArrayList)) {
				return list;
			}

			@SuppressWarnings("unchecked")
			List> objectList = (List>) data;

			for (ArrayList object : objectList) {
				if (object.size() != 8) {
					throw new JedisFatalException("Illegal response format!");
				}

				GroupInfo model = new GroupInfo();
				model.setName(JedisStreamUtils.convertToString(object.get(1)));
				model.setConsumers(ConverterUtils.objectTolong(object.get(3)));
				model.setPending(ConverterUtils.objectTolong(object.get(5)));
				model.setLastDeliveredId(new StreamEntryID(JedisStreamUtils.convertToString(object.get(7))));
				list.add(model);
			}

			return list;
		}
	};

	public static final Builder> STREAM_CONSUMERINFO_LIST = new Builder>() {
		@Override
		public List build(Object data) {
			List list = new LinkedList();

			if (null == data || !(data instanceof ArrayList)) {
				return list;
			}

			@SuppressWarnings("unchecked")
			List> objectList = (List>) data;

			for (ArrayList object : objectList) {
				if (object.size() != 6) {
					throw new JedisFatalException("Illegal response format!");
				}

				ConsumerInfo model = new ConsumerInfo();
				model.setName(JedisStreamUtils.convertToString(object.get(1)));
				model.setPending(ConverterUtils.objectTolong(object.get(3)));
				model.setIdle(ConverterUtils.objectToint(object.get(5)));
				list.add(model);
			}

			return list;
		}
	};

	public static final Builder> STREAM_ENTRY_LIST = new Builder>() {
		@Override
		@SuppressWarnings("unchecked")
		public List build(Object data) {
			if (null == data) {
				return null;
			}

			List> objectList = (List>) data;
			List responses = new ArrayList<>(objectList.size() / 2);

			if (objectList.isEmpty()) {
				return responses;
			}

			for (ArrayList res : objectList) {
				String entryIdString = SafeEncoder.encode((byte[]) res.get(0));
				StreamEntryID entryID = new StreamEntryID(entryIdString);
				List hash = (List) res.get(1);

				Iterator hashIterator = hash.iterator();
				Map map = new HashMap<>(hash.size() / 2);

				while (hashIterator.hasNext()) {
					map.put(SafeEncoder.encode((byte[]) hashIterator.next()), SafeEncoder.encode((byte[]) hashIterator.next()));
				}

				responses.add(new StreamEntry(entryID, map));
			}

			return responses;
		}

		@Override
		public String toString() {
			return "List";
		}
	};
}