The PingServerButton.groovy file contains the Groovy script that runs the step's command.

Groovy is a dynamic scripting language (similar to Python, Ruby, and Perl) for the Java™ platform. Most Java code is also syntactically valid Groovy, which makes Groovy popular with Java programmers. Groovy provides native support for regular expressions.

import com.urbancode.air.*

import java.nio.charset.Charset;

import com.urbancode.commons.httpcomponentsutil.HttpClientBuilder;

import com.urbancode.air.XTrustProvider;
import org.apache.http.entity.StringEntity;
import org.apache.http.util.EntityUtils;
import org.apache.http.client.HttpClient
import org.apache.http.client.*
import org.apache.http.client.methods.HttpGet;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;

final def workDir = new File('.').canonicalFile

def apTool = new AirPluginTool(this.args[0], this.args[1]);
def props = apTool.getStepProperties();

def oslcUrl = props['oslcUrl']
def oslcKey = props['oslcKey']
def oslcSecret = props['oslcSecret']
def projectArea = props['projectArea']

def jsonArray = null;

try {
    println "URL:"+oslcUrl
	println "Project Area:"+projectArea
    HttpClientBuilder builder = new HttpClientBuilder();

    def client = builder.buildClient();
    HttpGet methodGet = new HttpGet(oslcUrl);
    HttpResponse responseGet = client.execute(methodGet);
    int status = responseGet.getStatusLine().getStatusCode();
    if (status == HttpStatus.SC_OK) {
        println "The connection was successful";
    else {
        //We throw an error if we can not connect to that URL it will be displayed in red on the integration provider page
        throw new Exception(String.format("%d", status));
    println "-------------------------------------------------------------------------------"
    println "Connection Successful"
    println "-------------------------------------------------------------------------------"
catch (e) {
    def analysedOutput = generateHelpMessageFromError (e.getMessage());
	println "-------------------------------------------------------------------------------"
	println "Connection Failed"+analysedOutput
    println analysedOutput
	println "-------------------------------------------------------------------------------"
    throw new Exception("Error connecting to the RTC Server <br/>"+e.getMessage());

def generateHelpMessageFromError (msg) {
    def helpMessage = "";
    if (msg.contains("Can not create the OAuth Client")) {
        helpMessage+="The RTC instance seems to be not accessible from " +
                        "the IBM UrbanCode Release server <br />";
        helpMessage+="The URL might not be following the pattern: http://host:port/ccm/<br />";

    if (msg.contains("invalid_consumer_key")) {
        helpMessage+="The Consumer Key and Secret may have been created in the jts/admin instead of ccm/admin<br />";
        helpMessage+="The User used to create the Consumer might not be the Admin user<br />";
        helpMessage+="The Consumer Key is incorrect<br />";

    if (msg.contains("invalid_expired_token")) {
        helpMessage+="The User used to create the Consumer might not be the Admin user<br />";
        helpMessage+="The Trusted option might not have been checked for that Consumer<br />";

    if (msg.contains("signature_invalid")) {
        helpMessage+="The Consumer Secret is incorrect<br />";;

    if (msg.contains("timestamp_refused")) {
        helpMessage+="The Servers hosting IBM UrbanCode Release and RTC have a time difference longer than supported<br />";
    return helpMessage;