private void processFtpRootPath()

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));
    }