A JavaFX desktop application for managing and scheduling podcast episodes.
src/
├── app/
│ ├── Main.java (Entry point)
│ └── PodcastSchedulerApp.java (JavaFX GUI Application)
├── model/
│ ├── Episode.java (Abstract base class)
│ ├── RegularEpisode.java (Concrete implementation)
│ ├── BonusEpisode.java (Concrete implementation)
│ ├── EpisodeStatus.java (Enum: DRAFT, SCHEDULED, PUBLISHED)
│ ├── Publishable.java (Interface for scheduling/publishing)
│ ├── ScheduleConflictException.java
│ ├── EpisodePersistenceException.java
│ └── EpisodeRepository.java (Data management & persistence)
├── module-info.java (Java 9+ module configuration)
└── [episodes.txt] (Generated at runtime)
- Create Episodes: Add regular or bonus episodes with title and duration
- Schedule Episodes: Assign future release dates and times
- Conflict Detection: Prevents scheduling two episodes at the same time
- Publish Episodes: Mark episodes as published when their time arrives
- Persistence: Save/load episodes from
episodes.txtfile - JavaFX GUI: User-friendly interface with input validation
- Open the project in IntelliJ IDEA
- Configure JavaFX SDK:
- Go to
File → Project Structure → Libraries - Click
+and add the JavaFX SDK (download from Gluon)
- Go to
- Set Module Path (if using modular system):
- Go to
Run → Edit Configurations - Add VM option:
--module-path /path/to/javafx-sdk/lib --add-modules javafx.controls,javafx.fxml
- Go to
- Run: Right-click
Main.javaand selectRun 'Main.main()'
- ✓ Create multiple episodes (Regular & Bonus)
- ✓ Schedule episodes at different dates/times
- ✓ Attempt scheduling at same time (should show conflict error)
- ✓ Publish past/current episodes
- ✓ Save episodes to file
- ✓ Restart app and verify data loads correctly
- Inheritance:
Episode(abstract) →RegularEpisode,BonusEpisode - Interface:
Publishablefor scheduling/publishing contract - Polymorphism: Different episode types handled uniformly via
List<Episode> - Custom Exceptions: Domain-specific error handling
- Repository Pattern: Centralized data management
- MVC Separation: Model (
model/) and View-Controller (app/)
- Scheduling conflict detection checks exact time match, not duration overlap
- No past date validation on episode creation
- Simple text-based persistence (not database)
- Single-threaded execution
- UUID-based unique episode IDs
- Auto-refresh ListView after create/publish actions
- Formatted episode display in ListView
- Input validation with user-friendly error messages