From 51b786646b75482812c64db25c7ca4372b99192d Mon Sep 17 00:00:00 2001 From: zhouhao Date: Fri, 19 Mar 2021 20:09:03 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=BD=91=E7=BB=9C=E7=BB=84?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../community/network/DefaultNetworkType.java | 7 ++- .../community/network/NetworkType.java | 48 ++++++++++++++++++- .../community/network/NetworkTypes.java | 27 +++++++++++ .../manager/entity/NetworkConfigEntity.java | 10 ++-- .../manager/web/NetworkConfigController.java | 4 +- 5 files changed, 88 insertions(+), 8 deletions(-) create mode 100644 jetlinks-components/network-component/network-core/src/main/java/org/jetlinks/community/network/NetworkTypes.java diff --git a/jetlinks-components/network-component/network-core/src/main/java/org/jetlinks/community/network/DefaultNetworkType.java b/jetlinks-components/network-component/network-core/src/main/java/org/jetlinks/community/network/DefaultNetworkType.java index ac159391..d117f3ab 100644 --- a/jetlinks-components/network-component/network-core/src/main/java/org/jetlinks/community/network/DefaultNetworkType.java +++ b/jetlinks-components/network-component/network-core/src/main/java/org/jetlinks/community/network/DefaultNetworkType.java @@ -5,6 +5,7 @@ import lombok.Getter; import org.hswebframework.web.dict.Dict; import org.hswebframework.web.dict.EnumDict; +import java.util.Arrays; import java.util.HashMap; import java.util.Map; @@ -32,7 +33,11 @@ public enum DefaultNetworkType implements NetworkType, EnumDict { ; - private String name; + static { + NetworkTypes.register(Arrays.asList(DefaultNetworkType.values())); + } + + private final String name; @Override public String getId() { diff --git a/jetlinks-components/network-component/network-core/src/main/java/org/jetlinks/community/network/NetworkType.java b/jetlinks-components/network-component/network-core/src/main/java/org/jetlinks/community/network/NetworkType.java index 21792a4f..b95cb327 100644 --- a/jetlinks-components/network-component/network-core/src/main/java/org/jetlinks/community/network/NetworkType.java +++ b/jetlinks-components/network-component/network-core/src/main/java/org/jetlinks/community/network/NetworkType.java @@ -1,8 +1,54 @@ package org.jetlinks.community.network; +import java.util.List; +import java.util.Optional; + +/** + * 网络组件类型,通常使用枚举实现 + * + * @author zhouhao + * @see DefaultNetworkType + * @since 1.0 + */ public interface NetworkType { + /** + * @return 类型唯一标识 + */ String getId(); - String getName(); + /** + * @return 类型名称 + */ + default String getName() { + return getId(); + } + /** + * 使用指定的ID创建一个NetworkType + * + * @param id ID + * @return NetworkType + */ + static NetworkType of(String id) { + return () -> id; + } + + /** + * 获取所有支持的网络组件类型 + * + * @return 所有支持的网络组件类型 + */ + static List getAll() { + return NetworkTypes.get(); + } + + /** + * 根据网络组件类型ID获取类型对象 + * + * @param id ID + * @return Optional + */ + static Optional lookup(String id) { + return NetworkTypes.lookup(id); + } } diff --git a/jetlinks-components/network-component/network-core/src/main/java/org/jetlinks/community/network/NetworkTypes.java b/jetlinks-components/network-component/network-core/src/main/java/org/jetlinks/community/network/NetworkTypes.java new file mode 100644 index 00000000..2b462123 --- /dev/null +++ b/jetlinks-components/network-component/network-core/src/main/java/org/jetlinks/community/network/NetworkTypes.java @@ -0,0 +1,27 @@ +package org.jetlinks.community.network; + + +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; + +public class NetworkTypes { + + private static final Map all = new ConcurrentHashMap<>(); + + public static void register(Collection transport) { + transport.forEach(NetworkTypes::register); + } + + public static void register(NetworkType transport) { + all.put(transport.getId().toUpperCase(), transport); + } + + public static List get() { + return new ArrayList<>(all.values()); + } + + public static Optional lookup(String id) { + return Optional.ofNullable(all.get(id.toUpperCase())); + } + +} diff --git a/jetlinks-manager/network-manager/src/main/java/org/jetlinks/community/network/manager/entity/NetworkConfigEntity.java b/jetlinks-manager/network-manager/src/main/java/org/jetlinks/community/network/manager/entity/NetworkConfigEntity.java index 4206a88b..baaa133a 100644 --- a/jetlinks-manager/network-manager/src/main/java/org/jetlinks/community/network/manager/entity/NetworkConfigEntity.java +++ b/jetlinks-manager/network-manager/src/main/java/org/jetlinks/community/network/manager/entity/NetworkConfigEntity.java @@ -10,6 +10,7 @@ import org.hswebframework.ezorm.rdb.mapping.annotation.JsonCodec; import org.hswebframework.web.api.crud.entity.GenericEntity; import org.jetlinks.community.network.DefaultNetworkType; import org.jetlinks.community.network.NetworkProperties; +import org.jetlinks.community.network.NetworkType; import org.jetlinks.community.network.manager.enums.NetworkConfigState; import javax.persistence.Column; @@ -33,11 +34,8 @@ public class NetworkConfigEntity extends GenericEntity { private String description; @Column(nullable = false) - @EnumCodec - @ColumnType(javaType = String.class) @NotNull(message = "类型不能为空") - @Schema(description = "类型") - private DefaultNetworkType type; + private String type; @Column(nullable = false) @EnumCodec @@ -52,6 +50,10 @@ public class NetworkConfigEntity extends GenericEntity { @Schema(description = "配置(根据类型不同而不同)") private Map configuration; + public NetworkType lookupNetworkType() { + return NetworkType.lookup(type).orElseGet(() -> NetworkType.of(type)); + } + public NetworkProperties toNetworkProperties() { NetworkProperties properties = new NetworkProperties(); properties.setConfigurations(configuration); diff --git a/jetlinks-manager/network-manager/src/main/java/org/jetlinks/community/network/manager/web/NetworkConfigController.java b/jetlinks-manager/network-manager/src/main/java/org/jetlinks/community/network/manager/web/NetworkConfigController.java index c47c82ef..671816fa 100644 --- a/jetlinks-manager/network-manager/src/main/java/org/jetlinks/community/network/manager/web/NetworkConfigController.java +++ b/jetlinks-manager/network-manager/src/main/java/org/jetlinks/community/network/manager/web/NetworkConfigController.java @@ -116,7 +116,7 @@ public class NetworkConfigController implements ReactiveServiceCrudController networkManager.reload(conf.getType(), id)); + .flatMap(conf -> networkManager.reload(conf.lookupNetworkType(), id)); } @PostMapping("/{id}/_shutdown") @@ -131,7 +131,7 @@ public class NetworkConfigController implements ReactiveServiceCrudController networkManager.shutdown(conf.getType(), id)); + .flatMap(conf -> networkManager.shutdown(conf.lookupNetworkType(), id)); } }