Skip to content

Commit c4506e4

Browse files
authored
Separate builder factory for each module (#3277)
1 parent 8d5f45c commit c4506e4

File tree

6 files changed

+385
-351
lines changed

6 files changed

+385
-351
lines changed

src/main/java/redis/clients/jedis/BuilderFactory.java

-250
Original file line numberDiff line numberDiff line change
@@ -1537,53 +1537,6 @@ public List<LibraryInfo> build(Object data) {
15371537
}
15381538
};
15391539

1540-
public static final Builder<Class<?>> JSON_TYPE = new Builder<Class<?>>() {
1541-
@Override
1542-
public Class<?> build(Object data) {
1543-
if (data == null) return null;
1544-
String str = STRING.build(data);
1545-
switch (str) {
1546-
case "null":
1547-
return null;
1548-
case "boolean":
1549-
return boolean.class;
1550-
case "integer":
1551-
return int.class;
1552-
case "number":
1553-
return float.class;
1554-
case "string":
1555-
return String.class;
1556-
case "object":
1557-
return Object.class;
1558-
case "array":
1559-
return List.class;
1560-
default:
1561-
throw new JedisException("Unknown type: " + str);
1562-
}
1563-
}
1564-
1565-
@Override
1566-
public String toString() {
1567-
return "Class<?>";
1568-
}
1569-
};
1570-
1571-
public static final Builder<List<Class<?>>> JSON_TYPE_LIST = new Builder<List<Class<?>>>() {
1572-
@Override
1573-
public List<Class<?>> build(Object data) {
1574-
List<Object> list = (List<Object>) data;
1575-
List<Class<?>> classes = new ArrayList<>(list.size());
1576-
for (Object elem : list) {
1577-
try {
1578-
classes.add(JSON_TYPE.build(elem));
1579-
} catch (JedisException je) {
1580-
classes.add(null);
1581-
}
1582-
}
1583-
return classes;
1584-
}
1585-
};
1586-
15871540
public static final Builder<List<List<String>>> STRING_LIST_LIST = new Builder<List<List<String>>>() {
15881541
@Override
15891542
@SuppressWarnings("unchecked")
@@ -1612,209 +1565,6 @@ public String toString() {
16121565
}
16131566
};
16141567

1615-
public static final Builder<AggregationResult> SEARCH_AGGREGATION_RESULT = new Builder<AggregationResult>() {
1616-
@Override
1617-
public AggregationResult build(Object data) {
1618-
return new AggregationResult(data);
1619-
}
1620-
};
1621-
1622-
public static final Builder<AggregationResult> SEARCH_AGGREGATION_RESULT_WITH_CURSOR = new Builder<AggregationResult>() {
1623-
@Override
1624-
public AggregationResult build(Object data) {
1625-
List<Object> list = (List<Object>) data;
1626-
return new AggregationResult(list.get(0), (long) list.get(1));
1627-
}
1628-
};
1629-
1630-
public static final Builder<Map<String, Object>> SEARCH_PROFILE_PROFILE = new Builder<Map<String, Object>>() {
1631-
1632-
private final String ITERATORS_PROFILE_STR = "Iterators profile";
1633-
private final String CHILD_ITERATORS_STR = "Child iterators";
1634-
private final String RESULT_PROCESSORS_PROFILE_STR = "Result processors profile";
1635-
1636-
@Override
1637-
public Map<String, Object> build(Object data) {
1638-
List<Object> list = (List<Object>) SafeEncoder.encodeObject(data);
1639-
Map<String, Object> profileMap = new HashMap<>(list.size(), 1f);
1640-
1641-
for (Object listObject : list) {
1642-
List<Object> attributeList = (List<Object>) listObject;
1643-
String attributeName = (String) attributeList.get(0);
1644-
Object attributeValue;
1645-
1646-
if (attributeList.size() == 2) {
1647-
1648-
Object value = attributeList.get(1);
1649-
if (attributeName.equals(ITERATORS_PROFILE_STR)) {
1650-
attributeValue = parseIterators(value);
1651-
} else if (attributeName.endsWith(" time")) {
1652-
attributeValue = DoublePrecision.parseFloatingPointNumber((String) value);
1653-
} else {
1654-
attributeValue = value;
1655-
}
1656-
1657-
} else if (attributeList.size() > 2) {
1658-
1659-
if (attributeName.equals(RESULT_PROCESSORS_PROFILE_STR)) {
1660-
List<Map<String, Object>> resultProcessorsProfileList = new ArrayList<>(attributeList.size() - 1);
1661-
for (int i = 1; i < attributeList.size(); i++) {
1662-
resultProcessorsProfileList.add(parseResultProcessors(attributeList.get(i)));
1663-
}
1664-
attributeValue = resultProcessorsProfileList;
1665-
} else {
1666-
attributeValue = attributeList.subList(1, attributeList.size());
1667-
}
1668-
1669-
} else {
1670-
attributeValue = null;
1671-
}
1672-
1673-
profileMap.put(attributeName, attributeValue);
1674-
}
1675-
return profileMap;
1676-
}
1677-
1678-
private Map<String, Object> parseResultProcessors(Object data) {
1679-
List<Object> list = (List<Object>) data;
1680-
Map<String, Object> map = new HashMap<>(list.size() / 2, 1f);
1681-
for (int i = 0; i < list.size(); i += 2) {
1682-
String key = (String) list.get(i);
1683-
Object value = list.get(i + 1);
1684-
if (key.equals("Time")) {
1685-
value = DoublePrecision.parseFloatingPointNumber((String) value);
1686-
}
1687-
map.put(key, value);
1688-
}
1689-
return map;
1690-
}
1691-
1692-
private Object parseIterators(Object data) {
1693-
if (!(data instanceof List)) return data;
1694-
List iteratorsAttributeList = (List) data;
1695-
int childIteratorsIndex = iteratorsAttributeList.indexOf(CHILD_ITERATORS_STR);
1696-
// https://github.com/RediSearch/RediSearch/issues/3205 patch. TODO: Undo if resolved in RediSearch.
1697-
if (childIteratorsIndex < 0) childIteratorsIndex = iteratorsAttributeList.indexOf("Child iterator");
1698-
1699-
Map<String, Object> iteratorsProfile;
1700-
if (childIteratorsIndex < 0) {
1701-
childIteratorsIndex = iteratorsAttributeList.size();
1702-
iteratorsProfile = new HashMap<>(childIteratorsIndex / 2, 1f);
1703-
} else {
1704-
iteratorsProfile = new HashMap<>(1 + childIteratorsIndex / 2, 1f);
1705-
}
1706-
1707-
for (int i = 0; i < childIteratorsIndex; i += 2) {
1708-
String key = (String) iteratorsAttributeList.get(i);
1709-
Object value = iteratorsAttributeList.get(i + 1);
1710-
if (key.equals("Time")) {
1711-
value = DoublePrecision.parseFloatingPointNumber((String) value);
1712-
}
1713-
iteratorsProfile.put(key, value);
1714-
}
1715-
1716-
if (childIteratorsIndex + 1 < iteratorsAttributeList.size()) {
1717-
List childIteratorsList = new ArrayList(iteratorsAttributeList.size() - childIteratorsIndex - 1);
1718-
for (int i = childIteratorsIndex + 1; i < iteratorsAttributeList.size(); i++) {
1719-
childIteratorsList.add(parseIterators(iteratorsAttributeList.get(i)));
1720-
}
1721-
iteratorsProfile.put(CHILD_ITERATORS_STR, childIteratorsList);
1722-
}
1723-
return iteratorsProfile;
1724-
}
1725-
};
1726-
1727-
public static final Builder<Map<String, List<String>>> SEARCH_SYNONYM_GROUPS = new Builder<Map<String, List<String>>>() {
1728-
@Override
1729-
public Map<String, List<String>> build(Object data) {
1730-
List<Object> list = (List<Object>) data;
1731-
Map<String, List<String>> dump = new HashMap<>(list.size() / 2, 1f);
1732-
for (int i = 0; i < list.size(); i += 2) {
1733-
dump.put(STRING.build(list.get(i)), STRING_LIST.build(list.get(i + 1)));
1734-
}
1735-
return dump;
1736-
}
1737-
};
1738-
1739-
public static final Builder<Map<String, Map<String, Double>>> SEARCH_SPELLCHECK_RESPONSE
1740-
= new Builder<Map<String, Map<String, Double>>>() {
1741-
1742-
private final String TERM = "TERM";
1743-
1744-
@Override
1745-
public Map<String, Map<String, Double>> build(Object data) {
1746-
List<Object> rawTerms = (List<Object>) data;
1747-
Map<String, Map<String, Double>> returnTerms = new LinkedHashMap<>(rawTerms.size());
1748-
1749-
for (Object rawTerm : rawTerms) {
1750-
List<Object> rawElements = (List<Object>) rawTerm;
1751-
1752-
String header = STRING.build(rawElements.get(0));
1753-
if (!TERM.equals(header)) {
1754-
throw new IllegalStateException("Unrecognized header: " + header);
1755-
}
1756-
String term = STRING.build(rawElements.get(1));
1757-
1758-
List<List<Object>> list = (List<List<Object>>) rawElements.get(2);
1759-
Map<String, Double> entries = new LinkedHashMap<>(list.size());
1760-
list.forEach(entry -> entries.put(STRING.build(entry.get(1)), DOUBLE.build(entry.get(0))));
1761-
1762-
returnTerms.put(term, entries);
1763-
}
1764-
return returnTerms;
1765-
}
1766-
};
1767-
1768-
public static final Builder<TSElement> TIMESERIES_ELEMENT = new Builder<TSElement>() {
1769-
@Override
1770-
public TSElement build(Object data) {
1771-
List<Object> list = (List<Object>) data;
1772-
if (list == null || list.isEmpty()) return null;
1773-
return new TSElement(LONG.build(list.get(0)), DOUBLE.build(list.get(1)));
1774-
}
1775-
};
1776-
1777-
public static final Builder<List<TSElement>> TIMESERIES_ELEMENT_LIST = new Builder<List<TSElement>>() {
1778-
@Override
1779-
public List<TSElement> build(Object data) {
1780-
return ((List<Object>) data).stream().map((pairObject) -> (List<Object>) pairObject)
1781-
.map((pairList) -> new TSElement(LONG.build(pairList.get(0)),
1782-
DOUBLE.build(pairList.get(1))))
1783-
.collect(Collectors.toList());
1784-
}
1785-
};
1786-
1787-
public static final Builder<List<TSKeyedElements>> TIMESERIES_MRANGE_RESPONSE = new Builder<List<TSKeyedElements>>() {
1788-
@Override
1789-
public List<TSKeyedElements> build(Object data) {
1790-
return ((List<Object>) data).stream().map((tsObject) -> (List<Object>) tsObject)
1791-
.map((tsList) -> new TSKeyedElements(STRING.build(tsList.get(0)),
1792-
STRING_MAP_FROM_PAIRS.build(tsList.get(1)),
1793-
TIMESERIES_ELEMENT_LIST.build(tsList.get(2))))
1794-
.collect(Collectors.toList());
1795-
}
1796-
};
1797-
1798-
public static final Builder<List<TSKeyValue<TSElement>>> TIMESERIES_MGET_RESPONSE
1799-
= new Builder<List<TSKeyValue<TSElement>>>() {
1800-
@Override
1801-
public List<TSKeyValue<TSElement>> build(Object data) {
1802-
return ((List<Object>) data).stream().map((tsObject) -> (List<Object>) tsObject)
1803-
.map((tsList) -> new TSKeyValue<>(STRING.build(tsList.get(0)),
1804-
STRING_MAP_FROM_PAIRS.build(tsList.get(1)),
1805-
TIMESERIES_ELEMENT.build(tsList.get(2))))
1806-
.collect(Collectors.toList());
1807-
}
1808-
};
1809-
1810-
public static final Builder<Map.Entry<Long, byte[]>> BLOOM_SCANDUMP_RESPONSE = new Builder<Map.Entry<Long, byte[]>>() {
1811-
@Override
1812-
public Map.Entry<Long, byte[]> build(Object data) {
1813-
List<Object> list = (List<Object>) data;
1814-
return new KeyValue<>(LONG.build(list.get(0)), BINARY.build(list.get(1)));
1815-
}
1816-
};
1817-
18181568
/**
18191569
* A decorator to implement Set from List. Assume that given List do not contains duplicated
18201570
* values. The resulting set displays the same ordering, concurrency, and performance

0 commit comments

Comments
 (0)