diff --git a/.gitignore b/.gitignore index 8ee1c5b8..d77b27fc 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ /.idea /build */build +*/out *.ipr *.iml *.iws diff --git a/build.gradle b/build.gradle index 95348cf0..0f372902 100644 --- a/build.gradle +++ b/build.gradle @@ -30,7 +30,6 @@ plugins { id 'groovy' id 'com.github.johnrengelman.shadow' version '2.0.3' id "nebula.ospackage" version "4.8.0" - id 'de.fuerstenau.buildconfig' version '1.1.8' } ext.githubUrl = "https://github.com/rundeck/rundeck-cli" ext.changelogFile = file("CHANGELOG.md") @@ -157,13 +156,6 @@ task changeLog(){ } } -/** - * Generates java source with embedded version info - */ -buildConfig { - clsName = 'Version' - packageName = 'org.rundeck.client' -} apply plugin: 'idea' apply plugin: 'groovy' @@ -183,24 +175,21 @@ repositories { maven { url "https://jitpack.io" } } -ext.toolbeltVersion = "0.2.1" +ext.toolbeltVersion = "0.2.2" ext.toolbeltGroup = "${toolbeltVersion.contains('SNAPSHOT')?'org':'com.github'}.rundeck.cli-toolbelt" dependencies { compileOnly "org.projectlombok:lombok:1.16.16" annotationProcessor "org.projectlombok:lombok:1.16.16" - compile 'com.squareup.retrofit2:retrofit:2.1.0' - compile 'com.squareup.retrofit2:converter-jackson:2.1.0' - compile 'com.squareup.retrofit2:converter-simplexml:2.1.0' - compile 'com.squareup.okhttp3:logging-interceptor:3.4.1' - compile 'com.squareup.okhttp3:okhttp-urlconnection:3.4.1' + compile project(":rd-api-client") compile "$toolbeltGroup:toolbelt:$toolbeltVersion" compile "$toolbeltGroup:toolbelt-snakeyaml:$toolbeltVersion" compile "$toolbeltGroup:toolbelt-json-jackson:$toolbeltVersion" compile "$toolbeltGroup:toolbelt-jewelcli:$toolbeltVersion" + testCompile project(":rd-api-client") testCompile group: 'junit', name: 'junit', version: '4.12' testCompile 'com.squareup.retrofit2:retrofit-mock:2.1.0' testCompile 'com.squareup.okhttp3:mockwebserver:3.4.1' diff --git a/rd-api-client/build.gradle b/rd-api-client/build.gradle new file mode 100644 index 00000000..bf1904b6 --- /dev/null +++ b/rd-api-client/build.gradle @@ -0,0 +1,81 @@ + +buildscript { + repositories { + jcenter() + } +} +plugins{ + id 'de.fuerstenau.buildconfig' version '1.1.8' +} + + +repositories { + mavenLocal() + mavenCentral() + maven { url "https://jitpack.io" } +} + + +apply plugin: 'idea' +apply plugin: 'groovy' +apply plugin: 'de.fuerstenau.buildconfig' + +/** + * Generates java source with embedded version info + */ +buildConfig { + clsName = 'Version' + packageName = 'org.rundeck.client' +} + + +dependencies { + + compileOnly "org.projectlombok:lombok:1.16.16" + + compile 'com.squareup.retrofit2:retrofit:2.1.0' + compile 'com.squareup.retrofit2:converter-jackson:2.1.0' + compile 'com.squareup.retrofit2:converter-simplexml:2.1.0' + compile 'com.squareup.okhttp3:logging-interceptor:3.4.1' + compile 'com.squareup.okhttp3:okhttp-urlconnection:3.4.1' + + + testCompile group: 'junit', name: 'junit', version: '4.12' + testCompile 'com.squareup.retrofit2:retrofit-mock:2.1.0' + testCompile 'com.squareup.okhttp3:mockwebserver:3.4.1' + testCompile group: 'org.mockito', name: 'mockito-core', version: '1.10.19' + testCompile "org.codehaus.groovy:groovy-all:2.3.7" + testCompile "org.spockframework:spock-core:0.7-groovy-2.0" +} + + +// produce a jar file for our test classes +task testJar(type: Jar) { + classifier = 'tests' + from sourceSets.test.java +} + +// produce a jar file for our source files +task sourceJar(type: Jar) { + classifier = 'sources' + from sourceSets.main.java +} + +// produce a jar file for our javadoc +task javadocJar(type: Jar, dependsOn: javadoc) { + classifier = 'javadoc' + from javadoc.destinationDir +} + +if (JavaVersion.current().isJava8Compatible()) { + tasks.withType(Javadoc) { + options.addStringOption('Xdoclint:none', '-quiet') + } +} + +// add all of the artifacts above to our archives list +artifacts { + archives testJar + archives sourceJar + archives javadocJar +} \ No newline at end of file diff --git a/src/main/java/org/rundeck/client/RundeckClient.java b/rd-api-client/src/main/java/org/rundeck/client/RundeckClient.java similarity index 97% rename from src/main/java/org/rundeck/client/RundeckClient.java rename to rd-api-client/src/main/java/org/rundeck/client/RundeckClient.java index 4f1ac0d0..51c3f20b 100644 --- a/src/main/java/org/rundeck/client/RundeckClient.java +++ b/rd-api-client/src/main/java/org/rundeck/client/RundeckClient.java @@ -21,7 +21,6 @@ import okhttp3.OkHttpClient; import okhttp3.logging.HttpLoggingInterceptor; import org.rundeck.client.api.RundeckApi; -import org.rundeck.client.tool.AppConfig; import org.rundeck.client.util.*; import retrofit2.Retrofit; import retrofit2.converter.jackson.JacksonConverterFactory; @@ -35,7 +34,6 @@ import java.util.regex.Pattern; import java.util.stream.Collectors; -import static org.rundeck.client.tool.Main.*; /** * Build a {@link Client} for {@link RundeckApi} using {@link #builder()}. @@ -48,6 +46,12 @@ public class RundeckClient { public static final String ENV_INSECURE_SSL = "RD_INSECURE_SSL"; public static final String ENV_INSECURE_SSL_HOSTNAME = "RD_INSECURE_SSL_HOSTNAME"; public static final String ENV_ALT_SSL_HOSTNAME = "RD_ALT_SSL_HOSTNAME"; + public static final String ENV_HTTP_TIMEOUT = "RD_HTTP_TIMEOUT"; + public static final String ENV_CONNECT_RETRY = "RD_CONNECT_RETRY"; + /** + * If true, allow API version to be automatically degraded when unsupported version is detected + */ + public static final String RD_API_DOWNGRADE = "RD_API_DOWNGRADE"; public static final int INSECURE_SSL_LOGGING = 2; private RundeckClient() { @@ -74,7 +78,7 @@ Builder accept(BuildWith bw, T i) { return this; } - public Builder config(AppConfig config) { + public Builder config(RdClientConfig config) { logging(config.getDebugLevel()); retryConnect(config.getBool(ENV_CONNECT_RETRY, true)); timeout(config.getLong(ENV_HTTP_TIMEOUT, null)); diff --git a/src/main/java/org/rundeck/client/api/AuthorizationFailed.java b/rd-api-client/src/main/java/org/rundeck/client/api/AuthorizationFailed.java similarity index 96% rename from src/main/java/org/rundeck/client/api/AuthorizationFailed.java rename to rd-api-client/src/main/java/org/rundeck/client/api/AuthorizationFailed.java index 7b2eb82e..c5080ac3 100644 --- a/src/main/java/org/rundeck/client/api/AuthorizationFailed.java +++ b/rd-api-client/src/main/java/org/rundeck/client/api/AuthorizationFailed.java @@ -16,8 +16,6 @@ package org.rundeck.client.api; -import org.rundeck.client.api.RequestFailed; - public class AuthorizationFailed extends RequestFailed { public AuthorizationFailed(final int statusCode, final String status) { super(statusCode, status); diff --git a/src/main/java/org/rundeck/client/api/LoginFailed.java b/rd-api-client/src/main/java/org/rundeck/client/api/LoginFailed.java similarity index 100% rename from src/main/java/org/rundeck/client/api/LoginFailed.java rename to rd-api-client/src/main/java/org/rundeck/client/api/LoginFailed.java diff --git a/src/main/java/org/rundeck/client/api/ReadmeFile.java b/rd-api-client/src/main/java/org/rundeck/client/api/ReadmeFile.java similarity index 100% rename from src/main/java/org/rundeck/client/api/ReadmeFile.java rename to rd-api-client/src/main/java/org/rundeck/client/api/ReadmeFile.java diff --git a/src/main/java/org/rundeck/client/api/RequestFailed.java b/rd-api-client/src/main/java/org/rundeck/client/api/RequestFailed.java similarity index 100% rename from src/main/java/org/rundeck/client/api/RequestFailed.java rename to rd-api-client/src/main/java/org/rundeck/client/api/RequestFailed.java diff --git a/src/main/java/org/rundeck/client/api/RundeckApi.java b/rd-api-client/src/main/java/org/rundeck/client/api/RundeckApi.java similarity index 100% rename from src/main/java/org/rundeck/client/api/RundeckApi.java rename to rd-api-client/src/main/java/org/rundeck/client/api/RundeckApi.java diff --git a/src/main/java/org/rundeck/client/api/model/ACLPolicy.java b/rd-api-client/src/main/java/org/rundeck/client/api/model/ACLPolicy.java similarity index 100% rename from src/main/java/org/rundeck/client/api/model/ACLPolicy.java rename to rd-api-client/src/main/java/org/rundeck/client/api/model/ACLPolicy.java diff --git a/src/main/java/org/rundeck/client/api/model/ACLPolicyItem.java b/rd-api-client/src/main/java/org/rundeck/client/api/model/ACLPolicyItem.java similarity index 100% rename from src/main/java/org/rundeck/client/api/model/ACLPolicyItem.java rename to rd-api-client/src/main/java/org/rundeck/client/api/model/ACLPolicyItem.java diff --git a/src/main/java/org/rundeck/client/api/model/ACLPolicyValidation.java b/rd-api-client/src/main/java/org/rundeck/client/api/model/ACLPolicyValidation.java similarity index 100% rename from src/main/java/org/rundeck/client/api/model/ACLPolicyValidation.java rename to rd-api-client/src/main/java/org/rundeck/client/api/model/ACLPolicyValidation.java diff --git a/src/main/java/org/rundeck/client/api/model/AbortResult.java b/rd-api-client/src/main/java/org/rundeck/client/api/model/AbortResult.java similarity index 100% rename from src/main/java/org/rundeck/client/api/model/AbortResult.java rename to rd-api-client/src/main/java/org/rundeck/client/api/model/AbortResult.java diff --git a/src/main/java/org/rundeck/client/api/model/AdhocResponse.java b/rd-api-client/src/main/java/org/rundeck/client/api/model/AdhocResponse.java similarity index 100% rename from src/main/java/org/rundeck/client/api/model/AdhocResponse.java rename to rd-api-client/src/main/java/org/rundeck/client/api/model/AdhocResponse.java diff --git a/src/main/java/org/rundeck/client/api/model/ApiToken.java b/rd-api-client/src/main/java/org/rundeck/client/api/model/ApiToken.java similarity index 100% rename from src/main/java/org/rundeck/client/api/model/ApiToken.java rename to rd-api-client/src/main/java/org/rundeck/client/api/model/ApiToken.java diff --git a/src/main/java/org/rundeck/client/api/model/BulkExecutionDelete.java b/rd-api-client/src/main/java/org/rundeck/client/api/model/BulkExecutionDelete.java similarity index 100% rename from src/main/java/org/rundeck/client/api/model/BulkExecutionDelete.java rename to rd-api-client/src/main/java/org/rundeck/client/api/model/BulkExecutionDelete.java diff --git a/src/main/java/org/rundeck/client/api/model/BulkExecutionDeleteResponse.java b/rd-api-client/src/main/java/org/rundeck/client/api/model/BulkExecutionDeleteResponse.java similarity index 100% rename from src/main/java/org/rundeck/client/api/model/BulkExecutionDeleteResponse.java rename to rd-api-client/src/main/java/org/rundeck/client/api/model/BulkExecutionDeleteResponse.java diff --git a/src/main/java/org/rundeck/client/api/model/CreateToken.java b/rd-api-client/src/main/java/org/rundeck/client/api/model/CreateToken.java similarity index 100% rename from src/main/java/org/rundeck/client/api/model/CreateToken.java rename to rd-api-client/src/main/java/org/rundeck/client/api/model/CreateToken.java diff --git a/src/main/java/org/rundeck/client/api/model/DateInfo.java b/rd-api-client/src/main/java/org/rundeck/client/api/model/DateInfo.java similarity index 100% rename from src/main/java/org/rundeck/client/api/model/DateInfo.java rename to rd-api-client/src/main/java/org/rundeck/client/api/model/DateInfo.java diff --git a/src/main/java/org/rundeck/client/api/model/DeleteJob.java b/rd-api-client/src/main/java/org/rundeck/client/api/model/DeleteJob.java similarity index 100% rename from src/main/java/org/rundeck/client/api/model/DeleteJob.java rename to rd-api-client/src/main/java/org/rundeck/client/api/model/DeleteJob.java diff --git a/src/main/java/org/rundeck/client/api/model/DeleteJobsResult.java b/rd-api-client/src/main/java/org/rundeck/client/api/model/DeleteJobsResult.java similarity index 100% rename from src/main/java/org/rundeck/client/api/model/DeleteJobsResult.java rename to rd-api-client/src/main/java/org/rundeck/client/api/model/DeleteJobsResult.java diff --git a/src/main/java/org/rundeck/client/api/model/ErrorDetail.java b/rd-api-client/src/main/java/org/rundeck/client/api/model/ErrorDetail.java similarity index 100% rename from src/main/java/org/rundeck/client/api/model/ErrorDetail.java rename to rd-api-client/src/main/java/org/rundeck/client/api/model/ErrorDetail.java diff --git a/src/main/java/org/rundeck/client/api/model/ErrorResponse.java b/rd-api-client/src/main/java/org/rundeck/client/api/model/ErrorResponse.java similarity index 100% rename from src/main/java/org/rundeck/client/api/model/ErrorResponse.java rename to rd-api-client/src/main/java/org/rundeck/client/api/model/ErrorResponse.java diff --git a/src/main/java/org/rundeck/client/api/model/ExecLog.java b/rd-api-client/src/main/java/org/rundeck/client/api/model/ExecLog.java similarity index 100% rename from src/main/java/org/rundeck/client/api/model/ExecLog.java rename to rd-api-client/src/main/java/org/rundeck/client/api/model/ExecLog.java diff --git a/src/main/java/org/rundeck/client/api/model/ExecOutput.java b/rd-api-client/src/main/java/org/rundeck/client/api/model/ExecOutput.java similarity index 100% rename from src/main/java/org/rundeck/client/api/model/ExecOutput.java rename to rd-api-client/src/main/java/org/rundeck/client/api/model/ExecOutput.java diff --git a/src/main/java/org/rundeck/client/api/model/ExecRetry.java b/rd-api-client/src/main/java/org/rundeck/client/api/model/ExecRetry.java similarity index 100% rename from src/main/java/org/rundeck/client/api/model/ExecRetry.java rename to rd-api-client/src/main/java/org/rundeck/client/api/model/ExecRetry.java diff --git a/src/main/java/org/rundeck/client/api/model/Execution.java b/rd-api-client/src/main/java/org/rundeck/client/api/model/Execution.java similarity index 97% rename from src/main/java/org/rundeck/client/api/model/Execution.java rename to rd-api-client/src/main/java/org/rundeck/client/api/model/Execution.java index 2f00092c..c220b3a5 100644 --- a/src/main/java/org/rundeck/client/api/model/Execution.java +++ b/rd-api-client/src/main/java/org/rundeck/client/api/model/Execution.java @@ -18,7 +18,7 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; -import org.rundeck.client.tool.AppConfig; +import org.rundeck.client.util.RdClientConfig; import java.util.HashMap; import java.util.List; @@ -53,7 +53,7 @@ public String toBasicString() { return String.format("[%s] <%s>", id, permalink); } - public String toExtendedString(AppConfig config) { + public String toExtendedString(RdClientConfig config) { return String.format( "%s %s %s %s %s %s %s", id, @@ -85,7 +85,7 @@ private String shortened(final String description) { return description; } - public Map getInfoMap(AppConfig config) { + public Map getInfoMap(RdClientConfig config) { HashMap map = new HashMap<>(); map.put("id", getId()); map.put("description", shortened(getDescription())); diff --git a/src/main/java/org/rundeck/client/api/model/ExecutionList.java b/rd-api-client/src/main/java/org/rundeck/client/api/model/ExecutionList.java similarity index 100% rename from src/main/java/org/rundeck/client/api/model/ExecutionList.java rename to rd-api-client/src/main/java/org/rundeck/client/api/model/ExecutionList.java diff --git a/src/main/java/org/rundeck/client/api/model/ExecutionMode.java b/rd-api-client/src/main/java/org/rundeck/client/api/model/ExecutionMode.java similarity index 100% rename from src/main/java/org/rundeck/client/api/model/ExecutionMode.java rename to rd-api-client/src/main/java/org/rundeck/client/api/model/ExecutionMode.java diff --git a/src/main/java/org/rundeck/client/api/model/ImportResult.java b/rd-api-client/src/main/java/org/rundeck/client/api/model/ImportResult.java similarity index 100% rename from src/main/java/org/rundeck/client/api/model/ImportResult.java rename to rd-api-client/src/main/java/org/rundeck/client/api/model/ImportResult.java diff --git a/src/main/java/org/rundeck/client/api/model/JobFileItem.java b/rd-api-client/src/main/java/org/rundeck/client/api/model/JobFileItem.java similarity index 95% rename from src/main/java/org/rundeck/client/api/model/JobFileItem.java rename to rd-api-client/src/main/java/org/rundeck/client/api/model/JobFileItem.java index 1be8ea16..b4f566db 100644 --- a/src/main/java/org/rundeck/client/api/model/JobFileItem.java +++ b/rd-api-client/src/main/java/org/rundeck/client/api/model/JobFileItem.java @@ -17,7 +17,7 @@ package org.rundeck.client.api.model; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import org.rundeck.toolbelt.Formatable; +import org.rundeck.client.util.DataOutput; import org.simpleframework.xml.Root; import java.util.HashMap; @@ -30,7 +30,7 @@ */ @JsonIgnoreProperties(ignoreUnknown = true) @Root(strict = false) -public class JobFileItem implements Formatable { +public class JobFileItem implements DataOutput { private String id; private String user; private String optionName; @@ -148,12 +148,6 @@ public void setExecId(Long execId) { this.execId = execId; } - @Override - public List asList() { - return null; - } - - @Override public Map asMap() { HashMap map = new HashMap<>(); map.put("id", id); diff --git a/src/main/java/org/rundeck/client/api/model/JobFileItemList.java b/rd-api-client/src/main/java/org/rundeck/client/api/model/JobFileItemList.java similarity index 81% rename from src/main/java/org/rundeck/client/api/model/JobFileItemList.java rename to rd-api-client/src/main/java/org/rundeck/client/api/model/JobFileItemList.java index a4f356e7..9cf9f7b6 100644 --- a/src/main/java/org/rundeck/client/api/model/JobFileItemList.java +++ b/rd-api-client/src/main/java/org/rundeck/client/api/model/JobFileItemList.java @@ -17,15 +17,17 @@ package org.rundeck.client.api.model; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import org.rundeck.client.util.DataOutput; import java.util.List; +import java.util.stream.Collectors; /** * @author greg * @since 3/2/17 */ @JsonIgnoreProperties(ignoreUnknown = true) -public class JobFileItemList { +public class JobFileItemList implements DataOutput { private Paging paging; private List files; @@ -41,6 +43,11 @@ public List getFiles() { return files; } + @Override + public List asList() { + return getFiles().stream().map(JobFileItem::asMap).collect(Collectors.toList()); + } + public void setFiles(List files) { this.files = files; } diff --git a/src/main/java/org/rundeck/client/api/model/JobFileUploadResult.java b/rd-api-client/src/main/java/org/rundeck/client/api/model/JobFileUploadResult.java similarity index 90% rename from src/main/java/org/rundeck/client/api/model/JobFileUploadResult.java rename to rd-api-client/src/main/java/org/rundeck/client/api/model/JobFileUploadResult.java index cf3f393c..36fbbcbd 100644 --- a/src/main/java/org/rundeck/client/api/model/JobFileUploadResult.java +++ b/rd-api-client/src/main/java/org/rundeck/client/api/model/JobFileUploadResult.java @@ -17,7 +17,7 @@ package org.rundeck.client.api.model; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import org.rundeck.toolbelt.Formatable; +import org.rundeck.client.util.DataOutput; import java.util.HashMap; import java.util.List; @@ -29,7 +29,7 @@ */ @JsonIgnoreProperties(ignoreUnknown = true) -public class JobFileUploadResult implements Formatable { +public class JobFileUploadResult implements DataOutput { private Integer total; private Map options; @@ -49,12 +49,6 @@ public void setOptions(Map options) { this.options = options; } - @Override - public List asList() { - return null; - } - - @Override public Map asMap() { HashMap map = new HashMap<>(); map.put("total", total); diff --git a/src/main/java/org/rundeck/client/api/model/JobItem.java b/rd-api-client/src/main/java/org/rundeck/client/api/model/JobItem.java similarity index 100% rename from src/main/java/org/rundeck/client/api/model/JobItem.java rename to rd-api-client/src/main/java/org/rundeck/client/api/model/JobItem.java diff --git a/src/main/java/org/rundeck/client/api/model/JobLoadItem.java b/rd-api-client/src/main/java/org/rundeck/client/api/model/JobLoadItem.java similarity index 100% rename from src/main/java/org/rundeck/client/api/model/JobLoadItem.java rename to rd-api-client/src/main/java/org/rundeck/client/api/model/JobLoadItem.java diff --git a/src/main/java/org/rundeck/client/api/model/JobRun.java b/rd-api-client/src/main/java/org/rundeck/client/api/model/JobRun.java similarity index 100% rename from src/main/java/org/rundeck/client/api/model/JobRun.java rename to rd-api-client/src/main/java/org/rundeck/client/api/model/JobRun.java diff --git a/src/main/java/org/rundeck/client/api/model/KeyStorageItem.java b/rd-api-client/src/main/java/org/rundeck/client/api/model/KeyStorageItem.java similarity index 100% rename from src/main/java/org/rundeck/client/api/model/KeyStorageItem.java rename to rd-api-client/src/main/java/org/rundeck/client/api/model/KeyStorageItem.java diff --git a/src/main/java/org/rundeck/client/api/model/Paging.java b/rd-api-client/src/main/java/org/rundeck/client/api/model/Paging.java similarity index 100% rename from src/main/java/org/rundeck/client/api/model/Paging.java rename to rd-api-client/src/main/java/org/rundeck/client/api/model/Paging.java diff --git a/src/main/java/org/rundeck/client/api/model/ProjectConfig.java b/rd-api-client/src/main/java/org/rundeck/client/api/model/ProjectConfig.java similarity index 100% rename from src/main/java/org/rundeck/client/api/model/ProjectConfig.java rename to rd-api-client/src/main/java/org/rundeck/client/api/model/ProjectConfig.java diff --git a/src/main/java/org/rundeck/client/api/model/ProjectExportStatus.java b/rd-api-client/src/main/java/org/rundeck/client/api/model/ProjectExportStatus.java similarity index 100% rename from src/main/java/org/rundeck/client/api/model/ProjectExportStatus.java rename to rd-api-client/src/main/java/org/rundeck/client/api/model/ProjectExportStatus.java diff --git a/src/main/java/org/rundeck/client/api/model/ProjectImportStatus.java b/rd-api-client/src/main/java/org/rundeck/client/api/model/ProjectImportStatus.java similarity index 100% rename from src/main/java/org/rundeck/client/api/model/ProjectImportStatus.java rename to rd-api-client/src/main/java/org/rundeck/client/api/model/ProjectImportStatus.java diff --git a/src/main/java/org/rundeck/client/api/model/ProjectItem.java b/rd-api-client/src/main/java/org/rundeck/client/api/model/ProjectItem.java similarity index 100% rename from src/main/java/org/rundeck/client/api/model/ProjectItem.java rename to rd-api-client/src/main/java/org/rundeck/client/api/model/ProjectItem.java diff --git a/src/main/java/org/rundeck/client/api/model/ProjectNode.java b/rd-api-client/src/main/java/org/rundeck/client/api/model/ProjectNode.java similarity index 100% rename from src/main/java/org/rundeck/client/api/model/ProjectNode.java rename to rd-api-client/src/main/java/org/rundeck/client/api/model/ProjectNode.java diff --git a/src/main/java/org/rundeck/client/api/model/ProjectReadme.java b/rd-api-client/src/main/java/org/rundeck/client/api/model/ProjectReadme.java similarity index 100% rename from src/main/java/org/rundeck/client/api/model/ProjectReadme.java rename to rd-api-client/src/main/java/org/rundeck/client/api/model/ProjectReadme.java diff --git a/src/main/java/org/rundeck/client/api/model/ScheduledJobItem.java b/rd-api-client/src/main/java/org/rundeck/client/api/model/ScheduledJobItem.java similarity index 100% rename from src/main/java/org/rundeck/client/api/model/ScheduledJobItem.java rename to rd-api-client/src/main/java/org/rundeck/client/api/model/ScheduledJobItem.java diff --git a/src/main/java/org/rundeck/client/api/model/ScmActionInputsResult.java b/rd-api-client/src/main/java/org/rundeck/client/api/model/ScmActionInputsResult.java similarity index 89% rename from src/main/java/org/rundeck/client/api/model/ScmActionInputsResult.java rename to rd-api-client/src/main/java/org/rundeck/client/api/model/ScmActionInputsResult.java index 1c301d4e..e21e0785 100644 --- a/src/main/java/org/rundeck/client/api/model/ScmActionInputsResult.java +++ b/rd-api-client/src/main/java/org/rundeck/client/api/model/ScmActionInputsResult.java @@ -17,7 +17,7 @@ package org.rundeck.client.api.model; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import org.rundeck.toolbelt.Formatable; +import org.rundeck.client.util.DataOutput; import java.util.HashMap; import java.util.List; @@ -28,7 +28,7 @@ * @since 12/13/16 */ @JsonIgnoreProperties(ignoreUnknown = true) -public class ScmActionInputsResult implements Formatable { +public class ScmActionInputsResult implements DataOutput { public String title; public String description; public String integration; @@ -37,12 +37,6 @@ public class ScmActionInputsResult implements Formatable { public List importItems; public List exportItems; - @Override - public List asList() { - return null; - } - - @Override public Map asMap() { HashMap map = new HashMap<>(); map.put("title", title); diff --git a/src/main/java/org/rundeck/client/api/model/ScmActionPerform.java b/rd-api-client/src/main/java/org/rundeck/client/api/model/ScmActionPerform.java similarity index 100% rename from src/main/java/org/rundeck/client/api/model/ScmActionPerform.java rename to rd-api-client/src/main/java/org/rundeck/client/api/model/ScmActionPerform.java diff --git a/src/main/java/org/rundeck/client/api/model/ScmActionResult.java b/rd-api-client/src/main/java/org/rundeck/client/api/model/ScmActionResult.java similarity index 100% rename from src/main/java/org/rundeck/client/api/model/ScmActionResult.java rename to rd-api-client/src/main/java/org/rundeck/client/api/model/ScmActionResult.java diff --git a/src/main/java/org/rundeck/client/api/model/ScmConfig.java b/rd-api-client/src/main/java/org/rundeck/client/api/model/ScmConfig.java similarity index 100% rename from src/main/java/org/rundeck/client/api/model/ScmConfig.java rename to rd-api-client/src/main/java/org/rundeck/client/api/model/ScmConfig.java diff --git a/src/main/java/org/rundeck/client/api/model/ScmExportItem.java b/rd-api-client/src/main/java/org/rundeck/client/api/model/ScmExportItem.java similarity index 90% rename from src/main/java/org/rundeck/client/api/model/ScmExportItem.java rename to rd-api-client/src/main/java/org/rundeck/client/api/model/ScmExportItem.java index f72d829e..059fb041 100644 --- a/src/main/java/org/rundeck/client/api/model/ScmExportItem.java +++ b/rd-api-client/src/main/java/org/rundeck/client/api/model/ScmExportItem.java @@ -17,7 +17,7 @@ package org.rundeck.client.api.model; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import org.rundeck.toolbelt.Formatable; +import org.rundeck.client.util.DataOutput; import java.util.HashMap; import java.util.List; @@ -28,17 +28,13 @@ * @since 12/13/16 */ @JsonIgnoreProperties(ignoreUnknown = true) -public class ScmExportItem implements Formatable{ +public class ScmExportItem implements DataOutput { public String itemId; public String originalId; public ScmJobItem job; public Boolean renamed; private Boolean deleted; - @Override - public List asList() { - return null; - } public Map asMap() { HashMap map = new HashMap<>(); diff --git a/src/main/java/org/rundeck/client/api/model/ScmImportItem.java b/rd-api-client/src/main/java/org/rundeck/client/api/model/ScmImportItem.java similarity index 88% rename from src/main/java/org/rundeck/client/api/model/ScmImportItem.java rename to rd-api-client/src/main/java/org/rundeck/client/api/model/ScmImportItem.java index 1bc42ecd..0f107eb9 100644 --- a/src/main/java/org/rundeck/client/api/model/ScmImportItem.java +++ b/rd-api-client/src/main/java/org/rundeck/client/api/model/ScmImportItem.java @@ -17,7 +17,7 @@ package org.rundeck.client.api.model; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import org.rundeck.toolbelt.Formatable; +import org.rundeck.client.util.DataOutput; import java.util.HashMap; import java.util.List; @@ -28,16 +28,11 @@ * @since 12/13/16 */ @JsonIgnoreProperties(ignoreUnknown = true) -public class ScmImportItem implements Formatable { +public class ScmImportItem implements DataOutput { public String itemId; public Boolean tracked; public ScmJobItem job; - @Override - public List asList() { - return null; - } - public Map asMap() { HashMap map = new HashMap<>(); map.put("itemId", itemId); diff --git a/src/main/java/org/rundeck/client/api/model/ScmInputField.java b/rd-api-client/src/main/java/org/rundeck/client/api/model/ScmInputField.java similarity index 90% rename from src/main/java/org/rundeck/client/api/model/ScmInputField.java rename to rd-api-client/src/main/java/org/rundeck/client/api/model/ScmInputField.java index 8062bfac..18587b48 100644 --- a/src/main/java/org/rundeck/client/api/model/ScmInputField.java +++ b/rd-api-client/src/main/java/org/rundeck/client/api/model/ScmInputField.java @@ -16,7 +16,8 @@ package org.rundeck.client.api.model; -import org.rundeck.toolbelt.Formatable; + +import org.rundeck.client.util.DataOutput; import java.util.HashMap; import java.util.List; @@ -26,7 +27,7 @@ * @author greg * @since 12/13/16 */ -public class ScmInputField implements Formatable{ +public class ScmInputField implements DataOutput { public String defaultValue; public String description; public String name; @@ -50,9 +51,5 @@ public class ScmInputField implements Formatable{ return map; } - @Override - public List asList() { - return null; - } } diff --git a/src/main/java/org/rundeck/client/api/model/ScmJobItem.java b/rd-api-client/src/main/java/org/rundeck/client/api/model/ScmJobItem.java similarity index 100% rename from src/main/java/org/rundeck/client/api/model/ScmJobItem.java rename to rd-api-client/src/main/java/org/rundeck/client/api/model/ScmJobItem.java diff --git a/src/main/java/org/rundeck/client/api/model/ScmPlugin.java b/rd-api-client/src/main/java/org/rundeck/client/api/model/ScmPlugin.java similarity index 100% rename from src/main/java/org/rundeck/client/api/model/ScmPlugin.java rename to rd-api-client/src/main/java/org/rundeck/client/api/model/ScmPlugin.java diff --git a/src/main/java/org/rundeck/client/api/model/ScmPluginsResult.java b/rd-api-client/src/main/java/org/rundeck/client/api/model/ScmPluginsResult.java similarity index 100% rename from src/main/java/org/rundeck/client/api/model/ScmPluginsResult.java rename to rd-api-client/src/main/java/org/rundeck/client/api/model/ScmPluginsResult.java diff --git a/src/main/java/org/rundeck/client/api/model/ScmProjectStatusResult.java b/rd-api-client/src/main/java/org/rundeck/client/api/model/ScmProjectStatusResult.java similarity index 100% rename from src/main/java/org/rundeck/client/api/model/ScmProjectStatusResult.java rename to rd-api-client/src/main/java/org/rundeck/client/api/model/ScmProjectStatusResult.java diff --git a/src/main/java/org/rundeck/client/api/model/ScmSetupInputsResult.java b/rd-api-client/src/main/java/org/rundeck/client/api/model/ScmSetupInputsResult.java similarity index 85% rename from src/main/java/org/rundeck/client/api/model/ScmSetupInputsResult.java rename to rd-api-client/src/main/java/org/rundeck/client/api/model/ScmSetupInputsResult.java index add238c3..c44fb99e 100644 --- a/src/main/java/org/rundeck/client/api/model/ScmSetupInputsResult.java +++ b/rd-api-client/src/main/java/org/rundeck/client/api/model/ScmSetupInputsResult.java @@ -16,7 +16,7 @@ package org.rundeck.client.api.model; -import org.rundeck.toolbelt.Formatable; +import org.rundeck.client.util.DataOutput; import java.util.HashMap; import java.util.List; @@ -26,17 +26,11 @@ * @author greg * @since 12/13/16 */ -public class ScmSetupInputsResult implements Formatable { +public class ScmSetupInputsResult implements DataOutput { public String integration; public String type; public List fields; - @Override - public List asList() { - return null; - } - - @Override public Map asMap() { HashMap map = new HashMap<>(); map.put("integration", integration); diff --git a/src/main/java/org/rundeck/client/api/model/ScmSynchState.java b/rd-api-client/src/main/java/org/rundeck/client/api/model/ScmSynchState.java similarity index 100% rename from src/main/java/org/rundeck/client/api/model/ScmSynchState.java rename to rd-api-client/src/main/java/org/rundeck/client/api/model/ScmSynchState.java diff --git a/src/main/java/org/rundeck/client/api/model/Simple.java b/rd-api-client/src/main/java/org/rundeck/client/api/model/Simple.java similarity index 100% rename from src/main/java/org/rundeck/client/api/model/Simple.java rename to rd-api-client/src/main/java/org/rundeck/client/api/model/Simple.java diff --git a/src/main/java/org/rundeck/client/api/model/SystemInfo.java b/rd-api-client/src/main/java/org/rundeck/client/api/model/SystemInfo.java similarity index 100% rename from src/main/java/org/rundeck/client/api/model/SystemInfo.java rename to rd-api-client/src/main/java/org/rundeck/client/api/model/SystemInfo.java diff --git a/src/main/java/org/rundeck/client/api/model/SystemMode.java b/rd-api-client/src/main/java/org/rundeck/client/api/model/SystemMode.java similarity index 100% rename from src/main/java/org/rundeck/client/api/model/SystemMode.java rename to rd-api-client/src/main/java/org/rundeck/client/api/model/SystemMode.java diff --git a/src/main/java/org/rundeck/client/api/model/User.java b/rd-api-client/src/main/java/org/rundeck/client/api/model/User.java similarity index 100% rename from src/main/java/org/rundeck/client/api/model/User.java rename to rd-api-client/src/main/java/org/rundeck/client/api/model/User.java diff --git a/src/main/java/org/rundeck/client/api/model/sysinfo/Link.java b/rd-api-client/src/main/java/org/rundeck/client/api/model/sysinfo/Link.java similarity index 100% rename from src/main/java/org/rundeck/client/api/model/sysinfo/Link.java rename to rd-api-client/src/main/java/org/rundeck/client/api/model/sysinfo/Link.java diff --git a/src/main/java/org/rundeck/client/api/model/sysinfo/SystemStats.java b/rd-api-client/src/main/java/org/rundeck/client/api/model/sysinfo/SystemStats.java similarity index 100% rename from src/main/java/org/rundeck/client/api/model/sysinfo/SystemStats.java rename to rd-api-client/src/main/java/org/rundeck/client/api/model/sysinfo/SystemStats.java diff --git a/src/main/java/org/rundeck/client/util/Client.java b/rd-api-client/src/main/java/org/rundeck/client/util/Client.java similarity index 100% rename from src/main/java/org/rundeck/client/util/Client.java rename to rd-api-client/src/main/java/org/rundeck/client/util/Client.java diff --git a/src/main/java/org/rundeck/client/util/ConfigSource.java b/rd-api-client/src/main/java/org/rundeck/client/util/ConfigSource.java similarity index 78% rename from src/main/java/org/rundeck/client/util/ConfigSource.java rename to rd-api-client/src/main/java/org/rundeck/client/util/ConfigSource.java index b3bf0cf6..a637c557 100644 --- a/src/main/java/org/rundeck/client/util/ConfigSource.java +++ b/rd-api-client/src/main/java/org/rundeck/client/util/ConfigSource.java @@ -16,8 +16,6 @@ package org.rundeck.client.util; -import org.rundeck.toolbelt.InputError; - /** * @author greg * @since 1/11/17 @@ -34,6 +32,16 @@ public interface ConfigSource { String get(final String key); - String require(final String key, final String description) throws InputError; + String require(final String key, final String description) throws ConfigSourceError; + + class ConfigSourceError extends Exception { + public ConfigSourceError(final String message, final Throwable cause) { + super(message, cause); + } + + public ConfigSourceError(final String message) { + super(message); + } + } } diff --git a/rd-api-client/src/main/java/org/rundeck/client/util/DataOutput.java b/rd-api-client/src/main/java/org/rundeck/client/util/DataOutput.java new file mode 100644 index 00000000..18a30ed9 --- /dev/null +++ b/rd-api-client/src/main/java/org/rundeck/client/util/DataOutput.java @@ -0,0 +1,14 @@ +package org.rundeck.client.util; + +import java.util.List; +import java.util.Map; + +public interface DataOutput { + default Map asMap() { + return null; + } + + default List asList() { + return null; + } +} diff --git a/src/main/java/org/rundeck/client/util/Env.java b/rd-api-client/src/main/java/org/rundeck/client/util/Env.java similarity index 94% rename from src/main/java/org/rundeck/client/util/Env.java rename to rd-api-client/src/main/java/org/rundeck/client/util/Env.java index c0b22b00..163a8e02 100644 --- a/src/main/java/org/rundeck/client/util/Env.java +++ b/rd-api-client/src/main/java/org/rundeck/client/util/Env.java @@ -16,8 +16,6 @@ package org.rundeck.client.util; -import org.rundeck.toolbelt.InputError; - /** * Configuration values from System.getenv */ @@ -59,10 +57,10 @@ public String get(final String key) { return getString(key, null); } - public String require(final String name, final String description) throws InputError { + public String require(final String name, final String description) throws ConfigSourceError { String value = System.getenv(name); if (null == value) { - throw new InputError(String.format( + throw new ConfigSourceError(String.format( "Environment variable %s is required: %s", name, description diff --git a/src/main/java/org/rundeck/client/util/ExtConfigSource.java b/rd-api-client/src/main/java/org/rundeck/client/util/ExtConfigSource.java similarity index 96% rename from src/main/java/org/rundeck/client/util/ExtConfigSource.java rename to rd-api-client/src/main/java/org/rundeck/client/util/ExtConfigSource.java index 9c468f73..f1936cdd 100644 --- a/src/main/java/org/rundeck/client/util/ExtConfigSource.java +++ b/rd-api-client/src/main/java/org/rundeck/client/util/ExtConfigSource.java @@ -16,8 +16,6 @@ package org.rundeck.client.util; -import org.rundeck.toolbelt.InputError; - /** * @author greg * @since 1/11/17 @@ -55,7 +53,7 @@ public String get(final String key) { } @Override - public String require(final String key, final String description) throws InputError { + public String require(final String key, final String description) throws ConfigSourceError { return configSource.require(key, description); } } diff --git a/src/main/java/org/rundeck/client/util/FormAuthInterceptor.java b/rd-api-client/src/main/java/org/rundeck/client/util/FormAuthInterceptor.java similarity index 100% rename from src/main/java/org/rundeck/client/util/FormAuthInterceptor.java rename to rd-api-client/src/main/java/org/rundeck/client/util/FormAuthInterceptor.java diff --git a/src/main/java/org/rundeck/client/util/Format.java b/rd-api-client/src/main/java/org/rundeck/client/util/Format.java similarity index 100% rename from src/main/java/org/rundeck/client/util/Format.java rename to rd-api-client/src/main/java/org/rundeck/client/util/Format.java diff --git a/src/main/java/org/rundeck/client/util/Json.java b/rd-api-client/src/main/java/org/rundeck/client/util/Json.java similarity index 100% rename from src/main/java/org/rundeck/client/util/Json.java rename to rd-api-client/src/main/java/org/rundeck/client/util/Json.java diff --git a/src/main/java/org/rundeck/client/util/QualifiedTypeConverterFactory.java b/rd-api-client/src/main/java/org/rundeck/client/util/QualifiedTypeConverterFactory.java similarity index 100% rename from src/main/java/org/rundeck/client/util/QualifiedTypeConverterFactory.java rename to rd-api-client/src/main/java/org/rundeck/client/util/QualifiedTypeConverterFactory.java diff --git a/src/main/java/org/rundeck/client/util/Quoting.java b/rd-api-client/src/main/java/org/rundeck/client/util/Quoting.java similarity index 100% rename from src/main/java/org/rundeck/client/util/Quoting.java rename to rd-api-client/src/main/java/org/rundeck/client/util/Quoting.java diff --git a/src/main/java/org/rundeck/client/tool/AppConfig.java b/rd-api-client/src/main/java/org/rundeck/client/util/RdClientConfig.java similarity index 85% rename from src/main/java/org/rundeck/client/tool/AppConfig.java rename to rd-api-client/src/main/java/org/rundeck/client/util/RdClientConfig.java index 16a5d2d2..fc36a56d 100644 --- a/src/main/java/org/rundeck/client/tool/AppConfig.java +++ b/rd-api-client/src/main/java/org/rundeck/client/util/RdClientConfig.java @@ -14,15 +14,14 @@ * limitations under the License. */ -package org.rundeck.client.tool; +package org.rundeck.client.util; -import org.rundeck.client.util.ConfigSource; /** * @author greg * @since 1/11/17 */ -public interface AppConfig extends ConfigSource { +public interface RdClientConfig extends ConfigSource { boolean isAnsiEnabled(); int getDebugLevel(); diff --git a/src/main/java/org/rundeck/client/util/RedirectBypassInterceptor.java b/rd-api-client/src/main/java/org/rundeck/client/util/RedirectBypassInterceptor.java similarity index 100% rename from src/main/java/org/rundeck/client/util/RedirectBypassInterceptor.java rename to rd-api-client/src/main/java/org/rundeck/client/util/RedirectBypassInterceptor.java diff --git a/src/main/java/org/rundeck/client/util/SSLUtil.java b/rd-api-client/src/main/java/org/rundeck/client/util/SSLUtil.java similarity index 100% rename from src/main/java/org/rundeck/client/util/SSLUtil.java rename to rd-api-client/src/main/java/org/rundeck/client/util/SSLUtil.java diff --git a/src/main/java/org/rundeck/client/util/ServiceClient.java b/rd-api-client/src/main/java/org/rundeck/client/util/ServiceClient.java similarity index 100% rename from src/main/java/org/rundeck/client/util/ServiceClient.java rename to rd-api-client/src/main/java/org/rundeck/client/util/ServiceClient.java diff --git a/src/main/java/org/rundeck/client/util/StaticHeaderInterceptor.java b/rd-api-client/src/main/java/org/rundeck/client/util/StaticHeaderInterceptor.java similarity index 100% rename from src/main/java/org/rundeck/client/util/StaticHeaderInterceptor.java rename to rd-api-client/src/main/java/org/rundeck/client/util/StaticHeaderInterceptor.java diff --git a/src/main/java/org/rundeck/client/util/Util.java b/rd-api-client/src/main/java/org/rundeck/client/util/Util.java similarity index 100% rename from src/main/java/org/rundeck/client/util/Util.java rename to rd-api-client/src/main/java/org/rundeck/client/util/Util.java diff --git a/src/main/java/org/rundeck/client/util/Xml.java b/rd-api-client/src/main/java/org/rundeck/client/util/Xml.java similarity index 100% rename from src/main/java/org/rundeck/client/util/Xml.java rename to rd-api-client/src/main/java/org/rundeck/client/util/Xml.java diff --git a/settings.gradle b/settings.gradle index f39901dd..0ab28480 100644 --- a/settings.gradle +++ b/settings.gradle @@ -14,4 +14,4 @@ * limitations under the License. */ - +include 'rd-api-client' diff --git a/src/main/java/org/rundeck/client/tool/Main.java b/src/main/java/org/rundeck/client/tool/Main.java index ec23ec35..be1c4845 100644 --- a/src/main/java/org/rundeck/client/tool/Main.java +++ b/src/main/java/org/rundeck/client/tool/Main.java @@ -25,11 +25,9 @@ import org.rundeck.client.api.RundeckApi; import org.rundeck.client.api.model.*; import org.rundeck.client.tool.commands.*; -import org.rundeck.client.util.Client; -import org.rundeck.client.util.ConfigSource; -import org.rundeck.client.util.Env; -import org.rundeck.client.util.ExtConfigSource; +import org.rundeck.client.util.*; import org.yaml.snakeyaml.DumperOptions; +import org.yaml.snakeyaml.Yaml; import org.yaml.snakeyaml.nodes.Tag; import org.yaml.snakeyaml.representer.Representer; @@ -51,14 +49,8 @@ public class Main { public static final String ENV_TOKEN = "RD_TOKEN"; public static final String ENV_URL = "RD_URL"; public static final String ENV_API_VERSION = "RD_API_VERSION"; - /** - * If true, allow API version to be automatically degraded when unsupported version is detected - */ - public static final String RD_API_DOWNGRADE = "RD_API_DOWNGRADE"; public static final String ENV_AUTH_PROMPT = "RD_AUTH_PROMPT"; public static final String ENV_DEBUG = "RD_DEBUG"; - public static final String ENV_HTTP_TIMEOUT = "RD_HTTP_TIMEOUT"; - public static final String ENV_CONNECT_RETRY = "RD_CONNECT_RETRY"; public static final String ENV_RD_FORMAT = "RD_FORMAT"; public static void main(String[] args) throws CommandRunFailure { @@ -80,7 +72,7 @@ public static void main(String[] args) throws CommandRunFailure { } } - private static void setupFormat(final ToolBelt belt, AppConfig config) { + private static void setupFormat(final ToolBelt belt, RdClientConfig config) { final String format = config.get(ENV_RD_FORMAT); if ("yaml".equalsIgnoreCase(format)) { configYamlFormat(belt, config); @@ -98,8 +90,8 @@ private static void configNiceFormat(final ToolBelt belt) { NiceFormatter formatter = new NiceFormatter(null) { @Override public String format(final Object o) { - if (o instanceof Formatable) { - Formatable o1 = (Formatable) o; + if (o instanceof DataOutput) { + DataOutput o1 = (DataOutput) o; Map map = o1.asMap(); if (null != map) { return super.format(map); @@ -121,13 +113,13 @@ public String format(final Object o) { } private static void configJsonFormat(final ToolBelt belt) { - belt.formatter(new JsonFormatter()); + belt.formatter(new JsonFormatter(DataOutputAsFormatable)); belt.channels().infoEnabled(false); belt.channels().warningEnabled(false); belt.channels().errorEnabled(false); } - private static void configYamlFormat(final ToolBelt belt, final AppConfig config) { + private static void configYamlFormat(final ToolBelt belt, final RdClientConfig config) { DumperOptions dumperOptions = new DumperOptions(); dumperOptions.setDefaultFlowStyle( "BLOCK".equalsIgnoreCase(config.getString("RD_YAML_FLOW", "BLOCK")) ? @@ -140,12 +132,29 @@ private static void configYamlFormat(final ToolBelt belt, final AppConfig config representer.addClassTag(ScheduledJobItem.class, Tag.MAP); representer.addClassTag(DateInfo.class, Tag.MAP); representer.addClassTag(Execution.class, Tag.MAP); - belt.formatter(new YamlFormatter(representer, dumperOptions)); + belt.formatter(new YamlFormatter(DataOutputAsFormatable, new Yaml(representer, dumperOptions))); belt.channels().infoEnabled(false); belt.channels().warningEnabled(false); belt.channels().errorEnabled(false); } + private static final Function> DataOutputAsFormatable = o -> { + if (o instanceof DataOutput) { + return Optional.of(new Formatable() { + @Override + public List asList() { + return ((DataOutput) o).asList(); + } + + @Override + public Map asMap() { + return ((DataOutput) o).asMap(); + } + }); + } + return Optional.empty(); + }; + public static Tool tool(final Rd rd) { ToolBelt belt = ToolBelt.belt("rd") .defaultHelpCommands() @@ -184,7 +193,7 @@ public static Tool tool(final Rd rd) { return belt.buckle(); } - static class Rd extends ExtConfigSource implements RdApp, AppConfig { + static class Rd extends ExtConfigSource implements RdApp, RdClientConfig { Client client; private CommandOutput output; @@ -215,19 +224,27 @@ public String getDateFormat() { @Override public Client getClient() throws InputError { if (null == client) { - client = Main.createClient(this); + try { + client = Main.createClient(this); + } catch (ConfigSourceError configSourceError) { + throw new InputError(configSourceError.getMessage()); + } } return client; } @Override public Client getClient(final int version) throws InputError { - client = Main.createClient(this, version); + try { + client = Main.createClient(this, version); + } catch (ConfigSourceError configSourceError) { + throw new InputError(configSourceError.getMessage()); + } return client; } @Override - public AppConfig getAppConfig() { + public RdClientConfig getAppConfig() { return this; } @@ -256,7 +273,7 @@ public void setOutput(CommandOutput output) { } } - private static void setupColor(final ToolBelt belt, AppConfig config) { + private static void setupColor(final ToolBelt belt, RdClientConfig config) { if (config.isAnsiEnabled()) { String info = config.get("RD_COLOR_INFO"); if (null != info) { @@ -278,11 +295,13 @@ private static void setupColor(final ToolBelt belt, AppConfig config) { } - public static Client createClient(Rd config) throws InputError { + public static Client createClient(Rd config) throws InputError, ConfigSource.ConfigSourceError { return createClient(config, null); } - public static Client createClient(Rd config, Integer requestedVersion) throws InputError { + public static Client createClient(Rd config, Integer requestedVersion) + throws InputError, ConfigSource.ConfigSourceError + { Auth auth = new Auth() { }; auth = auth.chain(new ConfigAuth(config)); diff --git a/src/main/java/org/rundeck/client/tool/RdApp.java b/src/main/java/org/rundeck/client/tool/RdApp.java index 74140d7f..57acfcb8 100644 --- a/src/main/java/org/rundeck/client/tool/RdApp.java +++ b/src/main/java/org/rundeck/client/tool/RdApp.java @@ -19,8 +19,7 @@ import org.rundeck.toolbelt.CommandOutput; import org.rundeck.toolbelt.InputError; import org.rundeck.client.api.RundeckApi; -import org.rundeck.client.tool.AppConfig; -import org.rundeck.client.util.Client; +import org.rundeck.client.util.RdClientConfig; import org.rundeck.client.util.ServiceClient; /** @@ -48,7 +47,7 @@ public interface RdApp { /** * @return app config */ - AppConfig getAppConfig(); + RdClientConfig getAppConfig(); /** * @return output endpoint diff --git a/src/main/java/org/rundeck/client/tool/commands/AppCommand.java b/src/main/java/org/rundeck/client/tool/commands/AppCommand.java index 0724e631..ecca5350 100644 --- a/src/main/java/org/rundeck/client/tool/commands/AppCommand.java +++ b/src/main/java/org/rundeck/client/tool/commands/AppCommand.java @@ -18,7 +18,8 @@ import org.rundeck.toolbelt.InputError; import org.rundeck.client.api.RundeckApi; -import org.rundeck.client.tool.AppConfig; +import org.rundeck.client.util.ConfigSource; +import org.rundeck.client.util.RdClientConfig; import org.rundeck.client.tool.RdApp; import org.rundeck.client.tool.options.ProjectNameOptions; import org.rundeck.client.util.Client; @@ -42,7 +43,7 @@ public ServiceClient getClient() throws InputError { return rdApp.getClient(); } - public AppConfig getAppConfig() { + public RdClientConfig getAppConfig() { return rdApp.getAppConfig(); } @@ -166,7 +167,11 @@ public String projectOrEnv(final ProjectNameOptions options) throws InputError { if (null != options.getProject()) { return options.getProject(); } - return getAppConfig().require("RD_PROJECT", "or specify as `-p/--project value` : Project name."); + try { + return getAppConfig().require("RD_PROJECT", "or specify as `-p/--project value` : Project name."); + } catch (ConfigSource.ConfigSourceError configSourceError) { + throw new InputError(configSourceError.getMessage()); + } } public RdApp getRdApp() { diff --git a/src/main/java/org/rundeck/client/tool/commands/Executions.java b/src/main/java/org/rundeck/client/tool/commands/Executions.java index dae7553d..351511a2 100644 --- a/src/main/java/org/rundeck/client/tool/commands/Executions.java +++ b/src/main/java/org/rundeck/client/tool/commands/Executions.java @@ -24,7 +24,7 @@ import org.rundeck.toolbelt.InputError; import org.rundeck.client.api.RundeckApi; import org.rundeck.client.api.model.*; -import org.rundeck.client.tool.AppConfig; +import org.rundeck.client.util.RdClientConfig; import org.rundeck.client.tool.RdApp; import org.rundeck.client.tool.options.*; import org.rundeck.client.util.Format; @@ -555,7 +555,7 @@ private Map createQueryParams( public static void outputExecutionList( final ExecutionResultOptions options, final CommandOutput out, - final AppConfig config, + final RdClientConfig config, final Stream executions ) { diff --git a/src/main/java/org/rundeck/client/tool/commands/RDSystem.java b/src/main/java/org/rundeck/client/tool/commands/RDSystem.java index 0c3eb313..86845ff5 100644 --- a/src/main/java/org/rundeck/client/tool/commands/RDSystem.java +++ b/src/main/java/org/rundeck/client/tool/commands/RDSystem.java @@ -28,7 +28,6 @@ import java.io.IOException; import java.util.Arrays; -import java.util.Collections; import java.util.List; /** diff --git a/src/main/java/org/rundeck/client/tool/commands/jobs/Files.java b/src/main/java/org/rundeck/client/tool/commands/jobs/Files.java index 109214e7..c23cbb55 100644 --- a/src/main/java/org/rundeck/client/tool/commands/jobs/Files.java +++ b/src/main/java/org/rundeck/client/tool/commands/jobs/Files.java @@ -115,7 +115,7 @@ public void list(FileListOpts opts, CommandOutput out) throws IOException, Input out.info(paging); } - out.output(result.getFiles()); + out.output(result.asList()); if (paging != null && paging.hasMoreResults()) { diff --git a/src/main/java/org/rundeck/client/tool/commands/projects/ACLs.java b/src/main/java/org/rundeck/client/tool/commands/projects/ACLs.java index 8ce2bde9..d80ad18e 100644 --- a/src/main/java/org/rundeck/client/tool/commands/projects/ACLs.java +++ b/src/main/java/org/rundeck/client/tool/commands/projects/ACLs.java @@ -33,7 +33,7 @@ import org.rundeck.client.tool.options.ACLOutputOptions; import org.rundeck.client.tool.options.ProjectNameOptions; import org.rundeck.client.util.Client; -import org.rundeck.client.util.Colorz; +import org.rundeck.client.tool.util.Colorz; import org.rundeck.client.util.Format; import org.rundeck.client.util.ServiceClient; import retrofit2.Call; diff --git a/src/main/java/org/rundeck/client/tool/commands/projects/SCM.java b/src/main/java/org/rundeck/client/tool/commands/projects/SCM.java index 4ec414cb..12e17755 100644 --- a/src/main/java/org/rundeck/client/tool/commands/projects/SCM.java +++ b/src/main/java/org/rundeck/client/tool/commands/projects/SCM.java @@ -33,7 +33,7 @@ import org.rundeck.client.tool.options.ProjectNameOptions; import org.rundeck.client.tool.options.VerboseOption; import org.rundeck.client.util.Client; -import org.rundeck.client.util.Colorz; +import org.rundeck.client.tool.util.Colorz; import org.rundeck.client.util.ServiceClient; import retrofit2.Response; diff --git a/src/main/java/org/rundeck/client/tool/commands/system/ACLs.java b/src/main/java/org/rundeck/client/tool/commands/system/ACLs.java index d096fd9b..5d77f0a2 100644 --- a/src/main/java/org/rundeck/client/tool/commands/system/ACLs.java +++ b/src/main/java/org/rundeck/client/tool/commands/system/ACLs.java @@ -29,8 +29,6 @@ import org.rundeck.client.tool.commands.projects.ACLFileOptions; import org.rundeck.client.tool.commands.projects.ACLNameOptions; import org.rundeck.client.tool.options.ACLOutputOptions; -import org.rundeck.client.util.Client; -import org.rundeck.client.util.ServiceClient; import java.io.IOException; diff --git a/src/main/java/org/rundeck/client/tool/commands/system/Mode.java b/src/main/java/org/rundeck/client/tool/commands/system/Mode.java index 14c43943..8eef4435 100644 --- a/src/main/java/org/rundeck/client/tool/commands/system/Mode.java +++ b/src/main/java/org/rundeck/client/tool/commands/system/Mode.java @@ -12,7 +12,6 @@ import org.rundeck.client.tool.RdApp; import org.rundeck.client.tool.commands.AppCommand; import org.rundeck.client.tool.options.QuietOption; -import org.rundeck.client.util.ServiceClient; import retrofit2.Call; import java.io.IOException; diff --git a/src/main/java/org/rundeck/client/util/Colorz.java b/src/main/java/org/rundeck/client/tool/util/Colorz.java similarity index 98% rename from src/main/java/org/rundeck/client/util/Colorz.java rename to src/main/java/org/rundeck/client/tool/util/Colorz.java index 4e17bc15..33b82360 100644 --- a/src/main/java/org/rundeck/client/util/Colorz.java +++ b/src/main/java/org/rundeck/client/tool/util/Colorz.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.rundeck.client.util; +package org.rundeck.client.tool.util; import org.rundeck.toolbelt.ANSIColorOutput; diff --git a/src/test/groovy/org/rundeck/client/tool/commands/ExecutionsSpec.groovy b/src/test/groovy/org/rundeck/client/tool/commands/ExecutionsSpec.groovy index 43b158be..c8f73f47 100644 --- a/src/test/groovy/org/rundeck/client/tool/commands/ExecutionsSpec.groovy +++ b/src/test/groovy/org/rundeck/client/tool/commands/ExecutionsSpec.groovy @@ -18,10 +18,10 @@ package org.rundeck.client.tool.commands import org.rundeck.client.api.model.Execution import org.rundeck.client.api.model.ExecutionList -import org.rundeck.client.tool.AppConfig import org.rundeck.client.api.model.JobItem import org.rundeck.client.api.model.Paging import org.rundeck.client.tool.RdApp +import org.rundeck.client.util.RdClientConfig import org.rundeck.toolbelt.CommandOutput import okhttp3.mockwebserver.MockResponse import okhttp3.mockwebserver.MockWebServer @@ -48,7 +48,7 @@ class ExecutionsSpec extends Specification { def client = new Client(api, retrofit, null, null, 18, true, null) def hasclient = Mock(RdApp) { getClient() >> client - getAppConfig() >> Mock(AppConfig) + getAppConfig() >> Mock(RdClientConfig) } Executions command = new Executions(hasclient) def out = Mock(CommandOutput) @@ -307,7 +307,7 @@ class ExecutionsSpec extends Specification { } def hasclient = Mock(RdApp) { getClient() >> client - getAppConfig() >> Mock(AppConfig) + getAppConfig() >> Mock(RdClientConfig) } def command = new Executions(hasclient) def out = Mock(CommandOutput) diff --git a/src/test/groovy/org/rundeck/client/tool/commands/JobsSpec.groovy b/src/test/groovy/org/rundeck/client/tool/commands/JobsSpec.groovy index c729bad1..2e638788 100644 --- a/src/test/groovy/org/rundeck/client/tool/commands/JobsSpec.groovy +++ b/src/test/groovy/org/rundeck/client/tool/commands/JobsSpec.groovy @@ -16,12 +16,17 @@ package org.rundeck.client.tool.commands +import org.rundeck.client.api.model.Simple import org.rundeck.toolbelt.CommandOutput import org.rundeck.toolbelt.InputError import okhttp3.MediaType import okhttp3.ResponseBody import org.rundeck.client.api.RundeckApi -import org.rundeck.client.api.model.* +import org.rundeck.client.api.model.DeleteJobsResult +import org.rundeck.client.api.model.ImportResult +import org.rundeck.client.api.model.JobItem +import org.rundeck.client.api.model.JobLoadItem +import org.rundeck.client.api.model.ScheduledJobItem import org.rundeck.client.tool.RdApp import org.rundeck.client.util.Client import retrofit2.Retrofit diff --git a/src/test/groovy/org/rundeck/client/tool/commands/RetrySpec.groovy b/src/test/groovy/org/rundeck/client/tool/commands/RetrySpec.groovy index c1c20f76..ef8cc0da 100644 --- a/src/test/groovy/org/rundeck/client/tool/commands/RetrySpec.groovy +++ b/src/test/groovy/org/rundeck/client/tool/commands/RetrySpec.groovy @@ -21,7 +21,6 @@ import org.rundeck.client.api.model.Execution import org.rundeck.client.api.model.JobFileUploadResult import org.rundeck.client.api.model.JobItem import org.rundeck.client.api.model.JobRun -import org.rundeck.client.tool.AppConfig import org.rundeck.client.tool.RdApp import org.rundeck.client.tool.options.RetryBaseOptions import org.rundeck.client.tool.options.RunBaseOptions @@ -57,10 +56,8 @@ class RetrySpec extends Specification { } def retrofit = new Retrofit.Builder().baseUrl('http://example.com/fake/').build() def client = new Client(api, retrofit, null, null, 24, true, null) - def appConfig = Mock(AppConfig) def hasclient = Mock(RdApp) { getClient() >> client - getAppConfig() >> appConfig } Retry retry = new Retry(hasclient) def out = Mock(CommandOutput) @@ -103,10 +100,8 @@ class RetrySpec extends Specification { } def retrofit = new Retrofit.Builder().baseUrl('http://example.com/fake/').build() def client = new Client(api, retrofit, null, null, 23, true, null) - def appConfig = Mock(AppConfig) def hasclient = Mock(RdApp) { getClient() >> client - getAppConfig() >> appConfig } Retry retry = new Retry(hasclient) def out = Mock(CommandOutput) diff --git a/src/test/groovy/org/rundeck/client/tool/commands/RunSpec.groovy b/src/test/groovy/org/rundeck/client/tool/commands/RunSpec.groovy index 9ce5ffff..66bd6c36 100644 --- a/src/test/groovy/org/rundeck/client/tool/commands/RunSpec.groovy +++ b/src/test/groovy/org/rundeck/client/tool/commands/RunSpec.groovy @@ -22,7 +22,7 @@ import org.rundeck.client.api.model.Execution import org.rundeck.client.api.model.JobFileUploadResult import org.rundeck.client.api.model.JobItem import org.rundeck.client.api.model.JobRun -import org.rundeck.client.tool.AppConfig +import org.rundeck.client.util.RdClientConfig import org.rundeck.client.tool.RdApp import org.rundeck.client.tool.options.RunBaseOptions import org.rundeck.client.util.Client @@ -80,7 +80,7 @@ class RunSpec extends Specification { } def retrofit = new Retrofit.Builder().baseUrl('http://example.com/fake/').build() def client = new Client(api, retrofit, null, null, 17, true, null) - def appConfig = Mock(AppConfig) + def appConfig = Mock(RdClientConfig) def hasclient = Mock(RdApp) { getClient() >> client getAppConfig() >> appConfig @@ -127,7 +127,7 @@ class RunSpec extends Specification { } def retrofit = new Retrofit.Builder().baseUrl('http://example.com/fake/').build() def client = new Client(api, retrofit, null, null, 19, true, null) - def appConfig = Mock(AppConfig) + def appConfig = Mock(RdClientConfig) def hasclient = Mock(RdApp) { getClient() >> client getAppConfig() >> appConfig @@ -174,7 +174,7 @@ class RunSpec extends Specification { } def retrofit = new Retrofit.Builder().baseUrl('http://example.com/fake/').build() def client = new Client(api, retrofit, null, null, 19, true, null) - def appConfig = Mock(AppConfig) + def appConfig = Mock(RdClientConfig) def hasclient = Mock(RdApp) { getClient() >> client getAppConfig() >> appConfig diff --git a/src/test/groovy/org/rundeck/client/tool/commands/UsersSpec.groovy b/src/test/groovy/org/rundeck/client/tool/commands/UsersSpec.groovy index fffca601..a4fd53f2 100644 --- a/src/test/groovy/org/rundeck/client/tool/commands/UsersSpec.groovy +++ b/src/test/groovy/org/rundeck/client/tool/commands/UsersSpec.groovy @@ -51,11 +51,11 @@ class UsersSpec extends Specification { then: sameUserEndpoint * api.getUserInfo() >> Calls.response( - new User(login: 'login',email: 'test@email.com') + new User(login: 'login', email: 'test@email.com') ) otherUserEndpoint * api.getUserInfo(username) >> Calls.response( - new User(login: username,email: 'test@email.com') + new User(login: username, email: 'test@email.com') ) 1 * out.output(result) @@ -92,11 +92,11 @@ class UsersSpec extends Specification { then: sameUserEndpoint * api.editUserInfo(_) >> Calls.response( - new User(login: 'login',email: 'test@email.com') + new User(login: 'login', email: 'test@email.com') ) otherUserEndpoint * api.editUserInfo(username,_) >> Calls.response( - new User(login: username,email: 'test@email.com') + new User(login: username, email: 'test@email.com') ) 1 * out.output(result) @@ -126,7 +126,7 @@ class UsersSpec extends Specification { List arr = new ArrayList() if(userCount>0){ (1..userCount).each{ - arr.push(new User(login: 'login',email: 'test@email.com')) + arr.push(new User(login: 'login', email: 'test@email.com')) } } def opt = Mock(Users.ListOption) diff --git a/src/test/groovy/org/rundeck/client/tool/commands/projects/ACLsSpec.groovy b/src/test/groovy/org/rundeck/client/tool/commands/projects/ACLsSpec.groovy index 74b7be9c..325fdffe 100644 --- a/src/test/groovy/org/rundeck/client/tool/commands/projects/ACLsSpec.groovy +++ b/src/test/groovy/org/rundeck/client/tool/commands/projects/ACLsSpec.groovy @@ -4,7 +4,7 @@ import org.rundeck.toolbelt.CommandOutput import okhttp3.ResponseBody import org.rundeck.client.api.RequestFailed import org.rundeck.client.api.RundeckApi -import org.rundeck.client.tool.AppConfig +import org.rundeck.client.util.RdClientConfig import org.rundeck.client.tool.Main import org.rundeck.client.tool.RdApp import org.rundeck.client.util.Client @@ -42,7 +42,7 @@ class ACLsSpec extends Specification { def out = Mock(CommandOutput) def client = new Client(api, retrofit, null, null, 18, true, new Main.OutputLogger(out)) - def appConfig = Mock(AppConfig) + def appConfig = Mock(RdClientConfig) def hasclient = Mock(RdApp) { getClient() >> client diff --git a/src/test/groovy/org/rundeck/client/tool/commands/projects/SCMSpec.groovy b/src/test/groovy/org/rundeck/client/tool/commands/projects/SCMSpec.groovy index 62a90b51..a954f720 100644 --- a/src/test/groovy/org/rundeck/client/tool/commands/projects/SCMSpec.groovy +++ b/src/test/groovy/org/rundeck/client/tool/commands/projects/SCMSpec.groovy @@ -28,7 +28,7 @@ import org.rundeck.client.api.model.ScmInputField import org.rundeck.client.api.model.ScmJobItem import org.rundeck.client.api.model.ScmProjectStatusResult import org.rundeck.client.api.model.ScmSynchState -import org.rundeck.client.tool.AppConfig +import org.rundeck.client.util.RdClientConfig import org.rundeck.client.tool.Main import org.rundeck.client.tool.RdApp import org.rundeck.client.util.Client @@ -53,7 +53,7 @@ class SCMSpec extends Specification { def out = Mock(CommandOutput) def client = new Client(api, retrofit, null, null, 18, true, new Main.OutputLogger(out)) - def appConfig = Mock(AppConfig) + def appConfig = Mock(RdClientConfig) def hasclient = Mock(RdApp) { getClient() >> client @@ -93,7 +93,7 @@ class SCMSpec extends Specification { def out = Mock(CommandOutput) def client = new Client(api, retrofit, null, null, 18, true, new Main.OutputLogger(out)) - def appConfig = Mock(AppConfig) + def appConfig = Mock(RdClientConfig) def hasclient = Mock(RdApp) { getClient() >> client @@ -148,7 +148,7 @@ class SCMSpec extends Specification { def out = Mock(CommandOutput) def client = new Client(api, retrofit, null, null, 18, true, new Main.OutputLogger(out)) - def appConfig = Mock(AppConfig) + def appConfig = Mock(RdClientConfig) def hasclient = Mock(RdApp) { getClient() >> client @@ -199,7 +199,7 @@ class SCMSpec extends Specification { def retrofit = new Retrofit.Builder().baseUrl('http://example.com/fake/').build() def client = new Client(api, retrofit, null, null, 18, true, null) - def appConfig = Mock(AppConfig) + def appConfig = Mock(RdClientConfig) def hasclient = Mock(RdApp) { getClient() >> client @@ -284,7 +284,7 @@ class SCMSpec extends Specification { def retrofit = new Retrofit.Builder().baseUrl('http://example.com/fake/').build() def client = new Client(api, retrofit, null, null, 18, true, null) - def appConfig = Mock(AppConfig) + def appConfig = Mock(RdClientConfig) def hasclient = Mock(RdApp) { getClient() >> client