-
Notifications
You must be signed in to change notification settings - Fork 35
/
Copy pathconverter.js
109 lines (98 loc) · 3.6 KB
/
converter.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
/**
* Created by sbernstein on 4/8/15.
*/
function parseAndGenerate(){
var text = document.getElementById('input').value;
var parser = new DOMParser();
var pomXml = parser.parseFromString(text, 'text/xml');
var propertyList = [];
var dependencies = getDependencies(pomXml, propertyList);
var properties = getProperties(pomXml, propertyList);
return properties + dependencies;
}
function getProperties(pomXml, propertyList){
var shouldAddOuterClosure = pomXml.getElementsByTagName('properties').length;
if(!shouldAddOuterClosure){
text = '<root>' + text + '</root>';
pomXml = parser.parseFromString(text, 'text/xml');
}
var propertyElements = pomXml.getElementsByTagName("properties");
var output = "";
if(propertyElements != null) {
var propertyNodeList = propertyElements[0]. childNodes;
for(var i = 0; i < propertyNodeList.length; i++) {
var propertyNode = propertyNodeList[i];
if(propertyNode.namespaceURI == "http://maven.apache.org/POM/4.0.0") {
var propertyName = camelCase(propertyNode.tagName);
var propertyValue = propertyNode.textContent;
if(propertyList.indexOf(propertyName) != -1) {
output += "def " + propertyName + " = \"" + propertyValue + "\"\n"
}
}
}
}
return output;
}
function camelCase(input) {
return input.toLowerCase().replace(/[.-](.)/g, function(match, group1) {
return group1.toUpperCase();
});
}
function getDependencies(pomXml, propertyList){
var shouldAddOuterClosure = pomXml.getElementsByTagName('dependencies').length;
if(!shouldAddOuterClosure){
text = '<root>' + text + '</root>';
pomXml = parser.parseFromString(text, 'text/xml');
}
var depElems = pomXml.getElementsByTagName('dependency');
var grDeps = [];
for(var i = 0; i < depElems.length; i++) {
var depElem = depElems[i];
var scopeElems = depElem.getElementsByTagName('scope');
var scope = 'implementation';
if (scopeElems.length && scopeElems[0].innerHTML == 'test') {
scope = 'testImplementation';
}
var group = depElem.getElementsByTagName('groupId')[0].innerHTML;
var artifact = depElem.getElementsByTagName('artifactId')[0].innerHTML;
var versionElems = depElem.getElementsByTagName('version');
var version = '*';
if (versionElems.length) {
version = versionElems[0].innerHTML;
}
if(version.startsWith("$")) {
version = camelCase(version);
if(propertyList.indexOf(version) == -1) {
propertyList.push(version.substring(2, version.length - 1))
}
}
grDeps.push(scope + ' ' + '"' + group + ":" + artifact + ":" + version + '"');
}
var grDepsOutput = grDeps.join('\n');
if(shouldAddOuterClosure){
grDepsOutput = 'dependencies {\n\t' + grDepsOutput.replace(/\n/g, '\n\t') + '\n}'
}
return grDepsOutput;
}
function convert(){
var ok = document.getElementById('success');
var empty = document.getElementById('empty');
var fail = document.getElementById('failed');
ok.hidden = true;
empty.hidden = true;
fail.hidden = true;
var output = document.getElementById('output');
try {
output.value = parseAndGenerate();
if(output.value){
ok.hidden = false;
output.select();
} else {
empty.hidden = false;
}
}
catch (err){
output.value = '';
fail.hidden = false;
}
}