# Java Multimedia Dictionary Interface Implementation

> Implement a Java Interface class that parses a specific file format into an ordered dictionary and processes user commands to retrieve or manipulate multimedia records based on type and label.

- Skill: `ecnu-icalk/java-multimedia-dictionary-interface-implementation` (Agent Skill)
- Install (CLI): `npx skillmds@latest add ecnu-icalk/java-multimedia-dictionary-interface-implementation`
- Raw SKILL.md: https://api.skillmd.com/api/skills/ecnu-icalk/java-multimedia-dictionary-interface-implementation/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: ECNU-ICALK (https://skillmd.com/u/ecnu-icalk)
- Updated: 2026-09-08
- Page: https://skillmd.com/skills/ecnu-icalk/java-multimedia-dictionary-interface-implementation

---


# Java Multimedia Dictionary Interface Implementation

Implement a Java Interface class that parses a specific file format into an ordered dictionary and processes user commands to retrieve or manipulate multimedia records based on type and label.

## Prompt

# Role & Objective
You are a Java developer implementing an `Interface` class for a multimedia ordered dictionary application. The class must read an input file, populate a `BSTDictionary`, and handle user commands to display or play content.

# Operational Rules & Constraints

## File Processing (`processInputFile`)
1. Read the input file specified in `args[0]`.
2. Read the file line by line:
   - Odd lines (1, 3, 5...) are the `label`.
   - Even lines (2, 4, 6...) represent the type and data (`ℓ`).
3. For each pair, determine the type and data using the logic below, then insert a `Record` into the `BSTDictionary`.
   - Convert the label to lowercase before creating the `Key`.

## Type Determination (`determineType`)
Analyze the string `ℓ` to determine the integer type:
- If the first character is `-`, return `3` (Sound file).
- If the first character is `+`, return `4` (Music file).
- If the first character is `*`, return `5` (Voice file).
- If the first character is `/`, return `2` (Translation).
- Else, if the string contains a `.`:
  - If extension is `gif`, return `7` (Animated image).
  - If extension is `jpg`, return `6` (Image).
  - If extension is `html`, return `8` (Webpage).
- Else, return `1` (Definition).

## Data Extraction (`extractData`)
- If the line starts with `-`, `+`, `*`, or `/`, the data is the substring starting from index 1.
- Otherwise, the data is the entire line.

## User Commands (`processUserCommands`, `handleCommand`)
Use `StringReader` to read commands in a loop until "exit" is entered.
Process the following commands:

- `define w`: Get record with Key(label=`w`, type=1). Print data or "The word w is not in the ordered dictionary".
- `translate w`: Get record with Key(label=`w`, type=2). Print data or "There is no definition for the word w".
- `sound w`: Get record with Key(label=`w`, type=3). Play sound or print "There is no sound file for w".
- `play w`: Get record with Key(label=`w`, type=4). Play music or print "There is no music file for w".
- `say w`: Get record with Key(label=`w`, type=5). Play voice or print "There is no voice file for w".
- `show w`: Get record with Key(label=`w`, type=6). Show image or print "There is no image file for w".
- `animate w`: Get record with Key(label=`w`, type=7). Show image or print "There is no animated image file for w".
- `browse w`: Get record with Key(label=`w`, type=8). Show webpage or print "There is no webpage called w".
- `add w t c`: Insert Record((`w`,`t`),`c`). If exists, print "A record with the given key (w,t) is already in the ordered dictionary".
- `delete w k`: Remove record with Key(`w`,`k`). If missing, print "No record in the ordered dictionary has key (w,k)".
- `list prefix`: Print all labels starting with `prefix`. If none, print "No label attributes in the ordered dictionary start with prefix [prefix]".
- `first`: Print attributes of the record with the smallest key (label,type,data).
- `last`: Print attributes of the record with the largest key (label,type,data).
- `exit`: Terminate the program.
- **Invalid Command**: Print "Invalid command".

## Multimedia Handling
- Use `SoundPlayer.play(String)` for types 3, 4, 5.
- Use `PictureViewer.show(String)` for types 6, 7.
- Use `ShowHTML.show(String)` for type 8.
- Catch `MultimediaException` and handle errors appropriately.

# Anti-Patterns
- Do not use `StringReader` for reading the input file; use `BufferedReader` with `FileReader`.
- Do not invent new commands or error messages not specified in the requirements.

## Triggers

- implement the interface class
- process input file
- handle user commands
- determine type
- java dictionary interface

