diff --git a/.scripts/sort.py b/.scripts/sort.py deleted file mode 100644 index d809100..0000000 --- a/.scripts/sort.py +++ /dev/null @@ -1,50 +0,0 @@ -# coding: utf-8 - -""" - The approach taken is explained below. I decided to do it simply. - Initially I was considering parsing the data into some sort of - structure and then generating an appropriate README. I am still - considering doing it - but for now this should work. The only issue - I see is that it only sorts the entries at the lowest level, and that - the order of the top-level contents do not match the order of the actual - entries. - - This could be extended by having nested blocks, sorting them recursively - and flattening the end structure into a list of lines. Revision 2 maybe ^.^. -""" - - -def main(): - # First, we load the current README into memory as an array of lines - with open('README.md', 'r') as read_me_file: - read_me = read_me_file.readlines() - - # Then we cluster the lines together as blocks - # Each block represents a collection of lines that should be sorted - # This was done by assuming only links ([...](...)) are meant to be sorted - # Clustering is done by indentation - blocks = [] - last_indent = None - for line in read_me: - s_line = line.lstrip() - indent = len(line) - len(s_line) - - if any([s_line.startswith(s) for s in ['* [', '- [']]): - if indent == last_indent: - blocks[-1].append(line) - else: - blocks.append([line]) - last_indent = indent - else: - blocks.append([line]) - last_indent = None - - with open('README.md', 'w+') as sorted_file: - # Then all of the blocks are sorted individually - blocks = [''.join(sorted(block, key=lambda s: s.lower())) for block in blocks] - # And the result is written back to README.md - sorted_file.write(''.join(blocks)) - - -if __name__ == "__main__": - main() diff --git a/README.md b/README.md index c277beb..4017496 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,7 @@ A curated list of awesome Java frameworks, libraries and software. - [Awesome Java](#awesome-java) - [Ancients](#ancients) + - [Bean Mapping](#bean-mapping) - [Build](#build) - [Bytecode Manipulation](#bytecode-manipulation) - [Cluster Management](#cluster-management) @@ -73,6 +74,15 @@ A curated list of awesome Java frameworks, libraries and software. * [JavaServer Faces](https://javaserverfaces.java.net/) - Oracle's open-source implementation of the JSF standard, Mojarra. * [JavaServer Pages](https://jsp.java.net/) - Common templating for websites with custom tag libraries. +## Bean Mapping + +*Frameworks that ease bean mapping.* + +* [Dozer](https://github.com/DozerMapper/dozer/) - Mapper that copies data from one object to another, using annotations, API or XML configuration. +* [MapStruct](https://github.com/mapstruct/mapstruct) - Code generator which simplifies mappings between different bean types, based on a convention over configuration approach. +* [ModelMapper](https://github.com/jhalterman/modelmapper) - ModelMapper is an intelligent object mapping library that automatically maps objects to each other. +* [Orika](https://github.com/orika-mapper) - Orika is a Java Bean mapping framework that recursively copies (among other capabilities) data from one object to another. +* [Selma](https://github.com/xebia-france/selma) - Stupid Simple Statically Linked Mapper. Selma is an Annotation Processor Based bean mapper. ## Build @@ -148,6 +158,7 @@ A curated list of awesome Java frameworks, libraries and software. *Frameworks and libraries that simplify reading/writing CSV data.* +* [opencsv](http://opencsv.sourceforge.net) - Simple CSV parser with a commercial-friendly license. * [uniVocity-parsers](https://github.com/uniVocity/univocity-parsers) - One of the fastest and most feature-complete CSV. Also comes with parsers for TSV and fixed width records. ## Database @@ -160,11 +171,13 @@ A curated list of awesome Java frameworks, libraries and software. * [H2](http://h2database.com/) - Small SQL Database notable for its in-memory functionality. * [HikariCP](https://github.com/brettwooldridge/HikariCP) - High performance JDBC connection pool. * [JDBI](http://jdbi.org/) - Convenient abstraction of JDBC. +* [Jedis](https://github.com/xetorthio/jedis) - A small client for interaction with redis, with methods for commands. * [jOOQ](http://www.jooq.org/) - Generates typesafe code based on SQL schema. * [Liquibase](http://www.liquibase.org/) - Database-independent library for tracking, managing and applying database schema changes. * [MapDB](http://www.mapdb.org/) - Embedded database engine that provides concurrent collections backed on disk or in off-heap memory. * [Presto](https://github.com/facebook/presto) - Distributed SQL query engine for big data. * [Querydsl](http://www.querydsl.com/) - Typesafe unified queries. +* [Redisson](https://github.com/mrniko/redisson) - Allows for distributed and scalable data structures on top of a Redis server. ## Data structures @@ -174,12 +187,15 @@ A curated list of awesome Java frameworks, libraries and software. * [Protobuf](https://github.com/google/protobuf) - Google's data interchange format. * [SBE](https://github.com/real-logic/simple-binary-encoding) - Simple Binary Encoding, one of the fastest message formats around. * [Wire](https://github.com/square/wire) - Clean, lightweight protocol buffers. +* [Apache Thrift](https://thrift.apache.org/) - Data interchange format that originated at Facebook. +* [Apache Avro](https://avro.apache.org/) - Data interchange format featuring among others: dynamic typing, untagged data, absence of manually assigned IDs. ## Date and Time *Libraries related to handling date and time.* * [Joda-Time](http://www.joda.org/joda-time/) - De facto standard date/time-library before Java 8. +* [ThreeTenBP](https://github.com/ThreeTen/threetenbp) - Port of JSR 310 (java.time package) by the author of Joda-Time. * [Time4J](https://github.com/MenoData/Time4J) - Advanced date and time library. ## Dependency Injection @@ -228,6 +244,7 @@ A curated list of awesome Java frameworks, libraries and software. * [Apache HBase](http://hbase.apache.org) - Hadoop database for big data. * [Druid](http://druid.io) - Real-time and historical OLAP data store that excel at aggregation and approximation queries. * [Infinispan](http://infinispan.org/) - Highly concurrent key/value datastore used for caching. +* [OpenTSDB](http://opentsdb.net) - Scalable and distributed time series database written on top of Apache HBase. ## Distribution @@ -273,6 +290,7 @@ A curated list of awesome Java frameworks, libraries and software. * [Functional Java](http://www.functionaljava.org) - Implements numerous basic and advanced programming abstractions that assist composition-oriented development. * [Javaslang](http://javaslang.com) - Functional component library that provides persistent data types and functional control structures. * [jOOλ](https://github.com/jOOQ/jOOL) - Extension to Java 8 which aims to fix gaps in lambda, providing numerous missing types and a rich set of sequential Stream API additions. +* [derive4j](https://github.com/derive4j/derive4j) - Java 8 annotation processor and framework for deriving algebraic data types constructors, pattern-matching, morphisms. ## Game Development @@ -400,6 +418,7 @@ A curated list of awesome Java frameworks, libraries and software. * [AppDynamics](http://www.appdynamics.com/) - Commercial performance monitor. * [JavaMelody](https://github.com/javamelody/javamelody) - Performance monitoring and profiling. +* [jmxtrans](https://github.com/jmxtrans/jmxtrans/) - Tool to connect to multiple JVMs and to query them for their attributes via JMX. Its query language is based on JSON, which allows non-Java programmers to access the JVMs attributes. Likewise, this tool supports different output writes, including Graphite, Ganglia, StatsD, among others. * [Kamon](http://www.kamon.io/) - Tool for monitoring applications running on the JVM. * [New Relic](http://newrelic.com/) - Commercial performance monitor. * [SPM](http://sematext.com/spm/) - Commercial performance monitor with distributing transaction tracing for JVM apps. @@ -505,6 +524,7 @@ A curated list of awesome Java frameworks, libraries and software. * [Apache Shiro](http://shiro.apache.org/) - Performs authentication, authorization, cryptography and session management. * [Bouncy Castle](https://www.bouncycastle.org/java.html) - All-purpose cryptographic library. JCA provider, wide range of functions from basic helpers to PGP/SMIME operations. * [Cryptomator](http://cryptomator.org/) - Multiplatform transparent client-side encryption of files in the cloud. +* [Google Keyczar](https://github.com/google/keyczar) - Easy to use, yet safe encryption framework with key versioning. * [Keycloak](http://keycloak.jboss.org/) - Integrated SSO and IDM for browser apps and RESTful web services. * [PicketLink](http://picketlink.org/) - Umbrella project for security and identity management. @@ -561,6 +581,8 @@ A curated list of awesome Java frameworks, libraries and software. * [Truth](https://github.com/google/truth) - Google's assertion and proposition framework. * [Unitils](http://www.unitils.org/) - Modular testing library for unit and integration testing. * [WireMock](http://wiremock.org/) - Stubbs and mocks web services. +* [Moco](https://github.com/dreamhead/moco) - Concise web services for stubs and mocks, Duke's Choice Award 2013. +* [GreenMail](http://www.icegreen.com/greenmail/) - In-memory email server for integration testing. Supports SMTP, POP3 and IMAP including SSL. ## Utility