diff --git a/.gitignore b/.gitignore index 30f536eb..61e333ea 100644 --- a/.gitignore +++ b/.gitignore @@ -42,3 +42,4 @@ target /x.txt /transaction-logs/ /xx.txt +/.factorypath diff --git a/.idea/compiler.xml b/.idea/compiler.xml index 98ada7ed..0dbab5c8 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -19,7 +19,7 @@ - + diff --git a/.idea/dataSources.local.xml b/.idea/dataSources.local.xml index ee702648..fed02620 100644 --- a/.idea/dataSources.local.xml +++ b/.idea/dataSources.local.xml @@ -1,26 +1,27 @@ - + - + " master_key + pgpass simpleworklist - - - + - - - - - + + + + + + + diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml index 75961aff..48c78ed0 100644 --- a/.idea/dataSources.xml +++ b/.idea/dataSources.xml @@ -6,6 +6,9 @@ true org.postgresql.Driver jdbc:postgresql://localhost:5432/simpleworklist + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml index 98b0187f..1a612636 100644 --- a/.idea/jarRepositories.xml +++ b/.idea/jarRepositories.xml @@ -26,6 +26,11 @@ + + + + + @@ -41,6 +46,16 @@ + + + + + + + + + + @@ -76,6 +91,11 @@ + + + + + @@ -106,6 +126,11 @@ + + + + + @@ -141,6 +166,11 @@ + + + + + @@ -311,6 +341,11 @@ + + + + + @@ -371,6 +406,11 @@ + + + + + @@ -486,6 +526,11 @@ + + + + + @@ -531,6 +576,11 @@ + + + + + diff --git a/LICENSE b/LICENSE.txt similarity index 99% rename from LICENSE rename to LICENSE.txt index 8dada3ed..ff773796 100644 --- a/LICENSE +++ b/LICENSE.txt @@ -1,6 +1,7 @@ + Apache License Version 2.0, January 2004 - http://www.apache.org/licenses/ + https://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION @@ -192,7 +193,7 @@ you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + https://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, diff --git a/README.md b/README.md index 9b4a89cb..b733fb8b 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ [](https://github.com/Spring-Framework-Java-Apps/simpleworklist/actions) [](https://github.com/Spring-Framework-Java-Apps/simpleworklist/actions) [](https://app.travis-ci.com/github/Spring-Framework-Java-Apps/simpleworklist) -[](https://bloodmoneyapp.github.io/simpleworklist/) +[](https://java.woehlke.org/simpleworklist/) Your Todo List for Getting Things Done @@ -25,7 +25,7 @@ SimpleWorklist is not affiliated with or endorsed by the David Allen Company. ## Functional Requirements ### Functional Requirements 001 - Start - + #### F001 Server Starts #### F002 Home Page rendered #### F003 Registration @@ -35,7 +35,7 @@ SimpleWorklist is not affiliated with or endorsed by the David Allen Company. #### F007 Logout ### Functional Requirements 002 - Show TaskstateTab - + #### F010 show /taskstate/inbox #### F011 show /taskstate/today #### F012 show /taskstate/next @@ -47,7 +47,7 @@ SimpleWorklist is not affiliated with or endorsed by the David Allen Company. #### F018 show /taskstate/trash ### Functional Requirements 003 - TaskstateTab - + #### F040 Taskstate: Add Task to Inbox #### F041 Taskstate: Add Task to Inbox again #### F042 Taskstate: Task Edit @@ -62,7 +62,7 @@ SimpleWorklist is not affiliated with or endorsed by the David Allen Company. #### F051 Taskstate: Task undelete ### Functional Requirements 004 - Project/Root - + #### F060 Project/Root: Add Task #### F061 Project/Root: Add SubProject #### F062 Project/Root: Task Edit @@ -77,7 +77,7 @@ SimpleWorklist is not affiliated with or endorsed by the David Allen Company. #### F071 Project/Root: Task undelete ### Functional Requirements 005 - Project/id - + #### F080 Project/id: Add Task #### F081 Project/id: Add SubProject #### F082 Project/id: Task Edit @@ -92,7 +92,7 @@ SimpleWorklist is not affiliated with or endorsed by the David Allen Company. #### F091 Project/id: Task undelete ### Functional Requirements 006 - Drag and Drop. Task move to TaskstateTab - + #### F120 Drag and Drop: Task move to /taskstate/inbox #### F121 Drag and Drop: Task move to /taskstate/today #### F122 Drag and Drop: Task move to /taskstate/next @@ -104,30 +104,57 @@ SimpleWorklist is not affiliated with or endorsed by the David Allen Company. #### F128 Drag and Drop: Task move to /taskstate/trash ### Functional Requirements 007 - Drag and Drop Move to Project - + #### F129 Drag and Drop: Task move to Project #### F130 Drag and Drop: Project move to Project ### Functional Requirements 008 - Drag and Drop Move Task to Change Task-Order - + #### F131 Drag and Drop: Move Task to Change Task-Order in TaskstateTab #### F132 Drag and Drop: Move Task to Change Task-Order in Project/Root #### F133 Drag and Drop: Move Task to Change Task-Order in Project/id ### Functional Requirements 009 - Search - + #### F200 Search Request +## Functional Requirements - User + +### Functional Requirements 001 - Start + +#### F003 Registration +#### F004 Password Recovery +#### F005 Login +#### F007 Logout + +### Functional Requirements 010 - User Profile + +#### F200 List of other Users and New Messages received from them +#### F201 Chat Messages shared with one other User +#### F202 Send New Chat Message to one other User +#### F220 Menu Selfservice: Change Username +#### F221 Menu Selfservice: Change Password +#### F222 Menu Selfservice: Change Contexts +#### F223 Menu Selfservice: Set Default Language +#### F224 Menu Selfservice: Create Test Data + +### Functional Requirements 011 - On every Page behind Login + +#### F250 Number of new incoming Messages from other Users + + ### Domain Class Modell #### Domain Class Modell - Persistent - -#### Domain Class Modell - Transient ( TODO ) - + +#### Domain Class Modell - Transient + ## Software Design -### Service Classes Controller ( TODO ) - -### Service Classes DB ( TODO ) - -### Service Classes Meso ( TODO ) - +### Service Classes Controller + +### Service Classes DB data + +### Service Classes DB user + +### Service Classes Meso + diff --git a/src/main/resources/docker-compose.yml b/docker-compose.yml similarity index 100% rename from src/main/resources/docker-compose.yml rename to docker-compose.yml diff --git a/etc/TODO.md b/etc/TODO.md index 95663a68..d275e26b 100644 --- a/etc/TODO.md +++ b/etc/TODO.md @@ -88,25 +88,30 @@ * fixed #390 refactor integration tests: One Test class for each Controller Class * fixed #391 refactor integration tests: One Test class for each Service Class in package meso - ## 2.4.10-SNAPSHOT -* #389 apply Database Schema Evolution for: 386 make Project Navigation collapsible +* ## 2.4.11-SNAPSHOT -* #386 make Project Navigation collapsible +* fixed #380 add User Use Cases to UML Documentation +* fixed #393 UML Documentation: Service Classes DB +* fixed #394 UML Documentation: Service Classes Meso ## 2.4.12-SNAPSHOT -* #388 make task.taskstate, task.duedate and taskstate workflow independent to each other +* fixed #388 make task.taskstate, task.duedate and taskstate workflow independent to each other +* ## 2.4.13-SNAPSHOT * #377 add List of URL (Patterns) to Documentation -* #380 add User Use Cases to UML Documentation -* #393 UML Documentation: Service Classes DB ( TODO ) -* #394 UML Documentation: Service Classes Meso ( TODO ) +* #392 refactor integration tests: add Unit Tests for Beans and Entities +* ## 2.4.14-SNAPSHOT -* #392 refactor integration tests: add Unit Tests for Beans and Entities +* #386 make Project Navigation collapsible +* #389 apply Database Schema Evolution for: 386 make Project Navigation collapsible +* ## 2.4.15-SNAPSHOT * #378 Add Search Index and search functionality -* + +## 2.4.16-SNAPSHOT +* diff --git a/etc/db/setup-postgresql-account-and-db.sql b/etc/db/setup-postgresql-account-and-db.sql index 97fc0614..87669e54 100644 --- a/etc/db/setup-postgresql-account-and-db.sql +++ b/etc/db/setup-postgresql-account-and-db.sql @@ -1,28 +1,20 @@ CREATE ROLE simpleworklist LOGIN PASSWORD 'simpleworklistpwd' SUPERUSER INHERIT CREATEDB CREATEROLE REPLICATION; + GRANT pg_monitor TO simpleworklist; GRANT pg_read_all_settings TO simpleworklist; GRANT pg_read_all_stats TO simpleworklist; GRANT pg_signal_backend TO simpleworklist; GRANT pg_stat_scan_tables TO simpleworklist; -CREATE ROLE simpleworklistref LOGIN - PASSWORD 'simpleworklistrefpwd' - SUPERUSER INHERIT CREATEDB CREATEROLE REPLICATION; -GRANT pg_monitor TO simpleworklistref; -GRANT pg_read_all_settings TO simpleworklistref; -GRANT pg_read_all_stats TO simpleworklistref; -GRANT pg_signal_backend TO simpleworklistref; -GRANT pg_stat_scan_tables TO simpleworklistref; - CREATE TABLESPACE tablespace_simpleworklist OWNER tw LOCATION '/opt/postgresql/tablespace_simpleworklist'; -CREATE TABLESPACE tablespace_simpleworklist - OWNER tw - LOCATION 'C:\tablespace_pg\simpleworklist'; +-- CREATE TABLESPACE tablespace_simpleworklist +-- OWNER tw +-- LOCATION 'C:\tablespace_pg\simpleworklist'; ALTER TABLESPACE tablespace_simpleworklist OWNER TO simpleworklist; @@ -34,7 +26,7 @@ CREATE DATABASE simpleworklist CONNECTION LIMIT = -1; CREATE DATABASE simpleworklistref - WITH OWNER = simpleworklistref + WITH OWNER = simpleworklist ENCODING = 'UTF8' TABLESPACE = tablespace_simpleworklist CONNECTION LIMIT = -1; diff --git a/liquibase.properties b/liquibase.properties new file mode 100644 index 00000000..3cd87adb --- /dev/null +++ b/liquibase.properties @@ -0,0 +1,11 @@ +changeLogFile=src/main/resources/db/liquibase-changelog.xml +diffChangeLogFile=src/main/resources/db/liquibase-diff-changelog.xml +classpath=target/dependency/postgresql-42.5.1.jar +driver=org.postgresql.Driver +url=jdbc:postgresql://localhost:5432/simpleworklist +username=simpleworklist +password=simpleworklistpwd +referenceDriver=org.postgresql.Driver +referenceUrl=jdbc:postgresql://localhost:5432/simpleworklistref +referenceUsername=simpleworklist +referencePassword=simpleworklistpwd diff --git a/pom.xml b/pom.xml index 45c859fb..4de1673c 100644 --- a/pom.xml +++ b/pom.xml @@ -1,1558 +1,1697 @@ - 4.0.0 + 4.0.0 - org.woehlke - simpleworklist - 2.4.11-SNAPSHOT - jar + org.woehlke + simpleworklist + 2.4.21-SNAPSHOT + jar - - org.springframework.boot - spring-boot-starter-parent - 2.7.3 - - - - scm:git:git@github.com:Spring-Framework-Java-Apps/simpleworklist.git - scm:git:git@github.com:Spring-Framework-Java-Apps/simpleworklist.git - https://github.com/Spring-Framework-Java-Apps/simpleworklist/tree/${project.scm.tag} - v2.4.10 - - - simpleworklist - Your Todo-List for Getting Things Done - https://woehlke.org/java/simpleworklist - 2012 - - - Spring-Framework-Java-Apps - https://github.com/Spring-Framework-Java-Apps/ - - - - - Thomas Wöhlke - github@woehlke.org - https://github.com/thomaswoehlke/ - - - - - - Apache License, Version 2.0 - http://www.apache.org/licenses/LICENSE-2.0 - - - - - Github - https://github.com/Spring-Framework-Java-Apps/simpleworklist/issues - + + org.springframework.boot + spring-boot-starter-parent + 2.7.7 + - - - org.woehlke.java.simpleworklist - file://${user.home}/public_html/java/simpleworklist - - - - central - tw-thinkpad-releases - file://${user.home}/public_html/java/libs-release-local - - - snapshots - tw-thinkpad-snapshots - file://${user.home}/public_html/java/libs-snapshot-local - - + + scm:git:git@github.com:Spring-Framework-Java-Apps/simpleworklist.git + scm:git:git@github.com:Spring-Framework-Java-Apps/simpleworklist.git + https://github.com/Spring-Framework-Java-Apps/simpleworklist/tree/${project.scm.tag} + HEAD + - - 11 - 3.6.3 - ${java.version} - ${java.version} - JAR - ${project.parent.version} - 3.1.0.M2 - 3.5.0 + simpleworklist + Your Todo-List for Getting Things Done + https://java.woehlke.org/simpleworklist + 2012 - - 3.6.1 - 2.9.3 - 5.2.0 - 6.1.2 - 5.7.0 + + Spring-Framework-Java-Apps + https://github.com/Spring-Framework-Java-Apps/ + - - false - ${skipTests} - ${skipTests} - 2.9.0 - 2.64.0 - 3.0.12 - 2.2 - 1.15.3 - 6.49.0 + + + thomaswoehlke + Thomas Woehlke + thomas.woehlke@gmail.com + https://github.com/thomaswoehlke + Europe/Paris + + - - 4.0.0 - ${project.basedir}/src/main/resources/docker-compose.yml - true - true - true - true - true - simplgtd + + + Apache License, Version 2.0 + http://www.apache.org/licenses/LICENSE-2.0 + + - - 1.13.0 - 3.0.0-M6 + + Github + https://github.com/Spring-Framework-Java-Apps/simpleworklist/issues + - - 1.5.2 - 1.2022.6 + + + simpleworklist.public_html + file://${user.home}/public_html/java/simpleworklist + + + central + libs-release-local + file://${user.home}/public_html/java/libs-release-local + + + snapshots + libs-snapshot-local + file://${user.home}/public_html/java/libs-snapshot-local + + - 3.3.0 - 3.2.0 - 3.3.0 - 3.10.1 - 3.0.1 - 3.0.0 - 3.4.1 - 3.2.1 - 3.0.0-M7 - 3.0.0-M7 - 3.12.0 - 3.3.0 - 3.1.2 - 3.2.0 - 3.17.0 - 4.7.0.0 - 3.0.0-M7 - 2.2.2 - 1.11.1 - 3.1.0 - + + 17 + 3.6.3 + ${version.java} + ${version.java} + ${version.java} + JAR + ${project.parent.version} + 3.1.0.M2 + 3.5.0 - - - central - Central - https://repo1.maven.org/maven2/ - - - sonatype-releases - Sonatype Repository - https://oss.sonatype.org/content/repositories/releases/ - - - apache-releases - Apache Releases - https://repository.apache.org/content/repositories/releases/ - - - atlassian-public - Atlassian Repository - https://maven.atlassian.com/content/repositories/atlassian-public/ - - - jboss-releases - JBoss Releases Repository - https://repository.jboss.org/nexus/content/repositories/releases/ - - - jboss-ea - JBossEA Repository - https://repository.jboss.org/nexus/content/repositories/ea/ - - - wso2-public - WSO2 Public Repository - https://maven.wso2.org/nexus/content/repositories/public/ - - - adobe-public - AdobePublic Repository - https://repo.adobe.com/nexus/content/repositories/public/ - - - atlassian-3rdparty - Atlassian 3rd-P Old Repository - https://packages.atlassian.com/3rdparty/ - - - - - central - Central - https://repo1.maven.org/maven2/ - - - sonatype-releases - Sonatype Repository - https://oss.sonatype.org/content/repositories/releases/ - - - apache-releases - Apache Releases - https://repository.apache.org/content/repositories/releases/ - - - atlassian-public - Atlassian Repository - https://maven.atlassian.com/content/repositories/atlassian-public/ - - - jboss-releases - JBoss Releases Repository - https://repository.jboss.org/nexus/content/repositories/releases/ - - - jboss-ea - JBossEA Repository - https://repository.jboss.org/nexus/content/repositories/ea/ - - - wso2-public - WSO2 Public Repository - https://maven.wso2.org/nexus/content/repositories/public/ - - - adobe-public - AdobePublic Repository - https://repo.adobe.com/nexus/content/repositories/public/ - - - atlassian-3rdparty - Atlassian 3rd-P Old Repository - https://packages.atlassian.com/3rdparty/ - - + + 3.6.1 + 2.9.3 + 5.2.2 + 6.2.0 + 5.7.1 - - - - org.junit - junit-bom - ${junit-jupiter.version} - pom - import - - - org.springframework.session - spring-session-bom - ${spring-session-bom.version} - pom - import - - - org.springframework - spring-framework-bom - ${spring-framework.version} - pom - import - - - org.springframework.security - spring-security-bom - ${spring-security.version} - pom - import - + + false + ${skipTests} + ${skipTests} + 2.9.0 + 2.64.0 + 3.0.12 + 2.2 + 1.15.3 + 6.49.0 - - - org.webjars - jquery - ${webjars.jquery.version} - - - org.webjars - popper.js - ${webjars.popper.js.version} - - - org.webjars - bootstrap - ${webjars.bootstrap.version} - - - org.webjars - font-awesome - ${webjars.font-awesome.version} - + + 4.0.0 + ${project.basedir}/src/main/resources/docker-compose.yml + + true + true + true + true + true + simplgtd - - - org.thymeleaf - thymeleaf-testing - ${version.thymeleaf-testing} - test - - - io.github.jpenren - thymeleaf-spring-data-dialect - ${version.thymeleaf-spring-data-dialect} - + + 3.0.0-M7 + 1.13.0 - - - org.projectlombok - lombok - ${lombok.version} - false - + + 42.5.1 + ${project.basedir}/liquibase.properties - - org.postgresql - postgresql - 42.5.0 - + + 1.5.2 + 1.2022.14 - - - org.apache.maven.scm - maven-scm-providers-standard - ${version.org.apache.maven.scm} - pom - - - org.apache.maven.scm - maven-scm-provider-svnexe - ${version.org.apache.maven.scm} - provided - - - org.apache.maven.scm - maven-scm-provider-svn-commons - ${version.org.apache.maven.scm} - provided - - - org.apache.maven.scm - maven-scm-provider-gitexe - ${version.org.apache.maven.scm} - provided - - - org.apache.maven.scm - maven-scm-provider-git-commons - ${version.org.apache.maven.scm} - provided - - - org.apache.maven.scm - maven-scm-manager-plexus - ${version.org.apache.maven.scm} - provided - - - org.apache.maven.scm - maven-scm-client - ${version.org.apache.maven.scm} - provided - + 3.3.0 + 3.2.0 + 3.3.0 + 3.10.1 + 3.0.1 + 3.0.0 + 3.4.1 + 3.2.1 + 3.0.0-M7 + 3.0.0-M7 + 3.12.0 + 3.3.0 + 3.1.2 + 10.4 + 3.2.0 + 3.17.0 + 6.51.0 + 4.7.3.0 + 4.7.0.0 + 3.0.0-M7 + 2.2.2 + 1.11.1 + 3.1.0 + - - - org.apache.maven.plugins - maven-enforcer-plugin - ${version.maven-enforcer-plugin} - maven-plugin - provided - - - org.apache.commons - commons-collections4 - 4.3 - provided - - - org.apache.maven.plugins - maven-invoker-plugin - ${version.maven-invoker-plugin} - maven-plugin - provided - - - commons-collections - commons-collections - - - - - com.dkanejs.maven.plugins - docker-compose-maven-plugin - ${version.docker-compose-maven-plugin} - maven-plugin - provided - - - org.apache.maven.plugins - maven-clean-plugin - ${version.maven-clean-plugin} - maven-plugin - provided - - - org.apache.maven.plugins - maven-dependency-plugin - ${version.maven-dependency-plugin} - maven-plugin - provided - - - commons-collections - commons-collections - - - - - org.apache.maven.plugins - maven-compiler-plugin - ${version.maven-compiler-plugin} - maven-plugin - provided - - - org.springframework.boot - spring-boot-maven-plugin - ${version.spring-boot-maven-plugin} - maven-plugin - provided - - - org.apache.maven.plugins - maven-site-plugin - ${version.maven-site-plugin} - maven-plugin - provided - - - org.apache.maven.plugins - maven-project-info-reports-plugin - ${version.maven-project-info-reports-plugin} - maven-plugin - provided - - - org.apache.maven.plugins - maven-jxr-plugin - ${version.maven-jxr-plugin} - maven-plugin - provided - - - org.apache.maven.plugins - maven-checkstyle-plugin - ${version.maven-checkstyle-plugin} - maven-plugin - provided - - - com.google.guava - guava - - - - - org.apache.maven.plugins - maven-pmd-plugin - ${version.maven-pmd-plugin} - maven-plugin - provided - - - com.beust - jcommander - - - - - org.apache.maven.plugins - maven-surefire-plugin - ${maven-surefire-plugin.version} - maven-plugin - provided - - - org.apache.maven.plugins - maven-surefire-report-plugin - ${version.maven-surefire-report-plugin} - maven-plugin - provided - - - org.asciidoctor - asciidoctor-maven-plugin - ${version.asciidoctor-maven-plugin} - maven-plugin - provided - - - org.apache.maven.plugins - maven-release-plugin - ${version.maven-release-plugin} - maven-plugin - provided - - - com.jcraft - jsch - - - - - org.apache.maven.plugins - maven-deploy-plugin - ${version.maven-deploy-plugin} - maven-plugin - provided - - - org.apache.maven.plugins - maven-install-plugin - ${version.maven-install-plugin} - maven-plugin - provided - - - org.apache.maven.plugins - maven-javadoc-plugin - ${version.maven-javadoc-plugin} - maven-plugin - provided - - - org.apache.maven.plugins - maven-source-plugin - ${version.maven-source-plugin} - maven-plugin - provided - - - + + + central + Central + https://repo1.maven.org/maven2/ + + + sonatype-releases + Sonatype Repository + https://oss.sonatype.org/content/repositories/releases/ + + + apache-releases + Apache Releases + https://repository.apache.org/content/repositories/releases/ + + + atlassian-public + Atlassian Repository + https://maven.atlassian.com/content/repositories/atlassian-public/ + + + jboss-releases + JBoss Releases Repository + https://repository.jboss.org/nexus/content/repositories/releases/ + + + jboss-ea + JBossEA Repository + https://repository.jboss.org/nexus/content/repositories/ea/ + + + wso2-public + WSO2 Public Repository + https://maven.wso2.org/nexus/content/repositories/public/ + + + adobe-public + AdobePublic Repository + https://repo.adobe.com/nexus/content/repositories/public/ + + + atlassian-3rdparty + Atlassian 3rd-P Old Repository + https://packages.atlassian.com/3rdparty/ + + + + + central + Central + https://repo1.maven.org/maven2/ + + + sonatype-releases + Sonatype Repository + https://oss.sonatype.org/content/repositories/releases/ + + + apache-releases + Apache Releases + https://repository.apache.org/content/repositories/releases/ + + + atlassian-public + Atlassian Repository + https://maven.atlassian.com/content/repositories/atlassian-public/ + + + jboss-releases + JBoss Releases Repository + https://repository.jboss.org/nexus/content/repositories/releases/ + + + jboss-ea + JBossEA Repository + https://repository.jboss.org/nexus/content/repositories/ea/ + + + wso2-public + WSO2 Public Repository + https://maven.wso2.org/nexus/content/repositories/public/ + + + adobe-public + AdobePublic Repository + https://repo.adobe.com/nexus/content/repositories/public/ + + + atlassian-3rdparty + Atlassian 3rd-P Old Repository + https://packages.atlassian.com/3rdparty/ + + - - - org.projectlombok - lombok - provided - false - - - org.springframework.boot - spring-boot-devtools - provided - true - - - org.springframework.boot - spring-boot-configuration-processor - provided - true - - - org.springframework.boot - spring-boot-starter-actuator - - - org.springframework.boot - spring-boot-starter-data-jpa - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-security - - - org.springframework.boot - spring-boot-starter-thymeleaf - - - nz.net.ultraq.thymeleaf - thymeleaf-layout-dialect - - - - - org.springframework.boot - spring-boot-starter-validation - - - org.springframework.boot - spring-boot-starter-mail - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-test - test - - - junit - junit - - - org.junit.vintage - junit-vintage-engine - - - - - org.springframework.boot - spring-boot-starter-logging - + + + + org.junit + junit-bom + ${junit-jupiter.version} + pom + import + + + org.springframework.session + spring-session-bom + ${spring-session-bom.version} + pom + import + + + org.springframework + spring-framework-bom + ${spring-framework.version} + pom + import + + + org.springframework.security + spring-security-bom + ${spring-security.version} + pom + import + - - org.springframework.security - spring-security-test - test - + + + org.webjars + jquery + ${webjars.jquery.version} + + + org.webjars + popper.js + ${webjars.popper.js.version} + + + org.webjars + bootstrap + ${webjars.bootstrap.version} + + + org.webjars + font-awesome + ${webjars.font-awesome.version} + - - org.webjars - jquery - - - org.webjars - popper.js - - - org.webjars - bootstrap - - - org.webjars - font-awesome - - - org.thymeleaf - thymeleaf - - - org.slf4j - jul-to-slf4j - - - - - org.thymeleaf - thymeleaf-spring5 - - - org.thymeleaf.extras - thymeleaf-extras-java8time - - - org.thymeleaf.extras - thymeleaf-extras-springsecurity5 - - - com.github.mxab.thymeleaf.extras - thymeleaf-extras-data-attribute - - - io.github.jpenren - thymeleaf-spring-data-dialect - - - org.thymeleaf - thymeleaf-testing - test - - - org.postgresql - postgresql - - - com.zaxxer - HikariCP - + + + org.thymeleaf + thymeleaf-testing + ${version.thymeleaf-testing} + test + + + io.github.jpenren + thymeleaf-spring-data-dialect + ${version.thymeleaf-spring-data-dialect} + - - org.junit.jupiter - junit-jupiter-engine - test - - - org.junit.jupiter - junit-jupiter-api - test - - - - org.apache.maven.scm - maven-scm-provider-svnexe - provided - - - org.apache.maven.scm - maven-scm-provider-svn-commons - provided - - - org.apache.maven.scm - maven-scm-provider-gitexe - provided - - - org.apache.maven.scm - maven-scm-provider-git-commons - provided - - - org.apache.maven.scm - maven-scm-manager-plexus - provided - - - org.apache.maven.scm - maven-scm-client - provided - + + + org.projectlombok + lombok + ${lombok.version} + false + - - org.apache.maven.plugins - maven-enforcer-plugin - maven-plugin - provided - - - org.apache.commons - commons-collections4 - provided - - - org.apache.maven.plugins - maven-invoker-plugin - maven-plugin - provided - - - com.dkanejs.maven.plugins - docker-compose-maven-plugin - maven-plugin - provided - - - org.apache.maven.plugins - maven-clean-plugin - maven-plugin - provided - - - org.apache.maven.plugins - maven-dependency-plugin - maven-plugin - provided - - - org.apache.maven.plugins - maven-compiler-plugin - maven-plugin - provided - - - org.springframework.boot - spring-boot-maven-plugin - maven-plugin - provided - - - org.apache.maven.plugins - maven-site-plugin - maven-plugin - provided - - - org.apache.maven.plugins - maven-project-info-reports-plugin - maven-plugin - provided - - - org.apache.maven.plugins - maven-jxr-plugin - maven-plugin - provided - - - org.apache.maven.plugins - maven-checkstyle-plugin - maven-plugin - provided - - - org.apache.maven.plugins - maven-pmd-plugin - maven-plugin - provided - - - org.apache.maven.plugins - maven-surefire-plugin - maven-plugin - provided - - - org.apache.maven.plugins - maven-surefire-report-plugin - maven-plugin - provided - - - org.asciidoctor - asciidoctor-maven-plugin - maven-plugin - provided - - - org.apache.maven.plugins - maven-release-plugin - maven-plugin - provided - - - org.apache.maven.plugins - maven-deploy-plugin - maven-plugin - provided - - - org.apache.maven.plugins - maven-install-plugin - maven-plugin - provided - - - org.apache.maven.plugins - maven-javadoc-plugin - maven-plugin - provided - - - org.apache.maven.plugins - maven-source-plugin - maven-plugin - provided - - + + org.postgresql + postgresql + 42.5.1 + + + net.sf.saxon + saxon-dom + 8.7 + - - ${project.artifactId} - clean package spring-boot:run - - - - org.apache.maven.plugins - maven-enforcer-plugin - ${version.maven-enforcer-plugin} - - - org.apache.maven.plugins - maven-invoker-plugin - ${version.maven-invoker-plugin} - - - com.dkanejs.maven.plugins - docker-compose-maven-plugin - ${version.docker-compose-maven-plugin} - - - maven-docker-up - test-compile - - up - - - ${docker-compose-maven-plugin.composeFile} - ${docker-compose-maven-plugin.verbose} - ${docker-compose-maven-plugin.removeImages} - ${docker-compose-maven-plugin.removeVolumes} - ${docker-compose-maven-plugin.ignorePullFailures} - ${docker-compose-maven-plugin.detachedMode} - ${docker-compose-maven-plugin.projectName} - - - - maven-docker-down - pre-site - - down - - - ${docker-compose-maven-plugin.composeFile} - ${docker-compose-maven-plugin.verbose} - ${docker-compose-maven-plugin.removeImages} - ${docker-compose-maven-plugin.removeVolumes} - ${docker-compose-maven-plugin.ignorePullFailures} - ${docker-compose-maven-plugin.detachedMode} - ${docker-compose-maven-plugin.projectName} - - - - - - org.apache.maven.plugins - maven-clean-plugin - ${version.maven-clean-plugin} - - - org.apache.maven.plugins - maven-dependency-plugin - ${version.maven-dependency-plugin} - - - org.apache.maven.plugins - maven-compiler-plugin - ${version.maven-compiler-plugin} - - - org.springframework.boot - spring-boot-maven-plugin - ${version.spring-boot-maven-plugin} - - - org.apache.maven.plugins - maven-install-plugin - ${version.maven-install-plugin} - - - org.apache.maven.plugins - maven-project-info-reports-plugin - ${version.maven-project-info-reports-plugin} - - - org.apache.maven.plugins - maven-jxr-plugin - ${version.maven-jxr-plugin} - - - org.apache.maven.plugins - maven-checkstyle-plugin - ${version.maven-checkstyle-plugin} - - - com.github.spotbugs - spotbugs-maven-plugin - ${version.spotbugs-maven-plugin} - - - org.apache.maven.plugins - maven-surefire-plugin - ${version.maven-surefire-plugin} - - - org.apache.maven.plugins - maven-surefire-report-plugin - ${version.maven-surefire-report-plugin} - - - org.apache.maven.plugins - maven-release-plugin - ${version.maven-release-plugin} - - - org.asciidoctor - asciidoctor-maven-plugin - ${version.asciidoctor-maven-plugin} - - - org.apache.maven.plugins - maven-javadoc-plugin - ${version.maven-javadoc-plugin} - - - org.apache.maven.plugins - maven-pmd-plugin - ${version.maven-pmd-plugin} - + - net.sourceforge.pmd - pmd-core - ${pmdVersion} - compile + org.apache.maven.scm + maven-scm-providers-standard + ${version.maven-release-plugin.scm} + pom - net.sourceforge.pmd - pmd-java - ${pmdVersion} - compile + org.apache.maven.scm + maven-scm-provider-svnexe + ${version.maven-release-plugin.scm} + provided - net.sourceforge.pmd - pmd-javascript - ${pmdVersion} - compile + org.apache.maven.scm + maven-scm-provider-svn-commons + ${version.maven-release-plugin.scm} + provided - net.sourceforge.pmd - pmd-jsp - ${pmdVersion} - compile + org.apache.maven.scm + maven-scm-provider-gitexe + ${version.maven-release-plugin.scm} + provided + + + org.apache.maven.scm + maven-scm-provider-git-commons + ${version.maven-release-plugin.scm} + provided + + + org.apache.maven.scm + maven-scm-manager-plexus + ${version.maven-release-plugin.scm} + provided + + + org.apache.maven.scm + maven-scm-client + ${version.maven-release-plugin.scm} + provided - - - - org.apache.maven.plugins - maven-source-plugin - ${version.maven-source-plugin} - - - org.apache.maven.plugins - maven-site-plugin - ${version.maven-site-plugin} - - - org.apache.maven.plugins - maven-deploy-plugin - ${version.maven-deploy-plugin} - - - org.apache.maven.plugins - maven-failsafe-plugin - ${version.maven-failsafe-plugin} - - - - - - org.apache.maven.plugins - maven-enforcer-plugin - - - enforce-versions - - enforce - - - - - ERROR - - org.apache.maven.plugins:maven-verifier-plugin - - - Please consider using the maven-invoker-plugin - (http://maven.apache.org/plugins/maven-invoker-plugin/)! - - - - ${version.maven} - - - ${java.version} - - - - ${project.basedir}/README.md - ${project.basedir}/LICENSE - ${project.basedir}/app.json - ${project.basedir}/_config.yml - ${project.basedir}/Procfile - ${project.basedir}/src/site/markdown/ABOUT.md - ${project.basedir}/src/site/markdown/CHANGELOG.md - ${project.basedir}/src/site/markdown/CLOUD_DEPLOYMENT.md - ${project.basedir}/src/site/markdown/DEVELOPMENT.md - ${project.basedir}/src/site/markdown/HOWTO.md - ${project.basedir}/src/site/markdown/MAVEN_PLUGINS.md - ${project.basedir}/src/site/markdown/REQUIREMENTS_NONFUNCTIONAL.md - ${project.basedir}/src/site/markdown/TODO.md - ${project.basedir}/src/site/site.xml - ${project.basedir}/build.sh - ${project.basedir}/etc/run.sh - ${project.basedir}/etc/bash/psql.sh - ${project.basedir}/src/main/resources/docker-compose.yml - ${project.basedir}/etc/docker-start.sh - ${project.basedir}/etc/docker-stop.sh - ${project.basedir}/etc/sql/db-createdb-and-user-linux.sql - ${project.basedir}/etc/sql/db-createdb-and-user-win10.sql - - - - - - - - - org.apache.maven.plugins - maven-invoker-plugin - - - integration-test - - install - run - - - src/it/settings.xml - ${project.build.directory}/it - ${project.build.directory}/it-repo - verify - - - - - - org.springframework.boot - spring-boot-maven-plugin - - JAR - true - true - org.eclipse.aether,org.beanshell,org.apache.maven.plugins,org.apache.maven.scm,org.jruby,com.vladsch.flexmark,org.apache.maven.doxia,org.codehaus.plexus,org.apache.maven.scm,io.netty,org.apache.groovy,org.eclipse.jetty,org.mockito,org.asciidoctor,com.github.jnr,org.apache.maven.surefire,org.apache.maven,net.sourceforge.saxon,net.sf.saxon,com.github.spotbugs,org.eclipse.jgit,org.apache.ant,org.apache.velocity,org.junit.jupiter,org.junit.platform,junit,org.mockito,net.sourceforge.pmd,org.eclipse.sisu,org.ow2.asmcom.fasterxml.jackson.module - - - org.springframework.boot - spring-boot-configuration-processor - - - org.springframework.boot - spring-boot-devtools - - - - - - unpack-dependency-classes-install - install - - repackage - - - - id-build-info - process-resources - - build-info - - - - ${project.build.sourceEncoding} - ${project.reporting.outputEncoding} - ${maven.compiler.source} - ${maven.compiler.target} - - - - - - - com.dkanejs.maven.plugins - docker-compose-maven-plugin - - - org.apache.maven.plugins - maven-dependency-plugin - - compile - maven-plugin - test,provided - org.eclipse.aether,org.beanshell,org.apache.maven.plugins,org.apache.maven.scm,org.jruby,com.vladsch.flexmark,org.apache.maven.doxia,org.codehaus.plexus,org.apache.maven.scm,io.netty,org.apache.groovy,org.eclipse.jetty,org.mockito,org.asciidoctor,com.github.jnr,org.apache.maven.surefire,org.apache.maven,net.sourceforge.saxon,net.sf.saxon,com.github.spotbugs,org.eclipse.jgit,org.apache.ant,org.apache.velocity,org.junit.jupiter,org.junit.platform,junit,org.mockito,net.sourceforge.pmd,org.eclipse.sisu,org.ow2.asmcom.fasterxml.jackson.module, - jboss-transaction-api_1.2_spec,byte-buddy-agent,byte-buddy,backport9,backport-util-concurrent,spring-boot-configuration-processor,spring-boot-devtools,ganymed-ssh2,maven-toolchain,weld-probe-core,antlr,bsh,velocity-tools,liquibase-core,jruby-complete,cdi-api,lombok,jcommander,checkstyle,plexus-build-api - - - - copy-dependencies - package - - copy-dependencies - - - - - - org.apache.maven.plugins - maven-compiler-plugin - - ${java.version} - ${java.version} - ${project.build.sourceEncoding} - - -Xlint:all,-options,-path - - true - true - - - org.projectlombok - lombok - ${lombok.version} - - - - - - compile-classes - compile - - compile - testCompile - - - - - - org.apache.maven.plugins - maven-javadoc-plugin - - true - 1024m - ${java.version} - - - - org.apache.maven.plugins - maven-jxr-plugin - - true - - - - org.apache.maven.plugins - maven-clean-plugin - - - org.apache.maven.plugins - maven-install-plugin - - - org.apache.maven.plugins - maven-source-plugin - - - org.apache.maven.plugins - maven-site-plugin - - - org.apache.maven.plugins - maven-release-plugin - - v@{project.version} - - - - org.apache.maven.plugins - maven-deploy-plugin - - true - - - - org.apache.maven.plugins - maven-surefire-plugin - - ${skipTests} - - default - ${skipTests} - - - - - org.apache.maven.plugins - maven-surefire-report-plugin - - - org.apache.maven.plugins - maven-failsafe-plugin - - ${skipTests} - - default - ${skipTests} - - - - - org.asciidoctor - asciidoctor-maven-plugin - - - org.apache.maven.plugins - maven-project-info-reports-plugin - - - org.apache.maven.plugins - maven-checkstyle-plugin - - - com.github.spotbugs - spotbugs-maven-plugin - - - org.apache.maven.plugins - maven-pmd-plugin - - - - - - - - org.apache.maven.plugins - maven-enforcer-plugin - true - - - org.apache.maven.plugins - maven-invoker-plugin - true - - - org.springframework.boot - spring-boot-maven-plugin - true - - - com.dkanejs.maven.plugins - docker-compose-maven-plugin - - - org.apache.maven.plugins - maven-dependency-plugin - true - - - org.apache.maven.plugins - maven-compiler-plugin - true - - - org.apache.maven.plugins - maven-javadoc-plugin - - true - 1024m - ${java.version} - - - - org.apache.maven.plugins - maven-jxr-plugin - - true - - - - org.apache.maven.plugins - maven-clean-plugin - - - org.apache.maven.plugins - maven-install-plugin - - - org.apache.maven.plugins - maven-source-plugin - - - org.apache.maven.plugins - maven-site-plugin - - - org.apache.maven.plugins - maven-project-info-reports-plugin - - true - true - - - - org.apache.maven.plugins - maven-checkstyle-plugin - - true - true - true - false - false - - - - com.github.spotbugs - spotbugs-maven-plugin - - false - true - true - - - - org.apache.maven.plugins - maven-pmd-plugin - - 100 - ${java.version} - - target - - - - - org.apache.maven.plugins - maven-surefire-plugin - - ${skipTests} - - **/*Tests.java - **/*Test.java - - - **/Abstract*.java - - - default - ${skipTests} - - - - - org.apache.maven.plugins - maven-failsafe-plugin - - ${skipTests} - - default - ${skipTests} - - - - - org.apache.maven.plugins - maven-surefire-report-plugin - - ${skipTests} - ${skipTests} - - - - org.asciidoctor - asciidoctor-maven-plugin - - - + + + org.apache.maven.plugins + maven-enforcer-plugin + ${version.maven-enforcer-plugin} + maven-plugin + provided + + + org.apache.commons + commons-collections4 + 4.3 + provided + + + org.apache.maven.plugins + maven-invoker-plugin + ${version.maven-invoker-plugin} + maven-plugin + provided + + + commons-collections + commons-collections + + + + + com.dkanejs.maven.plugins + docker-compose-maven-plugin + ${version.docker-compose-maven-plugin} + maven-plugin + provided + + + org.apache.maven.plugins + maven-clean-plugin + ${version.maven-clean-plugin} + maven-plugin + provided + + + org.apache.maven.plugins + maven-dependency-plugin + ${version.maven-dependency-plugin} + maven-plugin + provided + + + commons-collections + commons-collections + + + + + org.apache.maven.plugins + maven-compiler-plugin + ${version.maven-compiler-plugin} + maven-plugin + provided + + + org.springframework.boot + spring-boot-maven-plugin + ${version.spring-boot-maven-plugin} + maven-plugin + provided + + + org.apache.maven.plugins + maven-site-plugin + ${version.maven-site-plugin} + maven-plugin + provided + + + org.apache.maven.plugins + maven-project-info-reports-plugin + ${version.maven-project-info-reports-plugin} + maven-plugin + provided + + + org.apache.maven.plugins + maven-jxr-plugin + ${version.maven-jxr-plugin} + maven-plugin + provided + + + org.apache.maven.plugins + maven-checkstyle-plugin + ${version.maven-checkstyle-plugin} + maven-plugin + provided + + + com.google.guava + guava + + + + + org.apache.maven.plugins + maven-pmd-plugin + ${version.maven-pmd-plugin} + maven-plugin + provided + + + com.beust + jcommander + + + + + net.sourceforge.pmd + pmd + ${version.maven-pmd-plugin.pmd} + pom + import + + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} + maven-plugin + provided + + + org.apache.maven.plugins + maven-surefire-report-plugin + ${version.maven-surefire-report-plugin} + maven-plugin + provided + + + org.asciidoctor + asciidoctor-maven-plugin + ${version.asciidoctor-maven-plugin} + maven-plugin + provided + + + org.apache.maven.plugins + maven-release-plugin + ${version.maven-release-plugin} + maven-plugin + provided + + + com.jcraft + jsch + + + + + org.apache.maven.plugins + maven-deploy-plugin + ${version.maven-deploy-plugin} + maven-plugin + provided + + + org.apache.maven.plugins + maven-install-plugin + ${version.maven-install-plugin} + maven-plugin + provided + + + org.apache.maven.plugins + maven-javadoc-plugin + ${version.maven-javadoc-plugin} + maven-plugin + provided + + + org.apache.maven.plugins + maven-source-plugin + ${version.maven-source-plugin} + maven-plugin + provided + + + - + + + org.projectlombok + lombok + provided + false + + + org.springframework.boot + spring-boot-devtools + provided + true + + + org.springframework.boot + spring-boot-configuration-processor + provided + true + + + org.springframework.boot + spring-boot-starter-actuator + + + org.springframework.boot + spring-boot-starter-data-jpa + + + org.springframework.boot + spring-boot-starter-jdbc + + + org.springframework.boot + spring-boot-starter-security + + + org.springframework.boot + spring-boot-starter-thymeleaf + + + nz.net.ultraq.thymeleaf + thymeleaf-layout-dialect + + + + + org.springframework.boot + spring-boot-starter-validation + + + org.springframework.boot + spring-boot-starter-mail + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-test + test + + + junit + junit + + + org.junit.vintage + junit-vintage-engine + + + + + org.springframework.boot + spring-boot-starter-logging + - - jar - - true - true - - - ${project.artifactId} - clean dependency:purge-local-repository install spring-boot:repackage - - + + org.springframework.security + spring-security-test + test + - - cloud - - true - true - - - ${project.artifactId} - clean dependency:list install spring-boot:repackage - - + + org.webjars + jquery + + + org.webjars + popper.js + + + org.webjars + bootstrap + + + org.webjars + font-awesome + + + org.thymeleaf + thymeleaf + + + org.slf4j + jul-to-slf4j + + + + + org.thymeleaf + thymeleaf-spring5 + + + org.thymeleaf.extras + thymeleaf-extras-java8time + + + org.thymeleaf.extras + thymeleaf-extras-springsecurity5 + + + com.github.mxab.thymeleaf.extras + thymeleaf-extras-data-attribute + + + io.github.jpenren + thymeleaf-spring-data-dialect + + + org.thymeleaf + thymeleaf-testing + test + + + javax.xml.bind + jaxb-api + + + org.postgresql + postgresql + + + net.sf.saxon + saxon-dom + + + com.zaxxer + HikariCP + - - test - - false - false - false - - - ${project.artifactId} - clean dependency:purge-local-repository dependency:list install spring-boot:repackage - - + + org.junit.jupiter + junit-jupiter-engine + test + + + org.junit.jupiter + junit-jupiter-api + test + + + + org.apache.maven.scm + maven-scm-provider-svnexe + provided + + + org.apache.maven.scm + maven-scm-provider-svn-commons + provided + + + org.apache.maven.scm + maven-scm-provider-gitexe + provided + + + org.apache.maven.scm + maven-scm-provider-git-commons + provided + + + org.apache.maven.scm + maven-scm-manager-plexus + provided + + + org.apache.maven.scm + maven-scm-client + provided + - - uml - - true - true - - - - - com.github.funthomas424242 - plantuml-maven-plugin - ${version.plantuml-maven-plugin} + + org.apache.maven.plugins + maven-enforcer-plugin maven-plugin - - - javax.enterprise - cdi-api - - - - - net.sourceforge.plantuml - plantuml - ${version.net.sourceforge.plantuml} - runtime - - - - + provided + + + org.apache.commons + commons-collections4 + provided + + + org.apache.maven.plugins + maven-invoker-plugin + maven-plugin + provided + + + com.dkanejs.maven.plugins + docker-compose-maven-plugin + maven-plugin + provided + + + org.apache.maven.plugins + maven-clean-plugin + maven-plugin + provided + + + org.apache.maven.plugins + maven-dependency-plugin + maven-plugin + provided + + + org.apache.maven.plugins + maven-compiler-plugin + maven-plugin + provided + + + org.springframework.boot + spring-boot-maven-plugin + maven-plugin + provided + + + org.apache.maven.plugins + maven-site-plugin + maven-plugin + provided + + + org.apache.maven.plugins + maven-project-info-reports-plugin + maven-plugin + provided + - com.github.funthomas424242 - plantuml-maven-plugin - maven-plugin + org.apache.maven.plugins + maven-jxr-plugin + maven-plugin + provided + + + org.apache.maven.plugins + maven-checkstyle-plugin + maven-plugin + provided + + + org.apache.maven.plugins + maven-pmd-plugin + maven-plugin + provided + + + org.apache.maven.plugins + maven-surefire-plugin + maven-plugin + provided + + + org.apache.maven.plugins + maven-surefire-report-plugin + maven-plugin + provided - net.sourceforge.plantuml - plantuml - runtime + org.asciidoctor + asciidoctor-maven-plugin + maven-plugin + provided - - - clean com.github.funthomas424242:plantuml-maven-plugin:generate + + org.apache.maven.plugins + maven-release-plugin + maven-plugin + provided + + + org.apache.maven.plugins + maven-deploy-plugin + maven-plugin + provided + + + org.apache.maven.plugins + maven-install-plugin + maven-plugin + provided + + + org.apache.maven.plugins + maven-javadoc-plugin + maven-plugin + provided + + + org.apache.maven.plugins + maven-source-plugin + maven-plugin + provided + + + + + ${project.artifactId} + clean package liquibase:validate liquibase:update spring-boot:run + + + + org.apache.maven.plugins + maven-enforcer-plugin + ${version.maven-enforcer-plugin} + + + org.apache.maven.plugins + maven-invoker-plugin + ${version.maven-invoker-plugin} + + + com.dkanejs.maven.plugins + docker-compose-maven-plugin + ${version.docker-compose-maven-plugin} + + + maven-docker-up + test-compile + + up + + + ${docker-compose-maven-plugin.composeFile} + ${docker-compose-maven-plugin.verbose} + ${docker-compose-maven-plugin.removeImages} + ${docker-compose-maven-plugin.removeVolumes} + ${docker-compose-maven-plugin.ignorePullFailures} + + ${docker-compose-maven-plugin.detachedMode} + ${docker-compose-maven-plugin.projectName} + + + + maven-docker-down + pre-site + + down + + + ${docker-compose-maven-plugin.composeFile} + ${docker-compose-maven-plugin.verbose} + ${docker-compose-maven-plugin.removeImages} + ${docker-compose-maven-plugin.removeVolumes} + ${docker-compose-maven-plugin.ignorePullFailures} + + ${docker-compose-maven-plugin.detachedMode} + ${docker-compose-maven-plugin.projectName} + + + + + + org.apache.maven.plugins + maven-clean-plugin + ${version.maven-clean-plugin} + + + org.apache.maven.plugins + maven-dependency-plugin + ${version.maven-dependency-plugin} + + + org.apache.maven.plugins + maven-compiler-plugin + ${version.maven-compiler-plugin} + + + org.springframework.boot + spring-boot-maven-plugin + ${version.spring-boot-maven-plugin} + + + org.apache.maven.plugins + maven-install-plugin + ${version.maven-install-plugin} + + + org.apache.maven.plugins + maven-project-info-reports-plugin + ${version.maven-project-info-reports-plugin} + + + org.apache.maven.plugins + maven-jxr-plugin + ${version.maven-jxr-plugin} + + + org.apache.maven.plugins + maven-checkstyle-plugin + ${version.maven-checkstyle-plugin} + + + com.puppycrawl.tools + checkstyle + ${version.maven-checkstyle-plugin.checkstyle} + + + + + com.github.spotbugs + spotbugs-maven-plugin + ${version.spotbugs-maven-plugin} + + + + + + org.apache.maven.plugins + maven-surefire-plugin + ${version.maven-surefire-plugin} + + + org.apache.maven.plugins + maven-surefire-report-plugin + ${version.maven-surefire-report-plugin} + + + org.apache.maven.plugins + maven-release-plugin + ${version.maven-release-plugin} + + + org.asciidoctor + asciidoctor-maven-plugin + ${version.asciidoctor-maven-plugin} + + + org.apache.maven.plugins + maven-javadoc-plugin + ${version.maven-javadoc-plugin} + + + org.apache.maven.plugins + maven-pmd-plugin + ${version.maven-pmd-plugin} + + + net.sourceforge.pmd + pmd-core + ${pmdVersion} + compile + + + net.sourceforge.pmd + pmd-java + ${pmdVersion} + compile + + + net.sourceforge.pmd + pmd-javascript + ${pmdVersion} + compile + + + net.sourceforge.pmd + pmd-jsp + ${pmdVersion} + compile + + + + + org.apache.maven.plugins + maven-source-plugin + ${version.maven-source-plugin} + + + org.apache.maven.plugins + maven-site-plugin + ${version.maven-site-plugin} + + + org.apache.maven.plugins + maven-deploy-plugin + ${version.maven-deploy-plugin} + + + org.apache.maven.plugins + maven-failsafe-plugin + ${version.maven-failsafe-plugin} + + + + + + org.apache.maven.plugins + maven-enforcer-plugin + + + enforce-versions + + enforce + + + + + ERROR + + org.apache.maven.plugins:maven-verifier-plugin + + + Please consider using the maven-invoker-plugin + (http://maven.apache.org/plugins/maven-invoker-plugin/)! + + + + ${version.maven} + + + ${version.java} + + + + ${project.basedir}/README.md + ${project.basedir}/LICENSE.txt + ${project.basedir}/app.json + ${project.basedir}/_config.yml + ${project.basedir}/Procfile + ${project.basedir}/src/site/markdown/index.md + ${project.basedir}/src/site/markdown/CHANGELOG.md + ${project.basedir}/src/site/markdown/DEPLOYMENTS.md + ${project.basedir}/src/site/markdown/DEVELOPMENT.md + ${project.basedir}/src/site/markdown/HOWTO.md + ${project.basedir}/src/site/markdown/MAVEN_PLUGINS.md + ${project.basedir}/src/site/markdown/REQUIREMENTS_NONFUNCTIONAL.md + ${project.basedir}/src/site/markdown/TODO.md + ${project.basedir}/src/site/site.xml + ${project.basedir}/build.sh + ${project.basedir}/etc/run.sh + ${project.basedir}/etc/bash/psql.sh + ${project.basedir}/etc/docker-start.sh + ${project.basedir}/etc/docker-stop.sh + ${project.basedir}/docker-compose.yml + ${project.basedir}/etc/sql/db-createdb-and-user-linux.sql + ${project.basedir}/etc/sql/db-createdb-and-user-win10.sql + ${project.basedir}/liquibase.properties + + + + + + + + + org.apache.maven.plugins + maven-invoker-plugin + + + integration-test + + install + run + + + src/it/settings.xml + ${project.build.directory}/it + ${project.build.directory}/it-repo + verify + + + + + + org.springframework.boot + spring-boot-maven-plugin + + JAR + true + true + + org.eclipse.aether,org.beanshell,org.apache.maven.plugins,org.apache.maven.scm,org.jruby,com.vladsch.flexmark,org.apache.maven.doxia,org.codehaus.plexus,org.apache.maven.scm,io.netty,org.apache.groovy,org.eclipse.jetty,org.mockito,org.asciidoctor,com.github.jnr,org.apache.maven.surefire,org.apache.maven,net.sourceforge.saxon,net.sf.saxon,com.github.spotbugs,org.eclipse.jgit,org.apache.ant,org.apache.velocity,org.junit.jupiter,org.junit.platform,junit,org.mockito,net.sourceforge.pmd,org.eclipse.sisu,org.ow2.asmcom.fasterxml.jackson.module + + + + org.springframework.boot + spring-boot-configuration-processor + + + org.springframework.boot + spring-boot-devtools + + + + + + unpack-dependency-classes-install + install + + repackage + + + + id-build-info + process-resources + + build-info + + + + ${project.build.sourceEncoding} + ${project.reporting.outputEncoding} + ${maven.compiler.source} + ${maven.compiler.target} + + + + + + + org.apache.maven.plugins + maven-dependency-plugin + + compile + maven-plugin + test,provided + + org.eclipse.aether,org.beanshell,org.apache.maven.plugins,org.apache.maven.scm,org.jruby,com.vladsch.flexmark,org.apache.maven.doxia,org.codehaus.plexus,org.apache.maven.scm,io.netty,org.apache.groovy,org.eclipse.jetty,org.mockito,org.asciidoctor,com.github.jnr,org.apache.maven.surefire,org.apache.maven,net.sourceforge.saxon,net.sf.saxon,com.github.spotbugs,org.eclipse.jgit,org.apache.ant,org.apache.velocity,org.junit.jupiter,org.junit.platform,junit,org.mockito,net.sourceforge.pmd,org.eclipse.sisu,org.ow2.asmcom.fasterxml.jackson.module, + + + jboss-transaction-api_1.2_spec,byte-buddy-agent,byte-buddy,backport9,backport-util-concurrent,spring-boot-configuration-processor,spring-boot-devtools,ganymed-ssh2,maven-toolchain,weld-probe-core,antlr,bsh,velocity-tools,liquibase-core,jruby-complete,cdi-api,lombok,jcommander,checkstyle,plexus-build-api + + + + + copy-dependencies + package + + copy-dependencies + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + ${version.java} + ${version.java} + ${project.build.sourceEncoding} + + -Xlint:all,-options,-path + + true + true + + + org.projectlombok + lombok + ${lombok.version} + + + + + + compile-classes + compile + + compile + testCompile + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + + true + ${version.java} + false + false + + + + org.apache.maven.plugins + maven-jxr-plugin + + true + + + + org.apache.maven.plugins + maven-clean-plugin + + + org.apache.maven.plugins + maven-install-plugin + + + org.apache.maven.plugins + maven-source-plugin + + + org.apache.maven.plugins + maven-site-plugin + + + org.apache.maven.plugins + maven-release-plugin + + v@{project.version} + + + + org.apache.maven.plugins + maven-deploy-plugin + + true + + + + org.apache.maven.plugins + maven-surefire-plugin + + ${skipTests} + + default + ${skipTests} + + + + + org.apache.maven.plugins + maven-surefire-report-plugin + + + org.apache.maven.plugins + maven-failsafe-plugin + + ${skipTests} + + default + ${skipTests} + + + + + org.asciidoctor + asciidoctor-maven-plugin + + + org.apache.maven.plugins + maven-project-info-reports-plugin + + + org.apache.maven.plugins + maven-checkstyle-plugin + + + com.puppycrawl.tools + checkstyle + ${version.maven-checkstyle-plugin.checkstyle} + + + + + com.github.spotbugs + spotbugs-maven-plugin + + true + target/site + + + + org.apache.maven.plugins + maven-pmd-plugin + + + org.liquibase + liquibase-maven-plugin + + liquibase.properties + + + + org.postgresql + postgresql + ${version.org.postgresql} + + + + + + + - - com.github.funthomas424242 - plantuml-maven-plugin - ${version.plantuml-maven-plugin} - - src/main/* - - ${basedir} - - src/main/plantuml/**/*.puml - - - + + org.apache.maven.plugins + maven-enforcer-plugin + true + + + org.apache.maven.plugins + maven-invoker-plugin + true + + + org.springframework.boot + spring-boot-maven-plugin + true + + + org.apache.maven.plugins + maven-dependency-plugin + true + + + org.apache.maven.plugins + maven-compiler-plugin + true + + + org.apache.maven.plugins + maven-javadoc-plugin + + true + ${version.java} + false + false + + + + org.apache.maven.plugins + maven-jxr-plugin + + true + + + + org.apache.maven.plugins + maven-clean-plugin + + + org.apache.maven.plugins + maven-install-plugin + + + org.apache.maven.plugins + maven-source-plugin + + + org.apache.maven.plugins + maven-site-plugin + + + org.apache.maven.plugins + maven-project-info-reports-plugin + + true + true + + + + org.apache.maven.plugins + maven-checkstyle-plugin + + true + true + true + false + false + + + + com.github.spotbugs + spotbugs-maven-plugin + + false + true + true + + + + org.apache.maven.plugins + maven-pmd-plugin + + 100 + ${version.java} + + target + + + + + org.apache.maven.plugins + maven-surefire-plugin + + ${skipTests} + + **/*Tests.java + **/*Test.java + + + **/Abstract*.java + + + default + ${skipTests} + + + + + org.apache.maven.plugins + maven-failsafe-plugin + + ${skipTests} + + default + ${skipTests} + + + + + org.apache.maven.plugins + maven-surefire-report-plugin + + ${skipTests} + ${skipTests} + + + + org.asciidoctor + asciidoctor-maven-plugin + + + + + + + + + run + + true + + + true + true + true + + + ${project.artifactId} + clean install spring-boot:run + + + + + build + + false + + + false + false + false + + + ${project.artifactId} + + clean dependency:purge-local-repository dependency:resolve dependency:resolve-plugins dependency:sources install spring-boot:repackage site site:deploy + + + + + + jar + + false + + + true + true + true + + + ${project.artifactId} + + clean dependency:purge-local-repository dependency:resolve dependency:resolve-plugins dependency:sources install spring-boot:repackage + + + + + + docker + + false + + + false + false + false + + + ${project.artifactId} + clean dependency:purge-local-repository install spring-boot:repackage + + + com.dkanejs.maven.plugins + docker-compose-maven-plugin + + + + + + + cloud + + false + + + true + true + + + ${project.artifactId} + clean dependency:list install spring-boot:repackage + + + + + test + + false + + + false + false + false + + + ${project.artifactId} + clean dependency:purge-local-repository dependency:list install spring-boot:repackage + + + + + + uml + + false + + + true + true + true + + + + + com.github.funthomas424242 + plantuml-maven-plugin + ${version.plantuml-maven-plugin} + maven-plugin + + + javax.enterprise + cdi-api + + + + + net.sourceforge.plantuml + plantuml + ${version.plantuml-maven-plugin.plantuml} + runtime + + + - - net.sourceforge.plantuml - plantuml - ${version.net.sourceforge.plantuml} - runtime - + + com.github.funthomas424242 + plantuml-maven-plugin + maven-plugin + + + net.sourceforge.plantuml + plantuml + runtime + - - - - + + clean com.github.funthomas424242:plantuml-maven-plugin:generate + + + com.github.funthomas424242 + plantuml-maven-plugin + ${version.plantuml-maven-plugin} + + src/* + + ${basedir} + + src/plantuml/**/*.puml + + + + + + net.sourceforge.plantuml + plantuml + ${version.plantuml-maven-plugin.plantuml} + runtime + + + + + + - + diff --git a/site.sh b/site.sh new file mode 100755 index 00000000..e24cc000 --- /dev/null +++ b/site.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +#source src/main/bash/setenv.sh +source ~/.bash_aliases_simpleworklist + +./mvnw site site:deploy diff --git a/src/main/java/org/woehlke/java/simpleworklist/config/WebSecurityConfig.java b/src/main/java/org/woehlke/java/simpleworklist/config/WebSecurityConfig.java index 4234fa82..918e1528 100644 --- a/src/main/java/org/woehlke/java/simpleworklist/config/WebSecurityConfig.java +++ b/src/main/java/org/woehlke/java/simpleworklist/config/WebSecurityConfig.java @@ -5,89 +5,50 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; import org.springframework.data.jpa.repository.config.EnableJpaAuditing; import org.springframework.data.web.config.EnableSpringDataWebSupport; -import org.springframework.http.HttpMethod; import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.security.authentication.AuthenticationManager; -import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; -import org.springframework.security.config.annotation.web.WebSecurityConfigurer; +import org.springframework.security.authentication.AuthenticationProvider; +import org.springframework.security.authentication.dao.DaoAuthenticationProvider; +import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity; import org.springframework.security.config.annotation.web.builders.HttpSecurity; -import org.springframework.security.config.annotation.web.builders.WebSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; -import org.springframework.security.web.authentication.AuthenticationSuccessHandler; -import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; +import org.springframework.security.web.SecurityFilterChain; import org.springframework.web.servlet.config.annotation.EnableWebMvc; -import org.woehlke.java.simpleworklist.domain.security.access.ApplicationUserDetailsService; +import org.woehlke.java.simpleworklist.domain.security.access.ApplicationUserDetailsService; @Configuration @EnableAsync @EnableJpaAuditing @EnableWebMvc @EnableSpringDataWebSupport -@EnableWebSecurity @ImportAutoConfiguration({ WebMvcConfig.class }) @EnableConfigurationProperties({ SimpleworklistProperties.class }) -public class WebSecurityConfig extends WebSecurityConfigurerAdapter implements WebSecurityConfigurer { +@EnableWebSecurity +@EnableMethodSecurity(securedEnabled = true) +public class WebSecurityConfig { - private final AuthenticationManagerBuilder authenticationManagerBuilder; - private final AuthenticationSuccessHandler authenticationSuccessHandler; private final ApplicationUserDetailsService applicationUserDetailsService; private final SimpleworklistProperties simpleworklistProperties; @Autowired public WebSecurityConfig( - AuthenticationManagerBuilder auth, - AuthenticationSuccessHandler authenticationSuccessHandler, ApplicationUserDetailsService applicationUserDetailsService, - SimpleworklistProperties simpleworklistProperties) { - this.authenticationManagerBuilder = auth; - this.authenticationSuccessHandler = authenticationSuccessHandler; + SimpleworklistProperties simpleworklistProperties + ) { this.applicationUserDetailsService = applicationUserDetailsService; this.simpleworklistProperties = simpleworklistProperties; } - @Override - protected void configure(HttpSecurity http) throws Exception { - http - .headers() - .disable() - .authorizeRequests() - .antMatchers(HttpMethod.GET,simpleworklistProperties.getWebSecurity().getAntPatternsPublic()) - .permitAll() - .anyRequest() - .fullyAuthenticated() - .and() - .csrf() - .and() - .formLogin() - .loginPage(simpleworklistProperties.getWebSecurity().getLoginPage()) - .usernameParameter(simpleworklistProperties.getWebSecurity().getUsernameParameter()) - .passwordParameter(simpleworklistProperties.getWebSecurity().getPasswordParameter()) - .loginProcessingUrl(simpleworklistProperties.getWebSecurity().getLoginProcessingUrl()) - .failureForwardUrl(simpleworklistProperties.getWebSecurity().getFailureForwardUrl()) - .defaultSuccessUrl(simpleworklistProperties.getWebSecurity().getDefaultSuccessUrl()) - //.successHandler(authenticationSuccessHandler) - .permitAll() - .and() - .csrf() - .and() - .logout() - .logoutUrl(simpleworklistProperties.getWebSecurity().getLogoutUrl()) - .deleteCookies(simpleworklistProperties.getWebSecurity().getCookieNamesToClear()) - .invalidateHttpSession(simpleworklistProperties.getWebSecurity().getInvalidateHttpSession()) - .permitAll(); - } - @Bean public UserDetailsService userDetailsService(){ return this.applicationUserDetailsService; @@ -104,17 +65,46 @@ public PasswordEncoder encoder(){ } @Bean - public AuthenticationManager authenticationManager() throws Exception { - return authenticationManagerBuilder - .userDetailsService(userDetailsService()) - .passwordEncoder(encoder()).and().build(); + public AuthenticationProvider authenticationProvider(){ + DaoAuthenticationProvider d = new DaoAuthenticationProvider(); + d.setPasswordEncoder(encoder()); + d.setUserDetailsService(userDetailsService()); + return d; } @Bean - public UsernamePasswordAuthenticationFilter authenticationFilter() throws Exception { - UsernamePasswordAuthenticationFilter filter = new UsernamePasswordAuthenticationFilter(); - filter.setAuthenticationManager(authenticationManager()); - filter.setFilterProcessesUrl(simpleworklistProperties.getWebSecurity().getLoginProcessingUrl()); - return filter; + public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { + http + .headers((headers) -> headers.disable() ) + .authorizeRequests((authorizeRequests) -> authorizeRequests + .antMatchers( + simpleworklistProperties.getWebSecurity().getAntPatternsPublic() + ) + .permitAll() + .anyRequest() + .fullyAuthenticated() + ) + .csrf() + .and() + .formLogin((formLogin) -> formLogin + .loginPage(simpleworklistProperties.getWebSecurity().getLoginPage()) + .usernameParameter(simpleworklistProperties.getWebSecurity().getUsernameParameter()) + .passwordParameter(simpleworklistProperties.getWebSecurity().getPasswordParameter()) + .loginProcessingUrl(simpleworklistProperties.getWebSecurity().getLoginProcessingUrl()) + .failureForwardUrl(simpleworklistProperties.getWebSecurity().getFailureForwardUrl()) + .defaultSuccessUrl(simpleworklistProperties.getWebSecurity().getDefaultSuccessUrl()) + //.successHandler(authenticationSuccessHandler) + .permitAll() + ) + .csrf() + .and() + .logout((logout) -> logout + .logoutUrl(simpleworklistProperties.getWebSecurity().getLogoutUrl()) + .deleteCookies(simpleworklistProperties.getWebSecurity().getCookieNamesToClear()) + .invalidateHttpSession(simpleworklistProperties.getWebSecurity().getInvalidateHttpSession()) + .permitAll() + ); + return http.build(); } + } diff --git a/src/main/java/org/woehlke/java/simpleworklist/domain/PagesController.java b/src/main/java/org/woehlke/java/simpleworklist/domain/PagesController.java index caed59aa..b0c3f288 100644 --- a/src/main/java/org/woehlke/java/simpleworklist/domain/PagesController.java +++ b/src/main/java/org/woehlke/java/simpleworklist/domain/PagesController.java @@ -21,7 +21,7 @@ public final String renderPageInformation( @NotNull @ModelAttribute("userSession") UserSessionBean userSession, Locale locale, Model model ) { - log.info("addNewTaskToInboxGet"); + log.info("renderPageInformation"); return "pages/information"; } } diff --git a/src/main/java/org/woehlke/java/simpleworklist/domain/ProjectIdController.java b/src/main/java/org/woehlke/java/simpleworklist/domain/ProjectIdController.java index 69fa46a4..6c9d5202 100644 --- a/src/main/java/org/woehlke/java/simpleworklist/domain/ProjectIdController.java +++ b/src/main/java/org/woehlke/java/simpleworklist/domain/ProjectIdController.java @@ -46,7 +46,13 @@ public class ProjectIdController extends AbstractController { private final BreadcrumbService breadcrumbService; @Autowired - public ProjectIdController(ProjectControllerService projectControllerService, TaskMoveService taskMoveService, TaskService taskService, ContextService contextService, BreadcrumbService breadcrumbService) { + public ProjectIdController( + ProjectControllerService projectControllerService, + TaskMoveService taskMoveService, + TaskService taskService, + ContextService contextService, + BreadcrumbService breadcrumbService + ) { this.projectControllerService = projectControllerService; this.taskMoveService = taskMoveService; this.taskService = taskService; diff --git a/src/main/java/org/woehlke/java/simpleworklist/domain/ProjectIdTaskController.java b/src/main/java/org/woehlke/java/simpleworklist/domain/ProjectIdTaskController.java index 2921be64..dee81f45 100644 --- a/src/main/java/org/woehlke/java/simpleworklist/domain/ProjectIdTaskController.java +++ b/src/main/java/org/woehlke/java/simpleworklist/domain/ProjectIdTaskController.java @@ -41,7 +41,13 @@ public class ProjectIdTaskController extends AbstractController { private final ContextService contextService; @Autowired - public ProjectIdTaskController(ProjectControllerService projectControllerService, ProjectService projectService, TaskLifecycleService taskLifecycleService, BreadcrumbService breadcrumbService, ContextService contextService) { + public ProjectIdTaskController( + ProjectControllerService projectControllerService, + ProjectService projectService, + TaskLifecycleService taskLifecycleService, + BreadcrumbService breadcrumbService, + ContextService contextService + ) { this.projectControllerService = projectControllerService; this.projectService = projectService; this.taskLifecycleService = taskLifecycleService; diff --git a/src/main/java/org/woehlke/java/simpleworklist/domain/ProjectRootTaskController.java b/src/main/java/org/woehlke/java/simpleworklist/domain/ProjectRootTaskController.java index 54e74bb8..8af46e90 100644 --- a/src/main/java/org/woehlke/java/simpleworklist/domain/ProjectRootTaskController.java +++ b/src/main/java/org/woehlke/java/simpleworklist/domain/ProjectRootTaskController.java @@ -43,7 +43,11 @@ public class ProjectRootTaskController extends AbstractController { private final BreadcrumbService breadcrumbService; @Autowired - public ProjectRootTaskController(ProjectControllerService projectControllerService, TaskLifecycleService taskLifecycleService, BreadcrumbService breadcrumbService) { + public ProjectRootTaskController( + ProjectControllerService projectControllerService, + TaskLifecycleService taskLifecycleService, + BreadcrumbService breadcrumbService + ) { this.projectControllerService = projectControllerService; this.taskLifecycleService = taskLifecycleService; this.breadcrumbService = breadcrumbService; @@ -54,7 +58,9 @@ public final String projectRootTaskAddGet( @ModelAttribute("userSession") UserSessionBean userSession, Locale locale, Model model ) { + log.info("------------------------------------------------------"); log.info("/project/root/add/task (GET)"); + log.info("------------------------------------------------------"); Context context = super.getContext(userSession); UserAccount userAccount = context.getUserAccount(); Task thisTask = new Task(); @@ -62,28 +68,29 @@ public final String projectRootTaskAddGet( thisTask.setTaskEnergy(TaskEnergy.NONE); thisTask.setTaskTime(TaskTime.NONE); thisTask.unsetFocus(); - Project thisProject; Boolean mustChooseContext = false; - thisProject = new Project(); - thisProject.setId(0L); + Context projectsContext; if(userSession.getLastContextId() == 0L){ mustChooseContext = true; - thisTask.setContext(userAccount.getDefaultContext()); - thisProject.setContext(userAccount.getDefaultContext()); + projectsContext = userAccount.getDefaultContext(); } else { - thisTask.setContext(context); - thisProject.setContext(context); + projectsContext = context; } + Project thisProject = Project.getRootProject(projectsContext); + thisTask.setContext(projectsContext); + List rootProjects = projectControllerService.findRootProjectsByContext(context); Breadcrumb breadcrumb = breadcrumbService.getBreadcrumbForShoProjectId(thisProject,locale,userSession); model.addAttribute("breadcrumb", breadcrumb); - model.addAttribute("mustChooseContext", mustChooseContext); //TODO: rename mustChooseArea -> mustChooseContext - model.addAttribute("thisProject", thisProject); + //TODO: rename mustChooseArea -> mustChooseContext + model.addAttribute("mustChooseContext", mustChooseContext); + model.addAttribute("thisProject", null); model.addAttribute("thisProjectId", thisProject.getId()); model.addAttribute("breadcrumb", breadcrumb); model.addAttribute("task", thisTask); model.addAttribute("userSession", userSession); model.addAttribute("taskstateType",PROJECTS.getSlug()); model.addAttribute("dataPage", true); + model.addAttribute("rootProjects",rootProjects); return "project/root/task/add"; } @@ -95,7 +102,9 @@ public final String projectRootTaskAddPost( Locale locale, Model model ) { + log.info("------------------------------------------------------"); log.info("/project/root/task/add (POST)"); + log.info("------------------------------------------------------"); Context context = super.getContext(userSession); model.addAttribute("dataPage", true); model.addAttribute("addProjectToTask", false); @@ -107,10 +116,14 @@ public final String projectRootTaskAddPost( Boolean mustChooseArea = false; task.setContext(context); Breadcrumb breadcrumb = breadcrumbService.getBreadcrumbForTaskstate(TaskState.INBOX,locale,userSession); + List rootProjects = projectControllerService.findRootProjectsByContext(context); + Project thisProject = null; model.addAttribute("mustChooseArea", mustChooseArea); model.addAttribute("breadcrumb", breadcrumb); model.addAttribute("task", task); model.addAttribute("userSession", userSession); + model.addAttribute("thisProject", thisProject); + model.addAttribute("rootProjects", rootProjects); return "project/root/task/add"; } else { task.setContext(context); @@ -127,13 +140,15 @@ public final String editTaskGet( @ModelAttribute("userSession") UserSessionBean userSession, Locale locale, Model model ) { + log.info("------------------------------------------------------"); log.info("editTaskGet"); + log.info("------------------------------------------------------"); List contexts = super.getContexts(); Context thisContext = thisTask.getContext(); Project thisProject = taskLifecycleService.addProjectFromTaskToModel( thisTask, model ); Breadcrumb breadcrumb = breadcrumbService.getBreadcrumbForTaskstate(thisTask.getTaskState(),locale,userSession); model.addAttribute("breadcrumb", breadcrumb); - model.addAttribute("thisProject", thisProject); //TODO: remove? + model.addAttribute("thisProject", thisProject); model.addAttribute("thisContext", thisContext); model.addAttribute("task", thisTask); model.addAttribute("contexts", contexts); @@ -153,7 +168,9 @@ public final String editTaskPost( Locale locale, Model model ) { + log.info("------------------------------------------------------"); log.info("editTaskPost"); + log.info("------------------------------------------------------"); model.addAttribute("taskstateType",PROJECTS.getSlug()); model.addAttribute("dataPage", true); model.addAttribute("addProjectToTask", true); @@ -168,7 +185,9 @@ public final String editTaskPost( result.addError(error); } if (result.hasErrors() ) { + log.info("------------------------------------------------------"); log.warn("result.hasErrors"); + log.info("------------------------------------------------------"); for (ObjectError e : result.getAllErrors()) { log.warn(e.toString()); } @@ -231,7 +250,9 @@ public final String deleteTaskGet( @ModelAttribute("userSession") UserSessionBean userSession, Model model ) { + log.info("------------------------------------------------------"); log.info("deleteTaskGet"); + log.info("------------------------------------------------------"); if(task!= null){ task.delete(); taskLifecycleService.updatedViaProjectRoot(task); @@ -251,7 +272,9 @@ public final String undeleteTaskGet( @ModelAttribute("userSession") UserSessionBean userSession, Model model ) { + log.info("------------------------------------------------------"); log.info("undeleteTaskGet"); + log.info("------------------------------------------------------"); task.undelete(); taskLifecycleService.updatedViaProjectRoot(task); userSession.setLastProjectId(Project.rootProjectId); diff --git a/src/main/java/org/woehlke/java/simpleworklist/domain/TaskLifecycleController.java b/src/main/java/org/woehlke/java/simpleworklist/domain/TaskLifecycleController.java index 8f4921e9..28d4a6a9 100644 --- a/src/main/java/org/woehlke/java/simpleworklist/domain/TaskLifecycleController.java +++ b/src/main/java/org/woehlke/java/simpleworklist/domain/TaskLifecycleController.java @@ -42,7 +42,11 @@ public class TaskLifecycleController extends AbstractController { private final ContextService contextService; @Autowired - public TaskLifecycleController(TaskLifecycleService taskLifecycleService, BreadcrumbService breadcrumbService, ContextService contextService) { + public TaskLifecycleController( + TaskLifecycleService taskLifecycleService, + BreadcrumbService breadcrumbService, + ContextService contextService + ) { this.taskLifecycleService = taskLifecycleService; this.breadcrumbService = breadcrumbService; this.contextService = contextService; diff --git a/src/main/java/org/woehlke/java/simpleworklist/domain/TaskMoveController.java b/src/main/java/org/woehlke/java/simpleworklist/domain/TaskMoveController.java index b80e6835..c32c83c8 100644 --- a/src/main/java/org/woehlke/java/simpleworklist/domain/TaskMoveController.java +++ b/src/main/java/org/woehlke/java/simpleworklist/domain/TaskMoveController.java @@ -107,6 +107,19 @@ public final String moveTaskToWaiting( return task.getTaskState().getUrlPathRedirect(); } + @RequestMapping(path = "/{taskId}/move/to/taskstate/scheduled", method = RequestMethod.GET) + public final String moveTaskToScheduled( + @NotNull @PathVariable("taskId") Task task, + @NotNull @ModelAttribute("userSession") UserSessionBean userSession, + Model model + ) { + log.info("dragged and dropped "+task.getId()+" to scheduled"); + task = taskMoveService.moveTaskToScheduled(task); + model.addAttribute("userSession", userSession); + model.addAttribute("dataPage", true); + return task.getTaskState().getUrlPathRedirect(); + } + @RequestMapping(path = "/{taskId}/move/to/taskstate/someday", method = RequestMethod.GET) public final String moveTaskToSomeday( @NotNull @PathVariable("taskId") Task task, diff --git a/src/main/java/org/woehlke/java/simpleworklist/domain/UserChatMessageController.java b/src/main/java/org/woehlke/java/simpleworklist/domain/UserChatMessageController.java index a3ee9c95..d0e4ad97 100644 --- a/src/main/java/org/woehlke/java/simpleworklist/domain/UserChatMessageController.java +++ b/src/main/java/org/woehlke/java/simpleworklist/domain/UserChatMessageController.java @@ -41,7 +41,10 @@ public class UserChatMessageController extends AbstractController { private final BreadcrumbService breadcrumbService; @Autowired - public UserChatMessageController(UserChatMessageControllerService userChatMessageControllerService, BreadcrumbService breadcrumbService) { + public UserChatMessageController( + UserChatMessageControllerService userChatMessageControllerService, + BreadcrumbService breadcrumbService + ) { this.userChatMessageControllerService = userChatMessageControllerService; this.breadcrumbService = breadcrumbService; } @@ -69,9 +72,8 @@ public final String getLastMessagesBetweenCurrentAndOtherUser( log.info(chatMessageForm.toString()); log.info("-----------------------------------------------------------------------------------------------"); log.info("Page user2UserMessagePage"); - Page user2UserMessagePage = userChatMessageControllerService.readAllMessagesBetweenCurrentAndOtherUser( - thisUser, otherUser, request - ); + Page user2UserMessagePage = + userChatMessageControllerService.readAllMessagesBetweenCurrentAndOtherUser(thisUser, otherUser, request); for (UserAccountChatMessage o : user2UserMessagePage) { log.info(o.toString()); } @@ -112,7 +114,8 @@ public final String sendNewMessageToOtherUser( for (ObjectError objectError : result.getAllErrors()) { log.info("result.hasErrors: " + objectError.toString()); } - Page user2UserMessagePage = userChatMessageControllerService.readAllMessagesBetweenCurrentAndOtherUser(thisUser, otherUser, request); + Page user2UserMessagePage = + userChatMessageControllerService.readAllMessagesBetweenCurrentAndOtherUser(thisUser, otherUser, request); model.addAttribute("otherUser", otherUser); model.addAttribute("user2UserMessagePage", user2UserMessagePage); model.addAttribute("userSession", userSession); diff --git a/src/main/java/org/woehlke/java/simpleworklist/domain/UserPasswordRecoveryController.java b/src/main/java/org/woehlke/java/simpleworklist/domain/UserPasswordRecoveryController.java index 9820e3d4..f58f1573 100644 --- a/src/main/java/org/woehlke/java/simpleworklist/domain/UserPasswordRecoveryController.java +++ b/src/main/java/org/woehlke/java/simpleworklist/domain/UserPasswordRecoveryController.java @@ -1,6 +1,7 @@ package org.woehlke.java.simpleworklist.domain; import lombok.extern.slf4j.Slf4j; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; @@ -28,7 +29,10 @@ public class UserPasswordRecoveryController { private final UserAccountPasswordRecoveryService userAccountPasswordRecoveryService; @Autowired - public UserPasswordRecoveryController(UserAccountService userAccountService, UserAccountPasswordRecoveryService userAccountPasswordRecoveryService) { + public UserPasswordRecoveryController( + UserAccountService userAccountService, + UserAccountPasswordRecoveryService userAccountPasswordRecoveryService + ) { this.userAccountService = userAccountService; this.userAccountPasswordRecoveryService = userAccountPasswordRecoveryService; } @@ -40,6 +44,7 @@ public UserPasswordRecoveryController(UserAccountService userAccountService, Use * @param model * @return a Formular for entering the email-adress. */ + @PreAuthorize("isAnonymous()") @RequestMapping(path="/resetPassword", method = RequestMethod.GET) public final String passwordForgottenForm(Model model) { UserAccountRegistrationForm userAccountRegistrationForm = new UserAccountRegistrationForm(); @@ -55,6 +60,7 @@ public final String passwordForgottenForm(Model model) { * @param model * @return info page if without errors or formular again displaying error messages. */ + @PreAuthorize("isAnonymous()") @RequestMapping(path="/resetPassword", method = RequestMethod.POST) public final String passwordForgottenPost( @Valid UserAccountRegistrationForm userAccountRegistrationForm, @@ -93,12 +99,14 @@ public final String passwordForgottenPost( * @param model * @return a Formular for entering the new Password. */ + @PreAuthorize("isAnonymous()") @RequestMapping(path = "/resetPassword/confirm/{confirmId}", method = RequestMethod.GET) public final String enterNewPasswordFormular( @PathVariable String confirmId, Model model ) { - UserAccountPasswordRecovery oUserAccountPasswordRecovery = userAccountPasswordRecoveryService.findByToken(confirmId); + UserAccountPasswordRecovery oUserAccountPasswordRecovery = + userAccountPasswordRecoveryService.findByToken(confirmId); if (oUserAccountPasswordRecovery != null) { userAccountPasswordRecoveryService.passwordRecoveryClickedInEmail(oUserAccountPasswordRecovery); UserAccount ua = userAccountService.findByUserEmail(oUserAccountPasswordRecovery.getEmail()); @@ -121,6 +129,7 @@ public final String enterNewPasswordFormular( * @param model * @return Info Page for success or back to formular with error messages. */ + @PreAuthorize("isAnonymous()") @RequestMapping(path = "/resetPassword/confirm/{confirmId}", method = RequestMethod.POST) public final String enterNewPasswordPost( @Valid UserAccountForm userAccountForm, diff --git a/src/main/java/org/woehlke/java/simpleworklist/domain/UserRegistrationController.java b/src/main/java/org/woehlke/java/simpleworklist/domain/UserRegistrationController.java index 59fbbf14..0368e227 100644 --- a/src/main/java/org/woehlke/java/simpleworklist/domain/UserRegistrationController.java +++ b/src/main/java/org/woehlke/java/simpleworklist/domain/UserRegistrationController.java @@ -2,6 +2,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; @@ -26,7 +27,10 @@ public class UserRegistrationController { private final UserAccountRegistrationService userAccountRegistrationService; @Autowired - public UserRegistrationController(UserAccountService userAccountService, UserAccountRegistrationService userAccountRegistrationService) { + public UserRegistrationController( + UserAccountService userAccountService, + UserAccountRegistrationService userAccountRegistrationService + ) { this.userAccountService = userAccountService; this.userAccountRegistrationService = userAccountRegistrationService; } @@ -38,6 +42,7 @@ public UserRegistrationController(UserAccountService userAccountService, UserAcc * @param model Model * @return Formular for entering Email-Address for Registration */ + @PreAuthorize("isAnonymous()") @RequestMapping(path = "/", method = RequestMethod.GET) public final String registerGet(Model model) { log.info("registerGet"); @@ -54,6 +59,7 @@ public final String registerGet(Model model) { * @param model Model * @return info page at success or return to form with error messages. */ + @PreAuthorize("isAnonymous()") @RequestMapping(path = "/", method = RequestMethod.POST) public final String registerPost( @Valid UserAccountRegistrationForm userAccountRegistrationForm, @@ -66,7 +72,11 @@ public final String registerPost( } else { userAccountRegistrationService.registrationCheckIfResponseIsInTime(userAccountRegistrationForm.getEmail()); if (userAccountService.isEmailAvailable(userAccountRegistrationForm.getEmail())) { - if (userAccountRegistrationService.registrationIsRetryAndMaximumNumberOfRetries(userAccountRegistrationForm.getEmail())) { + boolean registrationIsRetryAndMaximumNumberOfRetries = + userAccountRegistrationService.registrationIsRetryAndMaximumNumberOfRetries( + userAccountRegistrationForm.getEmail() + ); + if (registrationIsRetryAndMaximumNumberOfRetries) { String objectName = "userAccountRegistrationForm"; String field = "email"; String defaultMessage = "Maximum Number of Retries reached."; @@ -95,6 +105,7 @@ public final String registerPost( * @param model Model * @return Formular for Entering Account Task or Error Messages. */ + @PreAuthorize("isAnonymous()") @RequestMapping(path = "/confirm/{confirmId}", method = RequestMethod.GET) public final String registerConfirmGet( @PathVariable String confirmId, @@ -123,6 +134,7 @@ public final String registerConfirmGet( * @param model Model * @return login page at success or page with error messages. */ + @PreAuthorize("isAnonymous()") @RequestMapping(path = "/confirm/{confirmId}", method = RequestMethod.POST) public final String registerConfirmPost( @PathVariable String confirmId, diff --git a/src/main/java/org/woehlke/java/simpleworklist/domain/UserSelfserviceController.java b/src/main/java/org/woehlke/java/simpleworklist/domain/UserSelfserviceController.java index 0974365f..1561ee45 100644 --- a/src/main/java/org/woehlke/java/simpleworklist/domain/UserSelfserviceController.java +++ b/src/main/java/org/woehlke/java/simpleworklist/domain/UserSelfserviceController.java @@ -49,7 +49,12 @@ public class UserSelfserviceController extends AbstractController { private final ContextService contextService; @Autowired - public UserSelfserviceController(UserAuthorizationService userAuthorizationService, BreadcrumbService breadcrumbService, UserAccountService userAccountService, ContextService contextService) { + public UserSelfserviceController( + UserAuthorizationService userAuthorizationService, + BreadcrumbService breadcrumbService, + UserAccountService userAccountService, + ContextService contextService + ) { this.userAuthorizationService = userAuthorizationService; this.breadcrumbService = breadcrumbService; this.userAccountService = userAccountService; @@ -183,7 +188,8 @@ public String userPasswordStore( return "user/selfservice/password"; } if(!userAuthorizationService.confirmUserByLoginAndPassword( - user.getUserEmail(), userChangePasswordForm.getOldUserPassword()) + user.getUserEmail(), + userChangePasswordForm.getOldUserPassword()) ){ log.info("old Password is wrong"); String objectName = "userChangePasswordForm"; diff --git a/src/main/java/org/woehlke/java/simpleworklist/domain/db/data/Project.java b/src/main/java/org/woehlke/java/simpleworklist/domain/db/data/Project.java index 5516db90..5a5685e3 100644 --- a/src/main/java/org/woehlke/java/simpleworklist/domain/db/data/Project.java +++ b/src/main/java/org/woehlke/java/simpleworklist/domain/db/data/Project.java @@ -1,5 +1,6 @@ package org.woehlke.java.simpleworklist.domain.db.data; +import lombok.Data; import lombok.Getter; import lombok.Setter; import lombok.ToString; @@ -14,10 +15,7 @@ import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import java.io.Serializable; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; -import java.util.UUID; +import java.util.*; import static java.lang.Boolean.FALSE; @@ -91,6 +89,22 @@ public class Project extends AuditModel implements Serializable, ComparableById< @Column(name = "collapsed", nullable = false) private Boolean collapsed = FALSE; + public static Project getRootProject(Context projectsContext) { + List children = new ArrayList<>(); + Date now = new Date(); + Project thisProject = new Project(); + thisProject.setId(0L); + thisProject.setContext(projectsContext); + thisProject.setName(""); + thisProject.setDescription(""); + thisProject.setCollapsed(FALSE); + thisProject.setChildren(children); + thisProject.setUuid(UUID.randomUUID()); + thisProject.setRowCreatedAt(now); + thisProject.setRowUpdatedAt(now); + return thisProject; + } + @Transient public String getUrlRoot() { return "redirect:/project/root"; diff --git a/src/main/java/org/woehlke/java/simpleworklist/domain/db/data/Task.java b/src/main/java/org/woehlke/java/simpleworklist/domain/db/data/Task.java index 9dca6f07..d443324d 100644 --- a/src/main/java/org/woehlke/java/simpleworklist/domain/db/data/Task.java +++ b/src/main/java/org/woehlke/java/simpleworklist/domain/db/data/Task.java @@ -305,33 +305,24 @@ private void pushProject(Project newProject){ this.project = newProject; } - //TODO: delete Due Date public void moveToInbox(){ pushTaskstate(TaskState.INBOX); } - //TODO: Due Date = Date of Today - public void moveToToday(){ - pushTaskstate(TaskState.TODAY); - this.dueDate = new Date(); - } + public void moveToToday(){ pushTaskstate(TaskState.TODAY); } - //TODO: delete Due Date public void moveToNext(){ pushTaskstate(TaskState.NEXT); } - //TODO: delete Due Date public void moveToWaiting(){ pushTaskstate(TaskState.WAITING); } - //TODO: Due Date = Date of Tomorrow public void moveToScheduled(){ pushTaskstate(TaskState.SCHEDULED); } - //TODO: delete Due Date public void moveToSomeday(){ pushTaskstate(TaskState.SOMEDAY); } diff --git a/src/main/java/org/woehlke/java/simpleworklist/domain/db/user/accountpassword/UserAccountPasswordServiceImpl.java b/src/main/java/org/woehlke/java/simpleworklist/domain/db/user/accountpassword/UserAccountPasswordServiceImpl.java index 76785de4..e3738403 100644 --- a/src/main/java/org/woehlke/java/simpleworklist/domain/db/user/accountpassword/UserAccountPasswordServiceImpl.java +++ b/src/main/java/org/woehlke/java/simpleworklist/domain/db/user/accountpassword/UserAccountPasswordServiceImpl.java @@ -3,6 +3,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.authentication.AuthenticationProvider; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.Authentication; import org.springframework.security.core.userdetails.UserDetails; @@ -22,20 +23,26 @@ public class UserAccountPasswordServiceImpl implements UserAccountPasswordServic private final UserAccountRepository userAccountRepository; private final PasswordEncoder encoder; - private final AuthenticationManager authenticationManager; + //private final AuthenticationManager authenticationManager; + private final AuthenticationProvider authenticationProvider; @Autowired - public UserAccountPasswordServiceImpl(UserAccountRepository userAccountRepository, AuthenticationManager authenticationManager) { + public UserAccountPasswordServiceImpl( + UserAccountRepository userAccountRepository, + //AuthenticationManager authenticationManager, + AuthenticationProvider authenticationProvider + ) { this.userAccountRepository = userAccountRepository; + this.authenticationProvider = authenticationProvider; int strength = 10; this.encoder = new BCryptPasswordEncoder(strength); - this.authenticationManager = authenticationManager; + //this.authenticationManager = authenticationManager; } @Override public UserDetails updatePassword(UserDetails user, String newPassword) { UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(user.getUsername(), user.getPassword()); - Authentication authenticationResult = authenticationManager.authenticate(token); + Authentication authenticationResult = authenticationProvider.authenticate(token); if (authenticationResult.isAuthenticated()) { UserAccount ua = userAccountRepository.findByUserEmail(user.getUsername()); String pwEncoded = encoder.encode(newPassword); diff --git a/src/main/java/org/woehlke/java/simpleworklist/domain/meso/context/ContextControllerService.java b/src/main/java/org/woehlke/java/simpleworklist/domain/meso/context/ContextControllerService.java new file mode 100644 index 00000000..c160d241 --- /dev/null +++ b/src/main/java/org/woehlke/java/simpleworklist/domain/meso/context/ContextControllerService.java @@ -0,0 +1,4 @@ +package org.woehlke.java.simpleworklist.domain.meso.context; + +public interface ContextControllerService { +} diff --git a/src/main/java/org/woehlke/java/simpleworklist/domain/meso/context/ContextControllerServiceImpl.java b/src/main/java/org/woehlke/java/simpleworklist/domain/meso/context/ContextControllerServiceImpl.java new file mode 100644 index 00000000..f10fd82d --- /dev/null +++ b/src/main/java/org/woehlke/java/simpleworklist/domain/meso/context/ContextControllerServiceImpl.java @@ -0,0 +1,9 @@ +package org.woehlke.java.simpleworklist.domain.meso.context; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +@Slf4j +@Service +public class ContextControllerServiceImpl implements ContextControllerService { +} diff --git a/src/main/java/org/woehlke/java/simpleworklist/domain/meso/project/ProjectControllerService.java b/src/main/java/org/woehlke/java/simpleworklist/domain/meso/project/ProjectControllerService.java index 83c1eb16..3db6da31 100644 --- a/src/main/java/org/woehlke/java/simpleworklist/domain/meso/project/ProjectControllerService.java +++ b/src/main/java/org/woehlke/java/simpleworklist/domain/meso/project/ProjectControllerService.java @@ -68,4 +68,7 @@ Project getProject( Project moveProjectToAnotherProject(Project thisProject, Project targetProject); Project moveProjectToAnotherContext(Project thisProject, Context newContext); + + List findAllProjectsByContext(Context context); + List findRootProjectsByContext(Context context); } diff --git a/src/main/java/org/woehlke/java/simpleworklist/domain/meso/project/ProjectControllerServiceImpl.java b/src/main/java/org/woehlke/java/simpleworklist/domain/meso/project/ProjectControllerServiceImpl.java index 1adfcf7d..c1986d79 100644 --- a/src/main/java/org/woehlke/java/simpleworklist/domain/meso/project/ProjectControllerServiceImpl.java +++ b/src/main/java/org/woehlke/java/simpleworklist/domain/meso/project/ProjectControllerServiceImpl.java @@ -276,4 +276,14 @@ public Project moveProjectToAnotherContext(@NotNull Project thisProject, @NotNul } return thisProject; } + + @Override + public List findAllProjectsByContext(Context context){ + return projectService.findAllProjectsByContext(context); + } + + @Override + public List findRootProjectsByContext(Context context){ + return projectService.findRootProjectsByContext(context); + } } diff --git a/src/main/java/org/woehlke/java/simpleworklist/domain/meso/task/TaskControllerService.java b/src/main/java/org/woehlke/java/simpleworklist/domain/meso/task/TaskControllerService.java new file mode 100644 index 00000000..143dd4e0 --- /dev/null +++ b/src/main/java/org/woehlke/java/simpleworklist/domain/meso/task/TaskControllerService.java @@ -0,0 +1,4 @@ +package org.woehlke.java.simpleworklist.domain.meso.task; + +public interface TaskControllerService { +} diff --git a/src/main/java/org/woehlke/java/simpleworklist/domain/meso/task/TaskControllerServiceImpl.java b/src/main/java/org/woehlke/java/simpleworklist/domain/meso/task/TaskControllerServiceImpl.java new file mode 100644 index 00000000..277e3622 --- /dev/null +++ b/src/main/java/org/woehlke/java/simpleworklist/domain/meso/task/TaskControllerServiceImpl.java @@ -0,0 +1,9 @@ +package org.woehlke.java.simpleworklist.domain.meso.task; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +@Slf4j +@Service +public class TaskControllerServiceImpl implements TaskControllerService { +} diff --git a/src/main/java/org/woehlke/java/simpleworklist/domain/meso/task/TaskLifecycleServiceImpl.java b/src/main/java/org/woehlke/java/simpleworklist/domain/meso/task/TaskLifecycleServiceImpl.java index be49b718..5cedc627 100644 --- a/src/main/java/org/woehlke/java/simpleworklist/domain/meso/task/TaskLifecycleServiceImpl.java +++ b/src/main/java/org/woehlke/java/simpleworklist/domain/meso/task/TaskLifecycleServiceImpl.java @@ -174,20 +174,18 @@ public Task updatedViaProject(Task task) { return task; } - public Project addProjectFromTaskToModel(Task task, Model model){ + log.info("addProjectFromTaskToModel"); Project thisProject; if (task.getProject() == null || task.getProject().getId() == null || task.getProject().getId() == 0L) { - thisProject = new Project(); - thisProject.setId(0L); + thisProject = Project.getRootProject(task.getContext()); } else { thisProject = task.getProject(); } model.addAttribute("thisProject", thisProject); Project lastProject; if (task.getLastProject() == null || task.getLastProject().getId() == null || task.getLastProject().getId() == 0L) { - lastProject = new Project(); - lastProject.setId(0L); + lastProject = Project.getRootProject(task.getContext()); } else { lastProject = task.getLastProject(); } diff --git a/src/main/java/org/woehlke/java/simpleworklist/domain/meso/task/TaskMoveService.java b/src/main/java/org/woehlke/java/simpleworklist/domain/meso/task/TaskMoveService.java index ec80f6fa..f1fd87e2 100644 --- a/src/main/java/org/woehlke/java/simpleworklist/domain/meso/task/TaskMoveService.java +++ b/src/main/java/org/woehlke/java/simpleworklist/domain/meso/task/TaskMoveService.java @@ -18,6 +18,8 @@ public interface TaskMoveService { Task moveTaskToWaiting(Task task); + Task moveTaskToScheduled(Task task); + Task moveTaskToSomeday(Task task); Task moveTaskToFocus(Task task); diff --git a/src/main/java/org/woehlke/java/simpleworklist/domain/meso/task/TaskMoveServiceImpl.java b/src/main/java/org/woehlke/java/simpleworklist/domain/meso/task/TaskMoveServiceImpl.java index cb0b65b7..356cfce0 100644 --- a/src/main/java/org/woehlke/java/simpleworklist/domain/meso/task/TaskMoveServiceImpl.java +++ b/src/main/java/org/woehlke/java/simpleworklist/domain/meso/task/TaskMoveServiceImpl.java @@ -90,6 +90,16 @@ public Task moveTaskToWaiting(Task task) { return task; } + @Override + public Task moveTaskToScheduled(Task task) { + long newOrderIdTaskState = taskLifecycleService.getMaxOrderIdTaskState(TaskState.SCHEDULED,task.getContext()); + task.moveToScheduled(); + task.setOrderIdTaskState(++newOrderIdTaskState); + task = taskService.saveAndFlush(task); + log.info("moved to scheduled: " + task.outTaskstate()); + return task; + } + @Override public Task moveTaskToSomeday(Task task) { long newOrderIdTaskState = taskLifecycleService.getMaxOrderIdTaskState(TaskState.SOMEDAY,task.getContext()); diff --git a/src/main/java/org/woehlke/java/simpleworklist/domain/security/access/UserAuthorizationServiceImpl.java b/src/main/java/org/woehlke/java/simpleworklist/domain/security/access/UserAuthorizationServiceImpl.java index 206a0205..23c7a31d 100644 --- a/src/main/java/org/woehlke/java/simpleworklist/domain/security/access/UserAuthorizationServiceImpl.java +++ b/src/main/java/org/woehlke/java/simpleworklist/domain/security/access/UserAuthorizationServiceImpl.java @@ -2,7 +2,8 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.security.authentication.AuthenticationManager; +//import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.authentication.AuthenticationProvider; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.Authentication; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; @@ -21,16 +22,18 @@ public class UserAuthorizationServiceImpl implements UserAuthorizationService { private final UserAccountRepository userAccountRepository; - private final AuthenticationManager authenticationManager; + //private final AuthenticationManager authenticationManager; + private final AuthenticationProvider authenticationProvider; private final PasswordEncoder encoder; @Autowired public UserAuthorizationServiceImpl( UserAccountRepository userAccountRepository, - AuthenticationManager authenticationManager - ) { + //AuthenticationManager authenticationManager + AuthenticationProvider authenticationProvider) { this.userAccountRepository = userAccountRepository; - this.authenticationManager = authenticationManager; + this.authenticationProvider = authenticationProvider; + //this.authenticationManager = authenticationManager; int strength = 10; this.encoder = new BCryptPasswordEncoder(strength); } @@ -46,7 +49,7 @@ public void changeUsersPassword( user.getUserEmail(), userAccountFormBean.getOldUserPassword() ); - Authentication authenticationResult = authenticationManager.authenticate(token); + Authentication authenticationResult = authenticationProvider.authenticate(token); if(authenticationResult.isAuthenticated()){ UserAccount ua = userAccountRepository.findByUserEmail(user.getUserEmail()); String pwEncoded = this.encoder.encode(userAccountFormBean.getUserPassword()); @@ -64,7 +67,7 @@ public boolean confirmUserByLoginAndPassword( userEmail, oldUserPassword ); - Authentication authenticationResult = authenticationManager.authenticate(token); + Authentication authenticationResult = authenticationProvider.authenticate(token); String oldPwEncoded = this.encoder.encode(oldUserPassword); log.info(userEmail+", "+oldPwEncoded); return authenticationResult.isAuthenticated(); diff --git a/src/main/plantuml/Simpleworklist__Service_Classes_DB.puml b/src/main/plantuml/Simpleworklist__Service_Classes_DB.puml deleted file mode 100644 index 73297288..00000000 --- a/src/main/plantuml/Simpleworklist__Service_Classes_DB.puml +++ /dev/null @@ -1,32 +0,0 @@ -@startuml -'https://plantuml.com/class-diagram - -left to right direction -'top to bottom direction - -scale 1200 width - -abstract class AbstractList -abstract AbstractCollection -interface List -interface Collection - -List <|-- AbstractList -Collection <|-- AbstractCollection - -Collection <|- List -AbstractCollection <|- AbstractList -AbstractList <|-- ArrayList - -class ArrayList { -Object[] elementData -size() -} - -enum TimeUnit { -DAYS -HOURS -MINUTES -} - -@enduml diff --git a/src/main/plantuml/Simpleworklist__Service_Classes_Meso.puml b/src/main/plantuml/Simpleworklist__Service_Classes_Meso.puml deleted file mode 100644 index 73297288..00000000 --- a/src/main/plantuml/Simpleworklist__Service_Classes_Meso.puml +++ /dev/null @@ -1,32 +0,0 @@ -@startuml -'https://plantuml.com/class-diagram - -left to right direction -'top to bottom direction - -scale 1200 width - -abstract class AbstractList -abstract AbstractCollection -interface List -interface Collection - -List <|-- AbstractList -Collection <|-- AbstractCollection - -Collection <|- List -AbstractCollection <|- AbstractList -AbstractList <|-- ArrayList - -class ArrayList { -Object[] elementData -size() -} - -enum TimeUnit { -DAYS -HOURS -MINUTES -} - -@enduml diff --git a/src/main/plantuml/Simpleworklist__Use_Cases__010__user.puml b/src/main/plantuml/Simpleworklist__Use_Cases__010__user.puml deleted file mode 100644 index 3d7d9ed7..00000000 --- a/src/main/plantuml/Simpleworklist__Use_Cases__010__user.puml +++ /dev/null @@ -1,44 +0,0 @@ -@startuml - -title Functional_Requirements - Simpleworklist Use Case Diagram - -left to right direction -'top to bottom direction - -'https://plantuml.com/use-case-diagram - -scale 1200 width - -package Functional_Requirements { - - package 001__Start { - SystemUser - (F001_Server_Starts) - User - (F002_Home_Page_rendered) - (F002_Home_Page_rendered) --> (F003_Registration) - (F002_Home_Page_rendered) --> (F004_Password_Recovery) - (F002_Home_Page_rendered) --> (F005_Login) - (F005_Login) ---> (F006_Page_after_first_successful_Login) - (F006_Page_after_first_successful_Login) -> (F007_Navigation) - (F007_Navigation) -> (F008_Logout) - - User <|- SystemUser - } - - package 010__user { - package access { - } - package account { - } - package accountpassword { - } - package accountselfservice { - } - package login { - } - package passwordrecovery { - } - package signup { - } - } -} -@enduml diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index f2d06f86..deda881c 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -11,7 +11,7 @@ spring: config: name: simpleworklist liquibase: - enabled: false + enabled: true devtools: livereload: enabled: ${SIMPLEWORKLIST_DEV_TESTING} @@ -33,7 +33,7 @@ spring: generate-ddl: true database-platform: POSTGRESQL hibernate: - #ddl-auto: create-drop update + #ddl-auto: create-drop update validate ddl-auto: ${BLOODMONEY_HIBERNATE_DDL_AUTO} naming: implicit-strategy: org.hibernate.boot.model.naming.ImplicitNamingStrategyJpaCompliantImpl @@ -112,6 +112,7 @@ org: - "/pages/information" - "/pages/information*" - "/pages/information/**" + - "/pages/**" - "/user/login*" - "/user/register*" - "/user/register/**" @@ -151,7 +152,8 @@ spring: log-dir: transaction-logs/tx-logs-simpleworklist jpa: hibernate: - ddl-auto: update + #ddl-auto: create-drop update validate + ddl-auto: validate server: port: ${PORT} compression: diff --git a/src/main/resources/db/liquibase-changelog.xml b/src/main/resources/db/liquibase-changelog.xml new file mode 100644 index 00000000..3673b64f --- /dev/null +++ b/src/main/resources/db/liquibase-changelog.xml @@ -0,0 +1,714 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/db/liquibase-diff-changelog.xml b/src/main/resources/db/liquibase-diff-changelog.xml new file mode 100644 index 00000000..c14480fb --- /dev/null +++ b/src/main/resources/db/liquibase-diff-changelog.xml @@ -0,0 +1,9 @@ + + + + diff --git a/src/main/resources/static/img/plantuml/Simpleworklist__Controller_Classes.png b/src/main/resources/static/img/plantuml/Simpleworklist__Controller_Classes.png new file mode 100644 index 00000000..9b93cab0 Binary files /dev/null and b/src/main/resources/static/img/plantuml/Simpleworklist__Controller_Classes.png differ diff --git a/src/main/resources/static/img/plantuml/Simpleworklist__Domain_Class_Modell_Persistent.png b/src/main/resources/static/img/plantuml/Simpleworklist__Domain_Class_Modell_Persistent.png index a9f26854..b9613d7a 100644 Binary files a/src/main/resources/static/img/plantuml/Simpleworklist__Domain_Class_Modell_Persistent.png and b/src/main/resources/static/img/plantuml/Simpleworklist__Domain_Class_Modell_Persistent.png differ diff --git a/src/main/resources/static/img/plantuml/Simpleworklist__Service_Classes_DB.png b/src/main/resources/static/img/plantuml/Simpleworklist__Service_Classes_DB.png index 84f74cc7..37a0fc6a 100644 Binary files a/src/main/resources/static/img/plantuml/Simpleworklist__Service_Classes_DB.png and b/src/main/resources/static/img/plantuml/Simpleworklist__Service_Classes_DB.png differ diff --git a/src/main/resources/static/img/plantuml/Simpleworklist__Service_Classes_DB_data.png b/src/main/resources/static/img/plantuml/Simpleworklist__Service_Classes_DB_data.png new file mode 100644 index 00000000..a4a62441 Binary files /dev/null and b/src/main/resources/static/img/plantuml/Simpleworklist__Service_Classes_DB_data.png differ diff --git a/src/main/resources/static/img/plantuml/Simpleworklist__Service_Classes_DB_user.png b/src/main/resources/static/img/plantuml/Simpleworklist__Service_Classes_DB_user.png new file mode 100644 index 00000000..e0593711 Binary files /dev/null and b/src/main/resources/static/img/plantuml/Simpleworklist__Service_Classes_DB_user.png differ diff --git a/src/main/resources/static/img/plantuml/Simpleworklist__Service_Classes_Meso.png b/src/main/resources/static/img/plantuml/Simpleworklist__Service_Classes_Meso.png index 84f74cc7..d6b5d6ca 100644 Binary files a/src/main/resources/static/img/plantuml/Simpleworklist__Service_Classes_Meso.png and b/src/main/resources/static/img/plantuml/Simpleworklist__Service_Classes_Meso.png differ diff --git a/src/main/resources/static/img/plantuml/Simpleworklist__Use_Cases__010__User_Profile.png b/src/main/resources/static/img/plantuml/Simpleworklist__Use_Cases__010__User_Profile.png new file mode 100644 index 00000000..613095cc Binary files /dev/null and b/src/main/resources/static/img/plantuml/Simpleworklist__Use_Cases__010__User_Profile.png differ diff --git a/src/main/resources/static/img/plantuml/Simpleworklist__Use_Cases__010__user.png b/src/main/resources/static/img/plantuml/Simpleworklist__Use_Cases__010__user.png deleted file mode 100644 index 5b19817d..00000000 Binary files a/src/main/resources/static/img/plantuml/Simpleworklist__Use_Cases__010__user.png and /dev/null differ diff --git a/src/main/resources/templates/layout/page.html b/src/main/resources/templates/layout/page.html index 87185569..10835a40 100644 --- a/src/main/resources/templates/layout/page.html +++ b/src/main/resources/templates/layout/page.html @@ -13,29 +13,29 @@ SimpleWorklist - - + + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + @@ -70,18 +70,18 @@ - - - - - - - - - - - - + + + + + + + + + + + + @@ -92,8 +92,8 @@ © 2022 Thomas Wöhlke - - GustaveSchiller + + ThomasWoehlke @@ -105,11 +105,11 @@ - + - - + +