def call(String pipelineUrl, String draftsetId, String credentials, params) { withCredentials([usernameColonPassword(credentialsId: credentials, variable: 'USERPASS')]) { String boundary = UUID.randomUUID().toString() def allParams = [ [name: '__endpoint-type', value: 'grafter-server.destination/draftset-update'], [name: '__endpoint', value: groovy.json.JsonOutput.toJson([ url: "http://localhost:3001/v1/draftset/${draftsetId}/data", headers: [Authorization: "Basic ${USERPASS.bytes.encodeBase64()}"] ])]] + params String body = "" allParams.each { param -> body += "--${boundary}\r\n" body += 'Content-Disposition: form-data; name="' + param.name + '"' if (param.containsKey('file')) { body += '; filename="' + param.file.name + '"\r\nContent-Type: "' + param.file.type + '\r\n\r\n' body += readFile(param.file.name) + '\r\n' } else { body += "\r\n\r\n${param.value}\r\n" } } body += "--${boundary}--\r\n" def importRequest = httpRequest(acceptType: 'APPLICATION_JSON', authentication: credentials, httpMode: 'POST', url: pipelineUrl, requestBody: body, customHeaders: [[name: 'Content-Type', value: 'multipart/form-data;charset=UTF-8;boundary="' + boundary + '"']]) if (importRequest.status == 202) { def importJob = readJSON(text: importRequest.content) String jobUrl = new java.net.URI(pipelineUrl).resolve(importJob['finished-job']) as String drafter.waitForJob(jobUrl, credentials, importJob['restart-id'] as String) } else { error "Failed import, ${importRequest.status} : ${importRequest.content}" } } }