feat(nifi): 添加模板和代码片段相关功能

- 新增获取所有 XML 模板的接口- 新增根据模板 ID 获取 XML 模板内容的接口
- 新增生成模板的功能
- 新增复制流程组为代码片段的功能
- 优化 NiFi 客户端,支持 GET 请求返回文件流
This commit is contained in:
liuy 2025-05-17 11:27:27 +08:00
parent 6afd2264e3
commit 7a5e8bf6f2
13 changed files with 188 additions and 0 deletions

View File

@ -7,6 +7,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.Map;
import java.util.concurrent.atomic.AtomicReference;
@ -56,6 +57,16 @@ public class NifiClient {
});
}
/**
* 执行GET请求并返回文件流供调用者处理如保存到文件或浏览器下载
*/
public InputStream getAsStream(String path) throws IOException {
return executeRequestWithRetry(() -> {
Request request = new Request.Builder().url(config.getApiUrl() + path).get().header("Authorization", "Bearer " + accessToken.get()).build();
return executeStreamRequest(request);
});
}
public <T> T post(String path, Object requestBody, Class<T> responseType) throws IOException {
String jsonBody = objectMapper.writeValueAsString(requestBody);
RequestBody body = RequestBody.create(jsonBody, MediaType.get("application/json; charset=utf-8"));
@ -188,6 +199,16 @@ public class NifiClient {
// };
// }
private InputStream executeStreamRequest(Request request) throws IOException {
Response response = httpClient.newCall(request).execute();
if (!response.isSuccessful()) {
String responseBody = response.body().string();
response.close();
throw new IOException("意外的响应码: " + responseBody);
}
return response.body().byteStream();
}
// 功能接口用于重试逻辑
@FunctionalInterface
private interface IOExceptionRunnable<T> {

View File

@ -0,0 +1,19 @@
package com.hzya.frame.nifi.model.joincreatetemp;
import lombok.Data;
/**
* @Authorliuyang
* @Packagecom.hzya.frame.nifi.model.joincreatetemp
* @Projectfw-nifi
* @nameCreateTemplateJoin
* @Date2025/5/17 10:52
* @FilenameCreateTemplateJoin
*/
@Data
public class CreateTemplateJoin {
private String name;
private String description;
private String snippetId;
private String disconnectedNodeAcknowledged;
}

View File

@ -0,0 +1,19 @@
package com.hzya.frame.nifi.model.joinsnippets;
import lombok.Data;
import java.util.Map;
/**
* @Authorliuyang
* @Packagecom.hzya.frame.nifi.model.joinsnippets
* @Projectfw-nifi
* @nameSnippet
* @Date2025/5/17 11:01
* @FilenameSnippet
*/
@Data
public class Snippet {
private String parentGroupId;
private Map<String, Map<String, String>> processGroups;
}

View File

@ -0,0 +1,16 @@
package com.hzya.frame.nifi.model.joinsnippets;
import lombok.Data;
/**
* @Authorliuyang
* @Packagecom.hzya.frame.nifi.model.joinsnippets
* @Projectfw-nifi
* @nameSnippetsJoin
* @Date2025/5/17 11:00
* @FilenameSnippetsJoin
*/
@Data
public class SnippetsJoin {
private Snippet snippet;
}

View File

@ -0,0 +1,11 @@
package com.hzya.frame.nifi.model.nifitemplates;
import lombok.Data;
import java.util.List;
@Data
public class NifiTemplates {
private List<Templates> templates;
private String generated;
}

View File

@ -0,0 +1,9 @@
package com.hzya.frame.nifi.model.nifitemplates;
import lombok.Data;
@Data
public class Permissions {
private String canRead;
private String canWrite;
}

View File

@ -0,0 +1,16 @@
package com.hzya.frame.nifi.model.nifitemplates;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
@Data
public class Template {
private String uri;
private String id;
private String groupId;
private String name;
private String description;
private String timestamp;
@JsonProperty("encoding-version")
private String encodingVersion;
}

View File

@ -0,0 +1,10 @@
package com.hzya.frame.nifi.model.nifitemplates;
import lombok.Data;
@Data
public class Templates {
private String id;
private Permissions permissions;
private Template template;
}

View File

@ -0,0 +1,19 @@
package com.hzya.frame.nifi.model.resultsnippets;
import lombok.Data;
import java.util.Map;
/**
* Auto-generated: 2025-05-17 11:22:8
*
* @author bejson.com (i@bejson.com)
* @website http://www.bejson.com/java2pojo/
*/
@Data
public class Snippet13 {
private String id;
private String uri;
private String parentGroupId;
private Map<String, Map<String, String>> processGroups;
}

View File

@ -0,0 +1,14 @@
package com.hzya.frame.nifi.model.resultsnippets;
import lombok.Data;
/**
* Auto-generated: 2025-05-17 11:22:8
*
* @author bejson.com (i@bejson.com)
* @website http://www.bejson.com/java2pojo/
*/
@Data
public class SnippetResult13 {
private Snippet13 snippet;
}

View File

@ -4,18 +4,24 @@ import cn.hutool.core.util.StrUtil;
import com.hzya.frame.nifi.client.NifiClient;
import com.hzya.frame.nifi.model.joinbindparametercontexts.BindParameterContextsJoin11;
import com.hzya.frame.nifi.model.joincontrollerenabled.EnOrDiControllerServices12;
import com.hzya.frame.nifi.model.joincreatetemp.CreateTemplateJoin;
import com.hzya.frame.nifi.model.joingetcontroller.ControllerService12;
import com.hzya.frame.nifi.model.joinparametercontexts.ParameterContextsJoin;
import com.hzya.frame.nifi.model.joinprocessgroups.ProcessGroupsJoin;
import com.hzya.frame.nifi.model.joinsnippets.Snippet;
import com.hzya.frame.nifi.model.joinsnippets.SnippetsJoin;
import com.hzya.frame.nifi.model.joinstartorstopprocessgroup.StartOrStopProcessGroupsInfoJoin10;
import com.hzya.frame.nifi.model.nifitemplates.NifiTemplates;
import com.hzya.frame.nifi.model.processgroupid.ProcessGroupsId;
import com.hzya.frame.nifi.model.processgrouproot.ProcessGroupsRoot;
import com.hzya.frame.nifi.model.resultparametercontexts.ParameterContextsResult;
import com.hzya.frame.nifi.model.resultprocessgroups.ProcessgroupsResult;
import com.hzya.frame.nifi.model.resultprocessgroupsinfo.ProcessGroupsInfoResult9;
import com.hzya.frame.nifi.model.resultsnippets.SnippetResult13;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.InputStream;
import java.util.Map;
/**
@ -160,4 +166,32 @@ public class NifiApiService {
public ControllerService12 deleteControllerServices(String id, Map<String, String> queryParam) throws Exception {
return client.delete(StrUtil.format("/controller-services/{}", id), queryParam, ControllerService12.class);
}
/**
* 获取所有xml模板
*/
public NifiTemplates getAllXmlTemplates() throws Exception {
return client.get("/flow/templates", NifiTemplates.class);
}
/**
* 根据模板id获取xml模板内容
*/
public InputStream getXmlTemplatesContent(String templatesId) throws Exception {
return client.getAsStream(StrUtil.format("/templates/{}/download", templatesId));
}
/**
* 把指定的流程组生成模板
*/
public void createNifiTemplatete(String id, CreateTemplateJoin createTemplateJoin) throws Exception {
client.post(StrUtil.format("/process-groups/{}/templates", id), createTemplateJoin, null);
}
/**
* 将某个流程组复制为代码片段
*/
public SnippetResult13 createSnippets(SnippetsJoin snippetsJoin) throws Exception {
return client.post("/snippets", snippetsJoin, SnippetResult13.class);
}
}