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