The Core library provides domain-specific functionality for a podcast search engine. This library is written in Java and therefore prodices a Java API. It should be accessible for Java-compatible technologies. We've tested interoperability with Scala.
The library specifically provides solutions for the following issues:
- Data representation:
- Database entity classes, see the echo.core.domain.entity package.
- Data transfer objects (DTO) for domain information. The standard DTOs are Java interfaces. This library builds on immutables to provide immutables and modifiable implementations of these interfaces. The instances are safe to use with Java-based actor libraries, since they withstand the perils of shared memory environments like the JVM.
- The mapper instances in the echo.core.mapper package provide means to transform between various data formats.
- Interfaces to write structured information to and search within a Lucene reverse index structure. See the echo.core.index package.
- A parser to transform RSS 2.0 and Atom based feed XML data to domain DTOs. The parser also extracts information from the iTunes namespaces
xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
as well as chapter marks from the Podlove namespacexmlns:psc="http://podlove.org/simple-chapters/"
. See the echo.core.parse.rss package. TheFeedParser
interfaces has one implementation based on the ROME framework. - APIs for podcast directories to find unindexed podcast feeds. The only complete implementation is for the Fyyd podcast directory. See the echo.core.parse.api package.
- An HTTP client wrapper for that is mindful of common issues regarding Podcast feeds (e.g. links to media files where websites are expected). See echo.core.http.HttpClient.
- Command classes for usage in AMQP compatible messaging systems (tested with RabbitMQ). See the echo.core.async package.
- Solutions to gather various informations for benchmarks. See the echo.core.benchmark package.
In order to use this library within a search engine architecture, it must be installed into the local Maven repository. Use Gradle to build the library JAR and add it to Maven local:
./gradlew clean build publishToMavenLocal
This library also provides an interactive REPL to test some features. Run the REPL application with:
./gradlew run