diff --git a/week5_TinsaeGhilay/Task 2/client/target/classes/net/tinsae/Client.class b/week5_TinsaeGhilay/Task 2/client/target/classes/net/tinsae/Client.class new file mode 100644 index 0000000..45a7b0c Binary files /dev/null and b/week5_TinsaeGhilay/Task 2/client/target/classes/net/tinsae/Client.class differ diff --git a/week5_TinsaeGhilay/Task 2/client/target/classes/net/tinsae/Delegator.class b/week5_TinsaeGhilay/Task 2/client/target/classes/net/tinsae/Delegator.class new file mode 100644 index 0000000..e090147 Binary files /dev/null and b/week5_TinsaeGhilay/Task 2/client/target/classes/net/tinsae/Delegator.class differ diff --git a/week5_TinsaeGhilay/Task 2/client/target/classes/net/tinsae/Main.class b/week5_TinsaeGhilay/Task 2/client/target/classes/net/tinsae/Main.class new file mode 100644 index 0000000..abc9d8e Binary files /dev/null and b/week5_TinsaeGhilay/Task 2/client/target/classes/net/tinsae/Main.class differ diff --git a/week5_TinsaeGhilay/Task 2/client/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/week5_TinsaeGhilay/Task 2/client/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst new file mode 100644 index 0000000..5fe1ffc --- /dev/null +++ b/week5_TinsaeGhilay/Task 2/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/Task 2/client/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/week5_TinsaeGhilay/Task 2/client/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst new file mode 100644 index 0000000..954887d --- /dev/null +++ b/week5_TinsaeGhilay/Task 2/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/Task 2/shop/target/classes/META-INF/beans.xml b/week5_TinsaeGhilay/Task 2/shop/target/classes/META-INF/beans.xml new file mode 100644 index 0000000..96b4c76 --- /dev/null +++ b/week5_TinsaeGhilay/Task 2/shop/target/classes/META-INF/beans.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/week5_TinsaeGhilay/Task 2/shop/target/classes/net/tinsae/shop/App.class b/week5_TinsaeGhilay/Task 2/shop/target/classes/net/tinsae/shop/App.class new file mode 100644 index 0000000..cdff5ee Binary files /dev/null and b/week5_TinsaeGhilay/Task 2/shop/target/classes/net/tinsae/shop/App.class differ diff --git a/week5_TinsaeGhilay/Task 2/shop/target/classes/net/tinsae/shop/Factory.class b/week5_TinsaeGhilay/Task 2/shop/target/classes/net/tinsae/shop/Factory.class new file mode 100644 index 0000000..5288b02 Binary files /dev/null and b/week5_TinsaeGhilay/Task 2/shop/target/classes/net/tinsae/shop/Factory.class differ diff --git a/week5_TinsaeGhilay/Task 2/shop/target/classes/net/tinsae/shop/InvalidItemException.class b/week5_TinsaeGhilay/Task 2/shop/target/classes/net/tinsae/shop/InvalidItemException.class new file mode 100644 index 0000000..cc6b65f Binary files /dev/null and b/week5_TinsaeGhilay/Task 2/shop/target/classes/net/tinsae/shop/InvalidItemException.class differ diff --git a/week5_TinsaeGhilay/Task 2/shop/target/classes/net/tinsae/shop/Item.class b/week5_TinsaeGhilay/Task 2/shop/target/classes/net/tinsae/shop/Item.class new file mode 100644 index 0000000..0060949 Binary files /dev/null and b/week5_TinsaeGhilay/Task 2/shop/target/classes/net/tinsae/shop/Item.class differ diff --git a/week5_TinsaeGhilay/Task 2/shop/target/classes/net/tinsae/shop/ItemDao.class b/week5_TinsaeGhilay/Task 2/shop/target/classes/net/tinsae/shop/ItemDao.class new file mode 100644 index 0000000..2cf0f39 Binary files /dev/null and b/week5_TinsaeGhilay/Task 2/shop/target/classes/net/tinsae/shop/ItemDao.class differ diff --git a/week5_TinsaeGhilay/Task 2/shop/target/classes/net/tinsae/shop/Util.class b/week5_TinsaeGhilay/Task 2/shop/target/classes/net/tinsae/shop/Util.class new file mode 100644 index 0000000..797148b Binary files /dev/null and b/week5_TinsaeGhilay/Task 2/shop/target/classes/net/tinsae/shop/Util.class differ diff --git a/week5_TinsaeGhilay/Task 2/shop/target/maven-archiver/pom.properties b/week5_TinsaeGhilay/Task 2/shop/target/maven-archiver/pom.properties new file mode 100644 index 0000000..d133594 --- /dev/null +++ b/week5_TinsaeGhilay/Task 2/shop/target/maven-archiver/pom.properties @@ -0,0 +1,3 @@ +artifactId=shop +groupId=net.tinsae.rest +version=1.0-SNAPSHOT diff --git a/week5_TinsaeGhilay/Task 2/shop/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/week5_TinsaeGhilay/Task 2/shop/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst new file mode 100644 index 0000000..50996ef --- /dev/null +++ b/week5_TinsaeGhilay/Task 2/shop/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -0,0 +1,6 @@ +net/tinsae/shop/App.class +net/tinsae/shop/Item.class +net/tinsae/shop/Util.class +net/tinsae/shop/Factory.class +net/tinsae/shop/InvalidItemException.class +net/tinsae/shop/ItemDao.class diff --git a/week5_TinsaeGhilay/Task 2/shop/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/week5_TinsaeGhilay/Task 2/shop/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst new file mode 100644 index 0000000..8173d6f --- /dev/null +++ b/week5_TinsaeGhilay/Task 2/shop/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -0,0 +1,6 @@ +/home/tgk/Repos/Trusted/DistributedSystems/week5_TinsaeGhilay/shop/src/main/java/net/tinsae/shop/App.java +/home/tgk/Repos/Trusted/DistributedSystems/week5_TinsaeGhilay/shop/src/main/java/net/tinsae/shop/Factory.java +/home/tgk/Repos/Trusted/DistributedSystems/week5_TinsaeGhilay/shop/src/main/java/net/tinsae/shop/InvalidItemException.java +/home/tgk/Repos/Trusted/DistributedSystems/week5_TinsaeGhilay/shop/src/main/java/net/tinsae/shop/Item.java +/home/tgk/Repos/Trusted/DistributedSystems/week5_TinsaeGhilay/shop/src/main/java/net/tinsae/shop/ItemDao.java +/home/tgk/Repos/Trusted/DistributedSystems/week5_TinsaeGhilay/shop/src/main/java/net/tinsae/shop/Util.java diff --git a/week5_TinsaeGhilay/client/src/main/java/net/tinsae/Client.java b/week5_TinsaeGhilay/client/src/main/java/net/tinsae/Client.java index 0abee46..33bf599 100644 --- a/week5_TinsaeGhilay/client/src/main/java/net/tinsae/Client.java +++ b/week5_TinsaeGhilay/client/src/main/java/net/tinsae/Client.java @@ -7,19 +7,13 @@ import java.net.http.HttpResponse; public class Client { private String url; - private String table = "/items"; - public Client(String url){ + public Client(String url, String table){ 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() @@ -54,7 +48,7 @@ public class Client { } - public int getItems() throws Exception { + public HttpResponse getItems() throws Exception { HttpRequest request = HttpRequest.newBuilder() .uri(new URI(url)) .GET() @@ -62,10 +56,10 @@ public class Client { HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(response.body()); - return response.statusCode(); + return response; } - public int getItem(int id) throws Exception { + public HttpResponse getItem(int id) throws Exception { HttpRequest request = HttpRequest.newBuilder() .uri(new URI(url+"/"+id)) .GET() @@ -73,6 +67,7 @@ public class Client { HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(response.body()); - return response.statusCode(); + return response; } -} + +} \ No newline at end of file diff --git a/week5_TinsaeGhilay/client/src/main/java/net/tinsae/Delegator.java b/week5_TinsaeGhilay/client/src/main/java/net/tinsae/Delegator.java index 6c76660..1d846c4 100644 --- a/week5_TinsaeGhilay/client/src/main/java/net/tinsae/Delegator.java +++ b/week5_TinsaeGhilay/client/src/main/java/net/tinsae/Delegator.java @@ -1,14 +1,17 @@ package net.tinsae; import java.util.Scanner; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ObjectNode; public class Delegator { private final Client client; private final Scanner sc = new Scanner(System.in); - public Delegator(String path) { - client = new Client(path); + public Delegator(String path, String table) { + client = new Client(path, table); } public void executeCommand(String command) { @@ -25,7 +28,8 @@ public class Delegator { try { System.out.print("ID of the item you want to delete: "); int id = sc.nextInt(); - sc.nextLine(); // consume newline + // consume next line, safety + sc.nextLine(); int response = client.deleteItem(id); System.out.println("Command executed with response code " + response); } catch (Exception e) { @@ -43,7 +47,8 @@ public class Delegator { System.out.print("Price: "); float price = sc.nextFloat(); - sc.nextLine(); // consume newline + // consume newline, is just safety + sc.nextLine(); int response = client.postItem(makeJson(name, description, price)); System.out.println("Command executed with response code " + response); @@ -75,7 +80,8 @@ public class Delegator { System.out.print("Enter ID: "); int id = sc.nextInt(); - sc.nextLine(); // consume newline + // to be safe + sc.nextLine(); client.getItem(id); } catch (Exception e) { @@ -84,6 +90,47 @@ public class Delegator { } private void delegateUpdate() { - System.out.println("Update not implemented yet"); + try { + System.out.print("Enter ID: "); + int id = sc.nextInt(); + // consume next line + sc.nextLine(); + + // get old values + String response = client.getItem(id).body(); + ObjectMapper mapper = new ObjectMapper(); + ObjectNode node = (ObjectNode) mapper.readTree(response); + + while (true) { + System.out.println("Which field do you want to update? (name, description, price, done)"); + String field = sc.nextLine().trim().toLowerCase(); + + if (field.equals("done")) { + break; + } + + if(!node.has(field)){ + System.out.println(" no "+field+" field in database. please choose apropriately"); + continue; + } + + System.out.println("New value for "+field+": "); + String value = sc.nextLine().trim(); + + if (field.equals("price")) { + node.put(field, Double.parseDouble(value)); + } else { + node.put(field, value); + } + } + + String updatedJson = mapper.writeValueAsString(node); + client.putItem(id, updatedJson); + + System.out.println("Update successful!"); + + } catch (Exception e) { + System.err.println("Error in executing update command: " + e.getMessage()); + } } -} +} \ No newline at end of file diff --git a/week5_TinsaeGhilay/client/src/main/java/net/tinsae/Main.java b/week5_TinsaeGhilay/client/src/main/java/net/tinsae/Main.java index 87516f8..ac435f3 100644 --- a/week5_TinsaeGhilay/client/src/main/java/net/tinsae/Main.java +++ b/week5_TinsaeGhilay/client/src/main/java/net/tinsae/Main.java @@ -4,21 +4,31 @@ import java.util.Scanner; public class Main { public static void main(String[] args) { + + // host url String path = "http://localhost:8080/shop-1.0-SNAPSHOT/api"; - Delegator delegator = new Delegator(path); + + // table name + String table = "/items"; + + Delegator delegator = new Delegator(path, table); System.out.println("Hello! What do you want to do? allowed actions are \n"+ - "Insert, update, delete and read"); + "Insert, update, delete, read or exit to close"); Scanner sc = new Scanner(System.in); while(sc.hasNext()){ String response = sc.nextLine().strip(); - if(response.equalsIgnoreCase("exit")){ - return; + if(response.equalsIgnoreCase("exit") || response.equalsIgnoreCase("done")){ + + break; } delegator.executeCommand(response); + System.out.println("Continue with another command: "); } + // we must close scanner. leaks happen in java too. sc.close(); + System.out.println("Program ended. \nDon't forget to close the server too. \n Good bye!!!"); } } \ No newline at end of file diff --git a/week5_TinsaeGhilay/shop/pom.xml b/week5_TinsaeGhilay/shop/pom.xml index 1adc2c3..ec24641 100644 --- a/week5_TinsaeGhilay/shop/pom.xml +++ b/week5_TinsaeGhilay/shop/pom.xml @@ -1,22 +1,30 @@ + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - net.tinsae.rest - shop + net.tinsae + client 1.0-SNAPSHOT - shop - war + + + + org.codehaus.mojo + exec-maven-plugin + 3.1.0 + + net.tinsae.Main + + + + - UTF-8 - 21 21 - 5.13.2 + 21 + 5.10.0 - jakarta.enterprise @@ -30,18 +38,7 @@ 4.0.0 provided - - org.xerial - sqlite-jdbc - 3.45.3.0 - - - jakarta.servlet - jakarta.servlet-api - 6.1.0 - provided - org.junit.jupiter junit-jupiter-api @@ -54,15 +51,16 @@ ${junit.version} test - + + com.fasterxml.jackson.core + jackson-databind + 2.15.0 + + + com.fasterxml.jackson.core + jackson-databind + 2.16.2 + + - - - - org.apache.maven.plugins - maven-war-plugin - 3.4.0 - - - \ No newline at end of file