diff --git a/src/main/java/net/ayyalasomayajula/net/client/EHRGen.java b/src/main/java/net/ayyalasomayajula/net/client/EHRGen.java index 0a41225..a931375 100644 --- a/src/main/java/net/ayyalasomayajula/net/client/EHRGen.java +++ b/src/main/java/net/ayyalasomayajula/net/client/EHRGen.java @@ -9,6 +9,7 @@ import org.slf4j.LoggerFactory; import javax.swing.*; import java.awt.*; import java.io.IOException; +import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.net.Socket; import java.nio.file.Path; @@ -33,7 +34,8 @@ public class EHRGen extends JFrame { private JButton updateButton; private JButton insertButton; private JPanel main; - + private final ObjectOutputStream os; + private final ObjectInputStream oi; private final Socket connection; private final ObjectOutputStream outputStream; private EHR currentEHR; // Stores the current EHR instance @@ -60,6 +62,8 @@ public class EHRGen extends JFrame { insertButton.addActionListener(e -> insertEHR()); updateButton.addActionListener(e -> updateEHR()); + os = new ObjectOutputStream(connection.getOutputStream()); + oi = new ObjectInputStream(connection.getInputStream()); } /** diff --git a/src/main/java/net/ayyalasomayajula/net/server/ServerDaemon.java b/src/main/java/net/ayyalasomayajula/net/server/ServerDaemon.java index 5bf20ab..804f936 100644 --- a/src/main/java/net/ayyalasomayajula/net/server/ServerDaemon.java +++ b/src/main/java/net/ayyalasomayajula/net/server/ServerDaemon.java @@ -178,16 +178,11 @@ public class ServerDaemon implements Runnable { private Message handleMessage(Message in) throws IOException { switch (in.messageVariant()) { case GET: { - // Format of GET query: - // | asset types: EHR, XRAY | asset id: uuid field or the path - - // Define regex pattern with capture groups Pattern pattern = Pattern.compile("^(EHR|XRAY) (.+)$"); - Matcher matcher = pattern.matcher(in.messageQuery()); if (matcher.matches()) { - String assetType = matcher.group(1); // Captures EHR or XRAY - String assetId = matcher.group(2); // Captures UUID or path + String assetType = matcher.group(1); + String assetId = matcher.group(2); logger.debug("Asset Type: {}", assetType); logger.debug("Asset ID: {}", assetId); @@ -195,18 +190,14 @@ public class ServerDaemon implements Runnable { case "EHR": logger.info("EHR caught"); EHR found = EHRUtils.searchClosestEHR(assetId, Path.of(basePath)); - if(found == null) {return null;} - // + if (found == null) return new Message(MessageVariant.SET, "ERROR: EHR not found.", 5, new byte[]{}); return new Message(MessageVariant.SET, "", 5, SerializationUtils.toBytes(found)); + case "XRAY": logger.info("XRAY caught"); - // Construct full file path for XRAY asset Path xrayFilePath = Path.of(basePath, assetId); File xrayFile = xrayFilePath.toFile(); - - // Check if the file exists and is a valid file if (xrayFile.exists() && xrayFile.isFile()) { - // Read the file into a byte array and return it try (FileInputStream fis = new FileInputStream(xrayFile)) { byte[] fileBytes = fis.readAllBytes(); return new Message(MessageVariant.SET, "", 5, fileBytes); @@ -224,8 +215,41 @@ public class ServerDaemon implements Runnable { } break; } + + case INSERT: { + try { + EHR ehr = (EHR) SerializationUtils.fromBytes(in.data()); + Path ehrDirPath = Path.of(basePath, "patients"); + EHRUtils.writeEHRToFile(ehr, ehrDirPath); + return new Message(MessageVariant.SET, "SUCCESS: EHR inserted.", 5, new byte[]{}); + } catch (IOException | ClassNotFoundException e) { + logger.error("Error inserting EHR: {}", e.getMessage()); + return new Message(MessageVariant.SET, "ERROR: Failed to insert EHR.", 5, new byte[]{}); + } + } + + case UPSERT: { + try { + EHR ehr = (EHR) SerializationUtils.fromBytes(in.data()); + Path ehrDirPath = Path.of(basePath, "patients"); + + EHR existingEHR = EHRUtils.readEHRFromFile(ehrDirPath, ehr.getUuid()); + if (existingEHR != null) { + logger.info("Updating existing EHR with UUID: {}", ehr.getUuid()); + } else { + logger.info("Inserting new EHR with UUID: {}", ehr.getUuid()); + } + + EHRUtils.writeEHRToFile(ehr, ehrDirPath); + return new Message(MessageVariant.SET, "SUCCESS: EHR upserted.", 5, new byte[]{}); + } catch (IOException | ClassNotFoundException e) { + logger.error("Error upserting EHR: {}", e.getMessage()); + return new Message(MessageVariant.SET, "ERROR: Failed to upsert EHR.", 5, new byte[]{}); + } + } } return new Message(MessageVariant.SET, "THROW;", 5, new byte[]{}); } + }