diff --git a/week5_TinsaeGhilay/client/pom.xml b/week5_TinsaeGhilay/client/pom.xml new file mode 100644 index 0000000..37ea0c2 --- /dev/null +++ b/week5_TinsaeGhilay/client/pom.xml @@ -0,0 +1,44 @@ + + + 4.0.0 + + net.tinsae + client + 1.0-SNAPSHOT + + + 21 + 21 + 5.10.0 + + + + jakarta.enterprise + jakarta.enterprise.cdi-api + 4.1.0 + provided + + + jakarta.ws.rs + jakarta.ws.rs-api + 4.0.0 + provided + + + + org.junit.jupiter + junit-jupiter-api + ${junit.version} + test + + + org.junit.jupiter + junit-jupiter-engine + ${junit.version} + test + + + + \ No newline at end of file diff --git a/week5_TinsaeGhilay/client/src/main/java/net/tinsae/Client.java b/week5_TinsaeGhilay/client/src/main/java/net/tinsae/Client.java new file mode 100644 index 0000000..0abee46 --- /dev/null +++ b/week5_TinsaeGhilay/client/src/main/java/net/tinsae/Client.java @@ -0,0 +1,78 @@ +package net.tinsae; + +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; + +public class Client { + private String url; + private String table = "/items"; + + public Client(String url){ + this.url = url+table; + } + + private static final HttpClient client = HttpClient.newHttpClient(); + + public static void main(String[] args) throws Exception { + + + } + + + public int postItem(String json) throws Exception { + HttpRequest request = HttpRequest.newBuilder() + .uri(new URI(url)) + .header("Content-Type", "application/json") + .POST(HttpRequest.BodyPublishers.ofString(json)) + .build(); + + HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString()); + return response.statusCode(); + } + + public int putItem(int id, String json) throws Exception { + HttpRequest request = HttpRequest.newBuilder() + .uri(new URI(url + "/" + id)) + .header("Content-Type", "application/json") + .PUT(HttpRequest.BodyPublishers.ofString(json)) + .build(); + + HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString()); + return response.statusCode(); + } + + public int deleteItem(int id) throws Exception { + HttpRequest request = HttpRequest.newBuilder() + .uri(new URI(url + "/" + id)) + .DELETE() + .build(); + + HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString()); + return response.statusCode(); + } + + + public int getItems() throws Exception { + HttpRequest request = HttpRequest.newBuilder() + .uri(new URI(url)) + .GET() + .build(); + + HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString()); + System.out.println(response.body()); + return response.statusCode(); + } + + public int getItem(int id) throws Exception { + HttpRequest request = HttpRequest.newBuilder() + .uri(new URI(url+"/"+id)) + .GET() + .build(); + + HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString()); + System.out.println(response.body()); + return response.statusCode(); + } +} diff --git a/week5_TinsaeGhilay/client/src/main/java/net/tinsae/Delegator.java b/week5_TinsaeGhilay/client/src/main/java/net/tinsae/Delegator.java new file mode 100644 index 0000000..6c76660 --- /dev/null +++ b/week5_TinsaeGhilay/client/src/main/java/net/tinsae/Delegator.java @@ -0,0 +1,89 @@ +package net.tinsae; + +import java.util.Scanner; + +public class Delegator { + + private final Client client; + private final Scanner sc = new Scanner(System.in); + + public Delegator(String path) { + client = new Client(path); + } + + public void executeCommand(String command) { + switch (command) { + case "delete" -> delegateDelete(); + case "insert" -> delegateInsert(); + case "read" -> delegateRead(); + case "update" -> delegateUpdate(); + default -> System.err.println("Unknown command, please repeat"); + } + } + + private void delegateDelete() { + try { + System.out.print("ID of the item you want to delete: "); + int id = sc.nextInt(); + sc.nextLine(); // consume newline + int response = client.deleteItem(id); + System.out.println("Command executed with response code " + response); + } catch (Exception e) { + System.err.println("Error in executing delete command: " + e.getMessage()); + } + } + + private void delegateInsert() { + try { + System.out.print("Name: "); + String name = sc.nextLine().strip(); + + System.out.print("Description: "); + String description = sc.nextLine(); + + System.out.print("Price: "); + float price = sc.nextFloat(); + sc.nextLine(); // consume newline + + int response = client.postItem(makeJson(name, description, price)); + System.out.println("Command executed with response code " + response); + + } catch (Exception e) { + System.err.println("Error in executing insert command: " + e.getMessage()); + } + } + + private String makeJson(String name, String desc, float price) { + return String.format(""" + { + "name": "%s", + "description": "%s", + "price": %s + } + """, name, desc, price); + } + + private void delegateRead() { + try { + System.out.print("Read All or One? (A/O): "); + String input = sc.nextLine(); + + if (input.equalsIgnoreCase("A")) { + client.getItems(); + return; + } + + System.out.print("Enter ID: "); + int id = sc.nextInt(); + sc.nextLine(); // consume newline + client.getItem(id); + + } catch (Exception e) { + System.err.println("Error in executing read command: " + e.getMessage()); + } + } + + private void delegateUpdate() { + System.out.println("Update not implemented yet"); + } +} diff --git a/week5_TinsaeGhilay/client/src/main/java/net/tinsae/Main.java b/week5_TinsaeGhilay/client/src/main/java/net/tinsae/Main.java new file mode 100644 index 0000000..87516f8 --- /dev/null +++ b/week5_TinsaeGhilay/client/src/main/java/net/tinsae/Main.java @@ -0,0 +1,24 @@ +package net.tinsae; + +import java.util.Scanner; +public class Main { + + public static void main(String[] args) { + String path = "http://localhost:8080/shop-1.0-SNAPSHOT/api"; + Delegator delegator = new Delegator(path); + System.out.println("Hello! What do you want to do? allowed actions are \n"+ + "Insert, update, delete and read"); + Scanner sc = new Scanner(System.in); + while(sc.hasNext()){ + String response = sc.nextLine().strip(); + if(response.equalsIgnoreCase("exit")){ + return; + } + + delegator.executeCommand(response); + + } + sc.close(); + + } +} \ No newline at end of file diff --git a/week5_TinsaeGhilay/client/target/classes/net/tinsae/Client.class b/week5_TinsaeGhilay/client/target/classes/net/tinsae/Client.class new file mode 100644 index 0000000..9d2a981 Binary files /dev/null and b/week5_TinsaeGhilay/client/target/classes/net/tinsae/Client.class differ diff --git a/week5_TinsaeGhilay/client/target/classes/net/tinsae/Delegator.class b/week5_TinsaeGhilay/client/target/classes/net/tinsae/Delegator.class new file mode 100644 index 0000000..38eba4a Binary files /dev/null and b/week5_TinsaeGhilay/client/target/classes/net/tinsae/Delegator.class differ diff --git a/week5_TinsaeGhilay/client/target/classes/net/tinsae/Main.class b/week5_TinsaeGhilay/client/target/classes/net/tinsae/Main.class new file mode 100644 index 0000000..5dcdb43 Binary files /dev/null and b/week5_TinsaeGhilay/client/target/classes/net/tinsae/Main.class differ diff --git a/week5_TinsaeGhilay/client/target/client-1.0-SNAPSHOT.jar b/week5_TinsaeGhilay/client/target/client-1.0-SNAPSHOT.jar new file mode 100644 index 0000000..c6b407a Binary files /dev/null and b/week5_TinsaeGhilay/client/target/client-1.0-SNAPSHOT.jar differ diff --git a/week5_TinsaeGhilay/client/target/maven-archiver/pom.properties b/week5_TinsaeGhilay/client/target/maven-archiver/pom.properties new file mode 100644 index 0000000..50d985e --- /dev/null +++ b/week5_TinsaeGhilay/client/target/maven-archiver/pom.properties @@ -0,0 +1,3 @@ +artifactId=client +groupId=net.tinsae +version=1.0-SNAPSHOT diff --git a/week5_TinsaeGhilay/client/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/week5_TinsaeGhilay/client/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst new file mode 100644 index 0000000..5fe1ffc --- /dev/null +++ b/week5_TinsaeGhilay/client/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -0,0 +1,3 @@ +net/tinsae/Client.class +net/tinsae/Main.class +net/tinsae/Delegator.class diff --git a/week5_TinsaeGhilay/client/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/week5_TinsaeGhilay/client/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst new file mode 100644 index 0000000..954887d --- /dev/null +++ b/week5_TinsaeGhilay/client/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -0,0 +1,3 @@ +/home/tgk/Repos/Trusted/DistributedSystems/week5_TinsaeGhilay/client/src/main/java/net/tinsae/Client.java +/home/tgk/Repos/Trusted/DistributedSystems/week5_TinsaeGhilay/client/src/main/java/net/tinsae/Delegator.java +/home/tgk/Repos/Trusted/DistributedSystems/week5_TinsaeGhilay/client/src/main/java/net/tinsae/Main.java diff --git a/week5_TinsaeGhilay/client/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst b/week5_TinsaeGhilay/client/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst new file mode 100644 index 0000000..e69de29 diff --git a/week5_TinsaeGhilay/client/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst b/week5_TinsaeGhilay/client/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst new file mode 100644 index 0000000..e69de29