in client/migrationx/migrationx-transformer/src/main/java/com/aliyun/dataworks/migrationx/transformer/dataworks/converter/caiyunjian/CaiyunjianConverter.java [118:197]
private void processFtpRootPath(Node node, Map<String, DgDatasource> datasourceMap) {
String code = node.getCode();
if (StringUtils.isBlank(code)) {
return;
}
JsonObject diJson = GsonUtils.gson.fromJson(code, JsonObject.class);
if (diJson == null) {
return;
}
if (!diJson.has("steps")) {
return;
}
JsonArray steps = diJson.get("steps").getAsJsonArray();
if (steps.size() == 0) {
return;
}
for (int i = 0; i < steps.size(); i++) {
JsonObject step = steps.get(i).getAsJsonObject();
if (!step.has("parameter")) {
continue;
}
JsonObject parameter = step.get("parameter").getAsJsonObject();
String datasource = null;
if (parameter.has("datasourceId")) {
Long datasourceId = parameter.get("datasourceId").getAsLong();
datasource = datasourceMap.values().stream()
.filter(ds -> datasourceId != null && datasourceId.equals(ds.getId()))
.findAny().map(DgDatasource::getName).orElse(null);
}
if (StringUtils.isBlank(datasource) && parameter.has("datasourceName")) {
datasource = parameter.get("datasourceName").getAsString();
}
if (StringUtils.isBlank(datasource) && parameter.has("datasource")) {
datasource = parameter.get("datasource").getAsString();
}
if (StringUtils.isBlank(datasource)) {
LOGGER.warn("datasource not found, node: {}", node.getName());
continue;
}
parameter.addProperty("datasource", datasource);
parameter.addProperty("datasourceName", datasource);
if (!step.has("stepType") || Arrays.asList("sftp", "ftp").stream()
.noneMatch(t -> t.equalsIgnoreCase(step.get("stepType").getAsString()))) {
continue;
}
DgDatasource dgDatasource = datasourceMap.get(datasource);
if (dgDatasource != null && StringUtils.isNotBlank(dgDatasource.getRootPath()) && parameter.has("path")) {
JsonElement pathEle = parameter.get("path");
JsonArray path = new JsonArray();
if (pathEle.isJsonArray()) {
path = parameter.get("path").getAsJsonArray();
} else {
path.add(pathEle.getAsString());
}
if (path != null && path.size() > 0) {
JsonArray pathList = new JsonArray();
for (int j = 0; j < path.size(); j++) {
String p = path.get(j).getAsString();
p = Joiner.on(File.separator).join(dgDatasource.getRootPath(), p);
pathList.add(p);
}
parameter.add("path", pathList);
}
}
}
node.setCode(GsonUtils.defaultGson.toJson(diJson));
}