While there is some use case specific logic this script takes a tab separated txt file which contains the AEM path, Node Property, and Node Value and updates accordingly.
##This more or less works but was abandoned.
| var httpsync = require('httpsync'); | |
| var Qs = require('qs'); | |
| var Q = require('q') | |
| var csv = require('ya-csv'); | |
| require('events') | |
| var credentials = "admin:admin" | |
| var host_port = "localhost:4502" | |
| var parentNode = '/content/property-master/en'; | |
| var server = "http://"+credentials+"@"+host_port+"/"; | |
| var body = ''; | |
| var httpcode = ''; | |
| var dataArr = []; | |
| var getObj = doGet(server,parentNode+'.infinity.json',dataArr) | |
| httpcode = getObj.statusCode | |
| body = getObj.data.toString() | |
| json = JSON.parse(body) | |
| var filterArr = ['jcr:created','jcr:primaryType','jcr:mixinTypes','jcr:createdBy','cq:lastReplicationAction','jcr:versionHistory','cq:template','cq:lastReplicatedBy','be_co_uuid','jcr:predecessors','jcr:created','cq:lastReplicated','co_optimization','cq:lastModified','jcr:baseVersion','jcr:isCheckedOut','jcr:uuid','sling:resourceType','cq:lastModifiedBy','jcr:lastModifiedBy','jcr:lastModified','alignment','textIsRich','bullet','maxLevel','imageCrop','selection','height','width','imageRotate','cq:keywords','hideInNav','jcr:mimeType']; | |
| //var filterArr = ['']; | |
| //console.log('path\titem\tvalue') | |
| nodeLooper(parentNode,json) | |
| function nodeLooper(node,json) { | |
| var writer = new csv.CsvWriter(process.stdout, { | |
| 'separator': '\t', | |
| 'quote' : '' | |
| }) | |
| var children = []; | |
| var c = [] | |
| for (var attributename in json) { | |
| if(filterArr.indexOf(attributename) > -1) { | |
| //console.log('Skipping: '+attributename); | |
| } else { | |
| if(json[attributename] == '') { | |
| //writer.writeRecord([ node,attributename,""]) | |
| //console.log('empty:'+attributename) | |
| } else if (json[attributename].length) { | |
| writer.writeRecord([ node,attributename,json[attributename]]) | |
| //console.log('value:'+attributename) | |
| } else { | |
| c = doGet(server,node+'/'+attributename+'.infinity.json') | |
| try { | |
| nodeLooper(node+'/'+attributename,JSON.parse(c.data.toString())) | |
| } catch(err) { | |
| console.log('ERROR: '+node+': '+c.statusCode) | |
| } | |
| } | |
| } | |
| } | |
| } | |
| function doPost(server,path,parms) { | |
| var req = httpsync.request({ | |
| url: server+path, | |
| method: "POST", | |
| useragent: "NodeJS", | |
| headers: { | |
| Tag: "EIS", | |
| String: "Custom" | |
| } | |
| }); | |
| req.write(Qs.stringify(parms)) | |
| return res = req.end(); | |
| } | |
| function doGet(server,path,parms) { | |
| (parms) ? url = server+path+'?'+Qs.stringify(parms) : url = server+path; | |
| //console.log(url) | |
| var req = httpsync.request({ | |
| url: server+path+'?'+Qs.stringify(parms), | |
| method: "GET", | |
| useragent: "NodeJS", | |
| headers: { | |
| Tag: "EIS", | |
| String: "Custom" | |
| } | |
| }); | |
| return res = req.end(); | |
| } | |
| function doDelete(server,path) { | |
| var req = httpsync.request({ | |
| url: server+path, | |
| method: "DELETE", | |
| useragent: "NodeJS", | |
| headers: { | |
| Tag: "TGB3123", | |
| String: "Custom" | |
| } | |
| }); | |
| return res = req.end(); | |
| } |
| HOST_PORT="${1}" | |
| CREDENTIALS="${2}" | |
| NL=$'\n' | |
| dos2unix input.tsv.txt | |
| sed -i input.tsv.txt -e 's/"//g;s/^M//g;/^\s*$/d' | |
| cat input.tsv.txt |while read line; do | |
| _PATH="`echo "${line}" |awk -F $'\t' '{print $1}' |sed -e 's/ //g;'`"; | |
| _PARM_NAME="`echo "${line}" |awk -F $'\t' '{print $2}'`"; | |
| _PARM_VALUE="`echo "${line}" |awk -F $'\t' '{print $3}'`"; | |
| _COMPONENT_NODE_PATH=`echo ${_PATH} |sed -e 's/\(.*leftlist\).*/\1/g;s/\/leftlist//g;s/\(.*rightlist\).*/\1/g;s/\/rightlist//g;'` | |
| _SNIFF="`curl --silent -u "${CREDENTIALS}" "http://${HOST_PORT}${_COMPONENT_NODE_PATH}.json" -w "%{http_code}\n" -o /dev/null`" | |
| if [ "${_SNIFF}" = "200" ]; then | |
| curl --silent -u "${CREDENTIALS}" "http://${HOST_PORT}${_PATH}" -F "${_PARM_NAME}=${_PARM_VALUE}" -o /dev/null | |
| if [ "$?" = "0" ]; then | |
| #echo "${_PATH},${_PARM_NAME},${_PARM_VALUE} SUCCESS," | |
| echo -e "${_PATH}\t${_PARM_NAME}\t${_PARM_VALUE}\tSUCCESS" |tee -a output.tsv.txt | |
| else | |
| echo -e "${_PATH}\t${_PARM_NAME}\t${_PARM_VALUE}\tFAILURE" |tee -a output.tsv.txt | |
| fi | |
| else | |
| echo -e "${_PATH}\t${_PARM_NAME}\t${_PARM_VALUE}\tFAILURE" |tee -a output.tsv.txt | |
| fi | |
| done; |
| var httpsync = require('httpsync'); | |
| var Qs = require('qs'); | |
| var Q = require('q') | |
| var csv = require('ya-csv'); | |
| require('events') | |
| var credentials = "admin:admin" | |
| var host_port = "localhost:4502" | |
| var parentNode = '/content/property-master/en'; | |
| var server = "http://"+credentials+"@"+host_port+"/"; | |
| var body = ''; | |
| var httpcode = ''; | |
| var dataArr = []; | |
| var getObj = doGet(server,parentNode+'.infinity.json',dataArr) | |
| httpcode = getObj.statusCode | |
| body = getObj.data.toString() | |
| json = JSON.parse(body) | |
| var filterArr = ['jcr:created','jcr:primaryType','jcr:mixinTypes','jcr:createdBy','cq:lastReplicationAction','jcr:versionHistory','cq:template','cq:lastReplicatedBy','be_co_uuid','jcr:predecessors','jcr:created','cq:lastReplicated','co_optimization','cq:lastModified','jcr:baseVersion','jcr:isCheckedOut','jcr:uuid','sling:resourceType','cq:lastModifiedBy','jcr:lastModifiedBy','jcr:lastModified','alignment','textIsRich','bullet','maxLevel','imageCrop','selection','height','width','imageRotate','cq:keywords','hideInNav','jcr:mimeType']; | |
| var filterArr = ['']; | |
| console.log('path,item,value') | |
| nodeLooper(parentNode,json) | |
| function nodeLooper(node,json) { | |
| var writer = new csv.CsvWriter(process.stdout, { | |
| 'separator': ',' | |
| }) | |
| var children = []; | |
| var c = [] | |
| for (var attributename in json) { | |
| if(filterArr.indexOf(attributename) > -1) { | |
| //console.log('Skipping: '+attributename); | |
| } else { | |
| if(json[attributename] == '') { | |
| //writer.writeRecord([ node,attributename,""]) | |
| //console.log('empty:'+attributename) | |
| } else if (json[attributename].length) { | |
| writer.writeRecord([ node,attributename,json[attributename]]) | |
| //console.log('value:'+attributename) | |
| } else { | |
| c = doGet(server,node+'/'+attributename+'.infinity.json') | |
| try { | |
| nodeLooper(node+'/'+attributename,JSON.parse(c.data.toString())) | |
| } catch(err) { | |
| console.log('ERROR: '+node+': '+c.statusCode) | |
| } | |
| } | |
| } | |
| } | |
| } | |
| function doPost(server,path,parms) { | |
| var req = httpsync.request({ | |
| url: server+path, | |
| method: "POST", | |
| useragent: "NodeJS", | |
| headers: { | |
| Tag: "EIS", | |
| String: "Custom" | |
| } | |
| }); | |
| req.write(Qs.stringify(parms)) | |
| return res = req.end(); | |
| } | |
| function doGet(server,path,parms) { | |
| (parms) ? url = server+path+'?'+Qs.stringify(parms) : url = server+path; | |
| //console.log(url) | |
| var req = httpsync.request({ | |
| url: server+path+'?'+Qs.stringify(parms), | |
| method: "GET", | |
| useragent: "NodeJS", | |
| headers: { | |
| Tag: "EIS", | |
| String: "Custom" | |
| } | |
| }); | |
| return res = req.end(); | |
| } | |
| function doDelete(server,path) { | |
| var req = httpsync.request({ | |
| url: server+path, | |
| method: "DELETE", | |
| useragent: "NodeJS", | |
| headers: { | |
| Tag: "TGB3123", | |
| String: "Custom" | |
| } | |
| }); | |
| return res = req.end(); | |
| } |
| var httpsync = require('httpsync'); | |
| var Qs = require('qs'); | |
| var Q = require('q') | |
| var csv = require('ya-csv'); | |
| //Stops part way through use shell instead for now | |
| var credentials = "admin:admin" | |
| var host_port = "localhost:4502" | |
| var server = "http://"+credentials+"@"+host_port+"/"; | |
| var reader = csv.createCsvFileReader('input.tsv.txt', { | |
| columnsFromHeader: true, | |
| 'separator': '\t', | |
| 'quote' : '' | |
| }); | |
| var parseCSVreturnArray = function () { | |
| csvPromise = Q.defer(); | |
| arr = []; | |
| reader.addListener('data', function (data) { | |
| arr.push([ data['path'],data['item'],data['value'] ]) | |
| }) | |
| reader.addListener("end", function () { | |
| csvPromise.resolve(arr) | |
| }); | |
| return csvPromise.promise | |
| } | |
| parseCSVreturnArray() | |
| .then(function(csvArr) { | |
| csvArr.forEach(function(entry) { | |
| dataArr = [] | |
| if(entry[2].split('\t')) { | |
| split = entry[2].split('\t') | |
| dataArr[entry[1]] = [ split[0],split[1] ] | |
| console.log(dataArr) | |
| doPost(server,entry[0],dataArr) | |
| } else { | |
| dataArr[entry[1]] = entry[2]; | |
| console.log(dataArr) | |
| doPost(server,entry[0],dataArr) | |
| } | |
| }) | |
| }) | |
| function nodeLooper(node,json,writer) { | |
| var children = []; | |
| var c = [] | |
| for (var attributename in json) { | |
| if(json[attributename] == '') { | |
| writer.writeRecord([ node,attributename,""]) | |
| } else if (json[attributename].length) { | |
| writer.writeRecord([ node,attributename,json[attributename]]) | |
| } else { | |
| c = doGet(server,node+'/'+attributename+'.json') | |
| try { | |
| nodeLooper(node+'/'+attributename,JSON.parse(c.data.toString()),writer) | |
| } catch(err) { | |
| console.log('ERROR: '+node+': '+c.statusCode) | |
| } | |
| } | |
| } | |
| } | |
| function doPost(server,path,parms) { | |
| var req = httpsync.request({ | |
| url: server+path, | |
| method: "POST", | |
| useragent: "NodeJS", | |
| headers: { | |
| Tag: "EIS", | |
| String: "Custom" | |
| } | |
| }); | |
| x = Qs.stringify(parms).replace('%5B0%5D','').replace('%5B1%5D','') | |
| console.log(x) | |
| req.write(x) | |
| return res = req.end(); | |
| } | |
| function doGet(server,path,parms) { | |
| (parms) ? url = server+path+'?'+Qs.stringify(parms) : url = server+path; | |
| var req = httpsync.request({ | |
| url: server+path+'?'+Qs.stringify(parms), | |
| method: "GET", | |
| useragent: "NodeJS", | |
| headers: { | |
| Tag: "EIS", | |
| String: "Custom" | |
| } | |
| }); | |
| return res = req.end(); | |
| } | |
| function doDelete(server,path) { | |
| var req = httpsync.request({ | |
| url: server+path, | |
| method: "DELETE", | |
| useragent: "NodeJS", | |
| headers: { | |
| Tag: "TGB3123", | |
| String: "Custom" | |
| } | |
| }); | |
| return res = req.end(); | |
| } |