Skip to content

Commit

Permalink
version 1.0.2
Browse files Browse the repository at this point in the history
  • Loading branch information
loiclefevre committed Oct 14, 2020
1 parent 59fed86 commit 732f56f
Show file tree
Hide file tree
Showing 20 changed files with 559 additions and 138 deletions.
17 changes: 9 additions & 8 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,18 @@

<groupId>com.oracle</groupId>
<artifactId>dragon</artifactId>
<version>1.0.1</version>
<version>1.0.2</version>

<name>Dragon Stack</name>

<properties>
<targetJavaVersion>1.8</targetJavaVersion>
<targetJavaVersion>11</targetJavaVersion>
<maven.compiler.source>${targetJavaVersion}</maven.compiler.source>
<maven.compiler.target>${targetJavaVersion}</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven-jar-plugin.version>2.4</maven-jar-plugin.version>
<graalvm.version>20.2.0</graalvm.version>
<oci.sdk.version>1.24.0</oci.sdk.version>
</properties>

<dependencies>
Expand All @@ -40,27 +41,27 @@
<dependency>
<groupId>com.oracle.oci.sdk</groupId>
<artifactId>oci-java-sdk-core</artifactId>
<version>1.23.2</version>
<version>${oci.sdk.version}</version>
</dependency>
<dependency>
<groupId>com.oracle.oci.sdk</groupId>
<artifactId>oci-java-sdk-objectstorage</artifactId>
<version>1.23.2</version>
<version>${oci.sdk.version}</version>
</dependency>
<dependency>
<groupId>com.oracle.oci.sdk</groupId>
<artifactId>oci-java-sdk-database</artifactId>
<version>1.23.2</version>
<version>${oci.sdk.version}</version>
</dependency>
<dependency>
<groupId>com.oracle.oci.sdk</groupId>
<artifactId>oci-java-sdk-workrequests</artifactId>
<version>1.23.2</version>
<version>${oci.sdk.version}</version>
</dependency>
<dependency>
<groupId>com.oracle.oci.sdk</groupId>
<artifactId>oci-java-sdk-identity</artifactId>
<version>1.23.2</version>
<version>${oci.sdk.version}</version>
</dependency>
<dependency>
<groupId>org.graalvm.sdk</groupId>
Expand Down Expand Up @@ -134,7 +135,7 @@
</executions>
<configuration>
<skip>false</skip>
<imageName>dragon-${os.detected.name}-${os.detected.arch}-${version}</imageName>
<imageName>dragon-${os.detected.classifier}-${version}</imageName>
<mainClass>com.oracle.dragon.DragonStack</mainClass>
<buildArgs>
--no-fallback
Expand Down
2 changes: 2 additions & 0 deletions src/main/java/com/oracle/dragon/DragonStack.java
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,8 @@ public static void main(final String[] args) {

session.loadConfiguration();

session.displayInformation();

session.initializeClients();

session.work();
Expand Down
72 changes: 52 additions & 20 deletions src/main/java/com/oracle/dragon/util/ADBRESTService.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,19 +5,37 @@
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.Base64;

/**
* Runs SQL queries using the REST service of Autonomous Databases (ADBs).
*/
public class ADBRESTService {
/**
* URL of the service.
*/
private final String urlSQLService;

/**
* SODA service URL.
*/
private final String urlSODAService;

private final String urlPrefix;

/**
* User for authentication.
*/
private final String user;

/**
* Password for authentication.
*/
private final String password;

public ADBRESTService(final String sqlDevWebUrl, final String user, final String password) {
String url = sqlDevWebUrl;
final String url = sqlDevWebUrl;
int ordsPos = url.indexOf("/ords/");
this.urlPrefix = url.substring(0, ordsPos + 6) + user.toLowerCase() + "/";
this.urlSQLService = this.urlPrefix + "_/sql";
Expand All @@ -26,15 +44,16 @@ public ADBRESTService(final String sqlDevWebUrl, final String user, final String
this.password = password;
}

public String execute(String command) {
public String execute(final String command) {
try {
HttpRequest request = HttpRequest.newBuilder()
final HttpRequest request = HttpRequest.newBuilder()
.uri(new URI(urlSQLService))
.headers("Content-Type", "application/sql", "Authorization", basicAuth(user, password))
.headers("Content-Type", "application/sql",
"Authorization", basicAuth(user, password))
.POST(HttpRequest.BodyPublishers.ofString(command))
.build();

HttpResponse<String> response = HttpClient
final HttpResponse<String> response = HttpClient
.newBuilder()
.version(HttpClient.Version.HTTP_1_1)
.proxy(ProxySelector.getDefault())
Expand All @@ -51,27 +70,40 @@ public String execute(String command) {
}
}

private String basicAuth(String user, String password) {
return "Basic " + Base64.getEncoder().encodeToString((user + ":" + password).getBytes());
/**
* BASIC authentication encoding in base 64.
*
* @param user user to use for authentication
* @param password password to use for authentication
* @return the base 64 encoded authentication signature
*/
private String basicAuth(final String user, final String password) {
return String.format("Basic %s", Base64.getEncoder().encodeToString((String.format("%s:%s",user, password)).getBytes()));
}

public String createSODACollection(String collectionName) {
/**
* Creates a SODA collection.
*
* @param collectionName the name of the SODA collection
* @return the HTTPS response body
*/
public String createSODACollection(final String collectionName) {
try {
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI(urlSODAService+collectionName))
.headers( "Authorization", basicAuth(user, password))
final HttpRequest request = HttpRequest.newBuilder()
.uri(new URI(urlSODAService + collectionName))
.headers("Authorization", basicAuth(user, password))
.PUT(HttpRequest.BodyPublishers.ofString("{}"))
.build();

HttpResponse<String> response = HttpClient
final HttpResponse<String> response = HttpClient
.newBuilder()
.version(HttpClient.Version.HTTP_1_1)
.proxy(ProxySelector.getDefault())
.build()
.send(request, HttpResponse.BodyHandlers.ofString());

if (response.statusCode() != 201) {
throw new RuntimeException("Request was not successful (" + response.statusCode() + "):\n"+response.body());
throw new RuntimeException("Request was not successful (" + response.statusCode() + "):\n" + response.body());
}

return response.body();
Expand All @@ -80,28 +112,28 @@ public String createSODACollection(String collectionName) {
}
}

public String insertDocument(String collectionName, String document) {
public String insertDocument(final String collectionName, final String document) {
try {
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI(urlSODAService+collectionName))
final HttpRequest request = HttpRequest.newBuilder()
.uri(new URI(urlSODAService + collectionName))
.headers("Content-Type", "application/json", "Authorization", basicAuth(user, password))
.POST(HttpRequest.BodyPublishers.ofString(document, StandardCharsets.UTF_8))
.build();

HttpResponse<String> response = HttpClient
final HttpResponse<String> response = HttpClient
.newBuilder()
.version(HttpClient.Version.HTTP_1_1)
.proxy(ProxySelector.getDefault())
.build()
.send(request, HttpResponse.BodyHandlers.ofString());

if (response.statusCode() != 201) {
throw new RuntimeException("Request was not successful (" + response.statusCode() + "):\n"+response.body());
throw new RuntimeException("Request was not successful (" + response.statusCode() + "):\n" + response.body());
}

return response.body();
} catch (Exception e) {
throw new RuntimeException("REST SODA Service could not insert document "+document+" into collection " + collectionName, e);
throw new RuntimeException("REST SODA Service could not insert document " + document + " into collection " + collectionName, e);
}
}
}
18 changes: 13 additions & 5 deletions src/main/java/com/oracle/dragon/util/Console.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,18 @@

import java.time.Duration;

/**
* Console related helper methods.
*/
public class Console {

/**
* Enable or disable console output ANSI color coding usage.
*/
public static boolean ENABLE_COLORS = true;

public final static int MAX_COLUMNS = 80;

public enum Style {
ANSI_RESET("\u001B[0m"),
ANSI_BLACK("\u001B[30m"),
Expand All @@ -25,7 +33,7 @@ public enum Style {
ANSI_CYAN_BACKGROUND("\u001B[46m"),
ANSI_WHITE_BACKGROUND("\u001B[47m");

private String pattern;
private final String pattern;

Style(final String pattern) {
this.pattern = pattern;
Expand All @@ -37,9 +45,9 @@ public String toString() {
}
}

public static void print80(final String section, final String msg) {
public static void printBounded(final String section, final String msg) {
final int total = section.length() + msg.length() + 2 + 1;
int spaces = 80 - total + 1;
int spaces = MAX_COLUMNS - total + 1;
final StringBuilder sb = new StringBuilder("> ").append(section);

for (int i = 0; i < spaces; i++) {
Expand All @@ -55,8 +63,8 @@ public static void print80(final String section, final String msg) {
print(sb.toString());
}

public static void print80ln(final String section, final String msg) {
print80(section, msg);
public static void printBoundedln(final String section, final String msg) {
printBounded(section, msg);
println();
}

Expand Down
Loading

0 comments on commit 732f56f

Please sign in to comment.