Repository: jhipster/generator-jhipster
Pull request #10783 (2019-11-17 00:41:54)

Simplify if-else construct
-   Please make sure the below checklist is followed for Pull Requests.

-   [ ] [Travis tests](https://travis-ci.org/jhipster/generator-jhipster/pull_requests) are green
-   [x] Tests are added where necessary
-   [x] Documentation is added/updated where necessary
-   [x] Coding Rules & Commit Guidelines as per our [CONTRIBUTING.md document](https://github.com/jhipster/generator-jhipster/blob/master/CONTRIBUTING.md) are followed

<!--
Please also reference the issue number in a commit message to [automatically close the related Github issue](https://help.github.com/articles/closing-issues-via-commit-messages/)

Note: It is also possible to add `[skip ci]` to your commit message to skip Travis tests
-->



Patch:
diff --git a/README.md b/README.md
index fdcec21c19..78e5647d05 100644
--- a/README.md
+++ b/README.md
@@ -14,47 +14,133 @@ Support this project by becoming a sponsor! [Become a sponsor](https://opencolle
 
 **Thank you to our sponsors!**
 
-**Gold sponsors**
-
-[![Okta][okta-image]][okta-url]
-
-[![Octo Consulting Group][octoconsulting-image]][octoconsulting-url]
-
-**Silver sponsors**
-
-[![BizEquity][bizequity-image]][bizequity-url]
-
-**Bronze sponsors**
-
-[![ForsysLab][forsyslab-image]][forsyslab-url]
-
-[![CUBA Platform][cubaplatform-image]][cubaplatform-url]
-
-[![Intesys][intesys-image]][intesys-url]
-
-[![CodeFirst][codefirst-image]][codefirst-url]
-
-[![Blokt][blokt-image]][blokt-url]
-
-[![Clay][clay-image]][clay-url]
-
-[![UX Planet][uxplanet-image]][uxplanet-url]
-
-[![Top Web Design Agencies][top-web-design-agencies-image]][top-web-design-agencies-url]
-
-[![The Pirate Bay][the-pirate-bay-image]][the-pirate-bay-url]
-
-[![Edusson][edusson-image]][edusson-url]
-
-[![Crosswordsolver][crosswordsolver-image]][crosswordsolver-url]
-
-[![FairLaan][fair-laan-image]][fair-laan-url]
-
-[![SuperKredit][superkredit-image]][superkredit-url]
-
-[![MatchBankerPl][matchbanker-pl-image]][matchbanker-pl-url]
-
-[![matchbankerNo][matchbanker-no-image]][matchbanker-no-url]
+### Gold Sponsors
+
+<table>
+  <tbody>
+    <tr>
+      <td align="center" valign="middle">
+        <a href="https://developer.okta.com/signup?utm_source=JHipster&utm_medium=logo&utm_campaign=Gold-Sponsor" target="_blank">
+          <img width="200em" src="https://www.jhipster.tech/images/open-collective/okta.png">
+        </a>
+      </td>
+      <td align="center" valign="middle">
+        <a href="http://www.octoconsulting.com/" target="_blank">
+          <img width="200em" src="https://www.jhipster.tech/images/open-collective/octoconsulting.png">
+        </a>
+      </td>
+    </tr>
+  </tbody>
+</table>
+
+### Silver sponsors
+
+<table>
+  <tbody>
+    <tr>
+      <td align="center" valign="middle">
+        <a href="https://www.bizequity.com/" target="_blank">
+          <img width="200em" src="https://www.jhipster.tech/images/open-collective/bizequity.png">
+        </a>
+      </td>
+    </tr>
+  </tbody>
+</table>
+
+### Bronze sponsors
+
+<table>
+  <tbody>
+    <tr>
+      <td align="center" valign="middle">
+        <a href="https://forsyslab.com/" target="_blank">
+          <img width="50em" src="https://www.jhipster.tech/images/open-collective/forsyslab.png">
+        </a>
+      </td>
+      <td align="center" valign="middle">
+        <a href="https://www.cuba-platform.com/" target="_blank">
+          <img width="50em" src="https://www.jhipster.tech/images/open-collective/cubaplatform.png">
+        </a>
+      </td>
+      <td align="center" valign="middle">
+        <a href="https://www.intesys.it/" target="_blank">
+          <img width="50em" src="https://www.jhipster.tech/images/open-collective/intesys.png">
+        </a>
+      </td>
+      <td align="center" valign="middle">
+        <a href="https://www.codefirst.co.uk" target="_blank">
+          <img width="50em" src="https://www.jhipster.tech/images/open-collective/codefirst.png">
+        </a>
+      </td>
+      <td align="center" valign="middle">
+        <a href="https://blokt.com/" target="_blank">
+          <img width="50em" src="https://www.jhipster.tech/images/open-collective/blokt.png">
+        </a>
+      </td>
+    </tr>
+    <tr>
+      <td align="center" valign="middle">
+        <a href="https://clay.global/" target="_blank">
+          <img width="50em" src="https://www.jhipster.tech/images/open-collective/clay.png">
+        </a>
+      </td>
+      <td align="center" valign="middle">
+        <a href="https://uxplanet.org/" target="_blank">
+          <img width="50em" src="https://www.jhipster.tech/images/open-collective/uxplanet.png">
+        </a>
+      </td>
+      <td align="center" valign="middle">
+        <a href="https://opencollective.com/top-web-design-agencies" target="_blank">
+          <img width="50em" src="https://www.jhipster.tech/images/open-collective/top-web-design-agencies.png">
+        </a>
+      </td>
+      <td align="center" valign="middle">
+        <a href="https://piratebay.ink/" target="_blank">
+          <img width="50em" src="https://www.jhipster.tech/images/open-collective/the-pirate-bay.png">
+        </a>
+      </td>
+      <td align="center" valign="middle">
+        <a href="https://edusson.com/" target="_blank">
+          <img width="50em" src="https://www.jhipster.tech/images/open-collective/edusson.png">
+        </a>
+      </td>
+    </tr>
+    <tr>
+      <td align="center" valign="middle">
+        <a href="https://www.crosswordsolver.com/" target="_blank">
+          <img width="50em" src="https://www.jhipster.tech/images/open-collective/crosswordsolver.png">
+        </a>
+      </td>
+      <td align="center" valign="middle">
+        <a href="https://fair-laan.se/" target="_blank">
+          <img width="50em" src="https://www.jhipster.tech/images/open-collective/fair-laan.png">
+        </a>
+      </td>
+      <td align="center" valign="middle">
+        <a href="https://superkredit.net" target="_blank">
+          <img width="50em" src="https://www.jhipster.tech/images/open-collective/superkredit.png">
+        </a>
+      </td>
+      <td align="center" valign="middle">
+        <a href="https://matchbanker.pl/" target="_blank">
+          <img width="50em" src="https://www.jhipster.tech/images/open-collective/matchbanker.png">
+        </a>
+      </td>
+      <td align="center" valign="middle">
+        <a href="https://matchbanker.no/" target="_blank">
+          <img width="50em" src="https://www.jhipster.tech/images/open-collective/matchbanker.png">
+        </a>
+      </td>
+    </tr>
+    <tr>
+      <td align="center" valign="middle">
+        <a href="https://vpngorilla.com/" target="_blank">
+          <img width="50em" src="https://www.jhipster.tech/images/open-collective/vpngorilla.png">
+        </a>
+      </td>
+    </tr>
+  </tbody>
+</table>
 
 **Thank you to all our backers!**
 
@@ -125,42 +211,6 @@ Additional builds at [hipster-labs/jhipster-daily-builds](https://github.com/hip
 [daviddm-url]: https://david-dm.org/jhipster/generator-jhipster
 [backers-image]: https://opencollective.com/generator-jhipster/tiers/backer.svg?avatarHeight=40&width=890
 [backers-url]: https://opencollective.com/generator-jhipster
-[okta-image]: https://www.jhipster.tech/images/open-collective/okta.png
-[okta-url]: https://developer.okta.com/signup?utm_source=JHipster&utm_medium=logo&utm_campaign=Gold-Sponsor
-[octoconsulting-image]: https://www.jhipster.tech/images/open-collective/octoconsulting.png
-[octoconsulting-url]: http://www.octoconsulting.com/
-[bizequity-image]: https://www.jhipster.tech/images/open-collective/bizequity.png
-[bizequity-url]: https://www.bizequity.com/
-[forsyslab-image]: https://www.jhipster.tech/images/open-collective/forsyslab.png
-[forsyslab-url]: https://forsyslab.com/
-[cubaplatform-image]: https://www.jhipster.tech/images/open-collective/cubaplatform.png
-[cubaplatform-url]: https://www.cuba-platform.com/
-[intesys-image]: https://www.jhipster.tech/images/open-collective/intesys.png
-[intesys-url]: https://www.intesys.it/
-[codefirst-image]: https://www.jhipster.tech/images/open-collective/codefirst.png
-[codefirst-url]: https://www.codefirst.co.uk
-[blokt-image]: https://www.jhipster.tech/images/open-collective/blokt.png
-[blokt-url]: https://blokt.com/
-[clay-image]: https://www.jhipster.tech/images/open-collective/clay.png
-[clay-url]: https://clay.global/
-[uxplanet-image]: https://www.jhipster.tech/images/open-collective/uxplanet.png
-[uxplanet-url]: https://uxplanet.org/
-[top-web-design-agencies-image]: https://www.jhipster.tech/images/open-collective/top-web-design-agencies.png
-[top-web-design-agencies-url]: https://opencollective.com/top-web-design-agencies
-[the-pirate-bay-image]: https://www.jhipster.tech/images/open-collective/the-pirate-bay.png
-[the-pirate-bay-url]: https://piratebay.ink/
-[edusson-image]: https://www.jhipster.tech/images/open-collective/edusson.png
-[edusson-url]: https://edusson.com/
-[crosswordsolver-image]: https://www.jhipster.tech/images/open-collective/crosswordsolver.png
-[crosswordsolver-url]: https://www.crosswordsolver.com/
-[fair-laan-image]: https://www.jhipster.tech/images/open-collective/fair-laan.png
-[fair-laan-url]: https://fair-laan.se/
-[superkredit-image]: https://www.jhipster.tech/images/open-collective/superkredit.png
-[superkredit-url]: https://superkredit.net
-[matchbanker-pl-image]: https://www.jhipster.tech/images/open-collective/matchbanker.png
-[matchbanker-pl-url]: https://matchbanker.pl/
-[matchbanker-no-image]: https://www.jhipster.tech/images/open-collective/matchbanker.png
-[matchbanker-no-url]: https://matchbanker.no/
 [issue-template]: https://github.com/jhipster/generator-jhipster/issues/new?template=BUG_REPORT.md
 [feature-template]: https://github.com/jhipster/generator-jhipster/issues/new?template=FEATURE_REQUEST.md
 [npmcharts-image]: https://img.shields.io/npm/dm/generator-jhipster.svg?label=Downloads&style=flat
diff --git a/generators/ci-cd/templates/.gitlab-ci.yml.ejs b/generators/ci-cd/templates/.gitlab-ci.yml.ejs
index de0bceb835..c16c8a860e 100644
--- a/generators/ci-cd/templates/.gitlab-ci.yml.ejs
+++ b/generators/ci-cd/templates/.gitlab-ci.yml.ejs
@@ -134,11 +134,11 @@ gradle-package:
 #    stage: release
 #    variables:
 #        REGISTRY_URL: registry.gitlab.com
-#        IMAGE_TAG: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG:$CI_COMMIT_SHA
+#        IMAGE_TAG: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG-$CI_COMMIT_SHA
 #    dependencies:
 #        - gradle-package
 #    script:
-#        - ./gradlew jib -Djib.to.image=$IMAGE_TAG -Djib.to.auth.username="gitlab-ci-token"  -Djib.to.auth.password=$CI_BUILD_TOKEN
+#        - ./gradlew jib -Pprod -Djib.to.image=$IMAGE_TAG -Djib.to.auth.username="gitlab-ci-token"  -Djib.to.auth.password=$CI_BUILD_TOKEN
 
 <%_ if (cicdIntegrations.includes('heroku')) { _%>
 deploy-to-production:
@@ -234,11 +234,11 @@ maven-package:
 #    stage: release
 #    variables:
 #        REGISTRY_URL: registry.gitlab.com
-#        IMAGE_TAG: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG:$CI_COMMIT_SHA
+#        IMAGE_TAG: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG-$CI_COMMIT_SHA
 #    dependencies:
 #        - maven-package
 #    script:
-#        - ./mvnw -ntp compile jib:build -Djib.to.image=$IMAGE_TAG -Djib.to.auth.username=gitlab-ci-token  -Djib.to.auth.password=$CI_BUILD_TOKEN -Dmaven.repo.local=$MAVEN_USER_HOME
+#        - ./mvnw -ntp compile jib:build -Pprod -Djib.to.image=$IMAGE_TAG -Djib.to.auth.username=gitlab-ci-token  -Djib.to.auth.password=$CI_BUILD_TOKEN -Dmaven.repo.local=$MAVEN_USER_HOME
 
 <%_ if (cicdIntegrations.includes('heroku')) { _%>
 deploy-to-production:
diff --git a/generators/cleanup.js b/generators/cleanup.js
index a805e32cc3..691440720b 100644
--- a/generators/cleanup.js
+++ b/generators/cleanup.js
@@ -212,4 +212,7 @@ function cleanupOldServerFiles(generator, javaDir, testDir, mainResourceDir, tes
         generator.config.delete('blueprint');
         generator.config.delete('blueprintVersion');
     }
+    if (generator.isJhipsterVersionLessThan('6.5.2')) {
+        generator.removeFile(`${testDir}web/rest/ClientForwardControllerIT.java`);
+    }
 }
diff --git a/generators/client/templates/angular/package.json.ejs b/generators/client/templates/angular/package.json.ejs
index 195bc794bf..43d30e09da 100644
--- a/generators/client/templates/angular/package.json.ejs
+++ b/generators/client/templates/angular/package.json.ejs
@@ -72,9 +72,9 @@
     "@types/mocha": "5.2.7",
     <%_ } _%>
     "@types/node": "10.12.27",
-    "@typescript-eslint/eslint-plugin": "2.0.0",
-    "@typescript-eslint/eslint-plugin-tslint": "2.0.0",
-    "@typescript-eslint/parser": "2.0.0",
+    "@typescript-eslint/eslint-plugin": "2.7.0",
+    "@typescript-eslint/eslint-plugin-tslint": "2.7.0",
+    "@typescript-eslint/parser": "2.7.0",
     <%_ if (protractorTests) { _%>
     "@types/selenium-webdriver": "4.0.2",
     <%_ } _%>
diff --git a/generators/client/templates/angular/src/main/webapp/app/layouts/main/main.component.html.ejs b/generators/client/templates/angular/src/main/webapp/app/layouts/main/main.component.html.ejs
index 09f504eca7..6ec45318d1 100644
--- a/generators/client/templates/angular/src/main/webapp/app/layouts/main/main.component.html.ejs
+++ b/generators/client/templates/angular/src/main/webapp/app/layouts/main/main.component.html.ejs
@@ -23,7 +23,6 @@
 <div class="container-fluid">
     <div class="card jh-card">
         <router-outlet></router-outlet>
-        <router-outlet name="popup"></router-outlet>
     </div>
     <<%= jhiPrefixDashed %>-footer></<%= jhiPrefixDashed %>-footer>
 </div>
diff --git a/generators/client/templates/angular/webpack/utils.js.ejs b/generators/client/templates/angular/webpack/utils.js.ejs
index 2367e8d63c..902b051855 100644
--- a/generators/client/templates/angular/webpack/utils.js.ejs
+++ b/generators/client/templates/angular/webpack/utils.js.ejs
@@ -40,10 +40,7 @@ function mapTypescriptAliasToWebpackAlias(alias = {}) {
   Object.entries(tsconfig.compilerOptions.paths)
     .filter(([key, value]) => {
       // use Typescript alias in Webpack only if this has value
-      if (value.length) {
-        return true;
-      }
-      return false;
+      return !!value.length;
     })
     .map(([key, value]) => {
       // if Typescript alias ends with /* then remove this for Webpack
diff --git a/generators/client/templates/react/package.json.ejs b/generators/client/templates/react/package.json.ejs
index 734cbfe81d..8a6481c7ed 100644
--- a/generators/client/templates/react/package.json.ejs
+++ b/generators/client/templates/react/package.json.ejs
@@ -85,8 +85,8 @@ limitations under the License.
     "@types/selenium-webdriver": "4.0.2",
     <%_ } _%>
     "@types/webpack-env": "1.13.9",
-    "@typescript-eslint/eslint-plugin": "2.0.0",
-    "@typescript-eslint/parser": "2.0.0",
+    "@typescript-eslint/eslint-plugin": "2.7.0",
+    "@typescript-eslint/parser": "2.7.0",
     "autoprefixer": "9.5.0",
     "base-href-webpack-plugin": "2.0.0",
     "browser-sync": "2.26.5",
diff --git a/generators/client/templates/react/src/main/webapp/app/modules/login/logout.tsx.ejs b/generators/client/templates/react/src/main/webapp/app/modules/login/logout.tsx.ejs
index 2c8c50d317..1daf106d09 100644
--- a/generators/client/templates/react/src/main/webapp/app/modules/login/logout.tsx.ejs
+++ b/generators/client/templates/react/src/main/webapp/app/modules/login/logout.tsx.ejs
@@ -16,7 +16,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -%>
-import React from 'react';
+import React, { useLayoutEffect } from 'react';
 import { connect } from 'react-redux';
 
 import { IRootState } from 'app/shared/reducers';
@@ -27,29 +27,25 @@ export interface ILogoutProps extends StateProps, DispatchProps {
   logoutUrl: string;
 }
 
-export class Logout extends React.Component<ILogoutProps> {
-
-  componentDidMount() {
-    this.props.logout();
-  }
-
-  render() {
-    const logoutUrl = this.props.logoutUrl;
+export const Logout = (props: ILogoutProps) => {
+  useLayoutEffect(() => {
+    props.logout();
+    const logoutUrl = props.logoutUrl;
     if (logoutUrl) {
       // if Keycloak, logoutUrl has protocol/openid-connect in it
-      window.location.href = logoutUrl.includes('/protocol') ?
-        logoutUrl + '?redirect_uri=' + window.location.origin :
-        logoutUrl + '?id_token_hint=' + this.props.idToken +
-          '&post_logout_redirect_uri=' + window.location.origin;
+      window.location.href =
+        logoutUrl.includes('/protocol')
+          ? logoutUrl + '?redirect_uri=' + window.location.origin
+          : logoutUrl + '?id_token_hint=' + props.idToken + '&post_logout_redirect_uri=' + window.location.origin;
     }
-
-    return (
-      <div className="p-5">
-        <h4>Logged out successfully!</h4>
-      </div>
-    );
-  }
-}
+  });
+
+  return (
+    <div className="p-5">
+      <h4>Logged out successfully!</h4>
+    </div>
+  );
+};
 
 const mapStateToProps = (storeState: IRootState) => ({
   logoutUrl: storeState.authentication.logoutUrl,
diff --git a/generators/client/templates/react/webpack/utils.js.ejs b/generators/client/templates/react/webpack/utils.js.ejs
index 2448139e07..bdeed42d38 100644
--- a/generators/client/templates/react/webpack/utils.js.ejs
+++ b/generators/client/templates/react/webpack/utils.js.ejs
@@ -40,10 +40,7 @@ function mapTypescriptAliasToWebpackAlias(alias = {}) {
   Object.entries(tsconfig.compilerOptions.paths)
     .filter(([key, value]) => {
       // use Typescript alias in Webpack only if this has value
-      if (value.length) {
-        return true;
-      }
-      return false;
+      return !!value.length;
     })
     .map(([key, value]) => {
       // if Typescript alias ends with /* then remove this for Webpack
diff --git a/generators/entity-client/templates/angular/src/main/webapp/app/entities/entity-management-delete-dialog.component.ts.ejs b/generators/entity-client/templates/angular/src/main/webapp/app/entities/entity-management-delete-dialog.component.ts.ejs
index 1f4d542bc1..158e96f8af 100644
--- a/generators/entity-client/templates/angular/src/main/webapp/app/entities/entity-management-delete-dialog.component.ts.ejs
+++ b/generators/entity-client/templates/angular/src/main/webapp/app/entities/entity-management-delete-dialog.component.ts.ejs
@@ -19,17 +19,15 @@
 <%_
 const primaryKeyType = getPkTypeBasedOnDBAndAssociation(authenticationType, databaseType, relationships);
 _%>
-import { Component, OnInit, OnDestroy } from '@angular/core';
-import { ActivatedRoute, Router } from '@angular/router';
+import { Component } from '@angular/core';
 
-import { NgbActiveModal, NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap';
+import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
 import { JhiEventManager } from 'ng-jhipster';
 
 import { I<%= entityAngularName %> } from 'app/shared/model/<%= entityModelFileName %>.model';
 import { <%= entityAngularName %>Service } from './<%= entityFileName %>.service';
 
 @Component({
-    selector: '<%= jhiPrefixDashed %>-<%= entityFileName %>-delete-dialog',
     templateUrl: './<%= entityFileName %>-delete-dialog.component.html'
 })
 export class <%= entityAngularName %>DeleteDialogComponent {
@@ -57,38 +55,3 @@ export class <%= entityAngularName %>DeleteDialogComponent {
         });
     }
 }
-
-@Component({
-    selector: '<%= jhiPrefixDashed %>-<%= entityFileName %>-delete-popup',
-    template: ''
-})
-export class <%= entityAngularName %>DeletePopupComponent implements OnInit, OnDestroy {
-
-    protected ngbModalRef: NgbModalRef;
-
-    constructor(
-        protected activatedRoute: ActivatedRoute,
-        protected router: Router,
-        protected modalService: NgbModal
-    ) {}
-
-    ngOnInit() {
-        this.activatedRoute.data.subscribe(({<%= entityInstance %>}) => {
-            setTimeout(() => {
-                this.ngbModalRef = this.modalService.open(<%= entityAngularName %>DeleteDialogComponent as Component, { size: 'lg', backdrop: 'static'});
-                this.ngbModalRef.componentInstance.<%= entityInstance %> = <%= entityInstance %>;
-                this.ngbModalRef.result.then(() => {
-                    this.router.navigate(['/<%= entityUrl %>', { outlets: { popup: null }}]);
-                    this.ngbModalRef = null;
-                }, () => {
-                    this.router.navigate(['/<%= entityUrl %>', { outlets: { popup: null }}]);
-                    this.ngbModalRef = null;
-                });
-            }, 0);
-        });
-    }
-
-    ngOnDestroy() {
-        this.ngbModalRef = null;
-    }
-}
diff --git a/generators/entity-client/templates/angular/src/main/webapp/app/entities/entity-management.component.html.ejs b/generators/entity-client/templates/angular/src/main/webapp/app/entities/entity-management.component.html.ejs
index 57b6d58a72..9cef5b2d49 100644
--- a/generators/entity-client/templates/angular/src/main/webapp/app/entities/entity-management.component.html.ejs
+++ b/generators/entity-client/templates/angular/src/main/webapp/app/entities/entity-management.component.html.ejs
@@ -160,10 +160,7 @@
                             <fa-icon [icon]="'pencil-alt'"></fa-icon>
                             <span class="d-none d-md-inline" jhiTranslate="entity.action.edit">Edit</span>
                         </button>
-                        <button type="submit"
-                                [routerLink]="['/<%= entityUrl %>', { outlets: { popup: <%= entityInstance %>.id + '/delete'} }]"
-                                replaceUrl="true"
-                                queryParamsHandling="merge"
+                        <button type="submit" (click)="delete(<%= entityInstance %>)"
                                 class="btn btn-danger btn-sm">
                             <fa-icon [icon]="'times'"></fa-icon>
                             <span class="d-none d-md-inline" jhiTranslate="entity.action.delete">Delete</span>
diff --git a/generators/entity-client/templates/angular/src/main/webapp/app/entities/entity-management.component.ts.ejs b/generators/entity-client/templates/angular/src/main/webapp/app/entities/entity-management.component.ts.ejs
index 358322b3cf..47fc7a4432 100644
--- a/generators/entity-client/templates/angular/src/main/webapp/app/entities/entity-management.component.ts.ejs
+++ b/generators/entity-client/templates/angular/src/main/webapp/app/entities/entity-management.component.ts.ejs
@@ -25,12 +25,18 @@ import { ActivatedRoute } from '@angular/router';
 <%_ } _%>
 import { Subscription } from 'rxjs';
 import { JhiEventManager <% if (pagination !== 'no') { %>, JhiParseLinks <% } %><% if (fieldsContainBlob) { %>, JhiDataUtils<% } %> } from 'ng-jhipster';
+<%_ if (!readOnly) { _%>
+import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
+<%_ } _%>
 
 import { I<%= entityAngularName %> } from 'app/shared/model/<%= entityModelFileName %>.model';
 <%_ if (pagination !== 'no') { %>
 import { ITEMS_PER_PAGE } from 'app/shared/constants/pagination.constants';
 <%_ } _%>
 import { <%= entityAngularName %>Service } from './<%= entityFileName %>.service';
+<%_ if (!readOnly) { _%>
+import { <%= entityAngularName %>DeleteDialogComponent } from './<%= entityFileName %>-delete-dialog.component';
+<%_ } _%>
 
 @Component({
     selector: '<%= jhiPrefixDashed %>-<%= entityFileName %>',
@@ -76,6 +82,13 @@ export class <%= entityAngularName %>Component implements OnInit, OnDestroy {
     registerChangeIn<%= entityClassPlural %>() {
         this.eventSubscriber = this.eventManager.subscribe('<%= entityInstance %>ListModification', () => <%= eventCallBack %>);
     }
+    <%_ if (!readOnly) { _%>
+
+    delete(<%= entityInstance %>: I<%= entityAngularName %>) {
+        const modalRef = this.modalService.open(<%= entityAngularName %>DeleteDialogComponent, { size: 'lg', backdrop: 'static' });
+        modalRef.componentInstance.<%= entityInstance %> = <%= entityInstance %>;
+    }
+    <%_ } _%>
     <%_ if (pagination !== 'no') { _%>
         <%_ if (databaseType !== 'cassandra') { _%>
 
diff --git a/generators/entity-client/templates/angular/src/main/webapp/app/entities/entity-management.module.ts.ejs b/generators/entity-client/templates/angular/src/main/webapp/app/entities/entity-management.module.ts.ejs
index 9d3b6a215d..919048668d 100644
--- a/generators/entity-client/templates/angular/src/main/webapp/app/entities/entity-management.module.ts.ejs
+++ b/generators/entity-client/templates/angular/src/main/webapp/app/entities/entity-management.module.ts.ejs
@@ -24,19 +24,14 @@ import { <%= entityAngularName %>Component } from './<%= entityFileName %>.compo
 import { <%= entityAngularName %>DetailComponent } from './<%= entityFileName %>-detail.component';
 <%_ if (!readOnly) { _%>
 import { <%= entityAngularName %>UpdateComponent } from './<%= entityFileName %>-update.component';
-import { <%= entityAngularName %>DeletePopupComponent, <%= entityAngularName %>DeleteDialogComponent } from './<%= entityFileName %>-delete-dialog.component';
+import { <%= entityAngularName %>DeleteDialogComponent } from './<%= entityFileName %>-delete-dialog.component';
 <%_ } _%>
-import { <%= entityInstance %>Route, <%= entityInstance %>PopupRoute } from './<%= entityFileName %>.route';
-
-const ENTITY_STATES = [
-    ...<%= entityInstance %>Route,
-    ...<%= entityInstance %>PopupRoute,
-];
+import { <%= entityInstance %>Route } from './<%= entityFileName %>.route';
 
 @NgModule({
     imports: [
         <%= angularXAppName %>SharedModule,
-        RouterModule.forChild(ENTITY_STATES)
+        RouterModule.forChild(<%= entityInstance %>Route)
     ],
     declarations: [
         <%= entityAngularName %>Component,
@@ -44,7 +39,6 @@ const ENTITY_STATES = [
         <%_ if (!readOnly) { _%>
         <%= entityAngularName %>UpdateComponent,
         <%= entityAngularName %>DeleteDialogComponent,
-        <%= entityAngularName %>DeletePopupComponent,
         <%_ } %>
     ],
     entryComponents: [
diff --git a/generators/entity-client/templates/angular/src/main/webapp/app/entities/entity-management.route.ts.ejs b/generators/entity-client/templates/angular/src/main/webapp/app/entities/entity-management.route.ts.ejs
index 97f2af1f9e..008b7d2a1c 100644
--- a/generators/entity-client/templates/angular/src/main/webapp/app/entities/entity-management.route.ts.ejs
+++ b/generators/entity-client/templates/angular/src/main/webapp/app/entities/entity-management.route.ts.ejs
@@ -31,13 +31,6 @@ import { <%= entityAngularName %>Component } from './<%= entityFileName %>.compo
 import { <%= entityAngularName %>DetailComponent } from './<%= entityFileName %>-detail.component';
 <%_ if (!readOnly) { _%>
 import { <%= entityAngularName %>UpdateComponent } from './<%= entityFileName %>-update.component';
-<%_ if (entityFileName.length <= 30) { _%>
-import { <%= entityAngularName %>DeletePopupComponent } from './<%= entityFileName %>-delete-dialog.component';
-<%_ } else { _%>
-import {
-    <%= entityAngularName %>DeletePopupComponent
-} from './<%= entityFileName %>-delete-dialog.component';
-<%_ } _%>
 <%_ } _%>
 import { I<%= entityAngularName %> } from 'app/shared/model/<%= entityModelFileName %>.model';
 
@@ -115,21 +108,3 @@ export const <%= entityInstance %>Route: Routes = [
     },
     <%_ } _%>
 ];
-
-export const <%= entityInstance %>PopupRoute: Routes = [
-    <%_ if (!readOnly) { _%>
-    {
-        path: ':id/delete',
-        component: <%= entityAngularName %>DeletePopupComponent,
-        resolve: {
-            <%= entityInstance %>: <%= entityAngularName %>Resolve
-        },
-        data: {
-            authorities: ['ROLE_USER'],
-            pageTitle: <% if (enableTranslation){ %>'<%= angularAppName %>.<%= entityTranslationKey %>.home.title'<% }else{ %>'<%= entityClassPlural %>'<% } %>
-        },
-        canActivate: [UserRouteAccessService],
-        outlet: 'popup'
-    }
-    <%_ } _%>
-];
diff --git a/generators/entity-client/templates/angular/src/main/webapp/app/entities/infinite-scroll-template.ejs b/generators/entity-client/templates/angular/src/main/webapp/app/entities/infinite-scroll-template.ejs
index 5c8d439cb7..e6c9633748 100644
--- a/generators/entity-client/templates/angular/src/main/webapp/app/entities/infinite-scroll-template.ejs
+++ b/generators/entity-client/templates/angular/src/main/webapp/app/entities/infinite-scroll-template.ejs
@@ -34,6 +34,9 @@
         protected dataUtils: JhiDataUtils,
         <%_ } _%>
         protected eventManager: JhiEventManager,
+        <%_ if (!readOnly) { _%>
+        protected modalService: NgbModal,
+        <%_ } _%>
         protected parseLinks: JhiParseLinks,
         <%_ if (searchEngine === 'elasticsearch') { _%>
         protected activatedRoute: ActivatedRoute,
diff --git a/generators/entity-client/templates/angular/src/main/webapp/app/entities/no-pagination-template.ejs b/generators/entity-client/templates/angular/src/main/webapp/app/entities/no-pagination-template.ejs
index 0550aa734b..a931f2145a 100644
--- a/generators/entity-client/templates/angular/src/main/webapp/app/entities/no-pagination-template.ejs
+++ b/generators/entity-client/templates/angular/src/main/webapp/app/entities/no-pagination-template.ejs
@@ -28,6 +28,9 @@
         protected dataUtils: JhiDataUtils,
         <%_ } _%>
         protected eventManager: JhiEventManager,
+        <%_ if (!readOnly) { _%>
+        protected modalService: NgbModal,
+        <%_ } _%>
         <%_ if (searchEngine === 'elasticsearch') { _%>
         protected activatedRoute: ActivatedRoute,
         <%_ } _%>
diff --git a/generators/entity-client/templates/angular/src/main/webapp/app/entities/pagination-template.ejs b/generators/entity-client/templates/angular/src/main/webapp/app/entities/pagination-template.ejs
index f4173e8699..57e7c39862 100644
--- a/generators/entity-client/templates/angular/src/main/webapp/app/entities/pagination-template.ejs
+++ b/generators/entity-client/templates/angular/src/main/webapp/app/entities/pagination-template.ejs
@@ -42,7 +42,10 @@
         protected dataUtils: JhiDataUtils,
         <%_ } _%>
         protected router: Router,
-        protected eventManager: JhiEventManager
+        protected eventManager: JhiEventManager,
+        <%_ if (!readOnly) { _%>
+        protected modalService: NgbModal
+        <%_ } _%>
     ) {
         <%_ if (databaseType !== 'cassandra') { _%>
         this.itemsPerPage = ITEMS_PER_PAGE;
diff --git a/generators/entity-server/templates/src/main/resources/config/liquibase/changelog/added_entity.xml.ejs b/generators/entity-server/templates/src/main/resources/config/liquibase/changelog/added_entity.xml.ejs
index 8bd38de5cc..af042a74d4 100644
--- a/generators/entity-server/templates/src/main/resources/config/liquibase/changelog/added_entity.xml.ejs
+++ b/generators/entity-server/templates/src/main/resources/config/liquibase/changelog/added_entity.xml.ejs
@@ -33,8 +33,9 @@
                 break;
             }
         }
+        const isAutoIncrementDB = prodDatabaseType === 'mysql' || prodDatabaseType === 'mariadb';
     _%>
-    <%_ if (prodDatabaseType === 'mysql' || prodDatabaseType === 'mariadb') { _%>
+    <%_ if (isAutoIncrementDB) { _%>
     <property name="autoIncrement" value="<%- autoIncrementValue %>"/>
     <%_ } _%>
 
@@ -47,7 +48,7 @@
         <%_ } else { _%>
         <createTable tableName="<%= entityTableName %>" remarks="<%- formatAsLiquibaseRemarks(javadoc) %>">
         <%_ } _%>
-            <column name="id" type="<%= primaryKeyType %>" <%_ if (primaryKeyType === 'varchar(100)' ) { _%> > <% } else { %> autoIncrement="${autoIncrement}"> <%_ } %>
+            <column name="id" type="<%= primaryKeyType %>" <%_ if (primaryKeyType === 'varchar(100)' ) { _%> <% } else if (isAutoIncrementDB) { %> autoIncrement="${autoIncrement}" <%_ } %>>
                 <constraints primaryKey="true" nullable="false"/>
             </column>
             <%_ for (idx in fields) {
diff --git a/generators/export-jdl/index.js b/generators/export-jdl/index.js
index 4c5fecaf70..5e0e30d8a4 100644
--- a/generators/export-jdl/index.js
+++ b/generators/export-jdl/index.js
@@ -19,7 +19,6 @@
 const chalk = require('chalk');
 const jhiCore = require('jhipster-core');
 const BaseGenerator = require('../generator-base');
-const { logger } = require('../utils');
 const statistics = require('../statistics');
 
 module.exports = class extends BaseGenerator {
@@ -49,7 +48,7 @@ module.exports = class extends BaseGenerator {
                 try {
                     jhiCore.jdl.conversion.JSONToJDLConverter.convertToJDL('.', this.options.jdlFile);
                 } catch (error) {
-                    logger.error(`An error occurred while exporting to JDL: ${error.message}\n${error}`);
+                    this.error(`An error occurred while exporting to JDL: ${error.message}\n${error}`);
                 }
             }
         };
diff --git a/generators/gae/index.js b/generators/gae/index.js
index 1e201499f8..deb7e9a4a1 100644
--- a/generators/gae/index.js
+++ b/generators/gae/index.js
@@ -17,8 +17,7 @@
  * limitations under the License.
  */
 const os = require('os');
-const exec = require('child_process').exec;
-const execSync = require('child_process').execSync;
+const shelljs = require('shelljs');
 const chalk = require('chalk');
 const _ = require('lodash');
 const BaseGenerator = require('../generator-base');
@@ -41,7 +40,7 @@ module.exports = class extends BaseGenerator {
                 if (this.abort) return;
                 const done = this.async();
 
-                exec('gcloud version', err => {
+                shelljs.exec('gcloud version', { silent: true }, (code, stdout, err) => {
                     if (err) {
                         this.log.error(
                             "You don't have the Cloud SDK (gcloud) installed. \nDownload it from https://cloud.google.com/sdk/install"
@@ -57,15 +56,16 @@ module.exports = class extends BaseGenerator {
                 const done = this.async();
                 const component = 'app-engine-java';
 
-                exec(
+                shelljs.exec(
                     'gcloud components list --quiet --filter="Status=Installed OR Status=\\"Update Available\\"" --format="value(id)"',
+                    { silent: true },
                     (err, stdout, srderr) => {
                         if (_.includes(stdout, component)) {
                             done();
                         } else {
                             this.log(chalk.bold('\nInstalling App Engine Java SDK'));
                             this.log(`... Running: gcloud components install ${component} --quiet`);
-                            exec(`gcloud components install ${component} --quiet`, err => {
+                            shelljs.exec(`gcloud components install ${component} --quiet`, { silent: true }, (code, stdout, err) => {
                                 if (err) {
                                     this.log.error(err);
                                     done(
@@ -117,7 +117,7 @@ module.exports = class extends BaseGenerator {
             return this.gcpProjectId;
         }
         try {
-            const projectId = execSync('gcloud config get-value core/project --quiet', { encoding: 'utf8' });
+            const projectId = shelljs.exec('gcloud config get-value core/project --quiet', { silent: true }).stdout;
             return projectId.trim();
         } catch (ex) {
             this.log.error('Unable to determine the default Google Cloud Project ID');
@@ -152,7 +152,7 @@ module.exports = class extends BaseGenerator {
                                 return 'Project ID cannot empty';
                             }
                             try {
-                                execSync(`gcloud projects describe ${input}`);
+                                shelljs.exec(`gcloud projects describe ${input}`, { silent: true });
                                 this.gcpProjectIdExists = true;
                             } catch (ex) {
                                 this.gcpProjectIdExists = false;
@@ -173,42 +173,48 @@ module.exports = class extends BaseGenerator {
                 if (this.abort) return;
                 const done = this.async();
 
-                exec(`gcloud app describe --format="value(locationId)" --project="${this.gcpProjectId}"`, (err, stdout) => {
-                    if (err) {
-                        const prompts = [
-                            {
-                                type: 'list',
-                                name: 'gaeLocation',
-                                message: 'In which Google App Engine location do you want to deploy ?',
-                                choices: [
-                                    { value: 'northamerica-northeast1', name: 'northamerica-northeast1 - Montréal' },
-                                    { value: 'us-central', name: 'us-central - Iowa' },
-                                    { value: 'us-east1', name: 'us-east1 - South Carolina' },
-                                    { value: 'us-east4', name: 'us-east4 - Northern Virginia' },
-                                    { value: 'southamerica-east1', name: 'southamerica-east1 - São Paulo' },
-                                    { value: 'europe-west', name: 'europe-west - Belgium' },
-                                    { value: 'europe-west2', name: 'europe-west2 - London' },
-                                    { value: 'europe-west3', name: 'europe-west3 - Frankfurt' },
-                                    { value: 'asia-northeast1', name: 'asia-northeast1 - Tokyo' },
-                                    { value: 'asia-south1', name: 'asia-south1 - Mumbai' },
-                                    { value: 'australia-southeast1', name: 'australia-southeast1 - Sydney' }
-                                ],
-                                default: this.gaeLocation ? this.gaeLocation : 0
-                            }
-                        ];
+                shelljs.exec(
+                    `gcloud app describe --format="value(locationId)" --project="${this.gcpProjectId}"`,
+                    { silent: true },
+                    (code, stdout, err) => {
+                        if (err) {
+                            const prompts = [
+                                {
+                                    type: 'list',
+                                    name: 'gaeLocation',
+                                    message: 'In which Google App Engine location do you want to deploy ?',
+                                    choices: [
+                                        { value: 'northamerica-northeast1', name: 'northamerica-northeast1 - Montréal' },
+                                        { value: 'us-central', name: 'us-central - Iowa' },
+                                        { value: 'us-east1', name: 'us-east1 - South Carolina' },
+                                        { value: 'us-east4', name: 'us-east4 - Northern Virginia' },
+                                        { value: 'southamerica-east1', name: 'southamerica-east1 - São Paulo' },
+                                        { value: 'europe-west', name: 'europe-west - Belgium' },
+                                        { value: 'europe-west2', name: 'europe-west2 - London' },
+                                        { value: 'europe-west3', name: 'europe-west3 - Frankfurt' },
+                                        { value: 'asia-northeast1', name: 'asia-northeast1 - Tokyo' },
+                                        { value: 'asia-south1', name: 'asia-south1 - Mumbai' },
+                                        { value: 'australia-southeast1', name: 'australia-southeast1 - Sydney' }
+                                    ],
+                                    default: this.gaeLocation ? this.gaeLocation : 0
+                                }
+                            ];
 
-                        this.prompt(prompts).then(props => {
-                            this.gaeLocation = props.gaeLocation;
-                            this.gaeLocationExists = false;
+                            this.prompt(prompts).then(props => {
+                                this.gaeLocation = props.gaeLocation;
+                                this.gaeLocationExists = false;
+                                done();
+                            });
+                        } else {
+                            this.gaeLocationExists = true;
+                            this.gaeLocation = stdout.trim();
+                            this.log(
+                                `This project already has an App Engine location set, using location "${chalk.cyan(this.gaeLocation)}"`
+                            );
                             done();
-                        });
-                    } else {
-                        this.gaeLocationExists = true;
-                        this.gaeLocation = stdout.trim();
-                        this.log(`This project already has an App Engine location set, using location "${chalk.cyan(this.gaeLocation)}"`);
-                        done();
+                        }
                     }
-                });
+                );
             },
 
             askForServiceName() {
@@ -216,7 +222,7 @@ module.exports = class extends BaseGenerator {
                 const done = this.async();
 
                 try {
-                    execSync(`gcloud app services describe default --project="${this.gcpProjectId}"`, { encoding: 'utf8' });
+                    shelljs.exec(`gcloud app services describe default --project="${this.gcpProjectId}"`, { silent: true });
                     this.defaultServiceExists = true;
                 } catch (ex) {
                     this.defaultServiceExists = false;
@@ -400,9 +406,10 @@ module.exports = class extends BaseGenerator {
                 const done = this.async();
 
                 const cloudSqlInstances = [{ value: '', name: 'New Cloud SQL Instance' }];
-                exec(
+                shelljs.exec(
                     `gcloud sql instances list  --format='value[separator=":"](project,region,name)' --project="${this.gcpProjectId}"`,
-                    (err, stdout, stderr) => {
+                    { silent: true },
+                    (code, stdout, err) => {
                         if (err) {
                             this.log.error(err);
                         } else {
@@ -497,9 +504,10 @@ module.exports = class extends BaseGenerator {
 
                 const cloudSqlDatabases = [{ value: '', name: 'New Database' }];
                 const name = this.gcpCloudSqlInstanceName.split(':')[2];
-                exec(
+                shelljs.exec(
                     `gcloud sql databases list -i ${name} --format='value(name)' --project="${this.gcpProjectId}"`,
-                    (err, stdout, stderr) => {
+                    { silent: true },
+                    (code, stdout, err) => {
                         if (err) {
                             this.log.error(err);
                         } else {
@@ -569,14 +577,18 @@ module.exports = class extends BaseGenerator {
 
                 if (!this.gaeLocationExists) {
                     this.log(chalk.bold(`Configuring Google App Engine Location "${chalk.cyan(this.gaeLocation)}"`));
-                    exec(`gcloud app create --region="${this.gaeLocation}" --project="${this.gcpProjectId}"`, (err, stdout) => {
-                        if (err) {
-                            this.log.error(err);
-                            this.abort = true;
-                        }
+                    shelljs.exec(
+                        `gcloud app create --region="${this.gaeLocation}" --project="${this.gcpProjectId}"`,
+                        { silent: true },
+                        (code, stdout, err) => {
+                            if (err) {
+                                this.log.error(err);
+                                this.abort = true;
+                            }
 
-                        done();
-                    });
+                            done();
+                        }
+                    );
                 } else {
                     done();
                 }
@@ -601,15 +613,15 @@ module.exports = class extends BaseGenerator {
                 }${dbVersionFlag}`;
                 this.log(chalk.bold(`\n... Running: ${cmd}`));
 
-                exec(cmd, (err, stdout, stderr) => {
+                shelljs.exec(cmd, { silent: true }, (code, stdout, err) => {
                     if (err) {
                         this.abort = true;
                         this.log.error(err);
                     }
 
-                    this.gcpCloudSqlInstanceName = execSync(
+                    this.gcpCloudSqlInstanceName = shelljs.exec(
                         `gcloud sql instances describe ${name} --format="value(connectionName)" --project="${this.gcpProjectId}"`,
-                        { encoding: 'utf8' }
+                        { silent: true }
                     );
 
                     done();
@@ -625,27 +637,31 @@ module.exports = class extends BaseGenerator {
                 this.log(chalk.bold('\nConfiguring Cloud SQL Login'));
 
                 const name = this.gcpCloudSqlInstanceName.split(':')[2];
-                exec(`gcloud sql users list -i jhipster --format='value(name)' --project="${this.gcpProjectId}"`, (err, stdout) => {
-                    if (_.includes(stdout, this.gcpCloudSqlUserName)) {
-                        this.log(chalk.bold(`... User "${chalk.cyan(this.gcpCloudSqlUserName)}" already exists`));
-                        const cmd = `gcloud sql users set-password "${this.gcpCloudSqlUserName}" -i "${name}" --host="%" --project="${
-                            this.gcpProjectId
-                        }" --password="..."`;
-                        this.log(chalk.bold(`... To set its password, run: ${cmd}`));
-                        done();
-                    } else {
-                        const cmd = `gcloud sql users create "${this.gcpCloudSqlUserName}" -i "${name}" --host="%" --password="${
-                            this.gcpCloudSqlPassword
-                        }" --project="${this.gcpProjectId}"`;
-                        this.log(chalk.bold(`... Running: ${cmd}`));
-                        exec(cmd, (err, stdout, stderr) => {
-                            if (err) {
-                                this.log.error(err);
-                            }
+                shelljs.exec(
+                    `gcloud sql users list -i jhipster --format='value(name)' --project="${this.gcpProjectId}"`,
+                    { silent: true },
+                    (code, stdout, err) => {
+                        if (_.includes(stdout, this.gcpCloudSqlUserName)) {
+                            this.log(chalk.bold(`... User "${chalk.cyan(this.gcpCloudSqlUserName)}" already exists`));
+                            const cmd = `gcloud sql users set-password "${this.gcpCloudSqlUserName}" -i "${name}" --host="%" --project="${
+                                this.gcpProjectId
+                            }" --password="..."`;
+                            this.log(chalk.bold(`... To set its password, run: ${cmd}`));
                             done();
-                        });
+                        } else {
+                            const cmd = `gcloud sql users create "${this.gcpCloudSqlUserName}" -i "${name}" --host="%" --password="${
+                                this.gcpCloudSqlPassword
+                            }" --project="${this.gcpProjectId}"`;
+                            this.log(chalk.bold(`... Running: ${cmd}`));
+                            shelljs.exec(cmd, { silent: true }, (code, stdout, err) => {
+                                if (err) {
+                                    this.log.error(err);
+                                }
+                                done();
+                            });
+                        }
                     }
-                });
+                );
             },
 
             createCloudSqlDatabase() {
@@ -661,7 +677,7 @@ module.exports = class extends BaseGenerator {
                     this.gcpProjectId
                 }"`;
                 this.log(chalk.bold(`... Running: ${cmd}`));
-                exec(cmd, (err, stdout, stderr) => {
+                shelljs.exec(cmd, { silent: true }, (code, stdout, err) => {
                     if (err) {
                         this.log.error(err);
                     }
diff --git a/generators/generator-constants.js b/generators/generator-constants.js
index 0ed4ab73d5..90470f7375 100644
--- a/generators/generator-constants.js
+++ b/generators/generator-constants.js
@@ -25,7 +25,7 @@ const NODE_VERSION = '12.13.0';
 const YARN_VERSION = '1.19.0';
 const NPM_VERSION = '6.13.0';
 
-const GRADLE_VERSION = '6.0';
+const GRADLE_VERSION = '6.0.1';
 
 // Libraries version
 const JIB_VERSION = '1.7.0';
diff --git a/generators/kubernetes-base.js b/generators/kubernetes-base.js
index a43f334b35..3f29ab5176 100644
--- a/generators/kubernetes-base.js
+++ b/generators/kubernetes-base.js
@@ -68,7 +68,7 @@ function loadConfig() {
     this.ingressType = this.config.get('ingressType');
     this.ingressDomain = this.config.get('ingressDomain');
     this.istio = this.config.get('istio');
-    this.dbRandomPassword = crypto.randomBytes(128).toString('hex');
+    this.dbRandomPassword = crypto.randomBytes(30).toString('hex');
 }
 
 function saveConfig() {
diff --git a/generators/server/files.js b/generators/server/files.js
index 26db0912d6..2cac1790aa 100644
--- a/generators/server/files.js
+++ b/generators/server/files.js
@@ -1247,8 +1247,8 @@ const serverFiles = {
             path: SERVER_TEST_SRC_DIR,
             templates: [
                 {
-                    file: 'package/web/rest/ClientForwardControllerIT.java',
-                    renameTo: generator => `${generator.testDir}web/rest/ClientForwardControllerIT.java`
+                    file: 'package/web/rest/ClientForwardControllerTest.java',
+                    renameTo: generator => `${generator.testDir}web/rest/ClientForwardControllerTest.java`
                 }
             ]
         },
diff --git a/generators/server/templates/build.gradle.ejs b/generators/server/templates/build.gradle.ejs
index 0fb006645d..ed08be585a 100644
--- a/generators/server/templates/build.gradle.ejs
+++ b/generators/server/templates/build.gradle.ejs
@@ -534,15 +534,9 @@ task cleanResources(type: Delete) {
     delete "build/resources"
 }
 
-<%_ if (enableSwaggerCodegen) { _%>
-wrapper {
-    gradleVersion = "5.6.4"
-}
-<%_ } else { _%>
 wrapper {
     gradleVersion = "<%= GRADLE_VERSION %>"
 }
-<%_ } _%>
 
 <%_ if (!skipClient) { _%>
 
diff --git a/generators/server/templates/gradle.properties.ejs b/generators/server/templates/gradle.properties.ejs
index cd96d0d469..1f66c9199d 100644
--- a/generators/server/templates/gradle.properties.ejs
+++ b/generators/server/templates/gradle.properties.ejs
@@ -64,7 +64,7 @@ liquibase_plugin_version=2.0.1
 <%_ } _%>
 sonarqube_plugin_version=2.8
 <%_ if (enableSwaggerCodegen) { _%>
-openapi_plugin_version=4.2.0
+openapi_plugin_version=4.2.1
 <%_ } _%>
 spring_no_http_plugin_version=0.0.3.RELEASE
 checkstyle_version=8.24
diff --git a/generators/server/templates/gradle/wrapper/gradle-wrapper.properties.ejs b/generators/server/templates/gradle/wrapper/gradle-wrapper.properties.ejs
index 00accbeb55..441ac4e3c6 100644
--- a/generators/server/templates/gradle/wrapper/gradle-wrapper.properties.ejs
+++ b/generators/server/templates/gradle/wrapper/gradle-wrapper.properties.ejs
@@ -1,9 +1,5 @@
 distributionBase=GRADLE_USER_HOME
 distributionPath=wrapper/dists
-<%_ if (enableSwaggerCodegen) { _%>
-distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-bin.zip
-<%_ } else { _%>
 distributionUrl=https\://services.gradle.org/distributions/gradle-<%= GRADLE_VERSION %>-bin.zip
-<%_ } _%>
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
diff --git a/generators/server/templates/pom.xml.ejs b/generators/server/templates/pom.xml.ejs
index fa364cbed5..5debaad0e1 100644
--- a/generators/server/templates/pom.xml.ejs
+++ b/generators/server/templates/pom.xml.ejs
@@ -129,7 +129,7 @@
         <jib-maven-plugin.version><%= JIB_VERSION %></jib-maven-plugin.version>
         <lifecycle-mapping.version>1.0.0</lifecycle-mapping.version>
 <%_ if (enableSwaggerCodegen) { _%>
-        <openapi-generator-maven-plugin.version>4.2.0</openapi-generator-maven-plugin.version>
+        <openapi-generator-maven-plugin.version>4.2.1</openapi-generator-maven-plugin.version>
 <%_ } _%>
         <properties-maven-plugin.version>1.0.0</properties-maven-plugin.version>
         <sonar-maven-plugin.version>3.7.0.1746</sonar-maven-plugin.version>
diff --git a/generators/server/templates/src/main/java/package/config/SecurityConfiguration.java.ejs b/generators/server/templates/src/main/java/package/config/SecurityConfiguration.java.ejs
index d646f3fd5b..02d9d91312 100644
--- a/generators/server/templates/src/main/java/package/config/SecurityConfiguration.java.ejs
+++ b/generators/server/templates/src/main/java/package/config/SecurityConfiguration.java.ejs
@@ -217,10 +217,8 @@ public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
         <%_ } _%>
     <%_ } _%>
             .exceptionHandling()
-    <%_ if (authenticationType !== 'oauth2') { _%>
-            .authenticationEntryPoint(problemSupport)
-    <%_ } _%>
-            .accessDeniedHandler(problemSupport)
+                .authenticationEntryPoint(problemSupport)
+                .accessDeniedHandler(problemSupport)
     <%_ if (authenticationType === 'session') { _%>
         <%_ if (!skipUserManagement) { _%>
         .and()
diff --git a/generators/server/templates/src/main/resources/config/application-dev.yml.ejs b/generators/server/templates/src/main/resources/config/application-dev.yml.ejs
index 9df570d676..eb56526590 100644
--- a/generators/server/templates/src/main/resources/config/application-dev.yml.ejs
+++ b/generators/server/templates/src/main/resources/config/application-dev.yml.ejs
@@ -68,9 +68,7 @@ spring:
     devtools:
         restart:
             enabled: true
-            <%_ if (devDatabaseType === 'h2Disk' || devDatabaseType === 'h2Memory') { _%>
-            additional-exclude: .h2.server.properties
-            <%_ } _%>
+            additional-exclude: static/**<% if (devDatabaseType === 'h2Disk' || devDatabaseType === 'h2Memory') { %>,.h2.server.properties<% } %>
         livereload:
             enabled: false # we use Webpack dev server + BrowserSync for livereload
     jackson:
diff --git a/generators/server/templates/src/main/resources/config/liquibase/changelog/initial_schema.xml.ejs b/generators/server/templates/src/main/resources/config/liquibase/changelog/initial_schema.xml.ejs
index a4246dfc7a..e1b534be25 100644
--- a/generators/server/templates/src/main/resources/config/liquibase/changelog/initial_schema.xml.ejs
+++ b/generators/server/templates/src/main/resources/config/liquibase/changelog/initial_schema.xml.ejs
@@ -24,10 +24,13 @@
     xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd
                         http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd">
 
-    <%_ if (prodDatabaseType === 'mysql' || prodDatabaseType === 'mariadb') { _%>
+    <% const isAutoIncrementDB = prodDatabaseType === 'mysql' || prodDatabaseType === 'mariadb';
+       const isSequenceDB = prodDatabaseType === 'postgresql' || prodDatabaseType === 'oracle' || prodDatabaseType === 'mssql';
+    _%>
+    <%_ if (isAutoIncrementDB) { _%>
     <property name="autoIncrement" value="true"/>
     <%_ } _%>
-    <%_ if (prodDatabaseType === 'postgresql' || prodDatabaseType === 'oracle' || prodDatabaseType === 'mssql') { _%>
+    <%_ if (isSequenceDB) { _%>
     <changeSet id="00000000000000" author="jhipster">
         <createSequence sequenceName="sequence_generator" startValue="1050" incrementBy="50"/>
     </changeSet>
@@ -45,7 +48,7 @@
                 <constraints primaryKey="true" nullable="false"/>
             </column>
             <%_ } else { _%>
-            <column name="id" type="bigint" autoIncrement="${autoIncrement}">
+            <column name="id" type="bigint" <% if (isAutoIncrementDB) { _%> autoIncrement="${autoIncrement}" <%_ } _%>>
                 <constraints primaryKey="true" nullable="false"/>
             </column>
             <%_ } _%>
@@ -172,7 +175,7 @@
     <%_ } _%>
 <%_ } _%>
         <createTable tableName="<%= jhiTablePrefix %>_persistent_audit_event">
-            <column name="event_id" type="bigint" autoIncrement="${autoIncrement}">
+            <column name="event_id" type="bigint" <% if (isAutoIncrementDB) { _%> autoIncrement="${autoIncrement}" <%_ } _%>>
                 <constraints primaryKey="true" nullable="false"/>
             </column>
             <column name="principal" type="varchar(50)">
@@ -215,7 +218,7 @@
 
     <changeSet author="jhipster" id="00000000000002" context="test">
         <createTable tableName="<%= jhiTablePrefix %>_date_time_wrapper">
-            <column autoIncrement="${autoIncrement}" name="id" type="BIGINT">
+            <column <% if (isAutoIncrementDB) { _%> autoIncrement="${autoIncrement}" <%_ } %> name="id" type="BIGINT">
                 <constraints primaryKey="true" primaryKeyName="<%= jhiTablePrefix %>_date_time_wrapperPK"/>
             </column>
             <column name="instant" type="timestamp"/>
diff --git a/package-lock.json b/package-lock.json
index 2a8058fe96..e755a3fe77 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,6 +1,6 @@
 {
     "name": "generator-jhipster",
-    "version": "6.5.0",
+    "version": "6.5.1",
     "lockfileVersion": 1,
     "requires": true,
     "dependencies": {
@@ -3370,9 +3370,9 @@
             }
         },
         "jhipster-core": {
-            "version": "6.0.1",
-            "resolved": "https://registry.npmjs.org/jhipster-core/-/jhipster-core-6.0.1.tgz",
-            "integrity": "sha512-YQN9V74F/AtnYQV00kaISBMzuRKID92To07220m2bzDhc59X3RsioZiqhV0ESIK3DTdI6QSVIuhVIgM/Z1XgCA==",
+            "version": "6.0.4",
+            "resolved": "https://registry.npmjs.org/jhipster-core/-/jhipster-core-6.0.4.tgz",
+            "integrity": "sha512-BrJB8QGkqCIxMQmjSk1QEgx7jLy727cJbOoyoA8XjX6hp15XEu2biVdFBNqQqiJ5WsXZhOs9ybOyAQGTB7DVtA==",
             "requires": {
                 "chevrotain": "6.5.0",
                 "fs-extra": "8.1.0",
diff --git a/package.json b/package.json
index 502551e907..fa4105e489 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
 {
     "name": "generator-jhipster",
-    "version": "6.5.0",
+    "version": "6.5.1",
     "description": "Spring Boot + Angular/React in one handy generator",
     "files": [
         "cli",
@@ -60,7 +60,7 @@
         "glob": "7.1.3",
         "gulp-filter": "5.1.0",
         "insight": "0.10.1",
-        "jhipster-core": "6.0.1",
+        "jhipster-core": "6.0.4",
         "js-object-pretty-print": "0.3.0",
         "js-yaml": "3.13.1",
         "lodash": "4.17.13",


Test patch:
diff --git a/generators/client/templates/angular/src/test/javascript/protractor.conf.js.ejs b/generators/client/templates/angular/src/test/javascript/protractor.conf.js.ejs
index c4fa8facf4..816033f5ed 100644
--- a/generators/client/templates/angular/src/test/javascript/protractor.conf.js.ejs
+++ b/generators/client/templates/angular/src/test/javascript/protractor.conf.js.ejs
@@ -57,7 +57,7 @@ exports.config = {
     },
 
     onPrepare: function() {
-        browser.driver.manage().window().setSize(1280, 1024);
+        browser.driver.manage().window().setSize(1280, 10240);
         // Disable animations
         // @ts-ignore
         browser.executeScript('document.body.className += " notransition";');
diff --git a/generators/entity-client/templates/react/src/test/javascript/e2e/entities/entity.spec.ts.ejs b/generators/entity-client/templates/react/src/test/javascript/e2e/entities/entity.spec.ts.ejs
index 6571a20c22..bcb188ea91 100644
--- a/generators/entity-client/templates/react/src/test/javascript/e2e/entities/entity.spec.ts.ejs
+++ b/generators/entity-client/templates/react/src/test/javascript/e2e/entities/entity.spec.ts.ejs
@@ -73,6 +73,8 @@ describe('<%= entityClass %> e2e test', () => {
         await signInPage.loginWithOAuth('admin', 'admin');
         <%_ } _%>
         await waitUntilDisplayed(navBarPage.entityMenu);
+        await waitUntilDisplayed(navBarPage.adminMenu);
+        await waitUntilDisplayed(navBarPage.accountMenu);
     });
 
     it('should load <%= entityClassPlural %>', async () => {
diff --git a/generators/server/templates/src/test/java/package/web/rest/ClientForwardControllerIT.java.ejs b/generators/server/templates/src/test/java/package/web/rest/ClientForwardControllerTest.java.ejs
similarity index 73%
rename from generators/server/templates/src/test/java/package/web/rest/ClientForwardControllerIT.java.ejs
rename to generators/server/templates/src/test/java/package/web/rest/ClientForwardControllerTest.java.ejs
index f99b19a1bb..e499650a8a 100644
--- a/generators/server/templates/src/test/java/package/web/rest/ClientForwardControllerIT.java.ejs
+++ b/generators/server/templates/src/test/java/package/web/rest/ClientForwardControllerTest.java.ejs
@@ -18,22 +18,8 @@
 -%>
 package <%=packageName%>.web.rest;
 
-<%_ if (databaseType === 'cassandra') { _%>
-import <%= packageName %>.AbstractCassandraTest;
-<%_ } _%>
-<%_ if (cacheProvider === 'redis') { _%>
-import <%=packageName%>.RedisTestContainerExtension;
-<%_ } _%>
-import <%=packageName%>.<%= mainClass %>;
-<%_ if (authenticationType === 'oauth2') { _%>
-import <%=packageName%>.config.TestSecurityConfiguration;
-<%_ } _%>
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
-<%_ if (cacheProvider === 'redis') { _%>
-import org.junit.jupiter.api.extension.ExtendWith;
-<%_ } _%>
-import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.http.MediaType;
 import org.springframework.test.web.servlet.MockMvc;
 import org.springframework.test.web.servlet.ResultActions;
@@ -47,17 +33,9 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
 import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
 
 /**
- * Integration tests for the {@link ClientForwardController} REST controller.
+ * Unit tests for the {@link ClientForwardController} REST controller.
  */
-<%_ if (authenticationType === 'oauth2') { _%>
-@SpringBootTest(classes = {<%= mainClass %>.class, TestSecurityConfiguration.class})
-<%_ } else { _%>
-@SpringBootTest(classes = <%= mainClass %>.class)
-<%_ } _%>
-<%_ if (cacheProvider === 'redis') { _%>
-@ExtendWith(RedisTestContainerExtension.class)
-<%_ } _%>
-public class ClientForwardControllerIT <% if (databaseType === 'cassandra') { %>extends AbstractCassandraTest <% } %>{
+public class ClientForwardControllerTest {
 
     private MockMvc restMockMvc;
 
diff --git a/test-integration/scripts/25-sonar-analyze.sh b/test-integration/scripts/25-sonar-analyze.sh
index 2357e67eea..912cb10994 100755
--- a/test-integration/scripts/25-sonar-analyze.sh
+++ b/test-integration/scripts/25-sonar-analyze.sh
@@ -12,6 +12,7 @@ if [[ "$JHI_APP" = "ngx-default" && "$TRAVIS_REPO_SLUG" = "jhipster/generator-jh
     ./mvnw -ntp initialize org.jacoco:jacoco-maven-plugin:prepare-agent sonar:sonar \
         -Dsonar.host.url=https://sonarcloud.io \
         -Dsonar.projectKey=io.github.jhipster.sample:jhipster-sample-application \
+        -Dsonar.organization=default \
         -Dsonar.login=$SONAR_TOKEN
 
 elif [[ $JHI_SONAR = 1 ]]; then