From 0052e854953fd68b3797b9b2844cc9ade4dc245a Mon Sep 17 00:00:00 2001 From: yunjy-hp Date: Wed, 14 Jan 2026 13:34:16 +0900 Subject: [PATCH] =?UTF-8?q?=ED=91=9C=EC=A4=80=EC=A0=84=EB=AC=B8=20?= =?UTF-8?q?=EC=A1=B0=EA=B1=B4=20=EC=B2=98=EB=A6=AC=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?OR=20=EC=B2=98=EB=A6=AC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../eai/message/parser/FlatReader.java | 56 +++++++++++-------- 1 file changed, 34 insertions(+), 22 deletions(-) diff --git a/src/main/java/com/eactive/eai/message/parser/FlatReader.java b/src/main/java/com/eactive/eai/message/parser/FlatReader.java index ef2d2a6..7bcb93b 100644 --- a/src/main/java/com/eactive/eai/message/parser/FlatReader.java +++ b/src/main/java/com/eactive/eai/message/parser/FlatReader.java @@ -124,31 +124,28 @@ public class FlatReader implements StandardReader { if(refItemValue != null) refItemValue = refItemValue.trim(); /* - * 값의 경우의수 NR,ER,""(blank) - * ER이 아닐경우 표현하고 싶어서 ! 를 추가했음 - * 원칙으로는 NR을 넣었을경우에는 NR 이 있을경우에만 해당됨 - * !ER일경우에는 blank와 NR일 경우에 해당됨 + * 값의 경우의수 NM,EM,""(blank) + * ! : NOT 조건 (예: !EM → EM이 아닌 경우) + * | : OR 조건 (예: NM|EM → NM 또는 EM인 경우) + * !와 | 조합 가능 (예: !NM|EM → NM도 아니고 EM도 아닌 경우) */ String refValue = currentItem.getRefValue(); - if (refValue.startsWith("!")) { // 느낌표가 들어가면 다음에 나오는게 아닌경우 + boolean isNot = refValue.startsWith("!"); + if (isNot) { refValue = refValue.substring(1); - if (refValue.equals(refItemValue)) { - logger.warn("@GROUP name={} SKIPPED.", currentItem.getName()); - currentItem.setHidden(true); - break; - } else { - currentItem.setHidden(false); - } + } + boolean matched = matchRefValue(refValue, refItemValue); + if (isNot) { + matched = !matched; + } + + if (!matched) { + logger.warn("@GROUP name={} SKIPPED.", currentItem.getName()); + currentItem.setHidden(true); + break; } else { - if (!currentItem.getRefValue().equals(refItemValue)) { - logger.warn("@GROUP name={} SKIPPED.", currentItem.getName()); - currentItem.setHidden(true); - break; - } else { - currentItem.setHidden(false); - } - + currentItem.setHidden(false); } } childList = currentItem.getChildsList(); @@ -310,6 +307,21 @@ public class FlatReader implements StandardReader { } return refItemValue; } -// public static void main(String[] args) { -// } + + /** + * refValue와 refItemValue를 비교하여 일치 여부를 반환 + * | 구분자로 OR 조건 지원 (예: "NM|EM" → "NM" 또는 "EM"과 일치하면 true) + */ + private boolean matchRefValue(String refValue, String refItemValue) { + if (refValue.contains("|")) { + String[] values = refValue.split("\\|"); + for (String val : values) { + if (val.equals(refItemValue)) { + return true; + } + } + return false; + } + return refValue.equals(refItemValue); + } } \ No newline at end of file