Skip to content

SamuelDouay/Ethanpod

Repository files navigation

Quality Gate Status Maintainability Rating Reliability Rating Security Rating Lines of Code Coverage Technical Debt Vulnerabilities Code Smells Bugs

EthanPod

EthanPod is a Java application for managing and listening to podcasts.


About the Project 🎧

EthanPod is a desktop application built in Java with JavaFX. It allows you to easily manage and listen to your favorite podcasts. You can subscribe to podcast RSS feeds, download episodes, and play them directly within the application.


EthanPod Architecture - Maven Modules

Overview

The EthanPod application follows a modular Maven architecture with a clear separation of responsibilities using a layered pattern. The project is organized around 9 main modules managed by a parent POM.


Module Structure

πŸ“ Parent POM (ethanpod-parent)

<groupId>fr.github</groupId>
<artifactId>ethanpod-parent</artifactId>
<version>0.0.1</version>
<packaging>pom</packaging>

Responsibilities :

  • Centralized dependency version management
  • Common Maven configuration
  • Shared plugins (JaCoCo, Compiler)
  • Java 22 as target version

Architectural Layers

1. πŸ—οΈ Foundation Layer (Core)

ethanpod-core

Role : Domain objects and business entities

Dependencies:
  - Jackson (JSON serialization)
  - Log4j API
  - JUnit 5 (tests)
  - Mockito (tests)

ethanpod-exception

Role : Centralized exception handling

Dependencies:
  - No external dependencies

ethanpod-util

Role : Utilities and logging configuration

Dependencies:
  - SLF4J API
  - Log4j SLF4J Implementation
  - Log4j Core
  - ethanpod-core
  - ethanpod-exception

2. 🧠 Business Logic Layer

ethanpod-logic

Role : Business logic, data access, repositories

Dependencies:
  - ethanpod-core
  - ethanpod-util
  - ethanpod-exception
  - SQLite JDBC
  - HikariCP (connection pooling)
  - Jackson (JSON)
  - Dom4j (XML processing)
  - Jaxen (XPath)
  - Log4j SLF4J Implementation

3. πŸ”§ Service Layer

ethanpod-service

Role : Business services and orchestration

Dependencies:
  - ethanpod-core
  - ethanpod-util
  - ethanpod-logic

4. πŸ–₯️ Presentation Layer

ethanpod-view

Role : User interface and visual components

Dependencies:
  - ethanpod-core
  - ethanpod-util
  - ethanpod-logic
  - ethanpod-service
  - ethanpod-event
  - JavaFX Controls
  - Ikonli JavaFX
  - Ikonli Material Design 2

ethanpod-controller

Role : MVC controllers and presentation logic

Dependencies:
  - ethanpod-core
  - ethanpod-service
  - Log4j API

ethanpod-event

Role : Event system and handlers

Dependencies:
  - ethanpod-core
  - ethanpod-util
  - JavaFX Graphics

5. πŸš€ Application Module

ethanpod-app

Role : Entry point and final assembly

Dependencies:
  - ALL internal modules
  - JavaFX Controls
Main Class: fr.github.ethanpod.app.Main

Special Configuration :

  • Maven Assembly plugin to create an executable JAR
  • Inclusion of all dependencies
  • Main entry point of the application

Dependency Diagram

    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
    β”‚    ethanpod-parent      β”‚
    β”‚   (POM management)      β”‚
    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                 β”‚
    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
    β”‚            β”‚               β”‚
    β–Ό            β–Ό               β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  core   β”‚ β”‚ exception β”‚ β”‚    util     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
    β”‚             β”‚              β”‚
    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                  β–Ό
            β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
            β”‚    logic    β”‚
            β”‚ (Business)  β”‚
            β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                    β”‚
                    β–Ό
            β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
            β”‚   service   β”‚
            β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                    β”‚
       β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
       β–Ό            β–Ό             β–Ό
  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”
  β”‚  view   β”‚ β”‚ controller β”‚ β”‚ event   β”‚
  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
       β”‚            β”‚             β”‚
       β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                    β–Ό
              β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
              β”‚ethanpod-app β”‚
              β”‚ (Assembly)  β”‚
              β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Technologies and Frameworks

πŸ—„οΈ Persistance et DonnΓ©es

Technology Version Usage
SQLite JDBC 3.46.0.1 Embedded database
HikariCP 6.3.0 Connection pooling

🎨 User Interface

Technology Version Usage
JavaFX 24.0.1 Graphical interface
Ikonli 12.3.1 Icon system
Material Design 2 12.3.1 Icon pack

πŸ“Š Data Processing

Technology Version Usage
Jackson 2.18.2 JSON serialization
Dom4j 2.1.4 XML processing
Jaxen 2.0.0 XPath queries

πŸ“ Logging

Technology Version Usage
Log4j 2 2.23.1 Logging system
SLF4J 2.0.17 Logging facade

πŸ§ͺ Testing

Technology Version Usage
JUnit 5 5.10.0 Testing framework
Mockito 5.18.0 Mocking for tests

Architecture Flow

Pattern MVC DistribuΓ©

  1. View Layer (ethanpod-view)

    • JavaFX components
    • Data binding
    • Visual presentation
  2. Controller Layer (ethanpod-controller)

    • User event handling
    • Coordination between View and Service
  3. Service Layer (ethanpod-service)

    • Application logic
    • Process orchestration
  4. Business Logic Layer (ethanpod-logic)

    • Business rules
    • Data access
    • Repositories
  5. Core Layer (ethanpod-core)

    • Data model
    • Business entities

Processing Flow

User Input β†’ View β†’ Controller β†’ Service β†’ Logic β†’ Database
                ↓                            ↓
              Event ← Controller ← Service ← Logic
                ↓
            View Update

Maven Configuration

Project Properties

<properties>
    <maven.compiler.source>22</maven.compiler.source>
    <maven.compiler.target>22</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

Main Plugins

  • Maven Compiler : Java 22 compilation
  • Maven Assembly : Executable JAR creation
  • JaCoCo : Code coverage
  • SonarQube : Code quality analysis

Prerequisites

  • Java 22 or higher
  • Maven for compilation and dependency management

Installation

Clone the Repository

git clone https://github.com/SamuelDouay/EthanPod.git
cd EthanPod

Compile the Project

mvn clean package

This command generates an executable JAR file with all dependencies included.


Run the Application

java -jar target/EthanPod-0.0.1-jar-with-dependencies.jar

Tests

To run the tests :

mvn test

About

A podcast manager for desktop

Topics

Resources

License

Code of conduct

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published