Skip to content

Commit

Permalink
feat: 支持插件调用三方元数据插件条目查寻 (#683)
Browse files Browse the repository at this point in the history
  • Loading branch information
chivehao authored Oct 10, 2024
1 parent 3ec146f commit 0c96c29
Show file tree
Hide file tree
Showing 7 changed files with 120 additions and 1 deletion.
6 changes: 6 additions & 0 deletions CHANGELOG.MD
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,12 @@

更新日志文档,版本顺序从新到旧,最新版本在最前(上)面。

# 0.15.11

## 插件支持

- 添加`MetaOperate`以支持插件调用三方元数据插件条目查寻

# 0.15.10

## 问题修复
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package run.ikaros.api.core.meta;

import org.pf4j.ExtensionPoint;
import reactor.core.publisher.Flux;
import run.ikaros.api.core.subject.SubjectMeta;

public interface DelegateMetaService extends ExtensionPoint {
Flux<SubjectMeta> findAll(String keyword);
}
12 changes: 12 additions & 0 deletions api/src/main/java/run/ikaros/api/core/meta/MetaOperate.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package run.ikaros.api.core.meta;

import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import run.ikaros.api.core.subject.SubjectMeta;
import run.ikaros.api.plugin.AllowPluginOperate;

public interface MetaOperate extends AllowPluginOperate {
Mono<SubjectMeta> findOne(String keyword);

Flux<SubjectMeta> findAll(String keyword);
}
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
@@ -1 +1 @@
version=0.15.10
version=0.15.11
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package run.ikaros.server.core.meta;

import java.util.ArrayList;
import java.util.List;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import run.ikaros.api.core.meta.DelegateMetaService;
import run.ikaros.api.core.subject.SubjectMeta;
import run.ikaros.api.infra.utils.AssertUtils;
import run.ikaros.server.plugin.ExtensionComponentsFinder;

@Slf4j
@Service
public class DefaultMetaService implements MetaService {

private final ExtensionComponentsFinder extensionComponentsFinder;

public DefaultMetaService(ExtensionComponentsFinder extensionComponentsFinder) {
this.extensionComponentsFinder = extensionComponentsFinder;
}

@Override
public Mono<SubjectMeta> findOne(String keyword) {
AssertUtils.notBlank(keyword, "'keyword' has not blank.");
return findAll(keyword)
.collectList()
.filter(list -> !list.isEmpty())
.flatMap(list -> Mono.justOrEmpty(list.get(0)));
}

@Override
public Flux<SubjectMeta> findAll(String keyword) {
AssertUtils.notBlank(keyword, "'keyword' has not blank.");
List<DelegateMetaService> metaService =
extensionComponentsFinder.getExtensions(DelegateMetaService.class);
return Flux.fromStream(metaService.stream())
.flatMap(service -> service.findAll(keyword).collectList())
.collectList()
.map(list -> {
List<SubjectMeta> subjectMetas = new ArrayList<>();
for (List<SubjectMeta> metas : list) {
subjectMetas.addAll(metas);
}
return subjectMetas;
})
.flatMapMany(Flux::fromIterable);
}
}
28 changes: 28 additions & 0 deletions server/src/main/java/run/ikaros/server/core/meta/MetaOperator.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package run.ikaros.server.core.meta;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import run.ikaros.api.core.meta.MetaOperate;
import run.ikaros.api.core.subject.SubjectMeta;

@Slf4j
@Component
public class MetaOperator implements MetaOperate {
private final MetaService metaService;

public MetaOperator(MetaService metaService) {
this.metaService = metaService;
}

@Override
public Mono<SubjectMeta> findOne(String keyword) {
return metaService.findOne(keyword);
}

@Override
public Flux<SubjectMeta> findAll(String keyword) {
return metaService.findAll(keyword);
}
}
14 changes: 14 additions & 0 deletions server/src/main/java/run/ikaros/server/core/meta/MetaService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package run.ikaros.server.core.meta;

import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import run.ikaros.api.core.subject.SubjectMeta;

/**
* Meta service.
*/
public interface MetaService {
Mono<SubjectMeta> findOne(String keyword);

Flux<SubjectMeta> findAll(String keyword);
}

0 comments on commit 0c96c29

Please sign in to comment.