This repository has been archived on 2025-12-25. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
tcommon-studio-se/main/plugins/org.talend.librariesmanager/resources/java/routines/system/GetJarsToRegister.java

141 lines
5.6 KiB
Java

// ============================================================================
//
// Copyright (C) 2006-2021 Talend Inc. - www.talend.com
//
// This source code is available under agreement available at
// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
//
// You should have received a copy of the agreement
// along with this program; if not, write to Talend SA
// 9 rue Pages 92150 Suresnes, France
//
// ============================================================================
package routines.system;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.List;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
public class GetJarsToRegister {
private String oozieClasspathLine;
private boolean isOozieRuntime;
public GetJarsToRegister() {
try {
this.isOozieRuntime = setJarsToRegister();
} catch (java.lang.Exception e) {
e.printStackTrace();
}
}
private boolean setJarsToRegister() throws IOException, org.dom4j.DocumentException {
String jobXmlPath = new java.io.File("../../job.xml").getCanonicalPath();
boolean isOozieExecution = isNeedAddLibsPath(jobXmlPath);
if (!isOozieExecution) {
jobXmlPath = new java.io.File("./job.xml").getCanonicalPath();
isOozieExecution = isNeedAddLibsPath(jobXmlPath);
}
if (isOozieExecution) {
SAXReader reader_oozie = new org.dom4j.io.SAXReader();
org.dom4j.Document document_oozie = reader_oozie.read(jobXmlPath);
List<Node> list_oozie = document_oozie.selectNodes("/configuration/property");
for (Node node : list_oozie) {
Element element_oozie = (org.dom4j.Element) node;
String name_oozie = element_oozie.elementText("name");
if (name_oozie.equals("mapred.cache.localFiles") || name_oozie.equals("mapreduce.job.cache.local.files")) {
this.oozieClasspathLine = element_oozie.elementText("value");
return true;
}
}
}
return false;
}
public String replaceJarPaths(String originalClassPathLine) throws Exception {
return replaceJarPaths(originalClassPathLine, "");
}
public String replaceJarPaths(String originalClassPathLine, String scheme) throws Exception {
return replaceJarPaths(originalClassPathLine, scheme, false);
}
public String replaceJarPaths(String originalClassPathLine, String scheme, boolean encodeSpaces) throws Exception {
String classPathLine = "";
String crcMapPath = new java.io.File("../crcMap").getCanonicalPath();
if (isNeedAddLibsPath(crcMapPath)) {
java.util.Map<String, String> crcMap = null;
try (java.io.ObjectInputStream ois = new ObjectInputStream(new java.io.FileInputStream(crcMapPath))) {
crcMap = (java.util.Map<String, String>) ois.readObject();
}
classPathLine = addLibsPath(originalClassPathLine, crcMap);
} else if (this.isOozieRuntime) {
if (this.oozieClasspathLine != null) {
List<String> oozieJars = java.util.Arrays.asList(this.oozieClasspathLine.split(","));
for (int j = 0; j < oozieJars.size(); j++) {
if (oozieJars.get(j).contains(originalClassPathLine.substring(originalClassPathLine.lastIndexOf("/")))) {
classPathLine = oozieJars.get(j);
break;
}
}
}
} else {
if (originalClassPathLine != null && originalClassPathLine.startsWith(".")) {
classPathLine = originalClassPathLine;
} else {
classPathLine = scheme + originalClassPathLine;
}
}
if(encodeSpaces){
classPathLine = classPathLine.replaceAll("\\s", "%20");
}
return classPathLine;
}
private boolean isNeedAddLibsPath(String crcMapPath) {
if (!(new java.io.File(crcMapPath).exists())) {// when not use cache
return false;
}
return true;
}
private String addLibsPath(String line, java.util.Map<String, String> crcMap) {
for (java.util.Map.Entry<String, String> entry : crcMap.entrySet()) {
line = adaptLibPaths(line, entry);
if (new java.io.File(line).exists()) {
break;
}
}
return line;
}
private String adaptLibPaths(String line, java.util.Map.Entry<String, String> entry) {
line = line.replace("\\", "/");
String jarName = entry.getValue();
String crc = entry.getKey();
String libStringFinder = "../lib/" + jarName;
String libStringFinder2 = "./" + jarName; // for the job jar itself.
String replacement = "../../../cache/lib/" + crc + "/" + jarName;
if (line.contains(libStringFinder)) {
line = line.replace(libStringFinder, replacement);
} else if (line.toLowerCase().contains(libStringFinder2)) {
line = line.toLowerCase().replace(libStringFinder2, replacement);
} else if (line.equalsIgnoreCase(jarName)) {
line = replacement;
} else if (line.contains(":$ROOT_PATH/" + jarName + ":")) {
line = line.replace(":$ROOT_PATH/" + jarName + ":", ":$ROOT_PATH/" + replacement + ":");
} else if (line.contains(";" + jarName + ";")) {
line = line.replace(";" + jarName + ";", ";" + replacement + ";");
}
return line;
}
}