Refactor patch processing functions

Moved functions for processing formatted patches from
GerritClientPatchSetStateful to a newly created
GerritClientPatchSetHelper class. This change improves code segregation
and facilitates future reuse of these functions.

Change-Id: I91fc56b11ad9a4879002cdd3b6ebcadcda026f21
Signed-off-by: Patrizio <patrizio.gelosi@amarulasolutions.com>
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/gerrit/GerritClientPatchSetHelper.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/gerrit/GerritClientPatchSetHelper.java
new file mode 100644
index 0000000..93e6e6c
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/gerrit/GerritClientPatchSetHelper.java
@@ -0,0 +1,46 @@
+package com.googlesource.gerrit.plugins.chatgpt.mode.stateful.client.api.gerrit;
+
+import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritChange;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import static com.googlesource.gerrit.plugins.chatgpt.settings.Settings.COMMIT_MESSAGE_FILTER_OUT_PREFIXES;
+import static com.googlesource.gerrit.plugins.chatgpt.settings.Settings.GERRIT_COMMIT_MESSAGE_PREFIX;
+
+@Slf4j
+public class GerritClientPatchSetHelper {
+    private static final Pattern EXTRACT_B_FILENAMES_FROM_PATCH_SET = Pattern.compile("^diff --git .*? b/(.*)$",
+            Pattern.MULTILINE);
+
+    public static String filterPatchWithCommitMessage(String formattedPatch) {
+        // Remove Patch heading up to the Date annotation, so that the commit message is included. Additionally, remove
+        // the change type between brackets
+        Pattern CONFIG_ID_HEADING_PATTERN = Pattern.compile(
+                "^.*?" + GERRIT_COMMIT_MESSAGE_PREFIX + "(?:\\[[^\\]]+\\] )?",
+                Pattern.DOTALL
+        );
+        return CONFIG_ID_HEADING_PATTERN.matcher(formattedPatch).replaceAll(GERRIT_COMMIT_MESSAGE_PREFIX);
+    }
+
+    public static String filterPatchWithoutCommitMessage(GerritChange change, String formattedPatch) {
+        // Remove Patch heading up to the Change-Id annotation
+        Pattern CONFIG_ID_HEADING_PATTERN = Pattern.compile(
+                "^.*?" + COMMIT_MESSAGE_FILTER_OUT_PREFIXES.get("CHANGE_ID") + " " + change.getChangeKey().get(),
+                Pattern.DOTALL
+        );
+        return CONFIG_ID_HEADING_PATTERN.matcher(formattedPatch).replaceAll("");
+    }
+
+    public static List<String> extractFilesFromPatch(String formattedPatch) {
+        Matcher extractFilenameMatcher = EXTRACT_B_FILENAMES_FROM_PATCH_SET.matcher(formattedPatch);
+        List<String> files = new ArrayList<>();
+        while (extractFilenameMatcher.find()) {
+            files.add(extractFilenameMatcher.group(1));
+        }
+        return files;
+    }
+}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/gerrit/GerritClientPatchSetStateful.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/gerrit/GerritClientPatchSetStateful.java
index 4e8ee74..f233dfd 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/gerrit/GerritClientPatchSetStateful.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/gerrit/GerritClientPatchSetStateful.java
@@ -11,19 +11,12 @@
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritClientPatchSet;
 import lombok.extern.slf4j.Slf4j;
 
-import java.util.ArrayList;
 import java.util.List;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
 
-import static com.googlesource.gerrit.plugins.chatgpt.settings.Settings.GERRIT_COMMIT_MESSAGE_PREFIX;
-import static com.googlesource.gerrit.plugins.chatgpt.settings.Settings.COMMIT_MESSAGE_FILTER_OUT_PREFIXES;
+import static com.googlesource.gerrit.plugins.chatgpt.mode.stateful.client.api.gerrit.GerritClientPatchSetHelper.*;
 
 @Slf4j
 public class GerritClientPatchSetStateful extends GerritClientPatchSet implements IGerritClientPatchSet {
-    private static final Pattern EXTRACT_B_FILENAMES_FROM_PATCH_SET = Pattern.compile("^diff --git .*? b/(.*)$",
-            Pattern.MULTILINE);
-
     private GerritChange change;
 
     @VisibleForTesting
@@ -66,35 +59,7 @@
             return filterPatchWithCommitMessage(formattedPatch);
         }
         else {
-            return filterPatchWithoutCommitMessage(formattedPatch);
+            return filterPatchWithoutCommitMessage(change, formattedPatch);
         }
     }
-
-    private String filterPatchWithCommitMessage(String formattedPatch) {
-        // Remove Patch heading up to the Date annotation, so that the commit message is included. Additionally, remove
-        // the change type between brackets
-        Pattern CONFIG_ID_HEADING_PATTERN = Pattern.compile(
-                "^.*?" + GERRIT_COMMIT_MESSAGE_PREFIX + "(?:\\[[^\\]]+\\] )?",
-                Pattern.DOTALL
-        );
-        return CONFIG_ID_HEADING_PATTERN.matcher(formattedPatch).replaceAll(GERRIT_COMMIT_MESSAGE_PREFIX);
-    }
-
-    private String filterPatchWithoutCommitMessage(String formattedPatch) {
-        // Remove Patch heading up to the Change-Id annotation
-        Pattern CONFIG_ID_HEADING_PATTERN = Pattern.compile(
-                "^.*?" + COMMIT_MESSAGE_FILTER_OUT_PREFIXES.get("CHANGE_ID") + " " + change.getChangeKey().get(),
-                Pattern.DOTALL
-        );
-        return CONFIG_ID_HEADING_PATTERN.matcher(formattedPatch).replaceAll("");
-    }
-
-    private List<String> extractFilesFromPatch(String formattedPatch) {
-        Matcher extractFilenameMatcher = EXTRACT_B_FILENAMES_FROM_PATCH_SET.matcher(formattedPatch);
-        List<String> files = new ArrayList<>();
-        while (extractFilenameMatcher.find()) {
-            files.add(extractFilenameMatcher.group(1));
-        }
-        return files;
-    }
 }