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