# Business Logic — KKW00801SF01DBean.typeModelData() [236 LOC]

| Field | Value |
|-------|-------|
| Fully Qualified Name | `eo.web.webview.KKW00801SF.KKW00801SF01DBean` |
| Layer | Webview (Controller / View Data Bean) |
| Module | `KKW00801SF` (Package: `eo.web.webview.KKW00801SF`) |

## 1. Role

### KKW00801SF01DBean.typeModelData()

This method is a **type-introspection router** that determines the Java data type of a given field within a mail service configuration screen. It operates as a **shared type-dispatch utility** used by the MVC framework to build dynamic form models — specifically, it tells the view layer what data type (String, Boolean, Integer) each form field should be rendered as.

The method handles **two categories of service fields**: (1) **Simple scalar fields** — 11 fixed key names representing individual configuration items (e.g., Mail Address Account, Mailbox Capacity, Virus Check) — each of which returns the type of a specific subkey property (value, enable, or state). (2) **List-based (dynamic) fields** — 2 composite keys representing selectable option lists (Mail MBOX Capacity Selection List and Virus Check Selection List), where the key encodes a path `prefix/index/subfield` and the method delegates to a child `X33VDataTypeBeanInterface` at the given list index.

The design pattern is a **dispatch/routing strategy** using a long if-else chain keyed on string constants, with each branch narrowing down the subkey and returning the appropriate `Class<?>`. For list fields, it uses **recursive delegation** — extracting the index from the key string, validating it against the list size, and calling `typeModelData` on the element at that index, allowing arbitrarily nested list structures.

In the larger system, this method is the **type metadata endpoint** for the screen data binding layer. When the framework needs to render a form field dynamically, it calls `typeModelData(key, subkey)` to learn the field's type, then generates the appropriate HTML input widget accordingly.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["typeModelData String key String subkey"])

    START --> CHECK_NULL["key or subkey is null"]

    CHECK_NULL -->|Yes| RET_NULL1["Return null"]
    CHECK_NULL -->|No| FIND_SEP["Find first slash in key"]

    FIND_SEP --> BR1["key equals Mail Address Account"]

    BR1 -->|Yes| SUB1["subkey check"]
    BR1 -->|No| BR2["key equals Mail Address Domain"]

    SUB1 -->|value| RET_STR["Return String.class"]
    SUB1 -->|enable| RET_BOOL["Return Boolean.class"]
    SUB1 -->|state| RET_STR2["Return String.class"]
    SUB1 -->|other| BR2

    BR2 -->|Yes| SUB2["subkey check"]
    BR2 -->|No| BR3["key equals Mail Alias"]

    SUB2 -->|value| RET_STR
    SUB2 -->|enable| RET_BOOL
    SUB2 -->|state| RET_STR2
    SUB2 -->|other| BR3

    BR3 -->|Yes| SUB3["subkey check"]
    BR3 -->|No| BR4["key equals Mailbox Capacity"]

    SUB3 -->|value| RET_STR
    SUB3 -->|enable| RET_BOOL
    SUB3 -->|state| RET_STR2
    SUB3 -->|other| BR4

    BR4 -->|Yes| SUB4["subkey check"]
    BR4 -->|No| BR5["key equals Virus Check"]

    SUB4 -->|value| RET_STR
    SUB4 -->|enable| RET_BOOL
    SUB4 -->|state| RET_STR2
    SUB4 -->|other| BR5

    BR5 -->|Yes| SUB5["subkey check"]
    BR5 -->|No| BR6["key equals POP ID"]

    SUB5 -->|value| RET_STR
    SUB5 -->|enable| RET_BOOL
    SUB5 -->|state| RET_STR2
    SUB5 -->|other| BR6

    BR6 -->|Yes| SUB6["subkey check"]
    BR6 -->|No| BR7["key equals Start Date Year"]

    SUB6 -->|value| RET_STR
    SUB6 -->|enable| RET_BOOL
    SUB6 -->|state| RET_STR2
    SUB6 -->|other| BR7

    BR7 -->|Yes| SUB7["subkey check"]
    BR7 -->|No| BR8["key equals Start Date Month"]

    SUB7 -->|value| RET_STR
    SUB7 -->|enable| RET_BOOL
    SUB7 -->|state| RET_STR2
    SUB7 -->|other| BR8

    BR8 -->|Yes| SUB8["subkey check"]
    BR8 -->|No| BR9["key equals Start Date Day"]

    SUB8 -->|value| RET_STR
    SUB8 -->|enable| RET_BOOL
    SUB8 -->|state| RET_STR2
    SUB8 -->|other| BR9

    BR9 -->|Yes| SUB9["subkey check"]
    BR9 -->|No| BR10["key equals Display Mailbox Capacity"]

    SUB9 -->|value| RET_STR
    SUB9 -->|enable| RET_BOOL
    SUB9 -->|state| RET_STR2
    SUB9 -->|other| BR10

    BR10 -->|Yes| SUB10["subkey check"]
    BR10 -->|No| BR11["key equals Display Virus Check"]

    SUB10 -->|value| RET_STR
    SUB10 -->|enable| RET_BOOL
    SUB10 -->|state| RET_STR2
    SUB10 -->|other| BR11

    BR11 -->|Yes| SUB11["subkey check"]
    BR11 -->|No| BR12["key equals Regist Mailbox MB Value"]

    SUB11 -->|value| RET_STR
    SUB11 -->|state| RET_STR2
    SUB11 -->|other| BR13

    BR12 -->|Yes| SUB12["subkey check"]
    BR12 -->|value| RET_STR
    BR12 -->|state| RET_STR2
    BR12 -->|other| BR13

    BR13 -->|Yes| LIST1["key equals Mail MBOX Capacity List"]

    LIST1 -->|Yes| EXTRACT["Extract key path after first slash"]

    EXTRACT --> CHK_ASTERISK["keyRemain equals star"]
    CHK_ASTERISK -->|Yes| RET_INT["Return Integer.class"]
    CHK_ASTERISK -->|No| FIND_SEP2["Find next slash"]

    FIND_SEP2 --> SEP_CHECK["separaterPoint <= 0"]
    SEP_CHECK -->|Yes| RET_NULL2["Return null"]
    SEP_CHECK -->|No| PARSE_IDX["Parse tmpIndexInt from key"]

    PARSE_IDX --> IDX_PARSE_ERR["NumberFormatException"]
    IDX_PARSE_ERR -->|Yes| RET_NULL2
    IDX_PARSE_ERR -->|No| IDX_BOUNDS["tmpIndex in range"]

    IDX_BOUNDS -->|No| RET_NULL2
    IDX_BOUNDS -->|Yes| DELEGATE1["key = keyRemain rest
Delegate mlbox_cap_op_list_list"]

    LIST1 -->|No| BR14["key equals Virus Check Selection List"]

    BR14 -->|Yes| EXTRACT2["Extract key path after first slash"]

    EXTRACT2 --> CHK_ASTERISK2["keyRemain equals star"]
    CHK_ASTERISK2 -->|Yes| RET_INT
    CHK_ASTERISK2 -->|No| FIND_SEP3["Find next slash"]

    FIND_SEP3 --> SEP_CHECK2["separaterPoint <= 0"]
    SEP_CHECK2 -->|Yes| RET_NULL2
    SEP_CHECK2 -->|No| PARSE_IDX2["Parse tmpIndexInt from key"]

    PARSE_IDX2 --> IDX_PARSE_ERR2["NumberFormatException"]
    IDX_PARSE_ERR2 -->|Yes| RET_NULL2
    IDX_PARSE_ERR2 -->|No| IDX_BOUNDS2["tmpIndex in range"]

    IDX_BOUNDS2 -->|No| RET_NULL2
    IDX_BOUNDS2 -->|Yes| DELEGATE2["key = keyRemain rest
Delegate virus_chk_op_list_list"]

    BR14 -->|No| RET_NULL3["Return null"]

    RET_NULL1 --> END(["END"])
    RET_STR --> END
    RET_BOOL --> END
    RET_STR2 --> END
    RET_INT --> END
    RET_NULL2 --> END
    RET_NULL3 --> END
    DELEGATE1 --> END
    DELEGATE2 --> END
```

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `key` | `String` | The **field name** identifying a configuration item on the mail service settings screen. Each key corresponds to a specific configurable option (e.g., mail address account, mailbox capacity, virus check). For list-based fields, the key follows a slash-delimited path: `listName/index/subfield` (e.g., `メールMBOX容量選択リスト/0/プラン名`) where the index selects an element from the dynamic list and subfield selects a property within that element. |
| 2 | `subkey` | `String` | The **property name** within the identified field. Common values are `"value"` (the actual data value), `"enable"` (whether the field is editable/enabled), and `"state"` (the validation/display status). For list fields, this is delegated to the child element's type model data. |

**Instance fields read by this method:**

| Field | Type | Business Description |
|-------|------|---------------------|
| `mlbox_cap_op_list_list` | `X33VDataTypeList` | The dynamic list of selectable Mail MBOX capacity options. Each element implements `X33VDataTypeBeanInterface` and carries its own type metadata for nested properties. |
| `virus_chk_op_list_list` | `X33VDataTypeList` | The dynamic list of selectable Virus Check options. Each element implements `X33VDataTypeBeanInterface` and carries its own type metadata for nested properties. |

## 4. CRUD Operations / Called Services

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| - | `JKKAdEditCC.substring` | JKKAdEditCC | - | Calls `substring` in `JKKAdEditCC` |
| - | `JKKAdEdit.substring` | JKKAdEdit | - | Calls `substring` in `JKKAdEdit` |
| - | `JKKTelnoInfoAddMapperCC.substring` | JKKTelnoInfoAddMapperCC | - | Calls `substring` in `JKKTelnoInfoAddMapperCC` |
| - | `JDKejbStringEdit.substring` | JDKejbStringEdit | - | Calls `substring` in `JDKejbStringEdit` |
| - | `KKW00801SF01DBean.typeModelData` | KKW00801SF01DBean | - | Calls `typeModelData` in `KKW00801SF01DBean` (recursive delegation for list elements) |

**CRUD Classification:** This method performs **no direct database or entity operations**. It is a pure type-dispatch utility that routes field name lookups to their corresponding Java `Class<?>` types. All calls are internal string manipulation (`substring`, `indexOf`, `Integer.valueOf`) and recursive delegation to child `X33VDataTypeBeanInterface` objects.

## 5. Dependency Trace

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | KKW00801SF01DBean | KKW00801SF01DBean.typeModelData (self-called for list delegation) | typeModelData (recursive, no SC/CRUD) |

**Note:** The only direct caller identified from the code graph is `KKW00801SF01DBean.typeModelData()` itself — used for recursive delegation when processing list-based fields. The method is invoked externally by the MVC framework's form model generation logic (not captured in the graph search), which calls it to determine the Java type of each form field before rendering HTML inputs.

## 6. Per-Branch Detail Blocks

**Block 1** — [IF] null check (L1058)

Guard clause: if either `key` or `subkey` is `null`, return `null` immediately. This prevents `NullPointerException` on subsequent operations.

| # | Type | Code |
|---|------|------|
| 1 | CHECK | `key == null || subkey == null` |
| 2 | RETURN | `return null` // If input is null, return null (nullの場合、nullを返す) |

**Block 2** — [SET] Initialize separator position (L1080)

| # | Type | Code |
|---|------|------|
| 1 | SET | `separaterPoint = key.indexOf("/")` // Find position of first slash for list-key parsing |

**Block 3** — [ELSE-IF chain] Simple scalar fields (L1083–L1241)

Each of the 11 branches checks a specific `key` value. For each key, a nested subkey check returns the appropriate `Class<?>`.

**Block 3.1** — [ELSE-IF] key equals "メールアドレス" (Mail Address Account) [MLAD_ACCOUNT] (L1083)

| # | Type | Code |
|---|------|------|
| 1 | CHECK | `key.equals("メールアドレス")` // key equals "Mail Address Account" |
| 2 | ELSE-IF | `subkey.equalsIgnoreCase("value")` // Field value property |
| 3 | RETURN | `return String.class` |
| 4 | ELSE-IF | `subkey.equalsIgnoreCase("enable")` // Field enabled/disabled flag |
| 5 | RETURN | `return Boolean.class` |
| 6 | ELSE-IF | `subkey.equalsIgnoreCase("state")` // Field status (stateの場合、ステータスを返す) |
| 7 | RETURN | `return String.class` |

**Block 3.2** — [ELSE-IF] key equals "メールアドレスマイニング" (Mail Address Domain) [MLAD_DOMAIN] (L1096)

| # | Type | Code |
|---|------|------|
| 1 | CHECK | `key.equals("メールアドレスマイニング")` // key equals "Mail Address Domain" |
| 2 | ELSE-IF | `subkey.equalsIgnoreCase("value")` // Field value property |
| 3 | RETURN | `return String.class` |
| 4 | ELSE-IF | `subkey.equalsIgnoreCase("enable")` // Field enabled/disabled flag |
| 5 | RETURN | `return Boolean.class` |
| 6 | ELSE-IF | `subkey.equalsIgnoreCase("state")` // Field status |
| 7 | RETURN | `return String.class` |

**Block 3.3** — [ELSE-IF] key equals "メールエイリアス" (Mail Alias) [MAILALIAS] (L1109)

| # | Type | Code |
|---|------|------|
| 1 | CHECK | `key.equals("メールエイリアス")` // key equals "Mail Alias" |
| 2 | ELSE-IF | `subkey.equalsIgnoreCase("value")` // Field value property |
| 3 | RETURN | `return String.class` |
| 4 | ELSE-IF | `subkey.equalsIgnoreCase("enable")` // Field enabled/disabled flag |
| 5 | RETURN | `return Boolean.class` |
| 6 | ELSE-IF | `subkey.equalsIgnoreCase("state")` // Field status |
| 7 | RETURN | `return String.class` |

**Block 3.4** — [ELSE-IF] key equals "メールボックス容量" (Mailbox Capacity) [MLBOX_CAPA_INDEX] (L1122)

| # | Type | Code |
|---|------|------|
| 1 | CHECK | `key.equals("メールボックス容量")` // key equals "Mailbox Capacity" |
| 2 | ELSE-IF | `subkey.equalsIgnoreCase("value")` // Field value property |
| 3 | RETURN | `return String.class` |
| 4 | ELSE-IF | `subkey.equalsIgnoreCase("enable")` // Field enabled/disabled flag |
| 5 | RETURN | `return Boolean.class` |
| 6 | ELSE-IF | `subkey.equalsIgnoreCase("state")` // Field status |
| 7 | RETURN | `return String.class` |

**Block 3.5** — [ELSE-IF] key equals "ウィルスチェック" (Virus Check) [VIRUS_CHK_INDEX] (L1135)

| # | Type | Code |
|---|------|------|
| 1 | CHECK | `key.equals("ウィルスチェック")` // key equals "Virus Check" |
| 2 | ELSE-IF | `subkey.equalsIgnoreCase("value")` // Field value property |
| 3 | RETURN | `return String.class` |
| 4 | ELSE-IF | `subkey.equalsIgnoreCase("enable")` // Field enabled/disabled flag |
| 5 | RETURN | `return Boolean.class` |
| 6 | ELSE-IF | `subkey.equalsIgnoreCase("state")` // Field status |
| 7 | RETURN | `return String.class` |

**Block 3.6** — [ELSE-IF] key equals "ＰＯＰＩＤ" (POP ID) [POP_ID] (L1148)

| # | Type | Code |
|---|------|------|
| 1 | CHECK | `key.equals("ＰＯＰＩＤ")` // key equals "POP ID" |
| 2 | ELSE-IF | `subkey.equalsIgnoreCase("value")` // Field value property |
| 3 | RETURN | `return String.class` |
| 4 | ELSE-IF | `subkey.equalsIgnoreCase("enable")` // Field enabled/disabled flag |
| 5 | RETURN | `return Boolean.class` |
| 6 | ELSE-IF | `subkey.equalsIgnoreCase("state")` // Field status |
| 7 | RETURN | `return String.class` |

**Block 3.7** — [ELSE-IF] key equals "利用開始日（年）" (Start Date Year) [USE_STAYMD_YEAR] (L1161)

| # | Type | Code |
|---|------|------|
| 1 | CHECK | `key.equals("利用開始日（年）")` // key equals "Start Date Year" |
| 2 | ELSE-IF | `subkey.equalsIgnoreCase("value")` // Field value property |
| 3 | RETURN | `return String.class` |
| 4 | ELSE-IF | `subkey.equalsIgnoreCase("enable")` // Field enabled/disabled flag |
| 5 | RETURN | `return Boolean.class` |
| 6 | ELSE-IF | `subkey.equalsIgnoreCase("state")` // Field status |
| 7 | RETURN | `return String.class` |

**Block 3.8** — [ELSE-IF] key equals "利用開始日（月）" (Start Date Month) [USE_STAYMD_MON] (L1174)

| # | Type | Code |
|---|------|------|
| 1 | CHECK | `key.equals("利用開始日（月）")` // key equals "Start Date Month" |
| 2 | ELSE-IF | `subkey.equalsIgnoreCase("value")` // Field value property |
| 3 | RETURN | `return String.class` |
| 4 | ELSE-IF | `subkey.equalsIgnoreCase("enable")` // Field enabled/disabled flag |
| 5 | RETURN | `return Boolean.class` |
| 6 | ELSE-IF | `subkey.equalsIgnoreCase("state")` // Field status |
| 7 | RETURN | `return String.class` |

**Block 3.9** — [ELSE-IF] key equals "利用開始日（日）" (Start Date Day) [USE_STAYMD_DAY] (L1187)

| # | Type | Code |
|---|------|------|
| 1 | CHECK | `key.equals("利用開始日（日）")` // key equals "Start Date Day" |
| 2 | ELSE-IF | `subkey.equalsIgnoreCase("value")` // Field value property |
| 3 | RETURN | `return String.class` |
| 4 | ELSE-IF | `subkey.equalsIgnoreCase("enable")` // Field enabled/disabled flag |
| 5 | RETURN | `return Boolean.class` |
| 6 | ELSE-IF | `subkey.equalsIgnoreCase("state")` // Field status |
| 7 | RETURN | `return String.class` |

**Block 3.10** — [ELSE-IF] key equals "表示用メールボックス容量" (Display Mailbox Capacity) [MLBOX_CAPA_VALUE] (L1200)

| # | Type | Code |
|---|------|------|
| 1 | CHECK | `key.equals("表示用メールボックス容量")` // key equals "Display Mailbox Capacity" |
| 2 | ELSE-IF | `subkey.equalsIgnoreCase("value")` // Field value property |
| 3 | RETURN | `return String.class` |
| 4 | ELSE-IF | `subkey.equalsIgnoreCase("enable")` // Field enabled/disabled flag |
| 5 | RETURN | `return Boolean.class` |
| 6 | ELSE-IF | `subkey.equalsIgnoreCase("state")` // Field status |
| 7 | RETURN | `return String.class` |

**Block 3.11** — [ELSE-IF] key equals "表示用ウィルスチェック" (Display Virus Check) [VIRUS_CHK_VALUE] (L1213)

| # | Type | Code |
|---|------|------|
| 1 | CHECK | `key.equals("表示用ウィルスチェック")` // key equals "Display Virus Check" |
| 2 | ELSE-IF | `subkey.equalsIgnoreCase("value")` // Field value property |
| 3 | RETURN | `return String.class` |
| 4 | ELSE-IF | `subkey.equalsIgnoreCase("enable")` // Field enabled/disabled flag |
| 5 | RETURN | `return Boolean.class` |
| 6 | ELSE-IF | `subkey.equalsIgnoreCase("state")` // Field status |
| 7 | RETURN | `return String.class` |

**Block 3.12** — [ELSE-IF] key equals "登録用メールボックス容量ＭＢ値" (Regist Mailbox MB Value) [MLBOX_CAPA_MB] (L1226)

**Special case:** This field only supports `value` and `state` subkeys — no `enable` subkey.

| # | Type | Code |
|---|------|------|
| 1 | CHECK | `key.equals("登録用メールボックス容量ＭＢ値")` // key equals "Regist Mailbox MB Value" |
| 2 | ELSE-IF | `subkey.equalsIgnoreCase("value")` // Field value property |
| 3 | RETURN | `return String.class` |
| 4 | ELSE-IF | `subkey.equalsIgnoreCase("state")` // Field status (enable not supported) |
| 5 | RETURN | `return String.class` |

**Block 4** — [ELSE-IF] key equals "メールMBOX容量選択リスト" (Mail MBOX Capacity Selection List) [MLBOX_CAP_O_LIST] (L1240)

Handles a dynamic list field. The key is expected to contain a slash-delimited path `listName/index/subfield`. The method parses this path, validates the index, and delegates to the child element.

| # | Type | Code |
|---|------|------|
| 1 | CHECK | `key.equals("メールMBOX容量選択リスト")` // key equals "Mail MBOX Capacity Selection List" |
| 2 | SET | `keyRemain = key.substring(separaterPoint + 1)` // Extract path after the first slash (keyの次の要素を取得) |
| 3 | ELSE-IF | `keyRemain.equals("*")` // Wildcard: return list size type |
| 4 | RETURN | `return Integer.class` // Returning Integer.class because "*" means list size |
| 5 | SET | `separaterPoint = keyRemain.indexOf("/")` // Find next delimiter (次の区切り符号を検索) |
| 6 | ELSE-IF | `separaterPoint <= 0` // No delimiter found or invalid |
| 7 | RETURN | `return null` // Missing delimiter, return null (区切り符号が見つからない、または不正) |
| 8 | SET | `key = keyRemain.substring(0, separaterPoint)` // Extract the index portion (インデックス値を取得) |
| 9 | SET | `tmpIndexInt = null` // Initialize temp index variable |
| 10 | TRY | `tmpIndexInt = Integer.valueOf(key)` // Parse index as integer |
| 11 | CATCH | `NumberFormatException` // Non-numeric index |
| 12 | RETURN | `return null` // Index is not a numeric string, return null |
| 13 | ELSE-IF | `tmpIndexInt == null` // Null check after parsing |
| 14 | RETURN | `return null` |
| 15 | SET | `tmpIndex = tmpIndexInt.intValue()` // Unwrap to primitive int |
| 16 | ELSE-IF | `tmpIndex < 0 || tmpIndex >= mlbox_cap_op_list_list.size()` // Out of bounds |
| 17 | RETURN | `return null` // Index exceeds list size, return null |
| 18 | SET | `key = keyRemain.substring(separaterPoint + 1)` // Extract remaining subfield key (項目名を生成) |
| 19 | CALL | `(X33VDataTypeBeanInterface)mlbox_cap_op_list_list.get(tmpIndex).typeModelData(key, subkey)` // Delegate to child element |
| 20 | RETURN | Result of delegated call // For type-model-viewing type, only key and subkey are passed (データタイプビューイング型では項目名とsubkeyのみ引数に指定) |

**Block 5** — [ELSE-IF] key equals "ウィルスチェック選択リスト" (Virus Check Selection List) [VIRUS_CHK_OP_LIST] (L1274)

Mirrors Block 4 but operates on `virus_chk_op_list_list` instead.

| # | Type | Code |
|---|------|------|
| 1 | CHECK | `key.equals("ウィルスチェック選択リスト")` // key equals "Virus Check Selection List" |
| 2 | SET | `keyRemain = key.substring(separaterPoint + 1)` // Extract path after the first slash |
| 3 | ELSE-IF | `keyRemain.equals("*")` // Wildcard: return list size type |
| 4 | RETURN | `return Integer.class` // Returning Integer.class because "*" means list size |
| 5 | SET | `separaterPoint = keyRemain.indexOf("/")` // Find next delimiter |
| 6 | ELSE-IF | `separaterPoint <= 0` // No delimiter found or invalid |
| 7 | RETURN | `return null` // Missing delimiter, return null |
| 8 | SET | `key = keyRemain.substring(0, separaterPoint)` // Extract the index portion |
| 9 | SET | `tmpIndexInt = null` // Initialize temp index variable |
| 10 | TRY | `tmpIndexInt = Integer.valueOf(key)` // Parse index as integer |
| 11 | CATCH | `NumberFormatException` // Non-numeric index |
| 12 | RETURN | `return null` // Index is not a numeric string, return null |
| 13 | ELSE-IF | `tmpIndexInt == null` // Null check after parsing |
| 14 | RETURN | `return null` |
| 15 | SET | `tmpIndex = tmpIndexInt.intValue()` // Unwrap to primitive int |
| 16 | ELSE-IF | `tmpIndex < 0 || tmpIndex >= virus_chk_op_list_list.size()` // Out of bounds |
| 17 | RETURN | `return null` // Index exceeds list size, return null |
| 18 | SET | `key = keyRemain.substring(separaterPoint + 1)` // Extract remaining subfield key |
| 19 | CALL | `(X33VDataTypeBeanInterface)virus_chk_op_list_list.get(tmpIndex).typeModelData(key, subkey)` // Delegate to child element |
| 20 | RETURN | Result of delegated call |

**Block 6** — [ELSE] No match fallback (L1290)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return null` // No matching property exists, return null (条件に一致するプロパティが存在しない場合は、nullを返す) |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `メールアドレス` | Japanese key | Mail Address Account — the user's email address field (Item ID: `mlad_account`) |
| `メールアドレスマイニング` | Japanese key | Mail Address Domain — the domain portion of the email address (Item ID: `mlad_domain`) |
| `メールエイリアス` | Japanese key | Mail Alias — an alternate email address that forwards to the primary account (Item ID: `mailalias`) |
| `メールボックス容量` | Japanese key | Mailbox Capacity — storage capacity of the user's mailbox (Item ID: `mlbox_capa_index`) |
| `ウィルスチェック` | Japanese key | Virus Check — whether virus scanning is enabled for the mailbox (Item ID: `virus_chk_index`) |
| `ＰＯＰＩＤ` | Japanese key | POP ID — the POP3 retrieval account identifier (Item ID: `pop_id`) |
| `利用開始日（年）` | Japanese key | Start Date Year — the year the service started (Item ID: `use_staymd_year`) |
| `利用開始日（月）` | Japanese key | Start Date Month — the month the service started (Item ID: `use_staymd_mon`) |
| `利用開始日（日）` | Japanese key | Start Date Day — the day the service started (Item ID: `use_staymd_day`) |
| `表示用メールボックス容量` | Japanese key | Display Mailbox Capacity — mailbox capacity shown on the display screen (Item ID: `mlbox_capa_value`) |
| `表示用ウィルスチェック` | Japanese key | Display Virus Check — virus check setting shown on the display screen (Item ID: `virus_chk_value`) |
| `登録用メールボックス容量ＭＢ値` | Japanese key | Regist Mailbox MB Value — mailbox capacity in MB at registration time (Item ID: `mlbox_capa_mb`) |
| `メールMBOX容量選択リスト` | Japanese key | Mail MBOX Capacity Selection List — configurable list of available mailbox capacity options (Item ID: `mlbox_cap_op_list`) |
| `ウィルスチェック選択リスト` | Japanese key | Virus Check Selection List — configurable list of available virus check options (Item ID: `virus_chk_op_list`) |
| `subkey` | Field | Property selector within a field — `"value"` for the data value, `"enable"` for editability flag, `"state"` for validation/display status |
| `value` | Subkey value | The actual data value of the field |
| `enable` | Subkey value | Whether the field is editable/enabled in the UI |
| `state` | Subkey value | The validation or display status of the field |
| `X33VDataTypeBeanInterface` | Interface | Contract for type-model-viewing beans — objects implementing this interface can report their own field types via `typeModelData` |
| `X33VDataTypeList` | Class | A list container that holds `X33VDataTypeBeanInterface` elements, used for dynamic option lists |
| `separaterPoint` | Local var | Index of the first `/` in the key string, used for parsing slash-delimited list paths |
| `keyRemain` | Local var | The portion of the key after the first slash, used for nested path resolution in list fields |
| `tmpIndexInt` | Local var | Temporary Integer variable for parsing the list index from the key string |
| `tmpIndex` | Local var | Primitive int extracted from `tmpIndexInt`, used for bounds checking against the list |
| `*` | Special value | Wildcard used as the index in list keys to request the list size type (Integer.class) |
