This set of Java libraries forms a package to build Java web applications.
Contained subprojects are:
- ph-oton-html - Java wrapper for all HTML elements and attributes
- ph-oton-jscode - a Java code model to build structured JS code
- ph-oton-jquery - an extension to ph-html-jscode to also support jQuery
- ph-oton-atom - ATOM newsfeed stuff
- ph-oton-io - basic IO stuff (since 9.2.0; previously in ph-oton-app)
- ph-oton-app - basic application stuff
- ph-oton-audit - basic auditing stuff
- ph-oton-ajax - basic AJAX stuff
- ph-oton-api - basic API stuff
- ph-oton-security - security elements (user, user groups, roles etc.)
- ph-oton-exchange - data exchange (import and export)
- ph-oton-connect - connectivity modules
- ph-oton-core - basic web stuff
- ph-oton-uicore - basic web UI stuff
- ph-oton-icon - icon library
- ph-oton-tinymce4 - TinyMCE4 wrapper
- ph-oton-datatables- Datatables.net wrapper
- ph-oton-uictrls - misc web UI controls
- ph-oton-jetty - wrapper for Jetty to simply use as main
- Java 17+ is required for building
- Application server requirements:
- At least Tomcat 10.1.x (JakartaEE 10)
- Jetty 12.x with AnnotationConfiguration enabled
Replace x.y.z with the effective version number.
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.helger.photon</groupId>
<artifactId>ph-oton-parent-pom</artifactId>
<version>x.y.z</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>Note: prior to v8.2.5 the Maven groupId was com.helger.
To use Bootstrap 4 front end use:
<dependencies>
<dependency>
<groupId>com.helger.photon</groupId>
<artifactId>ph-oton-bootstrap4-stub</artifactId>
</dependency>
</dependencies>See the submodule ph-oton-bootstrap4-demo for a working example project with Bootstrap 4 UI.
Note: prior to v8.2.5 the Maven groupId was com.helger.
v10.1.1 - 2025-12-14
- Updated to Jetty 12.1.5
- Extended API of
ConstantCSSPathProviderandConstantJSPathProvider - Fixed an error in
PageViewExternalHTMLCleanserthat may lead to paths with two consecutive slashes (//)
v10.1.0 - 2025-11-16
- Updated to Jetty 12.1.4
- Updated to ph-commons 12.1.0
- Using JSpecify annotations
- Made sure the
DefaultCSSClassProvideruses a thread-safe Map internally
v10.0.2 - 2025-10-23
- Updated to Jetty 12.1.3
- In case an application uses a custom server URL, the
StaticServerInfois now also using the path component from the provided URL instead of theServletContextpath
v10.0.1 - 2025-09-19
- Updated to Jetty 12.1.1
- Made
JettyStarterResourceFactorycustomizable - Created new class
PhotonResourceFactoryand using it as the default inJettyStarter - Added new class
SpringBootURIToURLConverter
v10.0.0 - 2025-08-25
- Requires Java 17 as the minimum version
- Updated to ph-commons 12.0.0
- Updated to Jetty 12.1.0
- Removed all code marked as deprecated for removal
- Made two constructors of
TenantandAccountingAreapublic - Moved the Bootstrap 4 binding to https://github.com/phax/ph-oton-bootstrap4
v9.3.2 - 2025-05-31
- Updated to Jetty 11.0.25
- Ensuring that BigDecimals with a negative scale are correctly formatted in JS. See #23 - thx @domids
- Cache tab on Administration page "Statistics" now shows the cache hit and miss percentage
- Read-only
AbstractHCControlno longer set the tabindex to-1
v9.3.1 - 2025-03-05
- Re-added class
ChartPaletteDefaultin packagecom.helger.photon.uictrls.chart - Made sure that dynamically loaded JS and CSS also get the
nonceattributes, if applicable
v9.3.0 - 2025-02-26
- Requires ph-web 10.4.0
- Updated to Bootstrap Icons 1.11.3
- Removed support for chart.js v1.x
- Updated list of global attributes in
IHCElement PhotonWorkerPoolnow has a silent mode option- The
InternalErrorBuildercan now deal with custom email settings. See #21 - The default administration page
Statisticsgot a "Download" buttons. See #22 - Moved classes
CSRFManagerandCSRFSessionManagerto submoduleph-oton-app - Class
CSRFManagernow creates nonces with 32 instead of 64 bytes and uses Base64 instead of Base16 encoding. - Added builders for
ConstantJSPathProviderandConstantCSSPathProvider - Added classes
JSLetandJSConstand usingletby default in JSforandfor inloops - Added class
JSParamand using it for function params and catch clauses (instead ofJSVar)
v9.2.9 - 2025-02-03
- Updated to ph-web 10.3.0
- Added reusable SFTP helper classes to package
com.helger.photon.connect.sftp AbstractLoginManagerno longer stores the user agent by default
v9.2.8 - 2025-01-21
- Added support for Google ReCaptcha v3
- Updated to Log4J 2.24.3
- Updated to DataTables 2.2.1
- Updated to ph-web 10.2.x
v9.2.7 - 2024-10-03
- Updated to Jetty 11.0.24
- Updated to Log4J 2.24.0
- Allowed
.cjsand.mjsas valid JavaScript file extensions typeattribute ofscriptelement was changed fromIMimeTypetoString- Improved consistency of
aria-label,aria-labelledby,aria-description,aria-describedby
v9.2.6 - 2024-08-09
- Updated to Jetty 11.0.22
- Fixed an error in DataTables max page calculation if length menu with only "all" is present
- Updated to DataTables 2.1.3
v9.2.5 - 2024-06-30
- Updated to Jetty 11.0.21
- Updated to DataTables 2.0.8 and updated translations
- Using
addAriaLabeledByinconnectFormControlWithLabel. See #18 - thx @NikovacsDev - API extensions for DataTables
aria-labelin pagination area
v9.2.4 - 2024-04-25
- Updated to DataTables 2.0.5 and latest plugin versions
- Chart.js V4 API improvements
v9.2.3 - 2024-04-18
- Updated to Log4J 2.23.1
- Updated to jQuery 3.7.1
- Updated to moment.js 2.30.1
- Added more charts.js v4 support
- Moved the Bootstrap 3 binding to https://github.com/phax/ph-oton-bootstrap3
v9.2.2 - 2024-03-28
- Updated to ph-commons 11.1.5
- Updated to Jetty 11.0.20
- Created Java 21 compatibility
- The default folder structure for internal errors was changed from
YYYY/MMtoYYYY/MM/DD - Added initial support for charts.js v4
v9.2.1 - 2023-09-26
- Updated to Jetty 11.0.16
- Fixed DateTime picker error in September for en-gb locale [Java 17]
v9.2.0 - 2023-08-20
- Extracted submodule
ph-oton-iofor dependency minimized inclusion
v9.1.4 - 2023-08-17
- Updated to DataTables 1.13.6 and latest plugin versions
- Updated to ph-web 10.1.5
- Avoid Exception on "Delete all" in failed mail page with Bootstrap4 UI
v9.1.3 - 2023-07-31
- Updated to ph-commons 11.1
v9.1.2 - 2023-07-24
- Updated to DataTables 1.13.5 and latest plugin versions
- Updated to jQuery 3.7.0
- Updated to ph-web 10.1.2
v9.1.1 - 2023-05-03
- Updated to Jetty 11.0.15
- Updated to jQuery 3.6.4
- Added new enumeration
EHCAutoCompleteand the possibility to use in the HC edits - Updated to DataTables 1.13.4 and latest plugin versions
v9.1.0 - 2023-02-24
- Using Servlet API 5.0.0 as the baseline: JakartaEE 9, Java 11+, Apache Tomcat v10.0.x, Jetty 11.x
- Switched all namespaces from
javax.servlettojakarta.servlet - Updated to Jetty 11.0.13
- Updated to Log2J 2.20.0
- Updated to Jetty 11.0.13
- Incorporated UserToken JDBC manager from v8.4.5
v9.0.1 - 2025-05-06 [backport]
- Updated to ph-commons 11.2.1
- Updated to ph-web 10.0.2
- Updated to Jetty 10.0.25
- Moved the Bootstrap 3 binding to https://github.com/phax/ph-oton-bootstrap3
v9.0.0 - 2023-02-14
- Using Java 11 as the baseline
- Updated to ph-commons 11
- Using Servlet API 4.0.1 as the baseline: JakartaEE 8, Java 11+, Apache Tomcat v9.x, Jetty 10.0.x
- Updated to Jetty 10.0.13
- Updated from
org.apache.logging.log4j:log4j-slf4j-impltoorg.apache.logging.log4j:log4j-slf4j2-implfor SLF4J 2.x
v8.4.5 - 2023-02-23
- Updated to Jetty 9.4.50
- Updated to Log2J 2.20.0
- Fixed default caching option for non GET requests
- Extended some API to adopt to the new UserToken requirements
- Added UserToken manager for JDBC
v8.4.4 - 2023-01-23
- Updated to jQuery 3.6.3
- Updated to DataTables 1.13.1 and latest plugin versions
- Added methods
setAriaRequired,addToAriaDescribedByandsetAriaInvalidto classIHCAttrContainer - Added method
IHCElement.withCustomAttrs - Made some general accessibility improvements
v8.4.3 - 2022-10-04
- Updated to Jetty 9.4.49
- Updated to Log2J 2.19.0
- Extended the interface
ISystemMessageRendererwith a display text - Renamed Java method
vartovariableinJS*classes - Fixed a potential NPE when trying to login with a non-existing user
- Fixed an issue in chartjs v1 CSS
- Changed chart.js package from
com.helger.photon.uictrls.charttocom.helger.photon.uictrls.chart.v1(backwards incompatible change)
v8.4.2 - 2022-09-07
- Updated to jQuery 3.6.1
- Updated to jQuery Migrate 3.4.0
- Updated to js-cookie v3.0.1
- Updated to js-storage v1.0.4
- Updated to Moment.js 2.29.4
- Updated PDFObject to v2.2.8
- Integrated ph-oton-jdbc submodule
- The default minimum password length changed from 6 to 8
- Deprecated
HCSWFObject
v8.4.1 - 2022-08-17
- Updated to Apache HttpClient 5.x
- Updated to Bootstrap 4.6.2
- Updated to Jetty 9.4.48
- Updated to Log2J 2.18.0
- Updated to ph-web 9.7.1
- Made class
DoNothingAuditorfinal - Added class
DoNothingAuditManager - Class
AbstractLoginManagernow has the possibility to specify a waiting time in case of a failed login - Deprecated classes
HCUniversalAnalyticsandHCGoogleAnalytics - Added support for Google Analytics V4
- Fixed an error in the MarkDown "safe mode" processing
- The
UITextFormatterand theBootstrapSystemMessageMarkDown renderer now use the "safe mode" as the default
v8.4.0 - 2022-04-04
- Updated to Jetty 9.4.46
- Updated chart.js from 1.0.2 to 1.1.1
- Updated to Bootstrap Icons 1.8.1
- Updated to DataTables 1.11.5 and latest plugin versions
- Updated the list of predefined
aria-attributes - Disabled the "directory listing" in the JettyStarter by default
- Disabled sending the server version and the
X-Powered-Byheader in JettyStarter by default - Added support for HTML element
<dialog> - Moved class
HCHgroupfrom package.deprecatedto.section - Moved class
HCMenufrom package.interactiveto.grouping - Added classes
HCMap,HCArea,EHCReferrerPolicy - Improved the overall HTML compliance according to the latest standard
- Dropped the specific HTML 5 annotations
HCMenunow takesHCLIchildren instead ofHCMenuItemchildren- Extended HTML accessibility API - thx to @Dafnik
- The default script mode for inline scripts was changed from
PLAIN_TEXT_WRAPPED_IN_COMMENTtoPLAIN_TEXT_NO_ESCAPE - Dropped support for Internet Explorer
v8.3.6 - 2022-01-04
- Updated Log2J to 2.17.1 - fixes CVE-2021-44832 - see https://logging.apache.org/log4j/2.x/security.html
- Made redirect URL after login customizable in
AbstractLoginManager
v8.3.5 - 2021-12-21
- Updated Log2J to 2.17.0 - fixes CVE-2021-45105 - see https://logging.apache.org/log4j/2.x/security.html
v8.3.4 - 2021-12-14
- Updated Log2J to 2.16.0 - fixes CVE-2021-45046 - see https://www.lunasec.io/docs/blog/log4j-zero-day/
- Corrected error in DataTables 1.11.3 integration that lead to CSP errors because too much was included
v8.3.3 - 2021-12-13
- Updated Log2J to 2.15.0 - fixes CVE-2021-44228 - see https://www.lunasec.io/docs/blog/log4j-zero-day/
- Updated DataTables to 1.11.3
v8.3.2 - 2021-11-24
- Updated to Bootstrap 4.6.1
- Updated to FineUploader 5.16.2
- Updated to Jetty 9.4.44
- Updated to ph-commons 10.1.4
- Made the
IAuditManagercustomizable in the PhotonSecurityManager - Added built-in Base64 encode and decode pages in the "Utilities" menu area
- Added class
CountingSftpProgressMonitor - Fixed some SonarQube issues - nothing serious
v8.3.1 - 2021-08-05
- Updated to Jetty 9.4.43
- Updated to ph-web 9.6.1
- Updated DataTables to 1.10.24
- Updated Bootstrap4 DateTimePicker to 5.39.0
- Updated FontAwesome to 5.15.4
- Added Bootstrap Icons 1.5.0 in ph-oton-icon
- Improved the way, Jetty dependencies are handled in the POM
BootstrapFormandBootstrapViewFormhandle splitting with negative values for certain grid elements- Made the
BootstrapFileUploadplaceholder label customizable - Added the possibility to add an ID on the
BootstrapNavof aBootstrapTabBox - Made class
BootstrapCardCollapsiblemore customizable - Added custom jQuery function
setReadOnly - Made the BootstrapDateTimePicker default icon customizable - #9
- Hiding environment variables that start with
SECRET_- see #10
v8.3.0 - 2021-03-22
- Updated to Apache commons-net 3.8.0
- Updated to Bootstrap 4.6.0
- Updated to Jetty 9.4.36
- Updated to jQuery 3.6.0
- Updated to ph-commons 10
- The name of the WebFragment
ph-oton-bootstrap3-stubchanged toph_oton_bootstrap4_stub - The name of the WebFragment
ph-oton-bootstrap4-stubchanged toph_oton_bootstrap3_stub - Extended
HCExtImgto correctly remove the servlet context if it is present - Added
BootstrapSelect2as a Bootstrap 4 theme of Select2 - Added new predefined page to change the log level at runtime (when using Log4J 2.x)
v8.2.9 - 2020-11-18
- Updated to Apache commons-net 3.7.2
- Updated to Bootstrap 4.5.3
- Updated to Jetty 9.4.34
- Updated to Log4j 2.14.0
- Improved handling of generic children for HTML tables
- Added new sanity method
BootstrapFormGroup.setLabelForCheckBox - Added CSS classes to
ELabelTypedirectly
v8.2.8 - 2020-09-17
- Updated to Jakarta JAXB 2.3.3
v8.2.7 - 2020-09-15
- Updated to ph-commons 9.4.8
- Improved long running job error handling
- Extended
ConfigurationFileManagerAPI - Using Popper UMD JS instead of the default distribution
v8.2.6 - 2020-08-20
- Updated animate.css to 4.1.0
- Updated to Apache commons-net 3.7
- Updated to autoNumeric 1.9.46
- Updated to Bootstrap 4.5.2
- Updated to CookieConsent 3.1.1
- Updated to Jetty 9.4.31
- Updated to popper.js 1.16.1-lts
- Updated to PrismJS 1.2.1
- Updated to Select2 4.0.13
- Removed autosize 1.8
- Improved customizability of
ExporterExcel - Fixed XML serialization of long running job data
- Reworked the PrismJS API and made the plugins more customizable
- Extended the Long running job API
- Added new class
PhotonWorkerPoolas a shared worker pool - Improved coding style thanks to Sonar
v8.2.5 - 2020-05-26
- Changed Maven groupId to
com.helger.photon - Updated to ph-web 9.3.0 (new Maven groupId)
v8.2.4 - 2020-05-25
- Updated to Bootstrap 4.5.0
- Updated to Jetty 9.4.29
- Updated to jQuery 3.5.1
- Updated to Log4j 2.13.3
- Updated to ph-commons 9.4.4
- Added new classes
SessionBackedRequestFieldBooleanandSessionBackedRequestFieldBooleanMultiValue - Added new configuration file syntax
JSON - Fixed an issue with the configuration file ID for the tab
- Extracted
IRoleManagerfromRoleManager - Extracted
IUserManagerfromUserManager - Extracted
IUserGroupManagerfromUserGroupManager - Made
PhotonUnifiedResponsechainable
v8.2.3 - 2020-02-19
- Fixed an error with the temporary directory name creation in
JettyStarter - Updated to ph-web 9.1.10
- Made
HttpClientSettingsconfigurable forReCaptchaServerSideValidator - Improved API to be more sensitive on encoded and decoded URI paths
- Added different date time representations to the default
InternalErrorMetadata - Added a new Admin page for performing a remote HTTP client call
- Extended traits interfaces
IHCTraitandIHCBootstrap4Trait
v8.2.2 - 2020-02-12
- Updated to Jetty 9.4.26
- Updated to Bootstrap 4.4.1
- Updated to log4j 2.13.0
- Made a
StubObjectconstructor public - Added a version number constant to access information at runtime
- Extended
JettyStarterto create multiple contexts - Added possibility to add "redirects" to the menu tree to allow to change the URLs of existing items without breaking existing bookmarks
- Extracted
IUserTokenManagerinterface - Added possibility to globally configure if internal errors should be send as email and/or saved as XML
- Unified the
WebPageActionHandlerAPI (backwards incompatible change) - Added traits interfaces
IHCTraitandIHCBootstrap4Traitas syntactic sugar - Added a new system page showing the content of the System Truststore (cacerts)
v8.2.1 - 2019-10-08
- Updated to log4j 2.12.1
- Updated to Jetty 9.4.21
- Updated to ph-web 9.1.4
- Updated to ph-commons 9.3.7
- Fixed the automatic module name of project
ph-oton-bootstrap4-pages BootstrapLoginHTMLProvidernow uses a form URL without the leading hostname- Updated to HandleBars 4.x
v8.2.0 - 2019-06-24
- Improved B4 InputGroup API for easier extension
- Updated to Jetty 9.4.19
- Improved Bootstrap 4 inline form UI creation
- Improved API path ambiguity resolution API (interface
IAPIPathAmbiguityResolveret. al.) - Added new API Interface
IAPIRegistryand letGlobalAPIInvokerimplement it - Clearly separate between
AjaxRegistryandAjaxInvokersimilar to new API API - Reworked module structure (created
ph-oton-app,ph-oton-audit,ph-oton-ajax,ph-oton-api, removedph-oton-basic) - Updated to jQuery 3.4.1
- Requires ph-commons 9.3.3
- Requires ph-web 9.1.2
CheckDiskUsableSpaceJobcan now be scheduled more than once for different paths- Application startup time is now displayed in the "System Properties" Administration page
- Added support for
loadingattribute inHCImgandHCIFrame - Started extending audit library to be more flexible and efficient - not used yet
v8.1.3 - 2019-02-18
- Updated to Bootstrap 4.3.1
- Updated to Bootstrap 3.4.1
- Bootstrap 4
BootstrapInputGroupAPI was reworked, so that the parent/child relationship holds true (incompatible) - Updated to log4j 2.11.2
ISimpleWebExecutionContextwas extended with theLoggedInUser- API API was extended to support only different MIME types
- Added an exception mapper to the API handling
- Requires ph-web 9.1.1
v8.1.2 - 2019-01-07
- Added B4 tooltips, Jumbotron and Modal dialog
- Added class
BootstrapPageRendererfor consistent page rendering - Added B4 collapsible Card
- Small improvement in rendering memory consumption and speed
- Extracted
IDataTablesLengthMenuinterface - Added B4 file upload control
- B4
BootstrapHelperbecameBootstrapFormHelper
v8.1.1 - 2018-11-25
- Fixed error in quoting of B3 user group management page
- Added special CSS Class to B4
BootstrapPageHeader - Changed B4
BootstrapDateTimePickerinitialization to correctly handle the default values - Extended
FavoriteManagerAPI - Updated to Jetty 9.4.14
- Changed B4
BootstrapDateTimePickerto not use currentDate by default - Requires ph-commons 9.2.0
v8.1.0 - 2018-10-25
- Extended the
FavoriteAPIs - Initial versions of the subproject
ph-oton-bootstrap4-uictrlsis available - Initial versions of the subproject
ph-oton-bootstrap4-pagesis available - Initial versions of the subproject
ph-oton-bootstrap4-demois available - Internal errors are stored in an additional "month" sub-directory
- Internal error storage paths are now customizable
- Added FontAwesome 5.2.0 free icons
- Improved state API slightly
- User group and role user interfaces were improved
- Updated to ph-web 9.0.5
- Updated to popper 1.14.4
- Added bulk export format "JSON (simple)" to have one without type information
- Added a new Bootstrap 4 DateTime picker UI ctrl
- Updated to Jetty 9.4.12
- Updated to TinyMCE 4.8.2
- Separated
HCPrismJSandTypeaheadEditin Bootstrap 3 and 4 versions - Dropped jQuery 1.x and 2.x files
- Updated DataTables to 1.10.18
- Added new base page "Port checker"
- Improved JettyStarter customizability
v8.0.2 - 2018-07-25
- Updated to Bootstrap 4.1.3
- Reworked meta element API so that
<meta charset="...">can be handled - Fixed OSGI ServiceProvider configuration
- Updated to Jetty 9.4.11
- Updated to ph-commons 9.1.3
- Updated to ph-web 9.0.2
- Extended
*HCSelectAPIs for multi values - The "Change log" page was removed
- Extended
JSSwitchAPI - Improved signatures of
AbstractJSBlock(binary incompatible) - Updated to ph-masterdata 6.1.0
v8.0.1 - 2018-04-18
- Updated to Jetty 9.4.9
- Updated to Bootstrap 4.0.0
- Bootstrap3Panel type can be changed
- Replaced some
StubjObjectwithIBusinessObject
v8.0.0 - 2018-01-05
- Updated to ph-commons 9.0.0
- Renamed 'Client' to 'Tenant' and moved to ph-tenancy in ph-masterdata project
- Updated to Bootstrap 4.0.0-beta
- Updated to TinyMCE 4.6.6
- Updated to Jetty 9.4.8
- Extracted ph-oton-atom
- Initial versions of the subproject
ph-oton-bootstrap4-stubis available
v7.1.2 - 2017-07-19
- Fixed an error with path handling of resource bundles when deployed as JAR
v7.1.1 - 2017-07-18
- Requires ph-commons 8.6.6
- ServletContext base path can now be any URL (instead of a mandatory File)
- Made
ServletStatusManagernon-static - Improved JS API (better Json support)
v7.1.0 - 2017-07-05
- Updated to ph-web 8.8.x
- Improved rendering speed through internal optimizations
- Updated to Bootstrap Datetime picker 2.4.4
- Updated to Jetty 9.4.6
CharacterEncodingFiltermore flexible- Updated to DataTables 1.10.15
v7.0.5 - 2017-03-30
- Updated to Jetty 9.4.3
- Updated to ph-schedule 3.6.1
- Improved SystemMessage API
v7.0.4 - 2017-03-09
- Updated to Jetty 9.4.2
- API extensions
- Updated to Apache commons-net 3.6
- Improved internal error handling API
- Internal changes in the ph-oton jobs.
- Removed some deprecated methods
v7.0.3 - 2017-01-10
- Integrated ph-html into ph-oton
- Binds to ph-commons 8.6.0
v7.0.2 - 2017-01-03
- Updated to Jetty 9.4.0
- Binds to ph-commons 8.5.6
- Binds to ph-web 8.7.0
- Improved default request parameter handling customizability
- New artefact
ph-oton-icon
v7.0.1 - 2016-11-14
- Improvements in request tracking logging
- Misc small improvements in different areas
- Updated to Jetty 9.3.14.v20161028
v7.0.0 - 2016-10-24
- Requires ph-commons 8.5.2
v7.0.0-beta3 - 2016-09-22
- Based on ph-commons 8.5.x
v7.0.0-beta2 - 2016-08-31
- Based on ph-commons 8.4.x
v7.0.0-beta1 - 2016-07-27
- Updated to Java 1.8
- Based on ph-commons 8.2.x
v6.2.0 - 2015-12-03
- extracted security module
- added support for app and user token management
- Last release for Java 1.7
v6.1.0 - 2015-10-02
- merged web actions and ajax functions
v6.0.0 - 2015-09-14
- first ph-oton release based on old webbasics and webctrls etc.
- requires ph-commons 6.x
My personal Coding Styleguide | It is appreciated if you star the GitHub project if you like it.