Customers Java Swing Application with Source Code

customersdesktop

I have developed the Customers Java Swing Application Demo. This application may be useful for developers who want to use Flamingo, Substance and SwingX.

Technology stack:

Model View Controller (MVC) vs Model View Presenter (MVP):

The Customers Java Swing Application Demo has MVC design pattern such as Java Swing. MVP is also popular for Desktop and RIA. Which is best, there are many discussions. Martin Fowler has written very good explanations for GUI Architectures. You may like to read.

Models and Services:

I have written entities with NamedQueries in JPA and Hibernate. The services are very simple with Generic AbstractService.

Screenshots:

Full source code on Bitbucket

* Customers Java Swing Application images and icons credit: iconsdb.com and icons8.com

Practical notes of RESTful API design

Coding Style in RESTful:

JSON: JavaScript naming conventions: camelCase
Rest clients in Java: camelCase
Rest clients in Python and Ruby: snake_case

RESTful Mapping:

GET /customers => Retrieves a list of customers
GET /customers/{id} => Retrieves a specific customer with id.
GET /customers/5

POST /customers => Creates a new customer

PUT /customers/{id} => Updates customer with id.
PUT /customers/5

PATCH /customers/{id} => Partially updates customer with id.
PATCH /customers/5

DELETE /customers/{id} => Deletes customer with id.
DELETE /customers/5

RESTful Mapping with Relations:

GET /customers/{id}/orders => Retrieves list of orders for customer with id.
GET /customers/5/orders
GET /customers/{id}/orders/{id} => Retrieves order with id for customer with id.
GET /customers/5/orders/23

POST /customers/{id}/orders => Creates a new order in customer with id.
POST /customers/5/orders

PUT /customers/{id}/orders/{id} => Updates order with id for customer with id.
PUT /customers/5/orders/23

PATCH /customers/{id}/orders/{id} => Partially updates order with id for customer with id.
PATCH /customers/5/orders/23

DELETE /customers/{id}/orders/{id} => Deletes order with id for customer with id.
DELETE /customers/5/orders/23

RESTful Mapping with Parameters:

Filtering:

GET /customers?key=value => Retrieves list of customers with key value query parameter.
GET /customers?state=active => Here, state is a query parameter that implements a filter.

Sorting:

GET /customers?sort=value => Retrieves a list of customers with sort parameter.
GET /customers?sort=last_name

GET /customers?sort=value1, value2 => Sort parameter with list of comma separated fields.
GET /customers?sort=last_name, created_at

GET /customers?sort=last_name&dir=DESC => Sorting with two parameters.

Searching:

GET /customers/recently_registered => Simple query.
GET /customers?q=Berlin&state=active&sort=last_name&dir=DESC => Complex query with search, state, sort, dir parameters.

Paging:

GET /customers?page=3&per_page=20 => Paging with parameters.
GET /customers/search/name_starts_with?name=K&sort=name&dir=desc => Paging and sorting with parameters.