From 89e4c7fbebbc773a49f5cf206a2ff9bb582c8fb5 Mon Sep 17 00:00:00 2001 From: Saif eddine Jerbi Date: Tue, 27 Jun 2017 20:14:26 +0200 Subject: [PATCH 01/44] V0.1.0 release --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 26183b9..a57c2d7 100644 --- a/package.json +++ b/package.json @@ -18,8 +18,8 @@ "version": { "name": "0.0.1-alpha", "desc": "This is the first alpha release", - "released": "2015-06-27", - "vcs_tag": "0.0.1-alpha", + "released": "2017-06-27", + "vcs_tag": "0.1.0", "gpgSign": false }, From 912a6de9bb0bc07a0c58184ab0b0046d1948be7d Mon Sep 17 00:00:00 2001 From: Saif eddine Jerbi Date: Tue, 27 Jun 2017 20:20:50 +0200 Subject: [PATCH 02/44] v0.1.0 release --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a57c2d7..18ebac9 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ }, "version": { - "name": "0.0.1-alpha", + "name": "0.1.0", "desc": "This is the first alpha release", "released": "2017-06-27", "vcs_tag": "0.1.0", From 5aff8fce1a88ab8f303aec451546d3c75bc99ed4 Mon Sep 17 00:00:00 2001 From: Saif eddine Jerbi Date: Tue, 27 Jun 2017 21:03:35 +0200 Subject: [PATCH 03/44] add deploy generated source package [ci skip] --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 18ebac9..d10fcca 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,8 @@ "files": [ - {"includePattern": "target/(.*).jar","uploadPattern": "$1.jar"} + {"includePattern": "target/(.*).jar","uploadPattern": "$1.jar"}, + {"includePattern": "target/(.*).jar.md5","uploadPattern": "$1.jar.md5"} ], "publish": true } From 8326f0e96dbbf304c8b8b61c49f426a475313360 Mon Sep 17 00:00:00 2001 From: Saif Jerbi Date: Tue, 27 Jun 2017 20:05:33 +0100 Subject: [PATCH 04/44] :arrow_up: Update pom.xml in order to generate sources and javadocs when packaging and deploy --- demo/pom.xml | 2 +- pom.xml | 39 ++++++++++++++++++++++++++++++++++++++- 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/demo/pom.xml b/demo/pom.xml index 840d14c..2747994 100644 --- a/demo/pom.xml +++ b/demo/pom.xml @@ -38,7 +38,7 @@ io.sfjava.ui sf-java-ui - 0.0.1.alpha + 0.1.0 diff --git a/pom.xml b/pom.xml index 0efb0c3..82e1e52 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ io.sfjava.ui sf-java-ui - 0.0.1.alpha + 0.1.0 jar sf-java-ui @@ -126,6 +126,43 @@ + + maven-source-plugin + + + attach-sources + + jar + + + + + + maven-javadoc-plugin + + + attach-javadocs + + jar + + + + + + net.nicoulaj.maven.plugins + checksum-maven-plugin + 1.5 + + + + artifacts + + + + + + + From 1a4422d393d960bd3bbfb09ce196bdeebdb15fe2 Mon Sep 17 00:00:00 2001 From: Saif eddine Jerbi Date: Tue, 27 Jun 2017 21:36:50 +0200 Subject: [PATCH 05/44] Update package.json [ci skip] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d10fcca..8580a6a 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ "desc": "This is the first alpha release", "released": "2017-06-27", "vcs_tag": "0.1.0", - "gpgSign": false + "gpgSign": true }, "files": From 6403e9128d998daec8385ce9682823d699bb458f Mon Sep 17 00:00:00 2001 From: Saif Jerbi Date: Tue, 27 Jun 2017 20:39:00 +0100 Subject: [PATCH 06/44] run build --- pom.xml | 33 ++++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/pom.xml b/pom.xml index 82e1e52..f92b8e3 100644 --- a/pom.xml +++ b/pom.xml @@ -77,6 +77,23 @@ + ${project.basedir}/target + ${project.build.directory}/classes + ${project.artifactId}-${project.version} + ${project.build.directory}/test-classes + ${project.basedir}/src/main/java + ${project.basedir}/src/test/java + + + ${project.basedir}/src/main/resources + + + + + ${project.basedir}/src/test/resources + + + org.apache.maven.plugins @@ -148,21 +165,7 @@ - - net.nicoulaj.maven.plugins - checksum-maven-plugin - 1.5 - - - - artifacts - - - - - - - + From 41f8d75dc7da0e946da6dfac6f1756ba604284d3 Mon Sep 17 00:00:00 2001 From: Saif eddine Jerbi Date: Tue, 27 Jun 2017 21:50:10 +0200 Subject: [PATCH 07/44] Update package.json add pom file to deploy --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 8580a6a..ad5f124 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,8 @@ "files": [ {"includePattern": "target/(.*).jar","uploadPattern": "$1.jar"}, - {"includePattern": "target/(.*).jar.md5","uploadPattern": "$1.jar.md5"} + {"includePattern": "target/(.*).jar.md5","uploadPattern": "$1.jar.md5"}, + {"includePattern": "target/(.*).pom","uploadPattern": "$1.pom"} ], "publish": true } From b04b1927ee34bf92dfef57f1befbafd6819b2362 Mon Sep 17 00:00:00 2001 From: Saif eddine Jerbi Date: Tue, 27 Jun 2017 21:54:52 +0200 Subject: [PATCH 08/44] Update package.json --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ad5f124..0b496b7 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ [ {"includePattern": "target/(.*).jar","uploadPattern": "$1.jar"}, {"includePattern": "target/(.*).jar.md5","uploadPattern": "$1.jar.md5"}, - {"includePattern": "target/(.*).pom","uploadPattern": "$1.pom"} + {"includePattern": "pom.xml","uploadPattern": "$1.pom"} ], "publish": true } From bc4a73c5c281225d0ce8b5d3039d289b9d4139b8 Mon Sep 17 00:00:00 2001 From: Saif eddine Jerbi Date: Tue, 27 Jun 2017 22:14:55 +0200 Subject: [PATCH 09/44] Update package.json --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 0b496b7..c8c8d11 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ [ {"includePattern": "target/(.*).jar","uploadPattern": "$1.jar"}, {"includePattern": "target/(.*).jar.md5","uploadPattern": "$1.jar.md5"}, - {"includePattern": "pom.xml","uploadPattern": "$1.pom"} + {"includePattern": "pom.xml","uploadPattern": "sf-java-ui-0.1.0.pom"} ], "publish": true } From ffe224338699cef973507f4a66e8da47d83b33ae Mon Sep 17 00:00:00 2001 From: Saif eddine Jerbi Date: Tue, 4 Jul 2017 16:08:28 +0200 Subject: [PATCH 10/44] :memo: add documentation section and link to wiki [ci skip] --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index f98a940..475440e 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,10 @@ The SF Java UI library is a server side extension for the [Json Schema Form](htt If you use SF Java UI in your project/company please let us know. +## Documentation + +You can find all documentation [here](../../wiki), it covers all the different field types and their options. + ## Run the Demo The attached demo application is a Spring Boot + Angular web application. To run the app please go to the demo directory and run the commands below: From 791501aca3f3a86f7ca0aa8de3650d996f4e840c Mon Sep 17 00:00:00 2001 From: Saif eddine Jerbi Date: Tue, 4 Jul 2017 17:05:15 +0200 Subject: [PATCH 11/44] :memo: create docs section [ci skip] --- docs/index.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 docs/index.md diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/docs/index.md @@ -0,0 +1 @@ + From 45525b872b6e4b7efe4666300074288701d8693f Mon Sep 17 00:00:00 2001 From: Saif eddine Jerbi Date: Tue, 4 Jul 2017 17:44:02 +0200 Subject: [PATCH 12/44] :memo: Add the Input fields & TextArea documentation #2 Add annotations properties description for : TextField fix #61 Number fix #62 Password fix #63 TextArea fix #64 [ci skip] --- docs/index.md | 74 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) diff --git a/docs/index.md b/docs/index.md index 8b13789..afec9f0 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1 +1,75 @@ +# Documentation +In this section, we describe all the features of the SF-Java-Ui. + +## Supported Fields +We start with the supported fields. Each field is rendered based on annotations and the different properties provided and filled by the developer, so in the section below we define the different properties supported by each field. +For more details please visit [the Angular Schema Form documentation](https://github.com/json-schema-form/angular-schema-form/blob/master/docs/index.md#form-types) + +### TextField: + +To render a field as a TextField the developer must add the [@TextField](../src/main/java/io/asfjava/ui/core/form/TextField.java) annotation to his field. + +| Properties | Type | Usage | +| ------------- |:-------------: | :-----| +| title | String | The title of the field | +| placeHolder | String | Placeholder on inputs | +| description | String | A description, can be HTML | +| minLength | Integer | Min text length | +| maxLength | Integer | Max text length | +| pattern | String (regEx) | Reg Ex used to validate the input | +| validationMessage | String | A custom validation error message | +| readOnly | Boolean | Make the field readOnly | +| noTitle | Boolean | Set to true to hide title | +| fieldAddonLeft | String | [Extend form controls](http://getbootstrap.com/components/#input-groups) by adding text on the left side of the Text Field | +| fieldAddonRight | String | [Extend form controls](http://getbootstrap.com/components/#input-groups) by adding text on the right side of the Text Field | + +### NumberField: + +The given component can be used to fill numeric values, it can be applied to fields of type [java.lang.Number](https://docs.oracle.com/javase/7/docs/api/java/lang/Number.html) (Integer, Long, Double, Float, etc ...). The developer must use the [@Number](../src/main/java/io/asfjava/ui/core/form/Number.java) in this case. + +| Properties | Type | Usage | +| ------------- |:-------------: | :-----| +| title | String | The title of the field | +| placeHolder | String | Placeholder on inputs | +| description | String | A description, can be HTML | +| validationMessage | String | A custom validation error message | +| readOnly | Boolean | Make the field readOnly | +| noTitle | Boolean | Set to true to hide title | +| fieldAddonLeft | String | [Extend form controls](http://getbootstrap.com/components/#input-groups) by adding text on the left side of the Number Field | +| fieldAddonRight | String | [Extend form controls](http://getbootstrap.com/components/#input-groups) by adding text on the right side of the Number Field | + +### PasswordField: + +For some use cases, the developer need to use a encrypted UI input field to fill the user value. So he can use [@Password](../src/main/java/io/asfjava/ui/core/form/Password.java). + +| Properties | Type | Usage | +| ------------- |:-------------: | :-----| +| title | String | The title of the field | +| placeHolder | String | Placeholder on inputs | +| description | String | A description, can be HTML | +| minLength | Integer | Min text length | +| maxLength | Integer | Max text length | +| pattern | String (regEx) | Reg Ex used to validate the input | +| validationMessage | String | A custom validation error message | +| readOnly | Boolean | Make the field readOnly | +| noTitle | Boolean | Set to true to hide title | +| fieldAddonLeft | String | [Extend form controls](http://getbootstrap.com/components/#input-groups) by adding text on the left side of the Password Field | +| fieldAddonRight | String | [Extend form controls](http://getbootstrap.com/components/#input-groups) by adding text on the right side of the Password Field | + +### TextArea + +The TextArea component is a multiline text field with a border and optional scroll bars. To use a this component the developer must use [@TextArea](../src/main/java/io/asfjava/ui/core/form/TextArea.java) + +| Properties | Type | Usage | +| ------------- |:-------------: | :-----| +| title | String | The title of the field | +| placeHolder | String | Placeholder on inputs | +| description | String | A description, can be HTML | +| minLength | Integer | Min text length | +| maxLength | Integer | Max text length | +| validationMessage | String | A custom validation error message | +| readOnly | Boolean | Make the field readOnly | +| noTitle | Boolean | Set to true to hide title | +| fieldAddonLeft | String | [Extend form controls](http://getbootstrap.com/components/#input-groups) by adding text on the left side of the Text Area | +| fieldAddonRight | String | [Extend form controls](http://getbootstrap.com/components/#input-groups) by adding text on the right side of the Text Area | From 4c5b6070bbad22630dfeeb956f5e70c231bcbb17 Mon Sep 17 00:00:00 2001 From: Saif eddine Jerbi Date: Tue, 4 Jul 2017 17:51:08 +0200 Subject: [PATCH 13/44] :memo: update documentation link [ci skip] --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 475440e..28ba03f 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ If you use SF Java UI in your project/company please let us know. ## Documentation -You can find all documentation [here](../../wiki), it covers all the different field types and their options. +You can find all documentation [here](docs/index.md), it covers all the different field types and their options. ## Run the Demo The attached demo application is a Spring Boot + Angular web application. From b2a8ae989fe86a4b72b868d5397a9f08f0c44262 Mon Sep 17 00:00:00 2001 From: Saif eddine Jerbi Date: Tue, 4 Jul 2017 18:24:30 +0200 Subject: [PATCH 14/44] :memo: update text field annotation section Add an example to the text field section [ci skip] --- docs/index.md | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/docs/index.md b/docs/index.md index afec9f0..424f25d 100644 --- a/docs/index.md +++ b/docs/index.md @@ -24,6 +24,46 @@ To render a field as a TextField the developer must add the [@TextField](../src/ | fieldAddonLeft | String | [Extend form controls](http://getbootstrap.com/components/#input-groups) by adding text on the left side of the Text Field | | fieldAddonRight | String | [Extend form controls](http://getbootstrap.com/components/#input-groups) by adding text on the right side of the Text Field | +The code below is an example using the TextField annotation. Feel free to try this code snipet: + +```Java +import java.io.Serializable; + +import io.asfjava.ui.core.form.TextField; + +public class DemoForm implements Serializable { + + @TextField(title = "Full Name", minLenght = 3) + private String fullName; + + @TextField(title = "Email", pattern = "^\\S+@\\S+$") + private String mail; + + @TextField(title = "Repository", fieldAddonLeft = "https://github.com/") + private String githubRepository; + + @TextField(title = "Github user name", fieldAddonRight = "@Github.com") + private String githubUserName; + + public String getMail() { + return mail; + } + + public String getFullName() { + return fullName; + } + + public String getGithubRepository() { + return githubRepository; + } + + public String getGithubUserName() { + return githubUserName; + } +} + +``` + ### NumberField: The given component can be used to fill numeric values, it can be applied to fields of type [java.lang.Number](https://docs.oracle.com/javase/7/docs/api/java/lang/Number.html) (Integer, Long, Double, Float, etc ...). The developer must use the [@Number](../src/main/java/io/asfjava/ui/core/form/Number.java) in this case. From 8ed05a07713ddd6869c4cac743143ccd5b17b299 Mon Sep 17 00:00:00 2001 From: Saif Jerbi Date: Sat, 15 Jul 2017 18:32:27 +0100 Subject: [PATCH 15/44] add @Number demo form #62 :memo: --- .../io/asfjava/ui/demo/screen/DemoForm.java | 30 +++++++++++----- .../ui/demo/screen/NumberDemoForm.java | 35 +++++++++++++++++++ pom.xml | 8 ++--- 3 files changed, 61 insertions(+), 12 deletions(-) create mode 100644 demo/src/main/java/io/asfjava/ui/demo/screen/NumberDemoForm.java diff --git a/demo/src/main/java/io/asfjava/ui/demo/screen/DemoForm.java b/demo/src/main/java/io/asfjava/ui/demo/screen/DemoForm.java index a824617..210d6ca 100644 --- a/demo/src/main/java/io/asfjava/ui/demo/screen/DemoForm.java +++ b/demo/src/main/java/io/asfjava/ui/demo/screen/DemoForm.java @@ -2,23 +2,37 @@ import java.io.Serializable; -import io.asfjava.ui.core.form.Action; -import io.asfjava.ui.core.form.ActionsGroup; import io.asfjava.ui.core.form.TextField; -@ActionsGroup({ @Action(title = "Next", type = "button", onClick = "goToNext()"), - @Action(title = "Previous", type = "button", onClick = "goToPrevious()") }) -@Action(title = "Previous", type = "button", onClick = "goToPrevious()") -@Action(title = "Next", type = "button", onClick = "goToNext()") -@Action(title = "Send", type = "submit") public class DemoForm implements Serializable { - @TextField(title = "mail", pattern="^\\S+@\\S+$") + @TextField(title = "Full Name", minLenght = 3) + private String fullName; + + @TextField(title = "Email", pattern = "^\\S+@\\S+$") private String mail; + @TextField(title = "Repository", fieldAddonLeft = "https://github.com/") + private String githubRepository; + + @TextField(title = "Github user name", fieldAddonRight = "@Github.com") + private String githubUserName; + public String getMail() { return mail; } + public String getFullName() { + return fullName; + } + + public String getGithubRepository() { + return githubRepository; + } + + public String getGithubUserName() { + return githubUserName; + } + private static final long serialVersionUID = -5073515619469444978L; } diff --git a/demo/src/main/java/io/asfjava/ui/demo/screen/NumberDemoForm.java b/demo/src/main/java/io/asfjava/ui/demo/screen/NumberDemoForm.java new file mode 100644 index 0000000..d9b2d62 --- /dev/null +++ b/demo/src/main/java/io/asfjava/ui/demo/screen/NumberDemoForm.java @@ -0,0 +1,35 @@ +package io.asfjava.ui.demo.screen; + +import java.io.Serializable; +import io.asfjava.ui.core.form.Number; + +public class NumberDemoForm implements Serializable { + + + @Number(title = "Full Name") + private String fullName; + + private String mail; + + private String githubRepository; + + private String githubUserName; + + public String getMail() { + return mail; + } + + public String getFullName() { + return fullName; + } + + public String getGithubRepository() { + return githubRepository; + } + + public String getGithubUserName() { + return githubUserName; + } + + private static final long serialVersionUID = 8246871107045000185L; +} \ No newline at end of file diff --git a/pom.xml b/pom.xml index f92b8e3..d9fa3a4 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ io.sfjava.ui sf-java-ui - 0.1.0 + 0.1.0-SNAPSHOT jar sf-java-ui @@ -170,9 +170,9 @@ - bintray-jsonschema-javaui-SF-Java-UI - jsonschema-javaui-SF-Java-UI - https://api.bintray.com/maven/jsonschema-javaui/SF-Java-UI/sf-java-ui/;publish=1 + bintray-jsonschema-javaui-sf-java-ui + jsonschema-javaui-sf-java-ui + https://api.bintray.com/maven/jsonschema-javaui/sf-java-ui/sf-java-ui/;publish=1 From a021a9d5b5c38a8bb23aebe5062a8548d86125ff Mon Sep 17 00:00:00 2001 From: Saif Jerbi Date: Sat, 15 Jul 2017 18:42:05 +0100 Subject: [PATCH 16/44] add maven release plugin --- pom.xml | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index d9fa3a4..a9c776a 100644 --- a/pom.xml +++ b/pom.xml @@ -165,7 +165,18 @@ - + + org.apache.maven.plugins + maven-release-plugin + 2.5.1 + + + org.apache.maven.shared + maven-invoker + 2.2 + + + From 2aaee9b95baf50a3e29b5e86480548da0d2d9f55 Mon Sep 17 00:00:00 2001 From: Saif Jerbi Date: Sat, 15 Jul 2017 18:46:36 +0100 Subject: [PATCH 17/44] preparing release 0.1.1 --- pom.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index a9c776a..7351925 100644 --- a/pom.xml +++ b/pom.xml @@ -1,10 +1,9 @@ - + 4.0.0 io.sfjava.ui sf-java-ui - 0.1.0-SNAPSHOT + 0.1.1-SNAPSHOT jar sf-java-ui @@ -31,7 +30,8 @@ https://github.com/JsonSchema-JavaUI/sf-java-ui scm:git:git://github.com/JsonSchema-JavaUI/sf-java-ui.git scm:git:git@github.com:JsonSchema-JavaUI/sf-java-ui.git - + sf-java-ui-0.1.0 + UTF-8 From 98b7b81ad27c0c54e4bf9a7d461fab20b74507be Mon Sep 17 00:00:00 2001 From: Saif Jerbi Date: Sat, 15 Jul 2017 18:52:46 +0100 Subject: [PATCH 18/44] perform release 0.1.1 --- pom.xml | 4 +- pom.xml.releaseBackup | 190 ++++++++++++++++++++++++++++++++++++++++++ release.properties | 18 ++++ 3 files changed, 210 insertions(+), 2 deletions(-) create mode 100644 pom.xml.releaseBackup create mode 100644 release.properties diff --git a/pom.xml b/pom.xml index 7351925..95a4cb6 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ io.sfjava.ui sf-java-ui - 0.1.1-SNAPSHOT + 0.1.1 jar sf-java-ui @@ -30,7 +30,7 @@ https://github.com/JsonSchema-JavaUI/sf-java-ui scm:git:git://github.com/JsonSchema-JavaUI/sf-java-ui.git scm:git:git@github.com:JsonSchema-JavaUI/sf-java-ui.git - sf-java-ui-0.1.0 + sf-java-ui-0.1.1 diff --git a/pom.xml.releaseBackup b/pom.xml.releaseBackup new file mode 100644 index 0000000..7351925 --- /dev/null +++ b/pom.xml.releaseBackup @@ -0,0 +1,190 @@ + + 4.0.0 + + io.sfjava.ui + sf-java-ui + 0.1.1-SNAPSHOT + jar + + sf-java-ui + https://github.com/JsonSchema-JavaUI/sf-java-ui + Json Schema Form java based library allow developers to define schema and form using field annotations + + JsonSchema-JavaUI + https://github.com/JsonSchema-JavaUI + + + GitHub Issues + https://github.com/JsonSchema-JavaUI/sf-java-ui/issues + + + + + MIT License + http://www.opensource.org/licenses/mit-license.php + repo + + + + + https://github.com/JsonSchema-JavaUI/sf-java-ui + scm:git:git://github.com/JsonSchema-JavaUI/sf-java-ui.git + scm:git:git@github.com:JsonSchema-JavaUI/sf-java-ui.git + sf-java-ui-0.1.0 + + + + UTF-8 + 1.8 + 1.8 + **/UiFormSchemaGeneratorTest.class + + + + junit + junit + 4.12 + test + + + + org.reflections + reflections + 0.9.11 + + + com.fasterxml.jackson.module + jackson-module-jsonSchema + 2.8.8 + + + + javax.servlet + javax.servlet-api + 3.0.1 + + + org.slf4j + slf4j-api + 1.7.25 + + + com.jayway.jsonpath + json-path-assert + 2.2.0 + test + + + + + ${project.basedir}/target + ${project.build.directory}/classes + ${project.artifactId}-${project.version} + ${project.build.directory}/test-classes + ${project.basedir}/src/main/java + ${project.basedir}/src/test/java + + + ${project.basedir}/src/main/resources + + + + + ${project.basedir}/src/test/resources + + + + + + org.apache.maven.plugins + maven-surefire-plugin + + + ${runSuite} + + + + + org.jacoco + jacoco-maven-plugin + 0.7.9 + + + pre-unit-test + test-compile + + prepare-agent + + + ${project.build.directory}/coverage-reports/jacoco-ut.exec + + + + post-unit-test + test + + report + + + ${project.build.directory}/coverage-reports/jacoco-ut.exec + ${project.reporting.outputDirectory}/jacoco-ut + + + + + + org.eluder.coveralls + coveralls-maven-plugin + 4.3.0 + + NkRikGGVMCbI71H1WBTh5fte1C4AEzOyo + + ${project.reporting.outputDirectory}/jacoco-ut/jacoco.xml + + + + + maven-source-plugin + + + attach-sources + + jar + + + + + + maven-javadoc-plugin + + + attach-javadocs + + jar + + + + + + org.apache.maven.plugins + maven-release-plugin + 2.5.1 + + + org.apache.maven.shared + maven-invoker + 2.2 + + + + + + + + bintray-jsonschema-javaui-sf-java-ui + jsonschema-javaui-sf-java-ui + https://api.bintray.com/maven/jsonschema-javaui/sf-java-ui/sf-java-ui/;publish=1 + + + + diff --git a/release.properties b/release.properties new file mode 100644 index 0000000..03a233e --- /dev/null +++ b/release.properties @@ -0,0 +1,18 @@ +#release configuration +#Sat Jul 15 18:46:45 CET 2017 +project.scm.io.sfjava.ui\:sf-java-ui.url=https\://github.com/JsonSchema-JavaUI/sf-java-ui +scm.tagNameFormat=@{project.artifactId}-@{project.version} +scm.tag=sf-java-ui-0.1.1 +pushChanges=true +scm.url=scm\:git\:git@github.com\:JsonSchema-JavaUI/sf-java-ui.git +preparationGoals=clean verify +remoteTagging=true +projectVersionPolicyId=default +scm.commentPrefix=[maven-release-plugin] +project.scm.io.sfjava.ui\:sf-java-ui.connection=scm\:git\:git\://github.com/JsonSchema-JavaUI/sf-java-ui.git +project.dev.io.sfjava.ui\:sf-java-ui=0.1.2-SNAPSHOT +project.rel.io.sfjava.ui\:sf-java-ui=0.1.1 +project.scm.io.sfjava.ui\:sf-java-ui.developerConnection=scm\:git\:git@github.com\:JsonSchema-JavaUI/sf-java-ui.git +exec.snapshotReleasePluginAllowed=false +completedPhase=generate-release-poms +project.scm.io.sfjava.ui\:sf-java-ui.tag=sf-java-ui-0.1.0 From 7d37e4e743bd9563e743a3931143f7ab502bfb9c Mon Sep 17 00:00:00 2001 From: Saif Jerbi Date: Sat, 15 Jul 2017 19:04:23 +0100 Subject: [PATCH 19/44] prepare release 0.1.2 --- package.json | 4 +- pom.xml | 2 +- pom.xml.releaseBackup | 190 ------------------------------------------ release.properties | 13 +-- 4 files changed, 6 insertions(+), 203 deletions(-) delete mode 100644 pom.xml.releaseBackup diff --git a/package.json b/package.json index c8c8d11..a7b210d 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ "name": "0.1.0", "desc": "This is the first alpha release", "released": "2017-06-27", - "vcs_tag": "0.1.0", + "vcs_tag": "0.1.1", "gpgSign": true }, @@ -27,7 +27,7 @@ [ {"includePattern": "target/(.*).jar","uploadPattern": "$1.jar"}, {"includePattern": "target/(.*).jar.md5","uploadPattern": "$1.jar.md5"}, - {"includePattern": "pom.xml","uploadPattern": "sf-java-ui-0.1.0.pom"} + {"includePattern": "pom.xml","uploadPattern": "sf-java-ui-0.1.1.pom"} ], "publish": true } diff --git a/pom.xml b/pom.xml index 95a4cb6..d8703de 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ io.sfjava.ui sf-java-ui - 0.1.1 + 0.1.2-SNAPSHOT jar sf-java-ui diff --git a/pom.xml.releaseBackup b/pom.xml.releaseBackup deleted file mode 100644 index 7351925..0000000 --- a/pom.xml.releaseBackup +++ /dev/null @@ -1,190 +0,0 @@ - - 4.0.0 - - io.sfjava.ui - sf-java-ui - 0.1.1-SNAPSHOT - jar - - sf-java-ui - https://github.com/JsonSchema-JavaUI/sf-java-ui - Json Schema Form java based library allow developers to define schema and form using field annotations - - JsonSchema-JavaUI - https://github.com/JsonSchema-JavaUI - - - GitHub Issues - https://github.com/JsonSchema-JavaUI/sf-java-ui/issues - - - - - MIT License - http://www.opensource.org/licenses/mit-license.php - repo - - - - - https://github.com/JsonSchema-JavaUI/sf-java-ui - scm:git:git://github.com/JsonSchema-JavaUI/sf-java-ui.git - scm:git:git@github.com:JsonSchema-JavaUI/sf-java-ui.git - sf-java-ui-0.1.0 - - - - UTF-8 - 1.8 - 1.8 - **/UiFormSchemaGeneratorTest.class - - - - junit - junit - 4.12 - test - - - - org.reflections - reflections - 0.9.11 - - - com.fasterxml.jackson.module - jackson-module-jsonSchema - 2.8.8 - - - - javax.servlet - javax.servlet-api - 3.0.1 - - - org.slf4j - slf4j-api - 1.7.25 - - - com.jayway.jsonpath - json-path-assert - 2.2.0 - test - - - - - ${project.basedir}/target - ${project.build.directory}/classes - ${project.artifactId}-${project.version} - ${project.build.directory}/test-classes - ${project.basedir}/src/main/java - ${project.basedir}/src/test/java - - - ${project.basedir}/src/main/resources - - - - - ${project.basedir}/src/test/resources - - - - - - org.apache.maven.plugins - maven-surefire-plugin - - - ${runSuite} - - - - - org.jacoco - jacoco-maven-plugin - 0.7.9 - - - pre-unit-test - test-compile - - prepare-agent - - - ${project.build.directory}/coverage-reports/jacoco-ut.exec - - - - post-unit-test - test - - report - - - ${project.build.directory}/coverage-reports/jacoco-ut.exec - ${project.reporting.outputDirectory}/jacoco-ut - - - - - - org.eluder.coveralls - coveralls-maven-plugin - 4.3.0 - - NkRikGGVMCbI71H1WBTh5fte1C4AEzOyo - - ${project.reporting.outputDirectory}/jacoco-ut/jacoco.xml - - - - - maven-source-plugin - - - attach-sources - - jar - - - - - - maven-javadoc-plugin - - - attach-javadocs - - jar - - - - - - org.apache.maven.plugins - maven-release-plugin - 2.5.1 - - - org.apache.maven.shared - maven-invoker - 2.2 - - - - - - - - bintray-jsonschema-javaui-sf-java-ui - jsonschema-javaui-sf-java-ui - https://api.bintray.com/maven/jsonschema-javaui/sf-java-ui/sf-java-ui/;publish=1 - - - - diff --git a/release.properties b/release.properties index 03a233e..b49580d 100644 --- a/release.properties +++ b/release.properties @@ -1,18 +1,11 @@ #release configuration -#Sat Jul 15 18:46:45 CET 2017 -project.scm.io.sfjava.ui\:sf-java-ui.url=https\://github.com/JsonSchema-JavaUI/sf-java-ui +#Sat Jul 15 19:03:53 CET 2017 scm.tagNameFormat=@{project.artifactId}-@{project.version} -scm.tag=sf-java-ui-0.1.1 pushChanges=true scm.url=scm\:git\:git@github.com\:JsonSchema-JavaUI/sf-java-ui.git preparationGoals=clean verify -remoteTagging=true projectVersionPolicyId=default +remoteTagging=true scm.commentPrefix=[maven-release-plugin] -project.scm.io.sfjava.ui\:sf-java-ui.connection=scm\:git\:git\://github.com/JsonSchema-JavaUI/sf-java-ui.git -project.dev.io.sfjava.ui\:sf-java-ui=0.1.2-SNAPSHOT -project.rel.io.sfjava.ui\:sf-java-ui=0.1.1 -project.scm.io.sfjava.ui\:sf-java-ui.developerConnection=scm\:git\:git@github.com\:JsonSchema-JavaUI/sf-java-ui.git exec.snapshotReleasePluginAllowed=false -completedPhase=generate-release-poms -project.scm.io.sfjava.ui\:sf-java-ui.tag=sf-java-ui-0.1.0 +completedPhase=check-poms From 8045e1aa19c1ca5ecc0485dd95ea0063d4058b4d Mon Sep 17 00:00:00 2001 From: Saif Jerbi Date: Sat, 15 Jul 2017 19:08:05 +0100 Subject: [PATCH 20/44] [maven-release-plugin] prepare release sf-java-ui-0.1.2 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index d8703de..aaf5221 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ io.sfjava.ui sf-java-ui - 0.1.2-SNAPSHOT + 0.1.2 jar sf-java-ui @@ -30,7 +30,7 @@ https://github.com/JsonSchema-JavaUI/sf-java-ui scm:git:git://github.com/JsonSchema-JavaUI/sf-java-ui.git scm:git:git@github.com:JsonSchema-JavaUI/sf-java-ui.git - sf-java-ui-0.1.1 + sf-java-ui-0.1.2 From f6290ef0de26eb21d5e658b13ebcfbd4388bcdd5 Mon Sep 17 00:00:00 2001 From: Saif Jerbi Date: Sat, 15 Jul 2017 19:11:15 +0100 Subject: [PATCH 21/44] working on prepare release --- .gitignore | 1 + pom.xml | 13 +++++++++---- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 8fdab44..f596ee6 100644 --- a/.gitignore +++ b/.gitignore @@ -123,3 +123,4 @@ hs_err_pid* # End of https://www.gitignore.io/api/java,bower,eclipse,angular /target/ +/EMBEDDED/ diff --git a/pom.xml b/pom.xml index aaf5221..f58ae67 100644 --- a/pom.xml +++ b/pom.xml @@ -1,9 +1,10 @@ - + 4.0.0 io.sfjava.ui sf-java-ui - 0.1.2 + 0.1.2-SNAPSHOT jar sf-java-ui @@ -30,8 +31,8 @@ https://github.com/JsonSchema-JavaUI/sf-java-ui scm:git:git://github.com/JsonSchema-JavaUI/sf-java-ui.git scm:git:git@github.com:JsonSchema-JavaUI/sf-java-ui.git - sf-java-ui-0.1.2 - + sf-java-ui-0.1.1 + UTF-8 @@ -169,6 +170,10 @@ org.apache.maven.plugins maven-release-plugin 2.5.1 + + true + false + org.apache.maven.shared From 4e3956f5e92d613251feab0488b9a638362eafc1 Mon Sep 17 00:00:00 2001 From: Saif Jerbi Date: Sat, 15 Jul 2017 19:11:53 +0100 Subject: [PATCH 22/44] [maven-release-plugin] prepare release sf-java-ui-0.1.2 --- pom.xml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index f58ae67..dddd306 100644 --- a/pom.xml +++ b/pom.xml @@ -1,10 +1,9 @@ - + 4.0.0 io.sfjava.ui sf-java-ui - 0.1.2-SNAPSHOT + 0.1.2 jar sf-java-ui @@ -31,7 +30,7 @@ https://github.com/JsonSchema-JavaUI/sf-java-ui scm:git:git://github.com/JsonSchema-JavaUI/sf-java-ui.git scm:git:git@github.com:JsonSchema-JavaUI/sf-java-ui.git - sf-java-ui-0.1.1 + sf-java-ui-0.1.2 From c4fc4763793c67b8b89d838fd8b498c380ff67de Mon Sep 17 00:00:00 2001 From: Saif Jerbi Date: Sat, 15 Jul 2017 19:11:53 +0100 Subject: [PATCH 23/44] [maven-release-plugin] prepare for next development iteration --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index dddd306..cc30528 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ io.sfjava.ui sf-java-ui - 0.1.2 + 0.1.3-SNAPSHOT jar sf-java-ui @@ -30,7 +30,7 @@ https://github.com/JsonSchema-JavaUI/sf-java-ui scm:git:git://github.com/JsonSchema-JavaUI/sf-java-ui.git scm:git:git@github.com:JsonSchema-JavaUI/sf-java-ui.git - sf-java-ui-0.1.2 + sf-java-ui-0.1.1 From 872882611f4543911ec81f302ba6666ad5a32440 Mon Sep 17 00:00:00 2001 From: Saif Jerbi Date: Fri, 25 Aug 2017 13:22:52 +0100 Subject: [PATCH 24/44] :memo: adding demo screen shot for textField --- docs/images/textField.png | Bin 0 -> 30924 bytes docs/index.md | 5 +++++ 2 files changed, 5 insertions(+) create mode 100644 docs/images/textField.png diff --git a/docs/images/textField.png b/docs/images/textField.png new file mode 100644 index 0000000000000000000000000000000000000000..965f36891706f7198367177ee20377f9288607aa GIT binary patch literal 30924 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 Ln3X=$ck90aP*1jE literal 0 HcmV?d00001 diff --git a/docs/index.md b/docs/index.md index 424f25d..29bb41a 100644 --- a/docs/index.md +++ b/docs/index.md @@ -64,6 +64,11 @@ public class DemoForm implements Serializable { ``` +![Demo TextField](images/textField.png) +

*1- Demo TextField*
+ + + ### NumberField: The given component can be used to fill numeric values, it can be applied to fields of type [java.lang.Number](https://docs.oracle.com/javase/7/docs/api/java/lang/Number.html) (Integer, Long, Double, Float, etc ...). The developer must use the [@Number](../src/main/java/io/asfjava/ui/core/form/Number.java) in this case. From c6c3850d515081cf91974c3c16ba8470d04d7a2c Mon Sep 17 00:00:00 2001 From: Saif Jerbi Date: Fri, 25 Aug 2017 13:59:13 +0100 Subject: [PATCH 25/44] :memo: add demo to password field, number field and textarea docs --- .../io/asfjava/ui/demo/screen/DemoForm.java | 33 ++--- .../io/asfjava/ui/demo/screen/Messages.java | 8 ++ docs/images/numberField.png | Bin 0 -> 40635 bytes docs/images/passwordField.png | Bin 0 -> 18879 bytes docs/images/textArea.png | Bin 0 -> 55890 bytes docs/index.md | 120 +++++++++++++++++- 6 files changed, 139 insertions(+), 22 deletions(-) create mode 100644 demo/src/main/java/io/asfjava/ui/demo/screen/Messages.java create mode 100644 docs/images/numberField.png create mode 100644 docs/images/passwordField.png create mode 100644 docs/images/textArea.png diff --git a/demo/src/main/java/io/asfjava/ui/demo/screen/DemoForm.java b/demo/src/main/java/io/asfjava/ui/demo/screen/DemoForm.java index 210d6ca..3b0b298 100644 --- a/demo/src/main/java/io/asfjava/ui/demo/screen/DemoForm.java +++ b/demo/src/main/java/io/asfjava/ui/demo/screen/DemoForm.java @@ -2,36 +2,29 @@ import java.io.Serializable; -import io.asfjava.ui.core.form.TextField; +import io.asfjava.ui.core.form.TextArea; public class DemoForm implements Serializable { - @TextField(title = "Full Name", minLenght = 3) - private String fullName; + @TextArea(title = "Comment", description = "Add your Comment here", placeHolder = "fill your comment please") + private String comment; - @TextField(title = "Email", pattern = "^\\S+@\\S+$") - private String mail; + @TextArea(title = "Tweet", placeHolder = "This message will be tweeted", maxLenght = 140, validationMessage = Messages.TWEET_VALIDATION) + private String tweet; - @TextField(title = "Repository", fieldAddonLeft = "https://github.com/") - private String githubRepository; + @TextArea(title = "Fill a message", minLenght = 50) + private String message; - @TextField(title = "Github user name", fieldAddonRight = "@Github.com") - private String githubUserName; - - public String getMail() { - return mail; - } - - public String getFullName() { - return fullName; + public String getComment() { + return comment; } - public String getGithubRepository() { - return githubRepository; + public String getTweet() { + return tweet; } - public String getGithubUserName() { - return githubUserName; + public String getMessage() { + return message; } private static final long serialVersionUID = -5073515619469444978L; diff --git a/demo/src/main/java/io/asfjava/ui/demo/screen/Messages.java b/demo/src/main/java/io/asfjava/ui/demo/screen/Messages.java new file mode 100644 index 0000000..4e7e571 --- /dev/null +++ b/demo/src/main/java/io/asfjava/ui/demo/screen/Messages.java @@ -0,0 +1,8 @@ +package io.asfjava.ui.demo.screen; + +public final class Messages { + static final String TWEET_VALIDATION = "Twitter limits Tweet length to 140 characters making the definition of a “character” and how they are counted central to any Twitter application"; + + private Messages() { + } +} diff --git a/docs/images/numberField.png b/docs/images/numberField.png new file mode 100644 index 0000000000000000000000000000000000000000..f0320672b4d1d5f226fb86fdb699b0f3b9446f29 GIT binary patch literal 40635 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 literal 0 HcmV?d00001 diff --git a/docs/images/passwordField.png b/docs/images/passwordField.png new file mode 100644 index 0000000000000000000000000000000000000000..4c3a82cba6cb09c5ec2a9b6bb33515bddcac765f GIT binary patch literal 18879 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⩔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 Demo TextField* @@ -84,6 +85,54 @@ The given component can be used to fill numeric values, it can be applied to fie | fieldAddonLeft | String | [Extend form controls](http://getbootstrap.com/components/#input-groups) by adding text on the left side of the Number Field | | fieldAddonRight | String | [Extend form controls](http://getbootstrap.com/components/#input-groups) by adding text on the right side of the Number Field | +The code below is an example using the Number annotation. Feel free to try this code snippet: + + +```Java +import java.io.Serializable; + +import io.asfjava.ui.core.form.Number; + +public class DemoForm implements Serializable { + + @Number(title = "Average", description = "This a double") + private Double average; + + @Number(title = "Rating", placeHolder = "Rate me") + private short rating; + + @Number(title = "USA Phone Number", fieldAddonLeft = "+1") + private Long phone; + + @Number(title = "Amount", fieldAddonRight = "$") + private Double amount; + + public Double getAverage() { + return average; + } + + public short getRating() { + return rating; + } + + public Long getPhone() { + return phone; + } + + public Double getAmount() { + return amount; + } + +} + + +``` + +2- Demo NumberField + +![Demo NumberField](images/numberField.png) + + ### PasswordField: For some use cases, the developer need to use a encrypted UI input field to fill the user value. So he can use [@Password](../src/main/java/io/asfjava/ui/core/form/Password.java). @@ -102,6 +151,32 @@ For some use cases, the developer need to use a encrypted UI input field to fill | fieldAddonLeft | String | [Extend form controls](http://getbootstrap.com/components/#input-groups) by adding text on the left side of the Password Field | | fieldAddonRight | String | [Extend form controls](http://getbootstrap.com/components/#input-groups) by adding text on the right side of the Password Field | +The code below is an example using the Password annotation. Feel free to try this code snippet: + +```Java + +import java.io.Serializable; + +import io.asfjava.ui.core.form.Password; + +public class DemoForm implements Serializable { + + @Password(title = "Password", description = "Fill your password") + private String password; + + public String getPassword() { + return password; + } + +} + +``` + +3- Demo PasswordField + +![Demo PasswordField](images/passwordField.png) + + ### TextArea The TextArea component is a multiline text field with a border and optional scroll bars. To use a this component the developer must use [@TextArea](../src/main/java/io/asfjava/ui/core/form/TextArea.java) @@ -118,3 +193,44 @@ The TextArea component is a multiline text field with a border and optional scro | noTitle | Boolean | Set to true to hide title | | fieldAddonLeft | String | [Extend form controls](http://getbootstrap.com/components/#input-groups) by adding text on the left side of the Text Area | | fieldAddonRight | String | [Extend form controls](http://getbootstrap.com/components/#input-groups) by adding text on the right side of the Text Area | + +The code below is an example using the TextArea annotation. Feel free to try this code snippet: + +```Java + +import java.io.Serializable; + +import io.asfjava.ui.core.form.TextArea; + +public class DemoForm implements Serializable { + + @TextArea(title = "Comment", description = "Add your Comment here", placeHolder = "fill your comment please") + private String comment; + + @TextArea(title = "Tweet", placeHolder = "This message will be tweeted", maxLenght = 140, validationMessage = Messages.TWEET_VALIDATION) + private String tweet; + + @TextArea(title = "Fill a message", minLenght = 50) + private String message; + + public String getComment() { + return comment; + } + + public String getTweet() { + return tweet; + } + + public String getMessage() { + return message; + } + + private static final long serialVersionUID = -5073515619469444978L; +} + +``` + +4- Demo TextArea + +![Demo TextArea](images/textArea.png) + From e89c5c12a8c99376939bf0b6ffbb6df76f172b3c Mon Sep 17 00:00:00 2001 From: Saif Jerbi Date: Fri, 25 Aug 2017 14:18:16 +0100 Subject: [PATCH 26/44] new stable release for production fix #71 :arrow_up: --- .../java/io/asfjava/ui/demo/DemoApplication.java | 5 +++++ release.properties | 4 ++-- .../asfjava/ui/core/GeneratorFactoryInitializer.java | 5 ++--- src/main/java/io/asfjava/ui/core/SFJavaUi.java | 12 ++++++++++++ 4 files changed, 21 insertions(+), 5 deletions(-) create mode 100644 src/main/java/io/asfjava/ui/core/SFJavaUi.java diff --git a/demo/src/main/java/io/asfjava/ui/demo/DemoApplication.java b/demo/src/main/java/io/asfjava/ui/demo/DemoApplication.java index 0bc3f08..19efa21 100644 --- a/demo/src/main/java/io/asfjava/ui/demo/DemoApplication.java +++ b/demo/src/main/java/io/asfjava/ui/demo/DemoApplication.java @@ -5,6 +5,11 @@ import org.springframework.boot.web.servlet.ServletComponentScan; @SpringBootApplication +/* + * The annotation below used to scan the servlet context loader added to the sf-java-ui library + * in order to initialize the library @ server startup + * + * */ @ServletComponentScan(basePackages = { "io.asfjava.ui.core" }) public class DemoApplication { public static void main(String[] args) { diff --git a/release.properties b/release.properties index b49580d..5ec0b37 100644 --- a/release.properties +++ b/release.properties @@ -1,7 +1,7 @@ #release configuration -#Sat Jul 15 19:03:53 CET 2017 +#Fri Aug 25 14:13:50 CET 2017 scm.tagNameFormat=@{project.artifactId}-@{project.version} -pushChanges=true +pushChanges=false scm.url=scm\:git\:git@github.com\:JsonSchema-JavaUI/sf-java-ui.git preparationGoals=clean verify projectVersionPolicyId=default diff --git a/src/main/java/io/asfjava/ui/core/GeneratorFactoryInitializer.java b/src/main/java/io/asfjava/ui/core/GeneratorFactoryInitializer.java index d6bd94b..7ea57d6 100644 --- a/src/main/java/io/asfjava/ui/core/GeneratorFactoryInitializer.java +++ b/src/main/java/io/asfjava/ui/core/GeneratorFactoryInitializer.java @@ -9,12 +9,11 @@ public class GeneratorFactoryInitializer implements ServletContextListener { @Override public final void contextInitialized(final ServletContextEvent sce) { - GeneratorFactoryLoader.getInstance().load(); - SchemaDecoratorLoader.getInstance().load(); + SFJavaUi.initialize(); } @Override public final void contextDestroyed(final ServletContextEvent sce) { - //to implement it + // to implement it } } diff --git a/src/main/java/io/asfjava/ui/core/SFJavaUi.java b/src/main/java/io/asfjava/ui/core/SFJavaUi.java new file mode 100644 index 0000000..4b2c73c --- /dev/null +++ b/src/main/java/io/asfjava/ui/core/SFJavaUi.java @@ -0,0 +1,12 @@ +package io.asfjava.ui.core; + +public final class SFJavaUi { + + public static void initialize(){ + GeneratorFactoryLoader.getInstance().load(); + SchemaDecoratorLoader.getInstance().load(); + } + + private SFJavaUi() { + } +} From 8dd7a9e17a50b1fa972b7390521c7e2202b3259d Mon Sep 17 00:00:00 2001 From: Saif Jerbi Date: Fri, 25 Aug 2017 14:18:46 +0100 Subject: [PATCH 27/44] [maven-release-plugin] prepare release sf-java-ui-1.0.0 --- pom.xml | 4 ++-- release.properties | 13 ++++++++++--- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/pom.xml b/pom.xml index cc30528..5321c13 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ io.sfjava.ui sf-java-ui - 0.1.3-SNAPSHOT + 1.0.0-SNAPSHOT jar sf-java-ui @@ -30,7 +30,7 @@ https://github.com/JsonSchema-JavaUI/sf-java-ui scm:git:git://github.com/JsonSchema-JavaUI/sf-java-ui.git scm:git:git@github.com:JsonSchema-JavaUI/sf-java-ui.git - sf-java-ui-0.1.1 + sf-java-ui-1.0.0 diff --git a/release.properties b/release.properties index 5ec0b37..42883c0 100644 --- a/release.properties +++ b/release.properties @@ -1,11 +1,18 @@ #release configuration -#Fri Aug 25 14:13:50 CET 2017 +#Fri Aug 25 14:18:46 CET 2017 +project.scm.io.sfjava.ui\:sf-java-ui.url=https\://github.com/JsonSchema-JavaUI/sf-java-ui scm.tagNameFormat=@{project.artifactId}-@{project.version} +scm.tag=sf-java-ui-0.1.3 pushChanges=false scm.url=scm\:git\:git@github.com\:JsonSchema-JavaUI/sf-java-ui.git preparationGoals=clean verify -projectVersionPolicyId=default remoteTagging=true +projectVersionPolicyId=default scm.commentPrefix=[maven-release-plugin] +project.scm.io.sfjava.ui\:sf-java-ui.connection=scm\:git\:git\://github.com/JsonSchema-JavaUI/sf-java-ui.git +project.dev.io.sfjava.ui\:sf-java-ui=0.1.4-SNAPSHOT +project.rel.io.sfjava.ui\:sf-java-ui=0.1.3 +project.scm.io.sfjava.ui\:sf-java-ui.developerConnection=scm\:git\:git@github.com\:JsonSchema-JavaUI/sf-java-ui.git exec.snapshotReleasePluginAllowed=false -completedPhase=check-poms +completedPhase=run-completion-goals +project.scm.io.sfjava.ui\:sf-java-ui.tag=sf-java-ui-0.1.1 From e4463d9dcdb5b7b93cad289d3d977dbb2cefda05 Mon Sep 17 00:00:00 2001 From: Saif Jerbi Date: Fri, 25 Aug 2017 14:23:30 +0100 Subject: [PATCH 28/44] [maven-release-plugin] prepare release sf-java-ui-1.0.0 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 5321c13..5ef083b 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ io.sfjava.ui sf-java-ui - 1.0.0-SNAPSHOT + 1.0.0 jar sf-java-ui From 01e08664fc3e3375c46fd924a6733aef2d2be260 Mon Sep 17 00:00:00 2001 From: Saif Jerbi Date: Fri, 25 Aug 2017 14:23:31 +0100 Subject: [PATCH 29/44] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 5ef083b..9d359f7 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ io.sfjava.ui sf-java-ui - 1.0.0 + 1.0.1-SNAPSHOT jar sf-java-ui From 6094e2a718c4ebb740ec80dbe4a157cba6d27e05 Mon Sep 17 00:00:00 2001 From: Saif eddine Jerbi Date: Fri, 25 Aug 2017 15:35:22 +0200 Subject: [PATCH 30/44] Add initialize example :memo: add the initialize example to allow developer use the library --- README.md | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/README.md b/README.md index 28ba03f..f6daef8 100644 --- a/README.md +++ b/README.md @@ -48,6 +48,47 @@ First, add the SF Java UI library to your java web project: Add the oss repository: ```xml The official version Not yet deployed +``` +#### Using spring boot + +If you a are using spring boot to develop your project, you can add the annotation below to your main spring boot class in order to run the servlet context loader to inialize the library + +```Java + +@ServletComponentScan(basePackages = { "io.asfjava.ui.core" }) + +``` +You can follow the example below used in the demo application + +```Java +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.web.servlet.ServletComponentScan; + +@SpringBootApplication +/* + * The annotation below used to scan the servlet context loader added to the sf-java-ui library + * in order to initialize the library @ server startup + * + * */ +@ServletComponentScan(basePackages = { "io.asfjava.ui.core" }) +public class DemoApplication { + public static void main(String[] args) { + SpringApplication.run(DemoApplication.class, args); + } +} + + +``` + +#### Using other java web project + +You can add this line of code on your custom startup listener. + +```Java + +SFJavaUi.initialize(); + ``` Create a new Rest Web Service. (example using spring) From ddc5c53d474e4515bf9b1989568777ca331abd3b Mon Sep 17 00:00:00 2001 From: Saif eddine Jerbi Date: Fri, 25 Aug 2017 15:36:04 +0200 Subject: [PATCH 31/44] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index f6daef8..255a0f3 100644 --- a/README.md +++ b/README.md @@ -91,6 +91,7 @@ SFJavaUi.initialize(); ``` +#### Let's code Create a new Rest Web Service. (example using spring) ```Java From 557a99bbd26b3616dbaadeef8488615e38292eae Mon Sep 17 00:00:00 2001 From: Saif eddine Jerbi Date: Fri, 25 Aug 2017 17:28:32 +0200 Subject: [PATCH 32/44] Update README.md --- README.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 255a0f3..7c706a5 100644 --- a/README.md +++ b/README.md @@ -47,8 +47,11 @@ First, add the SF Java UI library to your java web project: ``` Add the oss repository: ```xml -The official version Not yet deployed +The official version Not yet deployed to sonatype. ``` + +Please find the required instruction to configure [bintray.com](https://bintray.com/jsonschema-javaui/sf-java-ui/sf-java-ui) repository to your setting.xml + #### Using spring boot If you a are using spring boot to develop your project, you can add the annotation below to your main spring boot class in order to run the servlet context loader to inialize the library @@ -83,7 +86,7 @@ public class DemoApplication { #### Using other java web project -You can add this line of code on your custom startup listener. +You may add this line of code on your custom server startup listener. ```Java From 4d47e5021496854c47726060d48f0c604af610b3 Mon Sep 17 00:00:00 2001 From: Saif Jerbi Date: Sat, 16 Sep 2017 14:41:19 +0100 Subject: [PATCH 33/44] :memo: add @Tab wiki --- docs/images/tab.png | Bin 0 -> 30562 bytes docs/index.md | 51 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 docs/images/tab.png diff --git a/docs/images/tab.png b/docs/images/tab.png new file mode 100644 index 0000000000000000000000000000000000000000..496cf032292116cbc33afcb187a3abbab0df6e57 GIT binary patch literal 30562 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 O?G`WpOt#4LtA7FXYw866 literal 0 HcmV?d00001 diff --git a/docs/index.md b/docs/index.md index c4629c3..8889b10 100644 --- a/docs/index.md +++ b/docs/index.md @@ -234,3 +234,54 @@ public class DemoForm implements Serializable { ![Demo TextArea](images/textArea.png) +### Tabs + +Tabs organize content into separate views where only one view can be visible at a time. To use a this component the developer must use [@Tab](../src/main/java/io/asfjava/ui/core/form/Tab.java). The idea is to allow the developer mark which component will be in a specific tab. The properties below must be filled by the developer to render the Tab. + +| Properties | Type | Usage | +| ------------- |:-------------: | :-----| +| title | String | The title of the Tab | +| index | Integer | The tab index. In most case, there more than one tab in the screen | + +The example below demonstrate how to use Tab annotation. + +```Java + +import java.io.Serializable; + +import io.asfjava.ui.core.form.Tab; +import io.asfjava.ui.core.form.TextField; + +public class DemoForm implements Serializable { + + @Tab(title = "First tab", index = 0) + @TextField(title = "Full Name", minLenght = 3) + private String fullName; + + @Tab(title = "Second tab", index = 1) + @TextField(title = "Email", pattern = "^\\S+@\\S+$") + private String mail; + + @Tab(title = "First tab", index = 0) + @TextField(title = "Repository", fieldAddonLeft = "https://github.com/") + private String githubRepository; + + public String getMail() { + return mail; + } + + public String getFullName() { + return fullName; + } + + public String getGithubRepository() { + return githubRepository; + } + +} + +``` + +5- Demo Tab + +![Demo Tab](images/tab.png) \ No newline at end of file From 91f2176fad27c4a5bd59da8f3ebb1db09b1b6be4 Mon Sep 17 00:00:00 2001 From: Saif Jerbi Date: Sat, 16 Sep 2017 14:52:31 +0100 Subject: [PATCH 34/44] :memo: add @Index wiki --- demo/pom.xml | 2 +- docs/images/index.png | Bin 0 -> 19091 bytes docs/index.md | 55 +++++++++++++++++++++++++++++++++++++++++- 3 files changed, 55 insertions(+), 2 deletions(-) create mode 100644 docs/images/index.png diff --git a/demo/pom.xml b/demo/pom.xml index 2747994..9d6680e 100644 --- a/demo/pom.xml +++ b/demo/pom.xml @@ -38,7 +38,7 @@ io.sfjava.ui sf-java-ui - 0.1.0 + 1.0.0
diff --git a/docs/images/index.png b/docs/images/index.png new file mode 100644 index 0000000000000000000000000000000000000000..33d557b651ea3187b05eac2b3ba0fb746478512a GIT binary patch literal 19091 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 A{{R30 literal 0 HcmV?d00001 diff --git a/docs/index.md b/docs/index.md index 8889b10..a48dbda 100644 --- a/docs/index.md +++ b/docs/index.md @@ -284,4 +284,57 @@ public class DemoForm implements Serializable { 5- Demo Tab -![Demo Tab](images/tab.png) \ No newline at end of file +![Demo Tab](images/tab.png) + +### Index + +Having the ability to handle the fields order in the screen is very important for developers, this is why we added an [@Index](../src/main/java/io/asfjava/ui/core/form/Index.java) annotation that allow you to mark the index of your field in the rendered screen. + +N.B: The [@Index](../src/main/java/io/asfjava/ui/core/form/Index.java) annotation also used with [@Tab](../src/main/java/io/asfjava/ui/core/form/Tab.java) annotation. It handle the order of components into the tab rendered + +| Properties | Type | Usage | +| ------------- |:-------------: | :-----| +| value | Integer | The value of the index | + +The example below demonstrate how to use Index annotation. + +```Java + +import java.io.Serializable; + +import io.asfjava.ui.core.form.Index; +import io.asfjava.ui.core.form.TextField; + +public class DemoForm implements Serializable { + + @Index(3) + @TextField(title = "Full Name") + private String fullName; + + @Index(1) + @TextField(title = "Email", pattern = "^\\S+@\\S+$") + private String mail; + + @Index(2) + @TextField(title = "Repository", fieldAddonLeft = "https://github.com/") + private String githubRepository; + + public String getMail() { + return mail; + } + + public String getFullName() { + return fullName; + } + + public String getGithubRepository() { + return githubRepository; + } + +} + +``` + +6- Demo Index + +![Demo Index](images/index.png) \ No newline at end of file From 8cdca382a5c0b36f98553ddda0c67480dd806291 Mon Sep 17 00:00:00 2001 From: Saif Jerbi Date: Sat, 16 Sep 2017 15:08:18 +0100 Subject: [PATCH 35/44] :memo: add Actions Group documentation fix #70 --- docs/images/action.png | Bin 0 -> 23630 bytes docs/images/actionsGroup.png | Bin 0 -> 26652 bytes docs/index.md | 95 ++++++++++++++++++++++++++++++++++- 3 files changed, 94 insertions(+), 1 deletion(-) create mode 100644 docs/images/action.png create mode 100644 docs/images/actionsGroup.png diff --git a/docs/images/action.png b/docs/images/action.png new file mode 100644 index 0000000000000000000000000000000000000000..468b4cd83c815fdf8d46407a0d2d8e6f1d483b96 GIT binary patch literal 23630 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 literal 0 HcmV?d00001 diff --git a/docs/images/actionsGroup.png b/docs/images/actionsGroup.png new file mode 100644 index 0000000000000000000000000000000000000000..56a7d0ae20ee7e6ddf6b5f7cf3c17e9a4e23b6fe GIT binary patch literal 26652 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 Haq<5E=Lr+1 literal 0 HcmV?d00001 diff --git a/docs/index.md b/docs/index.md index a48dbda..1f3fc0c 100644 --- a/docs/index.md +++ b/docs/index.md @@ -337,4 +337,97 @@ public class DemoForm implements Serializable { 6- Demo Index -![Demo Index](images/index.png) \ No newline at end of file +![Demo Index](images/index.png) + +### Action + +Actions are crucial in form screens. To add an action to your form, you have to use the [@Action](../src/main/java/io/asfjava/ui/core/form/Action.java) annotation. + +| Properties | Type | Usage | +| ------------- |:-------------: | :-----| +| type | String | The action type | +| title | String | The action title | +| onClick | String | The client side function to fire when clicking on the tab | + +The example below demonstrate how to use Action annotation. + +```Java + +import java.io.Serializable; + +import io.asfjava.ui.core.form.Action; +import io.asfjava.ui.core.form.TextField; + +@Action(title = "Previous", type = "button", onClick = "goToPrevious()") +@Action(title = "Next", type = "button", onClick = "goToNext()") +public class DemoForm implements Serializable { + + @TextField(title = "Full Name") + private String fullName; + + @TextField(title = "Email", pattern = "^\\S+@\\S+$") + private String mail; + + public String getMail() { + return mail; + } + + public String getFullName() { + return fullName; + } + +} + + +``` + +6- Demo Action + +![Demo Action](images/action.png) + +### ActionGroup + +Developer have the ability to group Actions. To add a group of actions to your form, you have to use the [@ActionsGroup](../src/main/java/io/asfjava/ui/core/form/ActionsGroup.java) annotation. + +| Properties | Type | Usage | +| ------------- |:-------------: | :-----| +| value | Array of [@Action](../src/main/java/io/asfjava/ui/core/form/Action.java)| Array of actions | + +The example below demonstrate how to use ActionsGroup annotation. + +```Java + +import java.io.Serializable; + +import io.asfjava.ui.core.form.Action; +import io.asfjava.ui.core.form.ActionsGroup; +import io.asfjava.ui.core.form.TextField; + +@ActionsGroup({ + @Action(title = "Previous", type = "button", onClick = "goToPrevious()"), + @Action(title = "Next", type = "button", onClick = "goToNext()") +}) +public class DemoForm implements Serializable { + + @TextField(title = "Full Name") + private String fullName; + + @TextField(title = "Email", pattern = "^\\S+@\\S+$") + private String mail; + + public String getMail() { + return mail; + } + + public String getFullName() { + return fullName; + } + +} + + +``` + +6- Demo ActionGroup + +![Demo ActionGroup](images/actionsGroup.png) \ No newline at end of file From 9f865ea1146b6b096687f257ca00b9c0ba8cde21 Mon Sep 17 00:00:00 2001 From: Saif eddine Jerbi Date: Tue, 23 Jan 2018 17:40:56 +0100 Subject: [PATCH 36/44] :memo: Bintray repository config Adding the required configuration to specify the remote bintray repository --- README.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/README.md b/README.md index 7c706a5..19b2700 100644 --- a/README.md +++ b/README.md @@ -52,6 +52,25 @@ The official version Not yet deployed to sonatype. Please find the required instruction to configure [bintray.com](https://bintray.com/jsonschema-javaui/sf-java-ui/sf-java-ui) repository to your setting.xml +Or you can configure the repository directly in your pom.xml file: +```xml +// Your pom file +... + +// To be added in the pom file in order to specify the remote repo to download the library + + + + false + + bintray-jsonschema-javaui-sf-java-ui + bintray-plugins + https://dl.bintray.com/jsonschema-javaui/sf-java-ui + + + +``` + #### Using spring boot If you a are using spring boot to develop your project, you can add the annotation below to your main spring boot class in order to run the servlet context loader to inialize the library From e300f8c446d2cc927c94a6e0f3f76b8c35975344 Mon Sep 17 00:00:00 2001 From: sejerbi Date: Tue, 23 Jan 2018 20:58:38 +0100 Subject: [PATCH 37/44] :art: add remote repository reference to demo app pom.xml file close #74 --- demo/pom.xml | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/demo/pom.xml b/demo/pom.xml index 9d6680e..a6d6ae9 100644 --- a/demo/pom.xml +++ b/demo/pom.xml @@ -15,7 +15,7 @@ org.springframework.boot spring-boot-starter-parent 1.5.3.RELEASE - + @@ -42,6 +42,17 @@ + + + + false + + bintray-jsonschema-javaui-sf-java-ui + bintray-plugins + https://dl.bintray.com/jsonschema-javaui/sf-java-ui + + + From 370e60973ed23814c4133e6c0abd0e48b1a19fdc Mon Sep 17 00:00:00 2001 From: Saif Eddine Jerbi Date: Mon, 12 Mar 2018 21:13:44 +0100 Subject: [PATCH 38/44] Inherited Form Fields #78 expected behavior : The form definition contains the inherited fields fix #78 --- .../ui/core/schema/UiFormSchemaGenerator.java | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/main/java/io/asfjava/ui/core/schema/UiFormSchemaGenerator.java b/src/main/java/io/asfjava/ui/core/schema/UiFormSchemaGenerator.java index 7e1e678..110adee 100644 --- a/src/main/java/io/asfjava/ui/core/schema/UiFormSchemaGenerator.java +++ b/src/main/java/io/asfjava/ui/core/schema/UiFormSchemaGenerator.java @@ -3,6 +3,7 @@ import java.io.Serializable; import java.lang.annotation.Annotation; import java.lang.reflect.Field; +import java.lang.reflect.Modifier; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; @@ -12,9 +13,12 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Optional; +import java.util.Set; import java.util.function.Predicate; import java.util.stream.Collectors; +import org.reflections.ReflectionUtils; + import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; @@ -43,7 +47,8 @@ public final class UiFormSchemaGenerator { private static UiFormSchemaGenerator instance; public UiForm generate(Class formDto) throws JsonMappingException { - Field[] declaredFields = formDto.getDeclaredFields(); + Set declaredFields = ReflectionUtils.getAllFields(formDto, + field -> !Modifier.isStatic(field.getModifiers())); ObjectMapper mapper = new ObjectMapper(); JsonSchemaGenerator schemaGen = initSchemaGen(mapper); @@ -105,13 +110,13 @@ private ObjectNode buildActionNode(ObjectMapper mapper, Action action) { return node; } - private ObjectNode handlerGroupedFields(ObjectMapper mapper, Field[] declaredFields, + private ObjectNode handlerGroupedFields(ObjectMapper mapper, Set declaredFields, Map sortedNodes) { Predicate checkFieldSetAnnotation = field -> field.isAnnotationPresent(FieldSet.class); Map> groupedFields = new LinkedHashMap<>(); - Arrays.stream(declaredFields).filter(checkFieldSetAnnotation) + declaredFields.stream().filter(checkFieldSetAnnotation) .forEach(field -> groupFieldsByTab(sortedNodes, field, groupedFields)); ArrayNode groups = mapper.createArrayNode(); @@ -123,7 +128,7 @@ private ObjectNode handlerGroupedFields(ObjectMapper mapper, Field[] declaredFie } - private ObjectNode handleTabbedFields(ObjectMapper mapper, Field[] declaredFields, Map nodes) { + private ObjectNode handleTabbedFields(ObjectMapper mapper, Set declaredFields, Map nodes) { Predicate checkTabAnnotation = field -> field.isAnnotationPresent(Tab.class); Comparator tabIndexComparator = (field1, field2) -> Integer @@ -138,7 +143,7 @@ private ObjectNode handleTabbedFields(ObjectMapper mapper, Field[] declaredField Map> groupedFieldsByTab = new LinkedHashMap<>(); - Arrays.stream(declaredFields).filter(checkTabAnnotation).sorted(fieldIndexComparator).sorted(tabIndexComparator) + declaredFields.stream().filter(checkTabAnnotation).sorted(fieldIndexComparator).sorted(tabIndexComparator) .forEach(field -> groupFieldsByTab(nodes, field, groupedFieldsByTab)); ArrayNode tabs = mapper.createArrayNode(); @@ -161,10 +166,10 @@ private ObjectNode handleTabbedFields(ObjectMapper mapper, Field[] declaredField } - private Map initFieldsFormDefinition(ObjectMapper mapper, Field[] declaredFields) { + private Map initFieldsFormDefinition(ObjectMapper mapper, Set declaredFields) { Map nodes = new HashMap<>(); - Arrays.stream(declaredFields).forEach(field -> buildFormDefinition(nodes, mapper, field)); + declaredFields.forEach(field -> buildFormDefinition(nodes, mapper, field)); return nodes; } From cf6bae659d44c91e24de6a4647a7ff3352a3704b Mon Sep 17 00:00:00 2001 From: Saif Eddine Jerbi Date: Mon, 12 Mar 2018 23:15:47 +0100 Subject: [PATCH 39/44] [maven-release-plugin] prepare release sf-java-ui-1.0.1 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 9d359f7..9ccdb1e 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ io.sfjava.ui sf-java-ui - 1.0.1-SNAPSHOT + 1.0.1 jar sf-java-ui @@ -30,7 +30,7 @@ https://github.com/JsonSchema-JavaUI/sf-java-ui scm:git:git://github.com/JsonSchema-JavaUI/sf-java-ui.git scm:git:git@github.com:JsonSchema-JavaUI/sf-java-ui.git - sf-java-ui-1.0.0 + sf-java-ui-1.0.1 From d321354a0cd57f36598ee66e1a0e4dc3c623c244 Mon Sep 17 00:00:00 2001 From: Saif Eddine Jerbi Date: Mon, 12 Mar 2018 23:15:47 +0100 Subject: [PATCH 40/44] [maven-release-plugin] prepare for next development iteration --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 9ccdb1e..5355566 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ io.sfjava.ui sf-java-ui - 1.0.1 + 1.0.2-SNAPSHOT jar sf-java-ui @@ -30,7 +30,7 @@ https://github.com/JsonSchema-JavaUI/sf-java-ui scm:git:git://github.com/JsonSchema-JavaUI/sf-java-ui.git scm:git:git@github.com:JsonSchema-JavaUI/sf-java-ui.git - sf-java-ui-1.0.1 + sf-java-ui-1.0.0 From 521d90ccf0d17713b2b9c5e5a7310b6b90cc8236 Mon Sep 17 00:00:00 2001 From: Saif Eddine Jerbi Date: Tue, 13 Mar 2018 21:40:37 +0100 Subject: [PATCH 41/44] :bug: 'Required' Attribute #82 :bug: adding the "required" attribute to all input fields fixes #82 :memo: adding doc --- docs/index.md | 4 ++++ src/main/java/io/asfjava/ui/core/form/Number.java | 3 +++ src/main/java/io/asfjava/ui/core/form/Password.java | 3 +++ src/main/java/io/asfjava/ui/core/form/RadioBox.java | 2 ++ src/main/java/io/asfjava/ui/core/form/TextArea.java | 2 ++ src/main/java/io/asfjava/ui/core/form/TextField.java | 3 +++ .../java/io/asfjava/ui/core/generators/NumberGenerator.java | 1 + .../java/io/asfjava/ui/core/generators/PasswordGenerator.java | 1 + .../java/io/asfjava/ui/core/generators/RadioBoxGenerator.java | 1 + .../java/io/asfjava/ui/core/generators/TextAreaGenerator.java | 1 + .../io/asfjava/ui/core/generators/TextFieldGenerator.java | 2 ++ 11 files changed, 23 insertions(+) diff --git a/docs/index.md b/docs/index.md index 1f3fc0c..1dd310d 100644 --- a/docs/index.md +++ b/docs/index.md @@ -20,6 +20,7 @@ To render a field as a TextField the developer must add the [@TextField](../src/ | pattern | String (regEx) | Reg Ex used to validate the input | | validationMessage | String | A custom validation error message | | readOnly | Boolean | Make the field readOnly | +| required | Boolean | Make the field required | | noTitle | Boolean | Set to true to hide title | | fieldAddonLeft | String | [Extend form controls](http://getbootstrap.com/components/#input-groups) by adding text on the left side of the Text Field | | fieldAddonRight | String | [Extend form controls](http://getbootstrap.com/components/#input-groups) by adding text on the right side of the Text Field | @@ -81,6 +82,7 @@ The given component can be used to fill numeric values, it can be applied to fie | description | String | A description, can be HTML | | validationMessage | String | A custom validation error message | | readOnly | Boolean | Make the field readOnly | +| required | Boolean | Make the field required | | noTitle | Boolean | Set to true to hide title | | fieldAddonLeft | String | [Extend form controls](http://getbootstrap.com/components/#input-groups) by adding text on the left side of the Number Field | | fieldAddonRight | String | [Extend form controls](http://getbootstrap.com/components/#input-groups) by adding text on the right side of the Number Field | @@ -147,6 +149,7 @@ For some use cases, the developer need to use a encrypted UI input field to fill | pattern | String (regEx) | Reg Ex used to validate the input | | validationMessage | String | A custom validation error message | | readOnly | Boolean | Make the field readOnly | +| required | Boolean | Make the field required | | noTitle | Boolean | Set to true to hide title | | fieldAddonLeft | String | [Extend form controls](http://getbootstrap.com/components/#input-groups) by adding text on the left side of the Password Field | | fieldAddonRight | String | [Extend form controls](http://getbootstrap.com/components/#input-groups) by adding text on the right side of the Password Field | @@ -190,6 +193,7 @@ The TextArea component is a multiline text field with a border and optional scro | maxLength | Integer | Max text length | | validationMessage | String | A custom validation error message | | readOnly | Boolean | Make the field readOnly | +| required | Boolean | Make the field required | | noTitle | Boolean | Set to true to hide title | | fieldAddonLeft | String | [Extend form controls](http://getbootstrap.com/components/#input-groups) by adding text on the left side of the Text Area | | fieldAddonRight | String | [Extend form controls](http://getbootstrap.com/components/#input-groups) by adding text on the right side of the Text Area | diff --git a/src/main/java/io/asfjava/ui/core/form/Number.java b/src/main/java/io/asfjava/ui/core/form/Number.java index daf450f..956db07 100644 --- a/src/main/java/io/asfjava/ui/core/form/Number.java +++ b/src/main/java/io/asfjava/ui/core/form/Number.java @@ -24,4 +24,7 @@ String validationMessage() default ""; boolean readOnly() default false; + + boolean required() default false; + } \ No newline at end of file diff --git a/src/main/java/io/asfjava/ui/core/form/Password.java b/src/main/java/io/asfjava/ui/core/form/Password.java index 8bd036a..3c446f1 100644 --- a/src/main/java/io/asfjava/ui/core/form/Password.java +++ b/src/main/java/io/asfjava/ui/core/form/Password.java @@ -30,4 +30,7 @@ String validationMessage() default ""; boolean readOnly() default false; + + boolean required() default false; + } \ No newline at end of file diff --git a/src/main/java/io/asfjava/ui/core/form/RadioBox.java b/src/main/java/io/asfjava/ui/core/form/RadioBox.java index 40e4c85..f23dcae 100644 --- a/src/main/java/io/asfjava/ui/core/form/RadioBox.java +++ b/src/main/java/io/asfjava/ui/core/form/RadioBox.java @@ -14,6 +14,8 @@ String title(); boolean readOnly() default false ; + + boolean required() default false; Class titleMap(); diff --git a/src/main/java/io/asfjava/ui/core/form/TextArea.java b/src/main/java/io/asfjava/ui/core/form/TextArea.java index d18304f..9eb214d 100644 --- a/src/main/java/io/asfjava/ui/core/form/TextArea.java +++ b/src/main/java/io/asfjava/ui/core/form/TextArea.java @@ -28,4 +28,6 @@ String validationMessage() default ""; boolean readOnly() default false; + + boolean required() default false; } \ No newline at end of file diff --git a/src/main/java/io/asfjava/ui/core/form/TextField.java b/src/main/java/io/asfjava/ui/core/form/TextField.java index 3f4e157..aca8ce8 100644 --- a/src/main/java/io/asfjava/ui/core/form/TextField.java +++ b/src/main/java/io/asfjava/ui/core/form/TextField.java @@ -30,4 +30,7 @@ String validationMessage() default ""; boolean readOnly() default false; + + boolean required() default false; + } diff --git a/src/main/java/io/asfjava/ui/core/generators/NumberGenerator.java b/src/main/java/io/asfjava/ui/core/generators/NumberGenerator.java index 1e4433d..4d76faa 100644 --- a/src/main/java/io/asfjava/ui/core/generators/NumberGenerator.java +++ b/src/main/java/io/asfjava/ui/core/generators/NumberGenerator.java @@ -13,6 +13,7 @@ public void generate(ObjectNode fieldFormDefinition, Field field) { Number annotation = field.getAnnotation(Number.class); fieldFormDefinition.put("key", field.getName()); fieldFormDefinition.put("type", "number"); + fieldFormDefinition.put("required", annotation.required()); String title = annotation.title(); if (!title.isEmpty()) { diff --git a/src/main/java/io/asfjava/ui/core/generators/PasswordGenerator.java b/src/main/java/io/asfjava/ui/core/generators/PasswordGenerator.java index df69b2a..376e2a0 100644 --- a/src/main/java/io/asfjava/ui/core/generators/PasswordGenerator.java +++ b/src/main/java/io/asfjava/ui/core/generators/PasswordGenerator.java @@ -13,6 +13,7 @@ public void generate(ObjectNode fieldFormDefinition, Field field) { Password annotation = field.getAnnotation(Password.class); fieldFormDefinition.put("key", field.getName()); fieldFormDefinition.put("type", "password"); + fieldFormDefinition.put("required", annotation.required()); String description = annotation.description(); if (!description.isEmpty()) { diff --git a/src/main/java/io/asfjava/ui/core/generators/RadioBoxGenerator.java b/src/main/java/io/asfjava/ui/core/generators/RadioBoxGenerator.java index 6b33a3f..511d968 100644 --- a/src/main/java/io/asfjava/ui/core/generators/RadioBoxGenerator.java +++ b/src/main/java/io/asfjava/ui/core/generators/RadioBoxGenerator.java @@ -20,6 +20,7 @@ public void generate(ObjectNode fieldFormDefinition, Field field) { fieldFormDefinition.put("key", field.getName()); fieldFormDefinition.put("readOnly", annotation.readOnly()); fieldFormDefinition.put("type", "radios"); + fieldFormDefinition.put("required", annotation.required()); JsonNode radioFieldFormDefinition = fieldFormDefinition; diff --git a/src/main/java/io/asfjava/ui/core/generators/TextAreaGenerator.java b/src/main/java/io/asfjava/ui/core/generators/TextAreaGenerator.java index c697c73..8e23ad4 100644 --- a/src/main/java/io/asfjava/ui/core/generators/TextAreaGenerator.java +++ b/src/main/java/io/asfjava/ui/core/generators/TextAreaGenerator.java @@ -13,6 +13,7 @@ public void generate(ObjectNode fieldFormDefinition, Field field) { TextArea annotation = field.getAnnotation(TextArea.class); fieldFormDefinition.put("key", field.getName()); fieldFormDefinition.put("type", "textarea"); + fieldFormDefinition.put("required", annotation.required()); String fieldAddonLeft = annotation.fieldAddonLeft(); if (!fieldAddonLeft.isEmpty()) { diff --git a/src/main/java/io/asfjava/ui/core/generators/TextFieldGenerator.java b/src/main/java/io/asfjava/ui/core/generators/TextFieldGenerator.java index 92c35f2..58c1fa1 100644 --- a/src/main/java/io/asfjava/ui/core/generators/TextFieldGenerator.java +++ b/src/main/java/io/asfjava/ui/core/generators/TextFieldGenerator.java @@ -13,6 +13,8 @@ public void generate(ObjectNode fieldFormDefinition, Field field) { TextField annotation = field.getAnnotation(TextField.class); fieldFormDefinition.put("key", field.getName()); + fieldFormDefinition.put("required", annotation.required()); + String description = annotation.description(); if (!description.isEmpty()) { fieldFormDefinition.put("description", description); From 8399038b6c3626e6dbb051c381a554177e276c21 Mon Sep 17 00:00:00 2001 From: Saif Eddine Jerbi Date: Tue, 13 Mar 2018 21:41:11 +0100 Subject: [PATCH 42/44] :fire: remove unused file --- release.properties | 18 ------------------ 1 file changed, 18 deletions(-) delete mode 100644 release.properties diff --git a/release.properties b/release.properties deleted file mode 100644 index 42883c0..0000000 --- a/release.properties +++ /dev/null @@ -1,18 +0,0 @@ -#release configuration -#Fri Aug 25 14:18:46 CET 2017 -project.scm.io.sfjava.ui\:sf-java-ui.url=https\://github.com/JsonSchema-JavaUI/sf-java-ui -scm.tagNameFormat=@{project.artifactId}-@{project.version} -scm.tag=sf-java-ui-0.1.3 -pushChanges=false -scm.url=scm\:git\:git@github.com\:JsonSchema-JavaUI/sf-java-ui.git -preparationGoals=clean verify -remoteTagging=true -projectVersionPolicyId=default -scm.commentPrefix=[maven-release-plugin] -project.scm.io.sfjava.ui\:sf-java-ui.connection=scm\:git\:git\://github.com/JsonSchema-JavaUI/sf-java-ui.git -project.dev.io.sfjava.ui\:sf-java-ui=0.1.4-SNAPSHOT -project.rel.io.sfjava.ui\:sf-java-ui=0.1.3 -project.scm.io.sfjava.ui\:sf-java-ui.developerConnection=scm\:git\:git@github.com\:JsonSchema-JavaUI/sf-java-ui.git -exec.snapshotReleasePluginAllowed=false -completedPhase=run-completion-goals -project.scm.io.sfjava.ui\:sf-java-ui.tag=sf-java-ui-0.1.1 From bceb13078db31fd7bc11010d28c880c9b28b860d Mon Sep 17 00:00:00 2001 From: Saif Eddine Jerbi Date: Tue, 13 Mar 2018 21:52:52 +0100 Subject: [PATCH 43/44] [maven-release-plugin] prepare release sf-java-ui-1.0.2 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 5355566..a02299c 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ io.sfjava.ui sf-java-ui - 1.0.2-SNAPSHOT + 1.0.2 jar sf-java-ui @@ -30,7 +30,7 @@ https://github.com/JsonSchema-JavaUI/sf-java-ui scm:git:git://github.com/JsonSchema-JavaUI/sf-java-ui.git scm:git:git@github.com:JsonSchema-JavaUI/sf-java-ui.git - sf-java-ui-1.0.0 + sf-java-ui-1.0.2 From aa827bd2e32db500c8dee65c022e3e9f495cf8ae Mon Sep 17 00:00:00 2001 From: Saif Eddine Jerbi Date: Tue, 13 Mar 2018 21:52:52 +0100 Subject: [PATCH 44/44] [maven-release-plugin] prepare for next development iteration --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index a02299c..836fec9 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ io.sfjava.ui sf-java-ui - 1.0.2 + 1.0.3-SNAPSHOT jar sf-java-ui @@ -30,7 +30,7 @@ https://github.com/JsonSchema-JavaUI/sf-java-ui scm:git:git://github.com/JsonSchema-JavaUI/sf-java-ui.git scm:git:git@github.com:JsonSchema-JavaUI/sf-java-ui.git - sf-java-ui-1.0.2 + sf-java-ui-1.0.0