public static List processSqoopDatasource()

in client/migrationx/migrationx-transformer/src/main/java/com/aliyun/dataworks/migrationx/transformer/core/utils/DiCodeUtils.java [41:125]


    public static List<DwDatasource> processSqoopDatasource(DICode code) {
        String diCode = code.getCode();
        if (StringUtils.isBlank(diCode)) {
            return ListUtils.emptyIfNull(null);
        }

        List<DwDatasource> datasourceList = new ArrayList<>();
        JsonObject diJsonObject = GsonUtils.gson.fromJson(diCode, JsonObject.class);
        if (diJsonObject.has("steps")) {
            JsonArray steps = diJsonObject.get("steps").getAsJsonArray();
            if (steps != null && steps.size() > 0) {
                for (int i = 0; i < steps.size(); i++) {
                    JsonObject step = steps.get(i).getAsJsonObject();
                    if (!step.has("stepType")) {
                        continue;
                    }

                    String stepType = step.get("stepType").getAsString();
                    if ("mysql".equalsIgnoreCase(stepType) && step.has("parameter")) {
                        JsonObject parameter = step.get("parameter").getAsJsonObject();
                        JsonArray connections = parameter.has("connection") ?
                            parameter.get("connection").getAsJsonArray() : new JsonArray();
                        String password = parameter.has("password") ? parameter.get("password").getAsString() : "";
                        String username = parameter.has("username") ? parameter.get("username").getAsString() : "";
                        String jdbcUrl = null;
                        for (int j = 0; j < connections.size(); j++) {
                            JsonObject conn = connections.get(j).getAsJsonObject();
                            JsonArray jdbcUrls = conn.has("jdbcUrl") ? conn.get("jdbcUrl").getAsJsonArray()
                                : new JsonArray();
                            if (jdbcUrls.size() > 0) {
                                jdbcUrl = jdbcUrls.get(0).getAsString();
                            }
                        }
                        if (StringUtils.isNotBlank(jdbcUrl) && StringUtils.isNotBlank(username)
                            && StringUtils.isNotBlank(password)) {
                            DwDatasource dwDatasource = new DwDatasource();
                            dwDatasource.setName(JdbcUtils.getDbName(jdbcUrl));
                            JdbcConnection jdbcConnection = new JdbcConnection();
                            jdbcConnection.setJdbcUrl(jdbcUrl);
                            jdbcConnection.setUsername(username);
                            jdbcConnection.setPassword(password);
                            jdbcConnection.setTag("public");
                            dwDatasource.setConnection(GsonUtils.gson.toJson(jdbcConnection));
                            dwDatasource.setType("mysql");
                            dwDatasource.setEnvType(EnvType.PRD.name());
                            if (datasourceList.stream().noneMatch(d -> d.getName().equals(dwDatasource.getName()))) {
                                datasourceList.add(dwDatasource);
                            }

                            boolean datasourceSet = false;
                            for (int k = 0; k < connections.size(); k++) {
                                JsonObject conn = connections.get(k).getAsJsonObject();
                                JsonArray jdbcUrls = conn.has("jdbcUrl") ? conn.get("jdbcUrl").getAsJsonArray()
                                    : new JsonArray();
                                for (int n = 0; n < jdbcUrls.size(); n++) {
                                    if (jdbcUrl.equals(jdbcUrls.get(n).getAsString())) {
                                        conn.addProperty("datasource", dwDatasource.getName());
                                        parameter.addProperty("datasource", dwDatasource.getName());
                                        datasourceSet = true;
                                        break;
                                    }
                                }
                                if (datasourceSet) {
                                    conn.remove("jdbcUrl");
                                    connections.set(k, conn);
                                }
                            }
                            if (datasourceSet) {
                                parameter.remove("username");
                                parameter.remove("password");
                                JsonObject extend = diJsonObject.has("extend") ?
                                    diJsonObject.get("extend").getAsJsonObject() : new JsonObject();
                                extend.addProperty("mode", CodeModeType.WIZARD.getValue());
                                diJsonObject.add("extend", extend);
                            }
                        }
                        step.add("parameter", parameter);
                    }
                }
            }
            diJsonObject.add("steps", steps);
        }
        code.setCode(GsonUtils.gson.toJson(diJsonObject));
        return datasourceList;
    }