From b7b1bd5c44765a0750e81a8557ddacb715b67818 Mon Sep 17 00:00:00 2001 From: Ashk Date: Wed, 29 Jul 2020 15:58:39 +0430 Subject: [PATCH] finish job fortunately --- database/Images/Supporter/1 pre.png | Bin 25622 -> 0 bytes src/main/java/client/Protocol.java | 2 +- src/main/java/client/view/Processor.java | 2 +- .../java/client/view/ProductProcessor.java | 75 +++++++++--------- src/main/java/client/view/SaleProcessor.java | 16 ++-- src/main/java/server/controller/Validity.java | 2 + .../java/server/model/db/AccountTable.java | 1 + src/main/java/server/server/Server.java | 7 +- src/main/java/server/server/bank/BankAPI.java | 2 +- .../server/bank/sapahbank/SapahServer.java | 1 + 10 files changed, 56 insertions(+), 52 deletions(-) delete mode 100644 database/Images/Supporter/1 pre.png diff --git a/database/Images/Supporter/1 pre.png b/database/Images/Supporter/1 pre.png deleted file mode 100644 index 0de34a559fcf5f2b274611a0c061f301aac7c12c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25622 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 diff --git a/src/main/java/client/Protocol.java b/src/main/java/client/Protocol.java index b0a87e25..a16b1666 100644 --- a/src/main/java/client/Protocol.java +++ b/src/main/java/client/Protocol.java @@ -1,7 +1,7 @@ package client; public enum Protocol { - CLIENT_COMPONENT("127.0.0.1", 57184); + CLIENT_COMPONENT("127.0.0.1", 56478); public String Ip; public int port; diff --git a/src/main/java/client/view/Processor.java b/src/main/java/client/view/Processor.java index 518cf8f4..4e5eaeab 100644 --- a/src/main/java/client/view/Processor.java +++ b/src/main/java/client/view/Processor.java @@ -270,7 +270,7 @@ protected Product getProductByID(String ID, String productType) { } protected Image getProductImageByID(String productID, int imageNumber, String productType) { - Command productImageCommand = new Command<>("get " + productType + " image-1", Command.HandleType.PICTURE_GET, productID); + Command productImageCommand = new Command<>("get " + productType + " image-" + imageNumber, Command.HandleType.PICTURE_GET, productID); return client.getImage(productImageCommand); } diff --git a/src/main/java/client/view/ProductProcessor.java b/src/main/java/client/view/ProductProcessor.java index 95547f03..fab71f5e 100644 --- a/src/main/java/client/view/ProductProcessor.java +++ b/src/main/java/client/view/ProductProcessor.java @@ -928,49 +928,50 @@ private List sendProduct(ArrayList productImageFiles, String Command productCommand = new Command<>(sendType + " product", Command.HandleType.PRODUCT, products); Response productResponse = client.postAndGet(productCommand, Response.class, (Class)Notification.class); - if(sendType.equals("edit")) { - Command command = new Command<>("delete editing product pictures", Command.HandleType.PRODUCT, product.getID()); - client.postAndGet(command, Response.class, (Class)Object.class); - } else { - if(productResponse.getData().size() != 0 && productResponse.getDatum() == Notification.ADD_PRODUCT) { - product.setID(productResponse.getAdditionalString()); + if(productResponse.getDatum() == Notification.ADD_PRODUCT || productResponse.getDatum() == Notification.EDIT_PRODUCT) { + if(sendType.equals("edit")) { + Command command = new Command<>("delete editing product pictures", Command.HandleType.PRODUCT, product.getID()); + client.postAndGet(command, Response.class, (Class)Object.class); + } else { + if(productResponse.getData().size() != 0 && productResponse.getDatum() == Notification.ADD_PRODUCT) { + product.setID(productResponse.getAdditionalString()); + } } - } - - for (File productImageFile : productImageFiles) { - String[] splitPath = productImageFile.getPath().split("\\."); - String fileExtension = splitPath[splitPath.length - 1]; - Command imageCommand = new Command<>(sendType + " product image", Command.HandleType.PICTURE_SEND, product.getID(), fileExtension); - client.sendImage(imageCommand, productImageFile); - } - if(isFileAdded) { - if(sendType.equals("add")) { - productFileInfo.setProductID(product.getID()); - Command command = new Command<>("init product file countability", Command.HandleType.PRODUCT, product.getID()); - client.postAndGet(command, Response.class, (Class)Object.class); + for (File productImageFile : productImageFiles) { + String[] splitPath = productImageFile.getPath().split("\\."); + String fileExtension = splitPath[splitPath.length - 1]; + Command imageCommand = new Command<>(sendType + " product image", Command.HandleType.PICTURE_SEND, product.getID(), fileExtension); + client.sendImage(imageCommand, productImageFile); } - if(sendType.equals("edit")) { - if(productFileInfo == null) { - String commandStr = doesEditingProductHaveFile(product.getID()) ? "get edit product file info" : "get product file info"; - Command command = new Command<>(commandStr, Command.HandleType.PRODUCT, product.getID()); - Response response = client.postAndGet(command, Response.class, (Class)Product.ProductFileInfo.class); - productFileInfo = response.getDatum(); + + if(isFileAdded) { + if(sendType.equals("add")) { + productFileInfo.setProductID(product.getID()); + Command command = new Command<>("init product file countability", Command.HandleType.PRODUCT, product.getID()); + client.postAndGet(command, Response.class, (Class)Object.class); } - if(productFile == null) { - String commandStr = (doesEditingProductHaveFile(product.getID()) ? "get edit product file" : "get product file"); - Command command = new Command<>(commandStr, Command.HandleType.PICTURE_GET, product.getID()); - productFile = client.getFile(command); + if(sendType.equals("edit")) { + if(productFileInfo == null) { + String commandStr = doesEditingProductHaveFile(product.getID()) ? "get edit product file info" : "get product file info"; + Command command = new Command<>(commandStr, Command.HandleType.PRODUCT, product.getID()); + Response response = client.postAndGet(command, Response.class, (Class)Product.ProductFileInfo.class); + productFileInfo = response.getDatum(); + } + if(productFile == null) { + String commandStr = (doesEditingProductHaveFile(product.getID()) ? "get edit product file" : "get product file"); + Command command = new Command<>(commandStr, Command.HandleType.PICTURE_GET, product.getID()); + productFile = client.getFile(command); + } } + Command command = new Command<>(sendType + " product file info", Command.HandleType.PRODUCT, productFileInfo); + client.postAndGet(command, Response.class, (Class)Object.class); + String[] splitPath = productFile.getPath().split("\\."); + String fileExtension = splitPath[splitPath.length - 1]; + Command fileCommand = new Command<>(sendType + " product file", Command.HandleType.PICTURE_SEND, product.getID(), fileExtension); + client.sendFile(fileCommand, productFile); } - Command command = new Command<>(sendType + " product file info", Command.HandleType.PRODUCT, productFileInfo); - client.postAndGet(command, Response.class, (Class)Object.class); - String[] splitPath = productFile.getPath().split("\\."); - String fileExtension = splitPath[splitPath.length - 1]; - Command fileCommand = new Command<>(sendType + " product file", Command.HandleType.PICTURE_SEND, product.getID(), fileExtension); - client.sendFile(fileCommand, productFile); } - return productResponse.getData(); } @@ -1223,7 +1224,7 @@ private void showProductGeneralErrors(List productNotifications) { if(productNotifications.contains(Notification.EMPTY_PRODUCT_BRAND)) brandTextField.setStyle(errorTextFieldStyle); - if(productNotifications.contains(Notification.EMPTY_PRODUCT_NAME)) + if(productNotifications.contains(Notification.EMPTY_PRODUCT_DESCRIPTION)) descriptionTextArea.setStyle(errorTextFieldStyle); } diff --git a/src/main/java/client/view/SaleProcessor.java b/src/main/java/client/view/SaleProcessor.java index 23a5472d..67c8ecf1 100644 --- a/src/main/java/client/view/SaleProcessor.java +++ b/src/main/java/client/view/SaleProcessor.java @@ -461,24 +461,28 @@ public void AddOffMouseClicked(MouseEvent mouseEvent) { Response response = client.postAndGet(command, Response.class, (Class)String.class); Notification resultNotification = response.getMessage(); off.setOffID(response.getDatum()); - Command extensionCommand = new Command<>("send off image", Command.HandleType.PICTURE_SEND, off.getOffID(), client.file2Extension.apply(imageFile)); - client.sendImage(extensionCommand, imageFile); + if(imageFile != null) { + Command extensionCommand = new Command<>("send off image", Command.HandleType.PICTURE_SEND, off.getOffID(), client.file2Extension.apply(imageFile)); + client.sendImage(extensionCommand, imageFile); + } if (resultNotification == Notification.ADD_OFF && this.parentProcessor instanceof TableViewProcessor) { ((TableViewProcessor) parentProcessor).updateTable(); ((TableViewProcessor) parentProcessor).updateSelectedItem(); - closeSubStage(myStage, parentProcessor); + closeSubStage(myStage, (parentProcessor).parentProcessor); } resultNotification.getAlert().show(); } else { Command command = new Command<>("edit off", Command.HandleType.SALE, off); Response response = client.postAndGet(command, Response.class, (Class)Object.class); Notification resultNotification = response.getMessage(); - Command extensionCommand = new Command<>("send editing off image", Command.HandleType.PICTURE_SEND, off.getOffID(), client.file2Extension.apply(imageFile)); - client.sendImage(extensionCommand, imageFile); + if(imageFile != null) { + Command extensionCommand = new Command<>("send editing off image", Command.HandleType.PICTURE_SEND, off.getOffID(), client.file2Extension.apply(imageFile)); + client.sendImage(extensionCommand, imageFile); + } if (resultNotification == Notification.EDIT_OFF) { ((TableViewProcessor) parentProcessor).updateTable(); ((TableViewProcessor) parentProcessor).updateSelectedItem(); - closeSubStage(myStage, parentProcessor); + closeSubStage(myStage, (parentProcessor).parentProcessor); } resultNotification.getAlert().show(); } diff --git a/src/main/java/server/controller/Validity.java b/src/main/java/server/controller/Validity.java index 2597c47f..9807f448 100644 --- a/src/main/java/server/controller/Validity.java +++ b/src/main/java/server/controller/Validity.java @@ -52,6 +52,8 @@ default boolean isUsernameValid(String username) } default boolean isGeneralIDValid(char idDeterminer, String id) { + if(id == null || id.isEmpty()) + return true; return getMatcher(id, "^" + idDeterminer + "\\d{7}$").matches(); } diff --git a/src/main/java/server/model/db/AccountTable.java b/src/main/java/server/model/db/AccountTable.java index 7e9f4907..b06d84e1 100644 --- a/src/main/java/server/model/db/AccountTable.java +++ b/src/main/java/server/model/db/AccountTable.java @@ -222,6 +222,7 @@ public static String getUserImageFilePath(String username) { } public static FileInputStream getProfileImageInputStream(String username) throws FileNotFoundException { + System.err.println(username); return new FileInputStream(getUserImageFilePath(username)); } diff --git a/src/main/java/server/server/Server.java b/src/main/java/server/server/Server.java index 88232ed1..215d4f60 100644 --- a/src/main/java/server/server/Server.java +++ b/src/main/java/server/server/Server.java @@ -44,7 +44,7 @@ public class Server implements RandomGenerator{ public static final String MARKET_BANK_USERNAME = "boosmarket"; public static final String MARKET_BANK_PASSWORD = "a1234567"; - public static final String MARKET_BANK_ACCOUNT_NUMBER = "10001"; + public static final String MARKET_BANK_ACCOUNT_NUMBER = "2120728357"; public Server() { try { @@ -243,7 +243,6 @@ public String getReceipt(String token, String receiptType, String moneyString, S } String bankCommand = "create_receipt " + token + " " + receiptType + " " + moneyString + " " + sourceID + " " + destID + " " + description; - System.err.println("Command : " + bankCommand); return BankAPI.getInstance().postAndGet(bankCommand); } @@ -302,15 +301,11 @@ public DataOutputStream getOutputStream(String username) { Socket socket = chatterSockets.get(username); DataOutputStream dataOutputStream; if(chatterOutputStreams.containsKey(socket)) { - System.out.println("1"); dataOutputStream = chatterOutputStreams.get(socket); } else { - System.out.println("2"); dataOutputStream = new DataOutputStream(new BufferedOutputStream(socket.getOutputStream())); chatterOutputStreams.put(socket, dataOutputStream); -// dataOutputStream = chatterOutputStreams.get(socket); } - System.out.println("Init : Data Out : " + dataOutputStream); return dataOutputStream; } catch (IOException e) { e.printStackTrace(); diff --git a/src/main/java/server/server/bank/BankAPI.java b/src/main/java/server/server/bank/BankAPI.java index dec550e8..97d2c610 100644 --- a/src/main/java/server/server/bank/BankAPI.java +++ b/src/main/java/server/server/bank/BankAPI.java @@ -8,7 +8,7 @@ public static BankAPI getInstance() { return new BankAPI(); } - private static int PORT = 54818; + private static int PORT = 63293; private final static String IP = "127.0.0.1"; private Socket mySocket; private DataOutputStream outStream; diff --git a/src/main/java/server/server/bank/sapahbank/SapahServer.java b/src/main/java/server/server/bank/sapahbank/SapahServer.java index 9608b134..a8078161 100644 --- a/src/main/java/server/server/bank/sapahbank/SapahServer.java +++ b/src/main/java/server/server/bank/sapahbank/SapahServer.java @@ -310,6 +310,7 @@ public void run() { } outStream.writeUTF("invalid input"); System.err.println("Client Asked: Invalid Command"); + System.err.println("Command: " + command); outStream.flush(); System.out.println(new java.util.Date()); }