master
mms37 2 years ago
parent f8a4952127
commit 5e0081e9fd

@ -2,5 +2,6 @@
<project version="4"> <project version="4">
<component name="VcsDirectoryMappings"> <component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$/../../../.." vcs="Git" /> <mapping directory="$PROJECT_DIR$/../../../.." vcs="Git" />
<mapping directory="$PROJECT_DIR$/.." vcs="Git" />
</component> </component>
</project> </project>

@ -1 +1 @@
[{"author":"test","name":"test","note":"","price":12.0,"weight":12.0,"expectedDate":"2022-07-29T12:01","delivered":false,"type":"book"}] curl -i -H "Content-Type: application/json" -X POST -d '{/"author/":/"a/",/"name/":/"as/",/"note/":/"as/",/"price/":32.0,/"weight/":12.0,/"expectedDate/":/"2022-08-26T21:30/",/"delivered/":false,/"type/":/"book/"}' localhost:8080/addBook

@ -7,6 +7,7 @@ import cmpt213.assignment4.packagedeliveries.client.model.PackageInfo;
import cmpt213.assignment4.packagedeliveries.client.model.PerishablePackage; import cmpt213.assignment4.packagedeliveries.client.model.PerishablePackage;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.google.gson.GsonBuilder; import com.google.gson.GsonBuilder;
import com.google.gson.JsonSyntaxException;
import com.google.gson.TypeAdapter; import com.google.gson.TypeAdapter;
import com.google.gson.reflect.TypeToken; import com.google.gson.reflect.TypeToken;
import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonReader;
@ -202,5 +203,25 @@ public class PackageDeliveriesTracker {
packageList.get(i).setDelivered(true); packageList.get(i).setDelivered(true);
} }
public String serializePackage(PackageInfo p){
Type pType=new TypeToken<PackageInfo>(){}.getType();
return gson.toJson(p);
}
public void deserializePackageString(String gsonString){
try{
Type pType=new TypeToken<ArrayList<PackageInfo>>(){}.getType();
packageList=gson.fromJson(gsonString, pType);
System.out.println(packageList + " --> packageList");
for (PackageInfo p: packageList){
if (p instanceof BookPackage) p.setType("book");
else if (p instanceof PerishablePackage) p.setType("perishable");
else if (p instanceof ElectronicPackage) p.setType("electronic");
}
}
catch (JsonSyntaxException e){
e.printStackTrace();
}
}
} }

@ -12,7 +12,14 @@ import javax.swing.*;
import java.awt.*; import java.awt.*;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.stream.Collectors;
public class Input extends JDialog implements ActionListener, DateTimeChangeListener { public class Input extends JDialog implements ActionListener, DateTimeChangeListener {
private final PackageDeliveriesTracker pInstance = PackageDeliveriesTracker.getInstance(); private final PackageDeliveriesTracker pInstance = PackageDeliveriesTracker.getInstance();
@ -179,6 +186,7 @@ public class Input extends JDialog implements ActionListener, DateTimeChangeList
PackageFactory.PackageType type = PackageFactory.PackageType.Book; PackageFactory.PackageType type = PackageFactory.PackageType.Book;
String pName = nameField.getText(); String pName = nameField.getText();
String pNote = noteField.getText(); String pNote = noteField.getText();
String pEndPoint = "addBook";
double pPrice = 0.0; double pPrice = 0.0;
pPrice = Double.parseDouble(priceField.getText()); pPrice = Double.parseDouble(priceField.getText());
if (pPrice < 0) { if (pPrice < 0) {
@ -207,6 +215,10 @@ public class Input extends JDialog implements ActionListener, DateTimeChangeList
return; return;
} }
} else if (pType == 1) { } else if (pType == 1) {
pEndPoint = "addPerishable";
type = PackageFactory.PackageType.Perishable;
} else {
pEndPoint = "addElectronic";
type = PackageFactory.PackageType.Electronic; type = PackageFactory.PackageType.Electronic;
pHandlingFee = Double.parseDouble(typeTf.getText()); pHandlingFee = Double.parseDouble(typeTf.getText());
if (pHandlingFee < 0) { if (pHandlingFee < 0) {
@ -215,8 +227,6 @@ public class Input extends JDialog implements ActionListener, DateTimeChangeList
"error", "error",
JOptionPane.WARNING_MESSAGE); JOptionPane.WARNING_MESSAGE);
} }
} else {
type = PackageFactory.PackageType.Perishable;
} }
if (pName.equals("")) { if (pName.equals("")) {
JOptionPane.showMessageDialog(this, JOptionPane.showMessageDialog(this,
@ -226,7 +236,12 @@ public class Input extends JDialog implements ActionListener, DateTimeChangeList
return; return;
} }
PackageInfo p = PackageFactory.create(type, pName, pNote, pPrice, pWeight, false, deliveryDate, pAuthor, expiryDate, pHandlingFee); PackageInfo p = PackageFactory.create(type, pName, pNote, pPrice, pWeight, false, deliveryDate, pAuthor, expiryDate, pHandlingFee);
pInstance.addPackage(p); String packageString=pInstance.serializePackage(p);
System.out.println(packageString + " packageString before");
packageString=packageString.replace("\"","\\\"");
System.out.println(packageString + " packageString");
String postcmd="curl -i -H \"Content-Type: application/json\" -X " +"POST -d " + packageString +" localhost:8080/";
invokeCmd(postcmd, pEndPoint);
dispose(); dispose();
} catch (Exception e) { } catch (Exception e) {
JOptionPane.showMessageDialog(this, JOptionPane.showMessageDialog(this,
@ -235,4 +250,20 @@ public class Input extends JDialog implements ActionListener, DateTimeChangeList
JOptionPane.WARNING_MESSAGE); JOptionPane.WARNING_MESSAGE);
} }
} }
private void invokeCmd(String curlcmd, String endPoint){
try {
System.out.println(curlcmd+endPoint + " curlCmd");
Process p=Runtime.getRuntime().exec(curlcmd+endPoint);
InputStream output=p.getInputStream();
String allP =new BufferedReader(new InputStreamReader(output, StandardCharsets.UTF_8)).lines().collect(Collectors.joining("\n"));
System.out.println(allP+" allP");
pInstance.deserializePackageString(allP);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
} }

@ -20,7 +20,7 @@ public class JavaSwingUI implements ActionListener {
; ;
public void displayMainPage() { public void displayMainPage() {
pTracker.load(); //pTracker.load();
uiFrame = new JFrame("Package deliveries tracker"); uiFrame = new JFrame("Package deliveries tracker");
uiFrame.setSize(500, 500); uiFrame.setSize(500, 500);
uiFrame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); uiFrame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
@ -28,7 +28,7 @@ public class JavaSwingUI implements ActionListener {
uiFrame.addWindowListener(new WindowAdapter() { uiFrame.addWindowListener(new WindowAdapter() {
@Override @Override
public void windowClosing(WindowEvent e) { public void windowClosing(WindowEvent e) {
pTracker.save(); //pTracker.save(); // TODO: replace with save endpoint
super.windowClosing(e); super.windowClosing(e);
uiFrame.dispose(); uiFrame.dispose();
} }
@ -58,7 +58,6 @@ public class JavaSwingUI implements ActionListener {
uiPanel.add(Box.createVerticalGlue()); uiPanel.add(Box.createVerticalGlue());
uiFrame.getContentPane().add(scrollView); uiFrame.getContentPane().add(scrollView);
System.out.println(packages); System.out.println(packages);
if (packages.get(0) != "No packages to show") {
for (int i = 0; i < packages.size(); i++) { for (int i = 0; i < packages.size(); i++) {
JPanel p = new JPanel(); JPanel p = new JPanel();
JTextPane pkgPane = new JTextPane(); JTextPane pkgPane = new JTextPane();
@ -80,13 +79,13 @@ public class JavaSwingUI implements ActionListener {
JCheckBox delivered = new JCheckBox("Delivered?"); JCheckBox delivered = new JCheckBox("Delivered?");
delivered.setBounds(100, 100, 50, 50); delivered.setBounds(100, 100, 50, 50);
delivered.setSelected(pTracker.isDelivered(i)); delivered.setSelected(false); // TODO: retrieve package's delivery status
int finalI1 = i; int finalI1 = i;
delivered.addActionListener(new ActionListener() { delivered.addActionListener(new ActionListener() {
@Override @Override
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
delivered.setSelected(true); delivered.setSelected(true);
pTracker.setDelivered(finalI1); //pTracker.setDelivered(finalI1); // TODO: call setDelivered endPoint
refreshPackageList(); refreshPackageList();
} }
}); });
@ -94,7 +93,6 @@ public class JavaSwingUI implements ActionListener {
} }
uiPanel.add(p); uiPanel.add(p);
} }
}
uiFrame.validate(); uiFrame.validate();
uiFrame.pack(); uiFrame.pack();
} }

@ -4,4 +4,8 @@ GET /ping
command : curl -i -X GET localhost:8080 command : curl -i -X GET localhost:8080
Returns a message "system is up". Returns a message "system is up".
GET /listAll GET /listAll
Test commands:
curl -i -H "Content-Type: application/json" -X POST -d '{\"author\":\"test\",\"name\":\"n\",\"note\":\"a\",\"price\":1,\"weight\":3,\"expectedDate\":\"2022-07-29T12:00\",\"delivered\":false,\"type\":\"book\"}' localhost:8080/addBook

@ -1 +0,0 @@
[{"author":"test","name":"test","note":"","price":12.0,"weight":12.0,"expectedDate":"2022-07-29T12:01","delivered":false,"type":"book"}]

@ -7,6 +7,7 @@ import cmpt213.assignment4.packagedeliveries.webappserver.model.PackageInfo;
import cmpt213.assignment4.packagedeliveries.webappserver.model.PerishablePackage; import cmpt213.assignment4.packagedeliveries.webappserver.model.PerishablePackage;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.google.gson.GsonBuilder; import com.google.gson.GsonBuilder;
import com.google.gson.JsonSyntaxException;
import com.google.gson.TypeAdapter; import com.google.gson.TypeAdapter;
import com.google.gson.reflect.TypeToken; import com.google.gson.reflect.TypeToken;
import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonReader;
@ -58,7 +59,7 @@ public class PackageManager {
public void addPackage(PackageInfo p) { public void addPackage(PackageInfo p) {
packageList.add(p); packageList.add(p);
Collections.sort(packageList); //Collections.sort(packageList);
} }
/** /**
@ -120,18 +121,10 @@ public class PackageManager {
} }
} }
public ArrayList<String> getAllPackages() { public String getAllPackages() {
ArrayList<String> b = new ArrayList<>(); //Collections.sort(packageList); TODO: sorting raises error; check again
if (packageList.size() == 0) { System.out.println(packageList + " packageList - server");
b.add("No packages to show"); return gson.toJson(packageList);
} else {
Collections.sort(packageList);
for (int i = 0; i < packageList.size(); i++) {
String bString = ("Package #" + (i + 1)) + "\n" + packageList.get(i) + "\n\n";
b.add(bString);
}
}
return b;
} }
/** /**
@ -164,30 +157,14 @@ public class PackageManager {
return sortedList; return sortedList;
} }
public ArrayList<String> overDuePackages() { public String overDuePackages() {
ArrayList<String> b = new ArrayList<>();
ArrayList<PackageInfo> overdue = sortList(packageList, true); ArrayList<PackageInfo> overdue = sortList(packageList, true);
if (overdue.size() == 0) { return gson.toJson(overdue);
b.add("no overdue packages to show");
}
for (int i = 0; i < overdue.size(); i++) {
String bString = ("Package #" + (i + 1)) + "\n" + overdue.get(i) + "\n\n";
b.add(bString);
}
return b;
} }
public ArrayList<String> upcomingPackages() { public String upcomingPackages() {
ArrayList<String> b = new ArrayList<>();
ArrayList<PackageInfo> upcoming = sortList(packageList, false); ArrayList<PackageInfo> upcoming = sortList(packageList, false);
if (upcoming.size() == 0) { return gson.toJson(packageList);
b.add("no upcoming packages to show");
}
for (int i = 0; i < upcoming.size(); i++) {
String bString = ("Package #" + (i + 1)) + "\n" + upcoming.get(i) + "\n\n";
b.add(bString);
}
return b;
} }
public void removePcakage(int i) { public void removePcakage(int i) {
@ -203,11 +180,27 @@ public class PackageManager {
} }
public PackageInfo deserializePackage(String packageGson){ public PackageInfo deserializePackage(String packageGson){
Type lType = new TypeToken<ArrayList<PackageInfo>>() { PackageInfo newPackage = null;
}.getType(); try {
PackageInfo newPackage=gson.fromJson(packageGson, lType); System.out.println(packageGson + "-------> packageGson");
System.out.println(newPackage.toString() + "-------> newPackage"); Type lType = new TypeToken<PackageInfo>() {
}.getType();
newPackage = gson.fromJson(packageGson, lType);
System.out.println(newPackage + " newPackage");
//for (PackageInfo p : packageList) {
if (newPackage instanceof BookPackage) {
newPackage.setType("book");
} else if (newPackage instanceof PerishablePackage) {
newPackage.setType("perishable");
} else if (newPackage instanceof ElectronicPackage) {
newPackage.setType("electronic");
}
//}
} catch (JsonSyntaxException e) {
e.printStackTrace();
}
return newPackage; return newPackage;
} }
} }

@ -18,27 +18,35 @@ public class PackageController {
PackageManager manager=PackageManager.getInstance(); PackageManager manager=PackageManager.getInstance();
@GetMapping("/listAll") @GetMapping("/listAll")
@ResponseStatus(HttpStatus.OK) @ResponseStatus(HttpStatus.OK)
public ArrayList<String> getAllPackages(){ public String getAllPackages(){
return manager.getAllPackages(); return manager.getAllPackages();
} }
@PostMapping("/addBook") @PostMapping("/addBook")
@ResponseStatus(HttpStatus.CREATED) @ResponseStatus(HttpStatus.CREATED)
public void addBook(@RequestBody String bookString){ public String addBook(@RequestBody String bookString){
System.out.println(bookString+"----------------->bookString"); System.out.println(bookString+"----------------->bookString");
//bookString = bookString.trim();
PackageInfo p=manager.deserializePackage(bookString); PackageInfo p=manager.deserializePackage(bookString);
System.out.println(p + " addBook p");
System.out.println(p.getType() + " package type");
manager.addPackage(p); manager.addPackage(p);
return manager.getAllPackages();
} }
@PostMapping("/addPerishable") @PostMapping("/addPerishable")
@ResponseStatus(HttpStatus.CREATED) @ResponseStatus(HttpStatus.CREATED)
public void addPerishable(@RequestBody String perishableString){ public String addPerishable(@RequestBody String perishableString){
PackageInfo p=manager.deserializePackage(perishableString); PackageInfo p=manager.deserializePackage(perishableString);
manager.addPackage(p);
return manager.getAllPackages();
} }
@PostMapping("/addElectronic") @PostMapping("/addElectronic")
@ResponseStatus(HttpStatus.CREATED) @ResponseStatus(HttpStatus.CREATED)
public void addElectronic(@RequestBody String electronicString){ public String addElectronic(@RequestBody String electronicString){
PackageInfo p=manager.deserializePackage(electronicString); PackageInfo p=manager.deserializePackage(electronicString);
manager.addPackage(p);
return manager.getAllPackages();
} }
} }

@ -17,6 +17,11 @@ public class PackageInfo implements Comparable<PackageInfo> {
private final double weight; private final double weight;
private final LocalDateTime expectedDate; private final LocalDateTime expectedDate;
private boolean delivered; private boolean delivered;
public String getType() {
return type;
}
private String type; private String type;
public PackageInfo(String name, String note, double price, double weight, boolean delivered, LocalDateTime expectedDate) { public PackageInfo(String name, String note, double price, double weight, boolean delivered, LocalDateTime expectedDate) {

Loading…
Cancel
Save