public void writeToFileSystem(RFile rfile) {
   try {
     BufferedWriter bw =
         new BufferedWriter(new FileWriter("FileStore/" + rfile.getMeta().getFilename()));
     bw.write(rfile.getContent());
     bw.flush();
     bw.close();
   } catch (IOException e) {
     System.err.println(e.getMessage());
   }
 }
  @Override
  public TwoPhaseCommitMessage writeFile(RFile rFile, TwoPhaseCommitMessage tpcm)
      throws SystemException, TException {

    if (tpcm.getMessage().equals("vote_request")) {

      if (knowConcurrencyStatus(rFile.getMeta().getFilename())) {
        tpcm.setMessage("vote_abort");
        createLogEntry(tpcm, rFile, "write");
        return tpcm;
      } else {
        createLogEntry(tpcm, rFile, "write");
      }

      System.out.println("****writeFile TEST CASES****");
      System.out.println("1. reply vote_commit for " + rFile.getMeta().getFilename());
      System.out.println(
          "2. reply vote_commit for " + rFile.getMeta().getFilename() + " and crash");
      System.out.println("3. reply vote_abort for " + rFile.getMeta().getFilename());
      System.out.println("Enter choice: ");
      Scanner sc = new Scanner(System.in);
      int choice = sc.nextInt();
      switch (choice) {
        case 1:
          tpcm.setMessage("vote_commit");
          updateLogEntry(tpcm);
          return tpcm;

        case 2:
          tpcm.setMessage("vote_commit");
          updateLogEntry(tpcm);
          tpcm.setMessage("vote_commit_and_crash");
          Runnable crash =
              new Runnable() {
                @Override
                public void run() {
                  crash();
                }
              };
          new Thread(crash).start();
          return tpcm;

        case 3:
          tpcm.setMessage("vote_abort");
          updateLogEntry(tpcm);
          return tpcm;

        default:
          System.out.println("Wrong choice! Transaction being aborted!");
          tpcm.setMessage("vote_abort");
          break;
      }
    } else if (tpcm.getMessage().equals("global_commit")) {
      Connection con = null;
      Statement statement = null;
      String filename = null;
      String content = null;
      try {

        Class.forName("org.sqlite.JDBC");
        con = DriverManager.getConnection("jdbc:sqlite:twoPC.db");

        statement = con.createStatement();
        ResultSet rs =
            statement.executeQuery("SELECT * FROM LOG WHERE TID = " + tpcm.getTid() + ";");
        filename = rs.getString("FILENAME");
        content = rs.getString("CONTENT");
        rs.close();
        statement.close();
        con.close();
      } catch (Exception e) {
        e.printStackTrace();
        System.err.println(e.getClass().getName() + ": " + e.getMessage());
      }
      fileStoreMap.put(filename, content);
      RFile rFile2 = new RFile();
      rFile2.setContent(content);
      RFileMetadata rFileMetadata = new RFileMetadata();
      rFileMetadata.setFilename(filename);
      rFile2.setMeta(rFileMetadata);
      writeToFileSystem(rFile2);
      updateLogEntry(tpcm);
    } else if (tpcm.getMessage().equals("global_abort")) {
      updateLogEntry(tpcm);
    }

    return tpcm;
  }