mirror of
https://github.com/tiennm99/zfoo.git
synced 2026-08-05 16:25:54 +00:00
ref[storage]: set convert
This commit is contained in:
+1
-1
@@ -25,7 +25,7 @@ import java.util.Set;
|
||||
/**
|
||||
* @author godotg
|
||||
*/
|
||||
public class JsonToArrayConverter implements ConditionalGenericConverter {
|
||||
public class ArrayConverter implements ConditionalGenericConverter {
|
||||
|
||||
|
||||
@Override
|
||||
@@ -39,8 +39,5 @@ public class JsonToMapConverter implements ConditionalGenericConverter {
|
||||
public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) {
|
||||
String content = (String) source;
|
||||
return JsonUtils.string2Map(content, targetType.getMapKeyTypeDescriptor().getType(), targetType.getMapValueTypeDescriptor().getType());
|
||||
// return JsonUtils.string2Object(content, targetType.getType());
|
||||
// return JsonUtil.string2Map(content, targetType.getMapKeyTypeDescriptor().getType()
|
||||
// , targetType.getMapValueTypeDescriptor().getType());
|
||||
}
|
||||
}
|
||||
|
||||
+8
-6
@@ -29,7 +29,7 @@ import java.util.Set;
|
||||
/**
|
||||
* @author liqi
|
||||
*/
|
||||
public class JsonToListConverter implements ConditionalGenericConverter {
|
||||
public class ListConverter implements ConditionalGenericConverter {
|
||||
|
||||
|
||||
@Override
|
||||
@@ -50,14 +50,16 @@ public class JsonToListConverter implements ConditionalGenericConverter {
|
||||
}
|
||||
Class<?> clazz = null;
|
||||
Type type = targetType.getResolvableType().getGeneric(0).getType();
|
||||
if (type instanceof Class) {
|
||||
clazz = (Class<?>) type;
|
||||
} else if (type instanceof ParameterizedType parameterizedType) {
|
||||
if (type instanceof ParameterizedType parameterizedType) {
|
||||
clazz = (Class<?>) parameterizedType.getRawType();
|
||||
} else {
|
||||
clazz = (Class<?>) type;
|
||||
}
|
||||
if (content.startsWith("[") || content.endsWith("]")) {
|
||||
return Collections.unmodifiableList(JsonUtils.string2List(content, clazz));
|
||||
return clazz.equals(List.class)
|
||||
? Collections.unmodifiableList(JsonUtils.string2List(content, clazz))
|
||||
: JsonUtils.string2List(content, clazz);
|
||||
}
|
||||
return Collections.unmodifiableList(ConvertUtils.convertToList(content, clazz));
|
||||
return ConvertUtils.convertToList(content, clazz);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
/*
|
||||
* Copyright (C) 2020 The zfoo Authors
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
package com.zfoo.storage.strategy;
|
||||
|
||||
import com.zfoo.protocol.util.JsonUtils;
|
||||
import com.zfoo.protocol.util.StringUtils;
|
||||
import com.zfoo.storage.util.ConvertUtils;
|
||||
import org.springframework.core.convert.TypeDescriptor;
|
||||
import org.springframework.core.convert.converter.ConditionalGenericConverter;
|
||||
import org.springframework.lang.NonNull;
|
||||
|
||||
import java.lang.reflect.ParameterizedType;
|
||||
import java.lang.reflect.Type;
|
||||
import java.util.Collections;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* @author liqi
|
||||
*/
|
||||
public class SetConverter implements ConditionalGenericConverter {
|
||||
|
||||
|
||||
@Override
|
||||
public boolean matches(TypeDescriptor sourceType, TypeDescriptor targetType) {
|
||||
return sourceType.getType() == String.class && Set.class.isAssignableFrom(targetType.getType());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<ConvertiblePair> getConvertibleTypes() {
|
||||
return Collections.singleton(new ConvertiblePair(String.class, Set.class));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object convert(Object source, @NonNull TypeDescriptor sourceType, TypeDescriptor targetType) {
|
||||
var content = StringUtils.trim((String) source);
|
||||
if (StringUtils.isEmpty(content)) {
|
||||
return Collections.emptySet();
|
||||
}
|
||||
Class<?> clazz = null;
|
||||
Type type = targetType.getResolvableType().getGeneric(0).getType();
|
||||
if (type instanceof ParameterizedType parameterizedType) {
|
||||
clazz = (Class<?>) parameterizedType.getRawType();
|
||||
} else {
|
||||
clazz = (Class<?>) type;
|
||||
}
|
||||
if (content.startsWith("[") || content.endsWith("]")) {
|
||||
return clazz.equals(Set.class)
|
||||
? Collections.unmodifiableSet(JsonUtils.string2Set(content, clazz))
|
||||
: JsonUtils.string2Set(content, clazz);
|
||||
}
|
||||
return ConvertUtils.convertToSet(content, clazz);
|
||||
}
|
||||
}
|
||||
@@ -19,10 +19,7 @@ import org.springframework.core.convert.TypeDescriptor;
|
||||
|
||||
import java.lang.reflect.Array;
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* @author godotg
|
||||
@@ -35,8 +32,8 @@ public abstract class ConvertUtils {
|
||||
|
||||
static {
|
||||
var converters = new HashSet<>();
|
||||
converters.add(new JsonToArrayConverter());
|
||||
converters.add(new JsonToListConverter());
|
||||
converters.add(new ArrayConverter());
|
||||
converters.add(new ListConverter());
|
||||
converters.add(new JsonToMapConverter());
|
||||
converters.add(new JsonToObjectConverter());
|
||||
converters.add(new StringToClassConverter());
|
||||
@@ -85,6 +82,21 @@ public abstract class ConvertUtils {
|
||||
var value = ConvertUtils.convert(StringUtils.trim(splits[i]), type);
|
||||
list.add(value);
|
||||
}
|
||||
return list;
|
||||
return Collections.unmodifiableList(list);
|
||||
}
|
||||
|
||||
public static <T> Set<T> convertToSet(String content, Class<T> type) {
|
||||
content = StringUtils.trim(content);
|
||||
if (StringUtils.isEmpty(content)) {
|
||||
return Collections.emptySet();
|
||||
}
|
||||
var splits = content.split(StringUtils.COMMA_REGEX);
|
||||
var length = splits.length;
|
||||
var set = new HashSet<T>();
|
||||
for (var i = 0; i < length; i++) {
|
||||
var value = ConvertUtils.convert(StringUtils.trim(splits[i]), type);
|
||||
set.add(value);
|
||||
}
|
||||
return Collections.unmodifiableSet(set);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
|
||||
package com.zfoo.storage.conversion;
|
||||
|
||||
import com.zfoo.storage.strategy.JsonToArrayConverter;
|
||||
import com.zfoo.storage.strategy.ArrayConverter;
|
||||
import com.zfoo.storage.strategy.JsonToMapConverter;
|
||||
import com.zfoo.storage.strategy.StringToClassConverter;
|
||||
import com.zfoo.storage.strategy.StringToDateConverter;
|
||||
@@ -38,7 +38,7 @@ public class ConversionTest {
|
||||
private static final StringToDateConverter std = new StringToDateConverter();
|
||||
private static final StringToClassConverter stcc = new StringToClassConverter();
|
||||
private static final JsonToMapConverter jtmc = new JsonToMapConverter();
|
||||
private static final JsonToArrayConverter jtac = new JsonToArrayConverter();
|
||||
private static final ArrayConverter jtac = new ArrayConverter();
|
||||
|
||||
static {
|
||||
converters.add(std);
|
||||
|
||||
Reference in New Issue
Block a user