From ed41ad9816f65deaf1553ae7edee19ef735ec1d6 Mon Sep 17 00:00:00 2001 From: Julien Dubois Date: Wed, 23 Mar 2016 16:27:37 +0100 Subject: [PATCH] automatic project update --- .eslintignore | 6 + .eslintrc.json | 29 + .gitignore | 7 +- .mvn/wrapper/maven-wrapper.properties | 2 +- .travis.yml | 4 +- .yo-rc.json | 15 +- Gruntfile.js | 362 - README.md | 38 +- bower.json | 69 +- gulp/build.js | 50 + gulp/config.js | 12 + gulp/handleErrors.js | 20 + gulp/serve.js | 60 + gulp/utils.js | 36 + gulpfile.js | 275 + package.json | 99 +- pom.xml | 163 +- src/main/docker/Dockerfile | 10 + src/main/docker/app.yml | 15 + src/main/docker/mysql.yml | 14 + src/main/docker/prod.yml | 12 - src/main/docker/sonar.yml | 14 +- .../mycompany/myapp/ApplicationWebXml.java | 2 +- ...ication.java => SampleApplicationApp.java} | 29 +- .../ExceptionHandlingAsyncTaskExecutor.java | 2 +- .../myapp/config/AsyncConfiguration.java | 2 +- .../myapp/config/CacheConfiguration.java | 1 - .../com/mycompany/myapp/config/Constants.java | 7 +- .../myapp/config/DatabaseConfiguration.java | 55 +- .../myapp/config/JHipsterProperties.java | 162 +- .../myapp/config/LocaleConfiguration.java | 11 - .../myapp/config/LoggingConfiguration.java | 62 + .../myapp/config/MetricsConfiguration.java | 14 +- .../myapp/config/SecurityConfiguration.java | 14 +- .../myapp/config/ThymeleafConfiguration.java | 12 - .../mycompany/myapp/config/WebConfigurer.java | 48 +- .../config/apidoc/SwaggerConfiguration.java | 19 +- .../liquibase/AsyncSpringLiquibase.java | 29 +- .../myapp/domain/AbstractAuditingEntity.java | 2 - .../com/mycompany/myapp/domain/Authority.java | 2 + .../mycompany/myapp/domain/BankAccount.java | 11 +- .../com/mycompany/myapp/domain/Label.java | 6 +- .../com/mycompany/myapp/domain/Operation.java | 17 +- .../myapp/domain/PersistentToken.java | 5 +- .../java/com/mycompany/myapp/domain/User.java | 4 + .../domain/util/JSR310DateTimeSerializer.java | 2 +- .../CustomAuditEventRepository.java | 75 +- .../PersistenceAuditEventRepository.java | 4 +- .../CustomPersistentRememberMeServices.java | 19 +- .../myapp/security/SecurityUtils.java | 23 +- .../myapp/service/AuditEventService.java | 17 +- .../mycompany/myapp/service/MailService.java | 1 - .../mycompany/myapp/service/UserService.java | 15 +- .../web/filter/CachingHttpHeadersFilter.java | 13 +- .../StaticResourcesProductionFilter.java | 42 - .../myapp/web/rest/AccountResource.java | 82 +- .../myapp/web/rest/AuditResource.java | 43 +- .../myapp/web/rest/BankAccountResource.java | 46 +- .../myapp/web/rest/LabelResource.java | 34 +- .../myapp/web/rest/OperationResource.java | 31 +- .../myapp/web/rest/UserResource.java | 52 +- .../mycompany/myapp/web/rest/dto/UserDTO.java | 2 +- .../myapp/web/rest/errors/ErrorConstants.java | 1 + .../myapp/web/rest/errors/ErrorDTO.java | 6 +- .../web/rest/errors/ExceptionTranslator.java | 18 + .../myapp/web/rest/errors/FieldErrorDTO.java | 2 +- .../myapp/web/rest/mapper/UserMapper.java | 56 + .../myapp/web/rest/util/HeaderUtil.java | 16 +- .../myapp/web/rest/util/PaginationUtil.java | 11 +- src/main/resources/config/application-dev.yml | 15 +- .../resources/config/application-prod.yml | 23 +- src/main/resources/config/application.yml | 11 +- .../00000000000000_initial_schema.xml | 6 +- .../20150805125054_added_entity_Operation.xml | 6 +- src/main/resources/i18n/messages.properties | 22 + .../resources/i18n/messages_en.properties | 3 + .../resources/i18n/messages_fr.properties | 19 - src/main/resources/logback-spring.xml | 3 +- src/main/resources/mails/creationEmail.html | 4 +- src/main/webapp/.htaccess | 543 - src/main/webapp/app/account/account.state.js | 16 + .../account/activate/activate.controller.js | 23 + .../app/account/activate/activate.html | 6 +- .../app/account/activate/activate.state.js | 33 + .../password-strength-bar.directive.js | 95 + .../account/password/password.controller.js | 39 + .../app/account/password/password.html | 16 +- .../app/account/password/password.state.js | 33 + .../account/register/register.controller.js | 49 + .../app/account/register/register.html | 26 +- .../app/account/register/register.state.js | 33 + .../reset/finish/reset.finish.controller.js | 37 + .../account/reset/finish/reset.finish.html | 22 +- .../reset/finish/reset.finish.state.js | 32 + .../reset/request/reset.request.controller.js | 38 + .../account/reset/request/reset.request.html | 10 +- .../reset/request/reset.request.state.js | 32 + .../account/sessions/sessions.controller.js | 37 + .../app/account/sessions/sessions.html | 10 +- .../app/account/sessions/sessions.state.js | 33 + .../account/settings/settings.controller.js | 54 + .../app/account/settings/settings.html | 18 +- .../app/account/settings/settings.state.js | 33 + src/main/webapp/app/admin/admin.state.js | 16 + .../app/admin/audits/audits.controller.js | 63 + .../app/admin/audits/audits.html | 10 +- .../webapp/app/admin/audits/audits.service.js | 25 + .../webapp/app/admin/audits/audits.state.js | 33 + .../configuration/configuration.controller.js | 23 + .../admin/configuration/configuration.html | 47 + .../configuration/configuration.service.js | 47 + .../configuration/configuration.state.js | 33 + .../{scripts => }/app/admin/docs/docs.html | 0 src/main/webapp/app/admin/docs/docs.state.js | 30 + .../app/admin/health/health.controller.js | 171 + .../app/admin/health/health.html | 12 +- .../admin/health/health.modal.controller.js | 21 + .../app/admin/health/health.modal.html | 18 +- .../webapp/app/admin/health/health.service.js | 23 + .../webapp/app/admin/health/health.state.js | 33 + .../webapp/app/admin/logs/logs.controller.js | 22 + src/main/webapp/app/admin/logs/logs.html | 27 + .../webapp/app/admin/logs/logs.service.js | 18 + src/main/webapp/app/admin/logs/logs.state.js | 33 + .../app/admin/metrics/metrics.controller.js | 74 + .../webapp/app/admin/metrics/metrics.html | 239 + .../admin/metrics/metrics.modal.controller.js | 53 + .../app/admin/metrics/metrics.modal.html | 20 +- .../app/admin/metrics/metrics.service.js | 30 + .../webapp/app/admin/metrics/metrics.state.js | 33 + ...ser-management-delete-dialog.controller.js | 28 + .../user-management-delete-dialog.html | 10 +- .../user-management-detail.controller.js | 24 + .../user-management-detail.html | 44 +- .../user-management-dialog.controller.js | 46 + .../user-management-dialog.html | 50 +- .../user-management.controller.js | 70 + .../user-management/user-management.html | 78 + .../user-management/user-management.state.js | 134 + src/main/webapp/app/app.constants.js | 11 + src/main/webapp/app/app.module.js | 29 + src/main/webapp/app/app.state.js | 32 + .../webapp/app/blocks/config/alert.config.js | 14 + .../app/blocks/config/compile.config.js | 24 + .../webapp/app/blocks/config/http.config.js | 35 + .../app/blocks/config/localstorage.config.js | 13 + .../config/translation-storage.provider.js | 28 + .../app/blocks/config/translation.config.js | 25 + .../app/blocks/handlers/state.handler.js | 76 + .../blocks/handlers/translation.handler.js | 43 + .../interceptor/auth-expired.interceptor.js | 66 + .../interceptor/errorhandler.interceptor.js | 24 + .../interceptor/notification.interceptor.js | 25 + .../components/alert/alert-error.directive.js | 87 + .../app/components/alert/alert.directive.js | 27 + .../components/alert/alert.service.js | 59 +- .../components/form/maxbytes.directive.js | 43 +- .../components/form/minbytes.directive.js | 44 +- .../components/form/pagination.constants.js | 9 + .../form/show-validation.directive.js | 35 + .../app/components/form/uib-pager.config.js | 13 + .../components/form/uib-pagination.config.js | 17 + .../components/language/language.constants.js | 16 + .../language/language.controller.js | 25 + .../components/language/language.filter.js | 41 + .../components/language/language.service.js | 33 + .../app/components/login/login.controller.js | 67 + .../components}/login/login.html | 28 +- .../app/components/login/login.service.js | 42 + .../components/util/base64.service.js | 52 +- .../app/components/util/capitalize.filter.js | 18 + .../app/components/util/data-util.service.js | 74 + .../app/components/util/date-util.service.js | 50 + .../util/jhi-item-count.directive.js | 19 + .../util/pagination-util.service.js | 42 + .../components/util/parse-links.service.js | 34 +- .../app/components/util/sort-by.directive.js | 24 + .../app/components/util/sort.directive.js | 80 + .../util/truncate-characters.filter.js} | 36 +- .../components/util/truncate-words.filter.js | 28 + .../bank-account-delete-dialog.controller.js | 23 + .../bank-account-delete-dialog.html} | 10 +- .../bank-account-detail.controller.js | 24 + .../bank-account/bank-account-detail.html | 28 + .../bank-account-dialog.controller.js | 44 + .../bank-account/bank-account-dialog.html} | 24 +- .../bank-account/bank-account.controller.js | 22 + .../bank-account/bank-account.service.js} | 18 +- .../bank-account/bank-account.state.js | 138 + .../entities/bank-account/bank-accounts.html} | 30 +- src/main/webapp/app/entities/entity.state.js | 16 + .../label/label-delete-dialog.controller.js | 23 + .../entities/label/label-delete-dialog.html | 10 +- .../entities/label/label-detail.controller.js | 24 + .../app/entities/label/label-detail.html | 18 + .../entities/label/label-dialog.controller.js | 43 + .../app/entities/label/label-dialog.html | 16 +- .../app/entities/label/label.controller.js | 22 + .../entities/label/label.service.js | 18 +- .../webapp/app/entities/label/label.state.js | 137 + .../app/entities/label/labels.html | 20 +- .../operation-delete-dialog.controller.js | 23 + .../operation/operation-delete-dialog.html | 10 +- .../operation/operation-detail.controller.js | 24 + .../entities/operation/operation-detail.html | 40 + .../operation/operation-dialog.controller.js | 51 + .../entities/operation/operation-dialog.html | 40 +- .../operation/operation.controller.js | 53 + .../entities/operation/operation.service.js | 18 +- .../app/entities/operation/operation.state.js | 139 + .../app/entities/operation/operations.html | 32 +- src/main/webapp/app/home/home.controller.js | 29 + .../app/main/main.html => app/home/home.html} | 32 +- src/main/webapp/app/home/home.state.js | 32 + .../layouts}/error/accessdenied.html | 0 .../app => app/layouts}/error/error.html | 0 .../layouts/error/error.state.js} | 23 +- .../layouts/navbar/active-link.directive.js | 30 + .../layouts/navbar/active-menu.directive.js | 31 + .../app/layouts/navbar/navbar.controller.js | 29 + .../layouts}/navbar/navbar.html | 56 +- .../services/auth}/account.service.js | 19 +- .../app/services/auth/activate.service.js | 17 + .../webapp/app/services/auth/auth.service.js | 166 + .../app/services/auth/auth.session.service.js | 54 + .../auth/has-any-authority.directive.js | 50 + .../services/auth/has-authority.directive.js | 52 + .../auth/password-reset-finish.service.js | 15 + .../auth/password-reset-init.service.js | 15 + .../app/services/auth/password.service.js | 15 + .../app/services/auth/principal.service.js | 99 + .../app/services/auth/register.service.js | 13 + .../app/services/auth/sessions.service.js | 15 + .../webapp/app/services/user/user.service.js | 27 + .../webapp/assets/styles/documentation.css | 4 - .../bower_components/angular-aria/.bower.json | 13 +- .../angular-aria/angular-aria.js | 102 +- .../angular-aria/angular-aria.min.js | 20 +- .../angular-aria/angular-aria.min.js.map | 4 +- .../bower_components/angular-aria/bower.json | 5 +- .../angular-aria/package.json | 2 +- .../angular-bootstrap/.bower.json | 12 +- .../angular-bootstrap/bower.json | 4 +- .../angular-bootstrap/package.json | 4 +- .../angular-bootstrap/ui-bootstrap-csp.css | 107 +- .../angular-bootstrap/ui-bootstrap-tpls.js | 11173 +++-- .../ui-bootstrap-tpls.min.js | 12 +- .../angular-bootstrap/ui-bootstrap.js | 7638 ++-- .../angular-bootstrap/ui-bootstrap.min.js | 11 +- .../angular-cookies/.bower.json | 13 +- .../angular-cookies/angular-cookies.js | 17 +- .../angular-cookies/angular-cookies.min.js | 4 +- .../angular-cookies.min.js.map | 2 +- .../angular-cookies/bower.json | 5 +- .../angular-cookies/package.json | 2 +- .../angular-dynamic-locale/.bower.json | 10 +- .../angular-dynamic-locale/Gruntfile.js | 3 +- .../angular-dynamic-locale/bower.json | 2 +- .../dist/tmhDynamicLocale.min.js | 8 + .../dist/tmhDynamicLocale.min.js.map | 1 + .../angular-dynamic-locale/package.json | 2 +- .../src/tmhDynamicLocale.js | 19 +- .../test/tmhDynamicLocaleSpec.js | 34 +- .../tmhDynamicLocale.min.js | 4 +- .../tmhDynamicLocale.min.js.map | 2 +- .../bower_components/angular-i18n/.bower.json | 11 +- .../angular-i18n/angular-locale_af-na.js | 15 + .../angular-i18n/angular-locale_af-za.js | 15 + .../angular-i18n/angular-locale_af.js | 15 + .../angular-i18n/angular-locale_agq-cm.js | 15 + .../angular-i18n/angular-locale_agq.js | 15 + .../angular-i18n/angular-locale_ak-gh.js | 15 + .../angular-i18n/angular-locale_ak.js | 15 + .../angular-i18n/angular-locale_am-et.js | 15 + .../angular-i18n/angular-locale_am.js | 15 + .../angular-i18n/angular-locale_ar-001.js | 15 + .../angular-i18n/angular-locale_ar-ae.js | 15 + .../angular-i18n/angular-locale_ar-bh.js | 15 + .../angular-i18n/angular-locale_ar-dj.js | 15 + .../angular-i18n/angular-locale_ar-dz.js | 15 + .../angular-i18n/angular-locale_ar-eg.js | 15 + .../angular-i18n/angular-locale_ar-eh.js | 15 + .../angular-i18n/angular-locale_ar-er.js | 15 + .../angular-i18n/angular-locale_ar-il.js | 15 + .../angular-i18n/angular-locale_ar-iq.js | 15 + .../angular-i18n/angular-locale_ar-jo.js | 15 + .../angular-i18n/angular-locale_ar-km.js | 15 + .../angular-i18n/angular-locale_ar-kw.js | 15 + .../angular-i18n/angular-locale_ar-lb.js | 15 + .../angular-i18n/angular-locale_ar-ly.js | 15 + .../angular-i18n/angular-locale_ar-ma.js | 15 + .../angular-i18n/angular-locale_ar-mr.js | 15 + .../angular-i18n/angular-locale_ar-om.js | 15 + .../angular-i18n/angular-locale_ar-ps.js | 15 + .../angular-i18n/angular-locale_ar-qa.js | 15 + .../angular-i18n/angular-locale_ar-sa.js | 15 + .../angular-i18n/angular-locale_ar-sd.js | 15 + .../angular-i18n/angular-locale_ar-so.js | 15 + .../angular-i18n/angular-locale_ar-ss.js | 15 + .../angular-i18n/angular-locale_ar-sy.js | 15 + .../angular-i18n/angular-locale_ar-td.js | 15 + .../angular-i18n/angular-locale_ar-tn.js | 15 + .../angular-i18n/angular-locale_ar-ye.js | 15 + .../angular-i18n/angular-locale_ar.js | 15 + .../angular-i18n/angular-locale_as-in.js | 15 + .../angular-i18n/angular-locale_as.js | 15 + .../angular-i18n/angular-locale_asa-tz.js | 15 + .../angular-i18n/angular-locale_asa.js | 15 + .../angular-i18n/angular-locale_ast-es.js | 15 + .../angular-i18n/angular-locale_ast.js | 15 + .../angular-i18n/angular-locale_az-cyrl-az.js | 15 + .../angular-i18n/angular-locale_az-cyrl.js | 15 + .../angular-i18n/angular-locale_az-latn-az.js | 15 + .../angular-i18n/angular-locale_az-latn.js | 15 + .../angular-i18n/angular-locale_az.js | 15 + .../angular-i18n/angular-locale_bas-cm.js | 15 + .../angular-i18n/angular-locale_bas.js | 15 + .../angular-i18n/angular-locale_be-by.js | 15 + .../angular-i18n/angular-locale_be.js | 15 + .../angular-i18n/angular-locale_bem-zm.js | 15 + .../angular-i18n/angular-locale_bem.js | 15 + .../angular-i18n/angular-locale_bez-tz.js | 15 + .../angular-i18n/angular-locale_bez.js | 15 + .../angular-i18n/angular-locale_bg-bg.js | 15 + .../angular-i18n/angular-locale_bg.js | 15 + .../angular-i18n/angular-locale_bm-latn-ml.js | 15 + .../angular-i18n/angular-locale_bm-latn.js | 15 + .../angular-i18n/angular-locale_bm.js | 15 + .../angular-i18n/angular-locale_bn-bd.js | 15 + .../angular-i18n/angular-locale_bn-in.js | 15 + .../angular-i18n/angular-locale_bn.js | 15 + .../angular-i18n/angular-locale_bo-cn.js | 15 + .../angular-i18n/angular-locale_bo-in.js | 15 + .../angular-i18n/angular-locale_bo.js | 15 + .../angular-i18n/angular-locale_br-fr.js | 15 + .../angular-i18n/angular-locale_br.js | 15 + .../angular-i18n/angular-locale_brx-in.js | 15 + .../angular-i18n/angular-locale_brx.js | 15 + .../angular-i18n/angular-locale_bs-cyrl-ba.js | 15 + .../angular-i18n/angular-locale_bs-cyrl.js | 15 + .../angular-i18n/angular-locale_bs-latn-ba.js | 15 + .../angular-i18n/angular-locale_bs-latn.js | 15 + .../angular-i18n/angular-locale_bs.js | 15 + .../angular-i18n/angular-locale_ca-ad.js | 15 + .../angular-locale_ca-es-valencia.js | 15 + .../angular-i18n/angular-locale_ca-es.js | 15 + .../angular-i18n/angular-locale_ca-fr.js | 15 + .../angular-i18n/angular-locale_ca-it.js | 15 + .../angular-i18n/angular-locale_ca.js | 15 + .../angular-i18n/angular-locale_cgg-ug.js | 15 + .../angular-i18n/angular-locale_cgg.js | 15 + .../angular-i18n/angular-locale_chr-us.js | 15 + .../angular-i18n/angular-locale_chr.js | 15 + .../angular-locale_ckb-arab-iq.js | 15 + .../angular-locale_ckb-arab-ir.js | 15 + .../angular-i18n/angular-locale_ckb-arab.js | 15 + .../angular-i18n/angular-locale_ckb-iq.js | 15 + .../angular-i18n/angular-locale_ckb-ir.js | 15 + .../angular-locale_ckb-latn-iq.js | 15 + .../angular-i18n/angular-locale_ckb-latn.js | 15 + .../angular-i18n/angular-locale_ckb.js | 15 + .../angular-i18n/angular-locale_cs-cz.js | 15 + .../angular-i18n/angular-locale_cs.js | 15 + .../angular-i18n/angular-locale_cy-gb.js | 15 + .../angular-i18n/angular-locale_cy.js | 15 + .../angular-i18n/angular-locale_da-dk.js | 15 + .../angular-i18n/angular-locale_da-gl.js | 15 + .../angular-i18n/angular-locale_da.js | 15 + .../angular-i18n/angular-locale_dav-ke.js | 15 + .../angular-i18n/angular-locale_dav.js | 15 + .../angular-i18n/angular-locale_de-at.js | 15 + .../angular-i18n/angular-locale_de-be.js | 15 + .../angular-i18n/angular-locale_de-ch.js | 15 + .../angular-i18n/angular-locale_de-de.js | 15 + .../angular-i18n/angular-locale_de-li.js | 15 + .../angular-i18n/angular-locale_de-lu.js | 15 + .../angular-i18n/angular-locale_de.js | 15 + .../angular-i18n/angular-locale_dje-ne.js | 15 + .../angular-i18n/angular-locale_dje.js | 15 + .../angular-i18n/angular-locale_dsb-de.js | 15 + .../angular-i18n/angular-locale_dsb.js | 15 + .../angular-i18n/angular-locale_dua-cm.js | 15 + .../angular-i18n/angular-locale_dua.js | 15 + .../angular-i18n/angular-locale_dyo-sn.js | 15 + .../angular-i18n/angular-locale_dyo.js | 15 + .../angular-i18n/angular-locale_dz-bt.js | 15 + .../angular-i18n/angular-locale_dz.js | 15 + .../angular-i18n/angular-locale_ebu-ke.js | 15 + .../angular-i18n/angular-locale_ebu.js | 15 + .../angular-i18n/angular-locale_ee-gh.js | 15 + .../angular-i18n/angular-locale_ee-tg.js | 15 + .../angular-i18n/angular-locale_ee.js | 15 + .../angular-i18n/angular-locale_el-cy.js | 15 + .../angular-i18n/angular-locale_el-gr.js | 15 + .../angular-i18n/angular-locale_el.js | 15 + .../angular-i18n/angular-locale_en-001.js | 15 + .../angular-i18n/angular-locale_en-150.js | 15 + .../angular-i18n/angular-locale_en-ag.js | 15 + .../angular-i18n/angular-locale_en-ai.js | 15 + .../angular-i18n/angular-locale_en-as.js | 15 + .../angular-i18n/angular-locale_en-au.js | 15 + .../angular-i18n/angular-locale_en-bb.js | 15 + .../angular-i18n/angular-locale_en-be.js | 15 + .../angular-i18n/angular-locale_en-bm.js | 15 + .../angular-i18n/angular-locale_en-bs.js | 15 + .../angular-i18n/angular-locale_en-bw.js | 15 + .../angular-i18n/angular-locale_en-bz.js | 15 + .../angular-i18n/angular-locale_en-ca.js | 15 + .../angular-i18n/angular-locale_en-cc.js | 15 + .../angular-i18n/angular-locale_en-ck.js | 15 + .../angular-i18n/angular-locale_en-cm.js | 15 + .../angular-i18n/angular-locale_en-cx.js | 15 + .../angular-i18n/angular-locale_en-dg.js | 15 + .../angular-i18n/angular-locale_en-dm.js | 15 + .../angular-i18n/angular-locale_en-er.js | 15 + .../angular-i18n/angular-locale_en-fj.js | 15 + .../angular-i18n/angular-locale_en-fk.js | 15 + .../angular-i18n/angular-locale_en-fm.js | 15 + .../angular-i18n/angular-locale_en-gb.js | 15 + .../angular-i18n/angular-locale_en-gd.js | 15 + .../angular-i18n/angular-locale_en-gg.js | 15 + .../angular-i18n/angular-locale_en-gh.js | 15 + .../angular-i18n/angular-locale_en-gi.js | 15 + .../angular-i18n/angular-locale_en-gm.js | 15 + .../angular-i18n/angular-locale_en-gu.js | 15 + .../angular-i18n/angular-locale_en-gy.js | 15 + .../angular-i18n/angular-locale_en-hk.js | 15 + .../angular-i18n/angular-locale_en-ie.js | 15 + .../angular-i18n/angular-locale_en-im.js | 15 + .../angular-i18n/angular-locale_en-in.js | 15 + .../angular-i18n/angular-locale_en-io.js | 15 + .../angular-i18n/angular-locale_en-iso.js | 15 + .../angular-i18n/angular-locale_en-je.js | 15 + .../angular-i18n/angular-locale_en-jm.js | 15 + .../angular-i18n/angular-locale_en-ke.js | 15 + .../angular-i18n/angular-locale_en-ki.js | 15 + .../angular-i18n/angular-locale_en-kn.js | 15 + .../angular-i18n/angular-locale_en-ky.js | 15 + .../angular-i18n/angular-locale_en-lc.js | 15 + .../angular-i18n/angular-locale_en-lr.js | 15 + .../angular-i18n/angular-locale_en-ls.js | 15 + .../angular-i18n/angular-locale_en-mg.js | 15 + .../angular-i18n/angular-locale_en-mh.js | 15 + .../angular-i18n/angular-locale_en-mo.js | 15 + .../angular-i18n/angular-locale_en-mp.js | 15 + .../angular-i18n/angular-locale_en-ms.js | 15 + .../angular-i18n/angular-locale_en-mt.js | 15 + .../angular-i18n/angular-locale_en-mu.js | 15 + .../angular-i18n/angular-locale_en-mw.js | 15 + .../angular-i18n/angular-locale_en-my.js | 15 + .../angular-i18n/angular-locale_en-na.js | 15 + .../angular-i18n/angular-locale_en-nf.js | 15 + .../angular-i18n/angular-locale_en-ng.js | 15 + .../angular-i18n/angular-locale_en-nr.js | 15 + .../angular-i18n/angular-locale_en-nu.js | 15 + .../angular-i18n/angular-locale_en-nz.js | 15 + .../angular-i18n/angular-locale_en-pg.js | 15 + .../angular-i18n/angular-locale_en-ph.js | 15 + .../angular-i18n/angular-locale_en-pk.js | 15 + .../angular-i18n/angular-locale_en-pn.js | 15 + .../angular-i18n/angular-locale_en-pr.js | 15 + .../angular-i18n/angular-locale_en-pw.js | 15 + .../angular-i18n/angular-locale_en-rw.js | 15 + .../angular-i18n/angular-locale_en-sb.js | 15 + .../angular-i18n/angular-locale_en-sc.js | 15 + .../angular-i18n/angular-locale_en-sd.js | 15 + .../angular-i18n/angular-locale_en-sg.js | 15 + .../angular-i18n/angular-locale_en-sh.js | 15 + .../angular-i18n/angular-locale_en-sl.js | 15 + .../angular-i18n/angular-locale_en-ss.js | 15 + .../angular-i18n/angular-locale_en-sx.js | 15 + .../angular-i18n/angular-locale_en-sz.js | 15 + .../angular-i18n/angular-locale_en-tc.js | 15 + .../angular-i18n/angular-locale_en-tk.js | 15 + .../angular-i18n/angular-locale_en-to.js | 15 + .../angular-i18n/angular-locale_en-tt.js | 15 + .../angular-i18n/angular-locale_en-tv.js | 15 + .../angular-i18n/angular-locale_en-tz.js | 15 + .../angular-i18n/angular-locale_en-ug.js | 15 + .../angular-i18n/angular-locale_en-um.js | 15 + .../angular-i18n/angular-locale_en-us.js | 15 + .../angular-i18n/angular-locale_en-vc.js | 15 + .../angular-i18n/angular-locale_en-vg.js | 15 + .../angular-i18n/angular-locale_en-vi.js | 15 + .../angular-i18n/angular-locale_en-vu.js | 15 + .../angular-i18n/angular-locale_en-ws.js | 15 + .../angular-i18n/angular-locale_en-za.js | 15 + .../angular-i18n/angular-locale_en-zm.js | 15 + .../angular-i18n/angular-locale_en-zw.js | 15 + .../angular-i18n/angular-locale_en.js | 15 + .../angular-i18n/angular-locale_eo-001.js | 15 + .../angular-i18n/angular-locale_eo.js | 15 + .../angular-i18n/angular-locale_es-419.js | 15 + .../angular-i18n/angular-locale_es-ar.js | 15 + .../angular-i18n/angular-locale_es-bo.js | 15 + .../angular-i18n/angular-locale_es-cl.js | 15 + .../angular-i18n/angular-locale_es-co.js | 15 + .../angular-i18n/angular-locale_es-cr.js | 15 + .../angular-i18n/angular-locale_es-cu.js | 15 + .../angular-i18n/angular-locale_es-do.js | 15 + .../angular-i18n/angular-locale_es-ea.js | 15 + .../angular-i18n/angular-locale_es-ec.js | 15 + .../angular-i18n/angular-locale_es-es.js | 15 + .../angular-i18n/angular-locale_es-gq.js | 15 + .../angular-i18n/angular-locale_es-gt.js | 15 + .../angular-i18n/angular-locale_es-hn.js | 15 + .../angular-i18n/angular-locale_es-ic.js | 15 + .../angular-i18n/angular-locale_es-mx.js | 15 + .../angular-i18n/angular-locale_es-ni.js | 15 + .../angular-i18n/angular-locale_es-pa.js | 15 + .../angular-i18n/angular-locale_es-pe.js | 15 + .../angular-i18n/angular-locale_es-ph.js | 15 + .../angular-i18n/angular-locale_es-pr.js | 15 + .../angular-i18n/angular-locale_es-py.js | 15 + .../angular-i18n/angular-locale_es-sv.js | 15 + .../angular-i18n/angular-locale_es-us.js | 15 + .../angular-i18n/angular-locale_es-uy.js | 15 + .../angular-i18n/angular-locale_es-ve.js | 15 + .../angular-i18n/angular-locale_es.js | 15 + .../angular-i18n/angular-locale_et-ee.js | 15 + .../angular-i18n/angular-locale_et.js | 15 + .../angular-i18n/angular-locale_eu-es.js | 15 + .../angular-i18n/angular-locale_eu.js | 15 + .../angular-i18n/angular-locale_ewo-cm.js | 15 + .../angular-i18n/angular-locale_ewo.js | 15 + .../angular-i18n/angular-locale_fa-af.js | 15 + .../angular-i18n/angular-locale_fa-ir.js | 15 + .../angular-i18n/angular-locale_fa.js | 15 + .../angular-i18n/angular-locale_ff-cm.js | 15 + .../angular-i18n/angular-locale_ff-gn.js | 15 + .../angular-i18n/angular-locale_ff-mr.js | 15 + .../angular-i18n/angular-locale_ff-sn.js | 15 + .../angular-i18n/angular-locale_ff.js | 15 + .../angular-i18n/angular-locale_fi-fi.js | 15 + .../angular-i18n/angular-locale_fi.js | 15 + .../angular-i18n/angular-locale_fil-ph.js | 15 + .../angular-i18n/angular-locale_fil.js | 15 + .../angular-i18n/angular-locale_fo-fo.js | 15 + .../angular-i18n/angular-locale_fo.js | 15 + .../angular-i18n/angular-locale_fr-be.js | 15 + .../angular-i18n/angular-locale_fr-bf.js | 15 + .../angular-i18n/angular-locale_fr-bi.js | 15 + .../angular-i18n/angular-locale_fr-bj.js | 15 + .../angular-i18n/angular-locale_fr-bl.js | 15 + .../angular-i18n/angular-locale_fr-ca.js | 15 + .../angular-i18n/angular-locale_fr-cd.js | 15 + .../angular-i18n/angular-locale_fr-cf.js | 15 + .../angular-i18n/angular-locale_fr-cg.js | 15 + .../angular-i18n/angular-locale_fr-ch.js | 15 + .../angular-i18n/angular-locale_fr-ci.js | 15 + .../angular-i18n/angular-locale_fr-cm.js | 15 + .../angular-i18n/angular-locale_fr-dj.js | 15 + .../angular-i18n/angular-locale_fr-dz.js | 15 + .../angular-i18n/angular-locale_fr-fr.js | 15 + .../angular-i18n/angular-locale_fr-ga.js | 15 + .../angular-i18n/angular-locale_fr-gf.js | 15 + .../angular-i18n/angular-locale_fr-gn.js | 15 + .../angular-i18n/angular-locale_fr-gp.js | 15 + .../angular-i18n/angular-locale_fr-gq.js | 15 + .../angular-i18n/angular-locale_fr-ht.js | 15 + .../angular-i18n/angular-locale_fr-km.js | 15 + .../angular-i18n/angular-locale_fr-lu.js | 15 + .../angular-i18n/angular-locale_fr-ma.js | 15 + .../angular-i18n/angular-locale_fr-mc.js | 15 + .../angular-i18n/angular-locale_fr-mf.js | 15 + .../angular-i18n/angular-locale_fr-mg.js | 15 + .../angular-i18n/angular-locale_fr-ml.js | 15 + .../angular-i18n/angular-locale_fr-mq.js | 15 + .../angular-i18n/angular-locale_fr-mr.js | 15 + .../angular-i18n/angular-locale_fr-mu.js | 15 + .../angular-i18n/angular-locale_fr-nc.js | 15 + .../angular-i18n/angular-locale_fr-ne.js | 15 + .../angular-i18n/angular-locale_fr-pf.js | 15 + .../angular-i18n/angular-locale_fr-pm.js | 15 + .../angular-i18n/angular-locale_fr-re.js | 15 + .../angular-i18n/angular-locale_fr-rw.js | 15 + .../angular-i18n/angular-locale_fr-sc.js | 15 + .../angular-i18n/angular-locale_fr-sn.js | 15 + .../angular-i18n/angular-locale_fr-sy.js | 15 + .../angular-i18n/angular-locale_fr-td.js | 15 + .../angular-i18n/angular-locale_fr-tg.js | 15 + .../angular-i18n/angular-locale_fr-tn.js | 15 + .../angular-i18n/angular-locale_fr-vu.js | 15 + .../angular-i18n/angular-locale_fr-wf.js | 15 + .../angular-i18n/angular-locale_fr-yt.js | 15 + .../angular-i18n/angular-locale_fr.js | 15 + .../angular-i18n/angular-locale_fur-it.js | 15 + .../angular-i18n/angular-locale_fur.js | 15 + .../angular-i18n/angular-locale_fy-nl.js | 15 + .../angular-i18n/angular-locale_fy.js | 15 + .../angular-i18n/angular-locale_ga-ie.js | 15 + .../angular-i18n/angular-locale_ga.js | 15 + .../angular-i18n/angular-locale_gd-gb.js | 15 + .../angular-i18n/angular-locale_gd.js | 15 + .../angular-i18n/angular-locale_gl-es.js | 15 + .../angular-i18n/angular-locale_gl.js | 15 + .../angular-i18n/angular-locale_gsw-ch.js | 15 + .../angular-i18n/angular-locale_gsw-fr.js | 15 + .../angular-i18n/angular-locale_gsw-li.js | 15 + .../angular-i18n/angular-locale_gsw.js | 15 + .../angular-i18n/angular-locale_gu-in.js | 15 + .../angular-i18n/angular-locale_gu.js | 15 + .../angular-i18n/angular-locale_guz-ke.js | 15 + .../angular-i18n/angular-locale_guz.js | 15 + .../angular-i18n/angular-locale_gv-im.js | 15 + .../angular-i18n/angular-locale_gv.js | 15 + .../angular-i18n/angular-locale_ha-latn-gh.js | 15 + .../angular-i18n/angular-locale_ha-latn-ne.js | 15 + .../angular-i18n/angular-locale_ha-latn-ng.js | 15 + .../angular-i18n/angular-locale_ha-latn.js | 15 + .../angular-i18n/angular-locale_ha.js | 15 + .../angular-i18n/angular-locale_haw-us.js | 15 + .../angular-i18n/angular-locale_haw.js | 15 + .../angular-i18n/angular-locale_he-il.js | 15 + .../angular-i18n/angular-locale_he.js | 15 + .../angular-i18n/angular-locale_hi-in.js | 15 + .../angular-i18n/angular-locale_hi.js | 15 + .../angular-i18n/angular-locale_hr-ba.js | 15 + .../angular-i18n/angular-locale_hr-hr.js | 15 + .../angular-i18n/angular-locale_hr.js | 15 + .../angular-i18n/angular-locale_hsb-de.js | 15 + .../angular-i18n/angular-locale_hsb.js | 15 + .../angular-i18n/angular-locale_hu-hu.js | 15 + .../angular-i18n/angular-locale_hu.js | 15 + .../angular-i18n/angular-locale_hy-am.js | 15 + .../angular-i18n/angular-locale_hy.js | 15 + .../angular-i18n/angular-locale_id-id.js | 15 + .../angular-i18n/angular-locale_id.js | 15 + .../angular-i18n/angular-locale_ig-ng.js | 15 + .../angular-i18n/angular-locale_ig.js | 15 + .../angular-i18n/angular-locale_ii-cn.js | 15 + .../angular-i18n/angular-locale_ii.js | 15 + .../angular-i18n/angular-locale_in.js | 15 + .../angular-i18n/angular-locale_is-is.js | 15 + .../angular-i18n/angular-locale_is.js | 15 + .../angular-i18n/angular-locale_it-ch.js | 15 + .../angular-i18n/angular-locale_it-it.js | 15 + .../angular-i18n/angular-locale_it-sm.js | 15 + .../angular-i18n/angular-locale_it.js | 15 + .../angular-i18n/angular-locale_iw.js | 15 + .../angular-i18n/angular-locale_ja-jp.js | 15 + .../angular-i18n/angular-locale_ja.js | 15 + .../angular-i18n/angular-locale_jgo-cm.js | 15 + .../angular-i18n/angular-locale_jgo.js | 15 + .../angular-i18n/angular-locale_jmc-tz.js | 15 + .../angular-i18n/angular-locale_jmc.js | 15 + .../angular-i18n/angular-locale_ka-ge.js | 15 + .../angular-i18n/angular-locale_ka.js | 15 + .../angular-i18n/angular-locale_kab-dz.js | 15 + .../angular-i18n/angular-locale_kab.js | 15 + .../angular-i18n/angular-locale_kam-ke.js | 15 + .../angular-i18n/angular-locale_kam.js | 15 + .../angular-i18n/angular-locale_kde-tz.js | 15 + .../angular-i18n/angular-locale_kde.js | 15 + .../angular-i18n/angular-locale_kea-cv.js | 15 + .../angular-i18n/angular-locale_kea.js | 15 + .../angular-i18n/angular-locale_khq-ml.js | 15 + .../angular-i18n/angular-locale_khq.js | 15 + .../angular-i18n/angular-locale_ki-ke.js | 15 + .../angular-i18n/angular-locale_ki.js | 15 + .../angular-i18n/angular-locale_kk-cyrl-kz.js | 15 + .../angular-i18n/angular-locale_kk-cyrl.js | 15 + .../angular-i18n/angular-locale_kk.js | 15 + .../angular-i18n/angular-locale_kkj-cm.js | 15 + .../angular-i18n/angular-locale_kkj.js | 15 + .../angular-i18n/angular-locale_kl-gl.js | 15 + .../angular-i18n/angular-locale_kl.js | 15 + .../angular-i18n/angular-locale_kln-ke.js | 15 + .../angular-i18n/angular-locale_kln.js | 15 + .../angular-i18n/angular-locale_km-kh.js | 15 + .../angular-i18n/angular-locale_km.js | 15 + .../angular-i18n/angular-locale_kn-in.js | 15 + .../angular-i18n/angular-locale_kn.js | 15 + .../angular-i18n/angular-locale_ko-kp.js | 15 + .../angular-i18n/angular-locale_ko-kr.js | 15 + .../angular-i18n/angular-locale_ko.js | 15 + .../angular-i18n/angular-locale_kok-in.js | 15 + .../angular-i18n/angular-locale_kok.js | 15 + .../angular-i18n/angular-locale_ks-arab-in.js | 15 + .../angular-i18n/angular-locale_ks-arab.js | 15 + .../angular-i18n/angular-locale_ks.js | 15 + .../angular-i18n/angular-locale_ksb-tz.js | 15 + .../angular-i18n/angular-locale_ksb.js | 15 + .../angular-i18n/angular-locale_ksf-cm.js | 15 + .../angular-i18n/angular-locale_ksf.js | 15 + .../angular-i18n/angular-locale_ksh-de.js | 15 + .../angular-i18n/angular-locale_ksh.js | 15 + .../angular-i18n/angular-locale_kw-gb.js | 15 + .../angular-i18n/angular-locale_kw.js | 15 + .../angular-i18n/angular-locale_ky-cyrl-kg.js | 15 + .../angular-i18n/angular-locale_ky-cyrl.js | 15 + .../angular-i18n/angular-locale_ky.js | 15 + .../angular-i18n/angular-locale_lag-tz.js | 15 + .../angular-i18n/angular-locale_lag.js | 15 + .../angular-i18n/angular-locale_lb-lu.js | 15 + .../angular-i18n/angular-locale_lb.js | 15 + .../angular-i18n/angular-locale_lg-ug.js | 15 + .../angular-i18n/angular-locale_lg.js | 15 + .../angular-i18n/angular-locale_lkt-us.js | 15 + .../angular-i18n/angular-locale_lkt.js | 15 + .../angular-i18n/angular-locale_ln-ao.js | 15 + .../angular-i18n/angular-locale_ln-cd.js | 15 + .../angular-i18n/angular-locale_ln-cf.js | 15 + .../angular-i18n/angular-locale_ln-cg.js | 15 + .../angular-i18n/angular-locale_ln.js | 15 + .../angular-i18n/angular-locale_lo-la.js | 15 + .../angular-i18n/angular-locale_lo.js | 15 + .../angular-i18n/angular-locale_lt-lt.js | 15 + .../angular-i18n/angular-locale_lt.js | 15 + .../angular-i18n/angular-locale_lu-cd.js | 15 + .../angular-i18n/angular-locale_lu.js | 15 + .../angular-i18n/angular-locale_luo-ke.js | 15 + .../angular-i18n/angular-locale_luo.js | 15 + .../angular-i18n/angular-locale_luy-ke.js | 15 + .../angular-i18n/angular-locale_luy.js | 15 + .../angular-i18n/angular-locale_lv-lv.js | 15 + .../angular-i18n/angular-locale_lv.js | 15 + .../angular-i18n/angular-locale_mas-ke.js | 15 + .../angular-i18n/angular-locale_mas-tz.js | 15 + .../angular-i18n/angular-locale_mas.js | 15 + .../angular-i18n/angular-locale_mer-ke.js | 15 + .../angular-i18n/angular-locale_mer.js | 15 + .../angular-i18n/angular-locale_mfe-mu.js | 15 + .../angular-i18n/angular-locale_mfe.js | 15 + .../angular-i18n/angular-locale_mg-mg.js | 15 + .../angular-i18n/angular-locale_mg.js | 15 + .../angular-i18n/angular-locale_mgh-mz.js | 15 + .../angular-i18n/angular-locale_mgh.js | 15 + .../angular-i18n/angular-locale_mgo-cm.js | 15 + .../angular-i18n/angular-locale_mgo.js | 15 + .../angular-i18n/angular-locale_mk-mk.js | 15 + .../angular-i18n/angular-locale_mk.js | 15 + .../angular-i18n/angular-locale_ml-in.js | 15 + .../angular-i18n/angular-locale_ml.js | 15 + .../angular-i18n/angular-locale_mn-cyrl-mn.js | 15 + .../angular-i18n/angular-locale_mn-cyrl.js | 15 + .../angular-i18n/angular-locale_mn.js | 15 + .../angular-i18n/angular-locale_mr-in.js | 15 + .../angular-i18n/angular-locale_mr.js | 15 + .../angular-i18n/angular-locale_ms-latn-bn.js | 15 + .../angular-i18n/angular-locale_ms-latn-my.js | 15 + .../angular-i18n/angular-locale_ms-latn-sg.js | 15 + .../angular-i18n/angular-locale_ms-latn.js | 15 + .../angular-i18n/angular-locale_ms.js | 15 + .../angular-i18n/angular-locale_mt-mt.js | 15 + .../angular-i18n/angular-locale_mt.js | 15 + .../angular-i18n/angular-locale_mua-cm.js | 15 + .../angular-i18n/angular-locale_mua.js | 15 + .../angular-i18n/angular-locale_my-mm.js | 15 + .../angular-i18n/angular-locale_my.js | 15 + .../angular-i18n/angular-locale_naq-na.js | 15 + .../angular-i18n/angular-locale_naq.js | 15 + .../angular-i18n/angular-locale_nb-no.js | 15 + .../angular-i18n/angular-locale_nb-sj.js | 15 + .../angular-i18n/angular-locale_nb.js | 15 + .../angular-i18n/angular-locale_nd-zw.js | 15 + .../angular-i18n/angular-locale_nd.js | 15 + .../angular-i18n/angular-locale_ne-in.js | 15 + .../angular-i18n/angular-locale_ne-np.js | 15 + .../angular-i18n/angular-locale_ne.js | 15 + .../angular-i18n/angular-locale_nl-aw.js | 15 + .../angular-i18n/angular-locale_nl-be.js | 15 + .../angular-i18n/angular-locale_nl-bq.js | 15 + .../angular-i18n/angular-locale_nl-cw.js | 15 + .../angular-i18n/angular-locale_nl-nl.js | 15 + .../angular-i18n/angular-locale_nl-sr.js | 15 + .../angular-i18n/angular-locale_nl-sx.js | 15 + .../angular-i18n/angular-locale_nl.js | 15 + .../angular-i18n/angular-locale_nmg-cm.js | 15 + .../angular-i18n/angular-locale_nmg.js | 15 + .../angular-i18n/angular-locale_nn-no.js | 15 + .../angular-i18n/angular-locale_nn.js | 15 + .../angular-i18n/angular-locale_nnh-cm.js | 15 + .../angular-i18n/angular-locale_nnh.js | 15 + .../angular-i18n/angular-locale_no-no.js | 15 + .../angular-i18n/angular-locale_no.js | 15 + .../angular-i18n/angular-locale_nus-sd.js | 15 + .../angular-i18n/angular-locale_nus.js | 15 + .../angular-i18n/angular-locale_nyn-ug.js | 15 + .../angular-i18n/angular-locale_nyn.js | 15 + .../angular-i18n/angular-locale_om-et.js | 15 + .../angular-i18n/angular-locale_om-ke.js | 15 + .../angular-i18n/angular-locale_om.js | 15 + .../angular-i18n/angular-locale_or-in.js | 15 + .../angular-i18n/angular-locale_or.js | 15 + .../angular-i18n/angular-locale_os-ge.js | 15 + .../angular-i18n/angular-locale_os-ru.js | 15 + .../angular-i18n/angular-locale_os.js | 15 + .../angular-i18n/angular-locale_pa-arab-pk.js | 15 + .../angular-i18n/angular-locale_pa-arab.js | 15 + .../angular-i18n/angular-locale_pa-guru-in.js | 15 + .../angular-i18n/angular-locale_pa-guru.js | 15 + .../angular-i18n/angular-locale_pa.js | 15 + .../angular-i18n/angular-locale_pl-pl.js | 15 + .../angular-i18n/angular-locale_pl.js | 15 + .../angular-i18n/angular-locale_ps-af.js | 15 + .../angular-i18n/angular-locale_ps.js | 15 + .../angular-i18n/angular-locale_pt-ao.js | 15 + .../angular-i18n/angular-locale_pt-br.js | 15 + .../angular-i18n/angular-locale_pt-cv.js | 15 + .../angular-i18n/angular-locale_pt-gw.js | 15 + .../angular-i18n/angular-locale_pt-mo.js | 15 + .../angular-i18n/angular-locale_pt-mz.js | 15 + .../angular-i18n/angular-locale_pt-pt.js | 15 + .../angular-i18n/angular-locale_pt-st.js | 15 + .../angular-i18n/angular-locale_pt-tl.js | 15 + .../angular-i18n/angular-locale_pt.js | 15 + .../angular-i18n/angular-locale_qu-bo.js | 15 + .../angular-i18n/angular-locale_qu-ec.js | 15 + .../angular-i18n/angular-locale_qu-pe.js | 15 + .../angular-i18n/angular-locale_qu.js | 15 + .../angular-i18n/angular-locale_rm-ch.js | 15 + .../angular-i18n/angular-locale_rm.js | 15 + .../angular-i18n/angular-locale_rn-bi.js | 15 + .../angular-i18n/angular-locale_rn.js | 15 + .../angular-i18n/angular-locale_ro-md.js | 15 + .../angular-i18n/angular-locale_ro-ro.js | 15 + .../angular-i18n/angular-locale_ro.js | 15 + .../angular-i18n/angular-locale_rof-tz.js | 15 + .../angular-i18n/angular-locale_rof.js | 15 + .../angular-i18n/angular-locale_ru-by.js | 15 + .../angular-i18n/angular-locale_ru-kg.js | 15 + .../angular-i18n/angular-locale_ru-kz.js | 15 + .../angular-i18n/angular-locale_ru-md.js | 15 + .../angular-i18n/angular-locale_ru-ru.js | 15 + .../angular-i18n/angular-locale_ru-ua.js | 15 + .../angular-i18n/angular-locale_ru.js | 15 + .../angular-i18n/angular-locale_rw-rw.js | 15 + .../angular-i18n/angular-locale_rw.js | 15 + .../angular-i18n/angular-locale_rwk-tz.js | 15 + .../angular-i18n/angular-locale_rwk.js | 15 + .../angular-i18n/angular-locale_sah-ru.js | 15 + .../angular-i18n/angular-locale_sah.js | 15 + .../angular-i18n/angular-locale_saq-ke.js | 15 + .../angular-i18n/angular-locale_saq.js | 15 + .../angular-i18n/angular-locale_sbp-tz.js | 15 + .../angular-i18n/angular-locale_sbp.js | 15 + .../angular-i18n/angular-locale_se-fi.js | 15 + .../angular-i18n/angular-locale_se-no.js | 15 + .../angular-i18n/angular-locale_se-se.js | 15 + .../angular-i18n/angular-locale_se.js | 15 + .../angular-i18n/angular-locale_seh-mz.js | 15 + .../angular-i18n/angular-locale_seh.js | 15 + .../angular-i18n/angular-locale_ses-ml.js | 15 + .../angular-i18n/angular-locale_ses.js | 15 + .../angular-i18n/angular-locale_sg-cf.js | 15 + .../angular-i18n/angular-locale_sg.js | 15 + .../angular-locale_shi-latn-ma.js | 15 + .../angular-i18n/angular-locale_shi-latn.js | 15 + .../angular-locale_shi-tfng-ma.js | 15 + .../angular-i18n/angular-locale_shi-tfng.js | 15 + .../angular-i18n/angular-locale_shi.js | 15 + .../angular-i18n/angular-locale_si-lk.js | 15 + .../angular-i18n/angular-locale_si.js | 15 + .../angular-i18n/angular-locale_sk-sk.js | 15 + .../angular-i18n/angular-locale_sk.js | 15 + .../angular-i18n/angular-locale_sl-si.js | 15 + .../angular-i18n/angular-locale_sl.js | 15 + .../angular-i18n/angular-locale_smn-fi.js | 15 + .../angular-i18n/angular-locale_smn.js | 15 + .../angular-i18n/angular-locale_sn-zw.js | 15 + .../angular-i18n/angular-locale_sn.js | 15 + .../angular-i18n/angular-locale_so-dj.js | 15 + .../angular-i18n/angular-locale_so-et.js | 15 + .../angular-i18n/angular-locale_so-ke.js | 15 + .../angular-i18n/angular-locale_so-so.js | 15 + .../angular-i18n/angular-locale_so.js | 15 + .../angular-i18n/angular-locale_sq-al.js | 15 + .../angular-i18n/angular-locale_sq-mk.js | 15 + .../angular-i18n/angular-locale_sq-xk.js | 15 + .../angular-i18n/angular-locale_sq.js | 15 + .../angular-i18n/angular-locale_sr-cyrl-ba.js | 15 + .../angular-i18n/angular-locale_sr-cyrl-me.js | 15 + .../angular-i18n/angular-locale_sr-cyrl-rs.js | 15 + .../angular-i18n/angular-locale_sr-cyrl-xk.js | 15 + .../angular-i18n/angular-locale_sr-cyrl.js | 15 + .../angular-i18n/angular-locale_sr-latn-ba.js | 15 + .../angular-i18n/angular-locale_sr-latn-me.js | 15 + .../angular-i18n/angular-locale_sr-latn-rs.js | 15 + .../angular-i18n/angular-locale_sr-latn-xk.js | 15 + .../angular-i18n/angular-locale_sr-latn.js | 15 + .../angular-i18n/angular-locale_sr.js | 15 + .../angular-i18n/angular-locale_sv-ax.js | 15 + .../angular-i18n/angular-locale_sv-fi.js | 15 + .../angular-i18n/angular-locale_sv-se.js | 15 + .../angular-i18n/angular-locale_sv.js | 15 + .../angular-i18n/angular-locale_sw-cd.js | 15 + .../angular-i18n/angular-locale_sw-ke.js | 15 + .../angular-i18n/angular-locale_sw-tz.js | 15 + .../angular-i18n/angular-locale_sw-ug.js | 15 + .../angular-i18n/angular-locale_sw.js | 15 + .../angular-i18n/angular-locale_ta-in.js | 15 + .../angular-i18n/angular-locale_ta-lk.js | 15 + .../angular-i18n/angular-locale_ta-my.js | 15 + .../angular-i18n/angular-locale_ta-sg.js | 15 + .../angular-i18n/angular-locale_ta.js | 15 + .../angular-i18n/angular-locale_te-in.js | 15 + .../angular-i18n/angular-locale_te.js | 15 + .../angular-i18n/angular-locale_teo-ke.js | 15 + .../angular-i18n/angular-locale_teo-ug.js | 15 + .../angular-i18n/angular-locale_teo.js | 15 + .../angular-i18n/angular-locale_th-th.js | 15 + .../angular-i18n/angular-locale_th.js | 15 + .../angular-i18n/angular-locale_ti-er.js | 15 + .../angular-i18n/angular-locale_ti-et.js | 15 + .../angular-i18n/angular-locale_ti.js | 15 + .../angular-i18n/angular-locale_tl.js | 15 + .../angular-i18n/angular-locale_to-to.js | 15 + .../angular-i18n/angular-locale_to.js | 15 + .../angular-i18n/angular-locale_tr-cy.js | 15 + .../angular-i18n/angular-locale_tr-tr.js | 15 + .../angular-i18n/angular-locale_tr.js | 15 + .../angular-i18n/angular-locale_twq-ne.js | 15 + .../angular-i18n/angular-locale_twq.js | 15 + .../angular-locale_tzm-latn-ma.js | 15 + .../angular-i18n/angular-locale_tzm-latn.js | 15 + .../angular-i18n/angular-locale_tzm.js | 15 + .../angular-i18n/angular-locale_ug-arab-cn.js | 15 + .../angular-i18n/angular-locale_ug-arab.js | 15 + .../angular-i18n/angular-locale_ug.js | 15 + .../angular-i18n/angular-locale_uk-ua.js | 15 + .../angular-i18n/angular-locale_uk.js | 15 + .../angular-i18n/angular-locale_ur-in.js | 15 + .../angular-i18n/angular-locale_ur-pk.js | 15 + .../angular-i18n/angular-locale_ur.js | 15 + .../angular-i18n/angular-locale_uz-arab-af.js | 15 + .../angular-i18n/angular-locale_uz-arab.js | 15 + .../angular-i18n/angular-locale_uz-cyrl-uz.js | 15 + .../angular-i18n/angular-locale_uz-cyrl.js | 15 + .../angular-i18n/angular-locale_uz-latn-uz.js | 15 + .../angular-i18n/angular-locale_uz-latn.js | 15 + .../angular-i18n/angular-locale_uz.js | 15 + .../angular-locale_vai-latn-lr.js | 15 + .../angular-i18n/angular-locale_vai-latn.js | 15 + .../angular-locale_vai-vaii-lr.js | 15 + .../angular-i18n/angular-locale_vai-vaii.js | 15 + .../angular-i18n/angular-locale_vai.js | 15 + .../angular-i18n/angular-locale_vi-vn.js | 15 + .../angular-i18n/angular-locale_vi.js | 15 + .../angular-i18n/angular-locale_vun-tz.js | 15 + .../angular-i18n/angular-locale_vun.js | 15 + .../angular-i18n/angular-locale_wae-ch.js | 15 + .../angular-i18n/angular-locale_wae.js | 15 + .../angular-i18n/angular-locale_xog-ug.js | 15 + .../angular-i18n/angular-locale_xog.js | 15 + .../angular-i18n/angular-locale_yav-cm.js | 15 + .../angular-i18n/angular-locale_yav.js | 15 + .../angular-i18n/angular-locale_yi-001.js | 15 + .../angular-i18n/angular-locale_yi.js | 15 + .../angular-i18n/angular-locale_yo-bj.js | 15 + .../angular-i18n/angular-locale_yo-ng.js | 15 + .../angular-i18n/angular-locale_yo.js | 15 + .../angular-i18n/angular-locale_zgh-ma.js | 15 + .../angular-i18n/angular-locale_zgh.js | 15 + .../angular-i18n/angular-locale_zh-cn.js | 15 + .../angular-i18n/angular-locale_zh-hans-cn.js | 15 + .../angular-i18n/angular-locale_zh-hans-hk.js | 15 + .../angular-i18n/angular-locale_zh-hans-mo.js | 15 + .../angular-i18n/angular-locale_zh-hans-sg.js | 15 + .../angular-i18n/angular-locale_zh-hans.js | 15 + .../angular-i18n/angular-locale_zh-hant-hk.js | 15 + .../angular-i18n/angular-locale_zh-hant-mo.js | 15 + .../angular-i18n/angular-locale_zh-hant-tw.js | 15 + .../angular-i18n/angular-locale_zh-hant.js | 15 + .../angular-i18n/angular-locale_zh-hk.js | 15 + .../angular-i18n/angular-locale_zh-tw.js | 15 + .../angular-i18n/angular-locale_zh.js | 15 + .../angular-i18n/angular-locale_zu-za.js | 15 + .../angular-i18n/angular-locale_zu.js | 15 + .../bower_components/angular-i18n/bower.json | 3 +- .../angular-i18n/package.json | 2 +- .../angular-loading-bar/.bower.json | 15 +- .../angular-loading-bar/CHANGELOG.md | 14 + .../angular-loading-bar/CONTRIBUTING.md | 17 + .../angular-loading-bar/Gruntfile.js | 10 +- .../angular-loading-bar/ISSUE_TEMPLATE.md | 14 + .../PULL_REQUEST_TEMPLATE.md | 13 + .../angular-loading-bar/README.md | 12 +- .../angular-loading-bar/bower.json | 5 +- .../angular-loading-bar/build/loading-bar.css | 8 +- .../angular-loading-bar/build/loading-bar.js | 22 +- .../build/loading-bar.min.js | 6 +- .../angular-loading-bar/package.json | 3 +- .../angular-loading-bar/src/loading-bar.css | 4 +- .../angular-loading-bar/src/loading-bar.js | 18 +- .../angular-local-storage/.bower.json | 43 - .../angular-local-storage/.bowerrc | 3 - .../angular-local-storage/.gitattributes | 1 - .../angular-local-storage/.gitignore | 8 - .../angular-local-storage/.travis.yml | 9 - .../angular-local-storage/CHANGELOG.md | 62 - .../angular-local-storage/LICENSE | 8 - .../angular-local-storage/README.md | 388 - .../angular-local-storage/bower.json | 33 - .../angular-local-storage/demo/demo-app.js | 35 - .../angular-local-storage/demo/demo-style.css | 15 - .../angular-local-storage/demo/demo.html | 155 - .../dist/angular-local-storage.js | 449 - .../dist/angular-local-storage.min.js | 7 - .../angular-local-storage/package.json | 41 - .../angular-mocks/.bower.json | 13 +- .../angular-mocks/angular-mocks.js | 711 +- .../bower_components/angular-mocks/bower.json | 5 +- .../angular-mocks/package.json | 2 +- .../angular-resource/.bower.json | 13 +- .../angular-resource/angular-resource.js | 158 +- .../angular-resource/angular-resource.min.js | 21 +- .../angular-resource.min.js.map | 6 +- .../angular-resource/bower.json | 5 +- .../angular-resource/package.json | 2 +- .../angular-sanitize/.bower.json | 13 +- .../angular-sanitize/angular-sanitize.js | 526 +- .../angular-sanitize/angular-sanitize.min.js | 23 +- .../angular-sanitize.min.js.map | 6 +- .../angular-sanitize/bower.json | 5 +- .../angular-sanitize/package.json | 2 +- .../angular-scenario/.bower.json | 13 +- .../angular-scenario/angular-scenario.js | 3556 +- .../angular-scenario/bower.json | 5 +- .../angular-scenario/package.json | 2 +- .../.bower.json | 14 +- ...r-translate-interpolation-messageformat.js | 21 +- ...anslate-interpolation-messageformat.min.js | 57 +- .../bower.json | 6 +- .../package.json | 6 +- .../.bower.json | 12 +- .../angular-translate-loader-partial.js | 17 +- .../angular-translate-loader-partial.min.js | 232 +- .../bower.json | 4 +- .../package.json | 4 +- .../.bower.json | 14 +- .../angular-translate-storage-cookie.js | 6 +- .../angular-translate-storage-cookie.min.js | 47 +- .../bower.json | 6 +- .../package.json | 6 +- .../angular-translate/.bower.json | 12 +- .../angular-translate/angular-translate.js | 434 +- .../angular-translate.min.js | 1065 +- .../angular-translate/bower.json | 4 +- .../angular-ui-router/.bower.json | 13 +- .../angular-ui-router/CHANGELOG.md | 88 + .../angular-ui-router/CONTRIBUTING.md | 10 +- .../angular-ui-router/README.md | 9 +- .../api/angular-ui-router.d.ts | 126 - .../angular-ui-router/bower.json | 5 +- .../release/angular-ui-router.js | 551 +- .../release/angular-ui-router.min.js | 5 +- .../angular-ui-router/src/common.js | 5 +- .../angular-ui-router/src/resolve.js | 2 +- .../angular-ui-router/src/state.js | 37 +- .../angular-ui-router/src/stateDirectives.js | 294 +- .../angular-ui-router/src/stateFilters.js | 8 +- .../src/urlMatcherFactory.js | 69 +- .../angular-ui-router/src/urlRouter.js | 16 +- .../angular-ui-router/src/view.js | 26 - .../angular-ui-router/src/viewDirective.js | 94 +- .../bower_components/angular/.bower.json | 11 +- .../bower_components/angular/angular.js | 3552 +- .../bower_components/angular/angular.min.js | 596 +- .../angular/angular.min.js.gzip | Bin 53281 -> 54709 bytes .../angular/angular.min.js.map | 6 +- .../bower_components/angular/bower.json | 3 +- .../bower_components/angular/package.json | 2 +- .../bootstrap-ui-datetime-picker/.bower.json | 43 + .../bootstrap-ui-datetime-picker/LICENSE | 21 + .../bootstrap-ui-datetime-picker/README.md | 180 + .../bootstrap-ui-datetime-picker-tests.js | 5 + .../bootstrap-ui-datetime-picker/bower.json | 34 + .../dist/datetime-picker.js | 603 + .../dist/datetime-picker.min.js | 4 + .../dist/datetime-picker.tpls.js | 13 + .../example/index.html | 344 + .../example/index.js | 125 + .../example/style.css | 15 + .../bootstrap-ui-datetime-picker/package.js | 30 + .../bower_components/bootstrap/.bower.json | 12 +- .../bower_components/bootstrap/CHANGELOG.md | 5 + .../bower_components/bootstrap/Gruntfile.js | 4 +- .../bower_components/bootstrap/README.md | 68 +- .../bower_components/bootstrap/bower.json | 2 +- .../bootstrap/dist/css/bootstrap-theme.css | 2 +- .../dist/css/bootstrap-theme.css.map | 2 +- .../dist/css/bootstrap-theme.min.css | 5 +- .../dist/css/bootstrap-theme.min.css.map | 1 + .../bootstrap/dist/css/bootstrap.css | 100 +- .../bootstrap/dist/css/bootstrap.css.map | 2 +- .../bootstrap/dist/css/bootstrap.min.css | 5 +- .../bootstrap/dist/css/bootstrap.min.css.map | 1 + .../bootstrap/dist/js/bootstrap.js | 56 +- .../bootstrap/dist/js/bootstrap.min.js | 6 +- .../bootstrap/grunt/configBridge.json | 6 +- .../bower_components/bootstrap/js/affix.js | 4 +- .../bower_components/bootstrap/js/alert.js | 4 +- .../bower_components/bootstrap/js/button.js | 4 +- .../bower_components/bootstrap/js/carousel.js | 4 +- .../bower_components/bootstrap/js/collapse.js | 4 +- .../bower_components/bootstrap/js/dropdown.js | 8 +- .../bower_components/bootstrap/js/modal.js | 4 +- .../bower_components/bootstrap/js/popover.js | 4 +- .../bootstrap/js/scrollspy.js | 4 +- .../bower_components/bootstrap/js/tab.js | 4 +- .../bower_components/bootstrap/js/tooltip.js | 4 +- .../bootstrap/js/transition.js | 2 +- .../bootstrap/less/bootstrap.less | 2 +- .../bootstrap/less/button-groups.less | 4 +- .../bootstrap/less/carousel.less | 13 +- .../bootstrap/less/forms.less | 12 +- .../bootstrap/less/glyphicons.less | 4 +- .../bootstrap/less/input-groups.less | 10 +- .../bootstrap/less/jumbotron.less | 2 + .../bootstrap/less/mixins/buttons.less | 5 +- .../bootstrap/less/mixins/grid.less | 4 +- .../bootstrap/less/mixins/hide-text.less | 2 +- .../less/mixins/vendor-prefixes.less | 4 +- .../bootstrap/less/modals.less | 2 +- .../bootstrap/less/pagination.less | 4 +- .../bootstrap/less/theme.less | 2 +- .../bower_components/bootstrap/less/type.less | 2 +- .../bootstrap/less/variables.less | 2 + .../bootstrap/nuget/MyGet.ps1 | 8 + .../bootstrap/nuget/bootstrap.less.nuspec | 28 + .../bootstrap/nuget/bootstrap.nuspec | 28 + .../bower_components/bootstrap/package.js | 13 +- .../bower_components/bootstrap/package.json | 34 +- .../bower_components/jquery/.bower.json | 25 +- .../bower_components/jquery/AUTHORS.txt | 278 + .../bower_components/jquery/LICENSE.txt | 36 + .../webapp/bower_components/jquery/README.md | 65 + .../webapp/bower_components/jquery/bower.json | 18 +- .../bower_components/jquery/dist/jquery.js | 4548 +- .../jquery/dist/jquery.min.js | 9 +- .../jquery/dist/jquery.min.map | 2 +- .../jquery/dist/jquery.slim.js | 7877 ++++ .../jquery/dist/jquery.slim.min.js | 4 + .../jquery/dist/jquery.slim.min.map | 1 + .../jquery/sizzle/LICENSE.txt | 36 + .../jquery/{src => }/sizzle/dist/sizzle.js | 396 +- .../jquery/sizzle/dist/sizzle.min.js | 3 + .../jquery/sizzle/dist/sizzle.min.map | 1 + .../bower_components/jquery/src/.jshintrc | 29 + .../bower_components/jquery/src/ajax.js | 173 +- .../bower_components/jquery/src/ajax/jsonp.js | 39 +- .../bower_components/jquery/src/ajax/load.js | 32 +- .../jquery/src/ajax/parseJSON.js | 4 +- .../jquery/src/ajax/parseXML.js | 9 +- .../jquery/src/ajax/script.js | 28 +- .../jquery/src/ajax/var/location.js | 3 + .../jquery/src/ajax/var/nonce.js | 4 +- .../jquery/src/ajax/var/rquery.js | 6 +- .../bower_components/jquery/src/ajax/xhr.js | 115 +- .../bower_components/jquery/src/attributes.js | 4 +- .../jquery/src/attributes/attr.js | 97 +- .../jquery/src/attributes/classes.js | 153 +- .../jquery/src/attributes/prop.js | 95 +- .../jquery/src/attributes/support.js | 11 +- .../jquery/src/attributes/val.js | 64 +- .../bower_components/jquery/src/callbacks.js | 201 +- .../bower_components/jquery/src/core.js | 162 +- .../jquery/src/core/DOMEval.js | 14 + .../jquery/src/core/access.js | 17 +- .../bower_components/jquery/src/core/init.js | 43 +- .../jquery/src/core/parseHTML.js | 18 +- .../bower_components/jquery/src/core/ready.js | 34 +- .../jquery/src/core/support.js | 18 + .../jquery/src/core/var/rsingleTag.js | 7 +- .../webapp/bower_components/jquery/src/css.js | 175 +- .../jquery/src/css/addGetHookIf.js | 8 +- .../jquery/src/css/adjustCSS.js | 65 + .../bower_components/jquery/src/css/curCSS.js | 37 +- .../jquery/src/css/defaultDisplay.js | 30 +- .../jquery/src/css/hiddenVisibleSelectors.js | 15 +- .../jquery/src/css/showHide.js | 48 + .../jquery/src/css/support.js | 147 +- .../jquery/src/css/var/cssExpand.js | 4 +- .../jquery/src/css/var/getStyles.js | 13 +- .../jquery/src/css/var/isHidden.js | 9 +- .../jquery/src/css/var/rmargin.js | 6 +- .../jquery/src/css/var/rnumnonpx.js | 4 +- .../jquery/src/css/{ => var}/swap.js | 10 +- .../bower_components/jquery/src/data.js | 89 +- .../bower_components/jquery/src/data/Data.js | 167 +- .../jquery/src/data/support.js | 23 + .../jquery/src/data/var/acceptData.js | 18 + .../data/var/{data_priv.js => dataPriv.js} | 4 +- .../data/var/{data_user.js => dataUser.js} | 4 +- .../bower_components/jquery/src/deferred.js | 59 +- .../jquery/src/deferred/exceptionHook.js | 19 + .../bower_components/jquery/src/deprecated.js | 35 +- .../bower_components/jquery/src/dimensions.js | 14 +- .../bower_components/jquery/src/effects.js | 211 +- .../jquery/src/effects/Tween.js | 21 +- .../jquery/src/effects/animatedSelector.js | 8 +- .../jquery/src/effects/support.js | 58 + .../bower_components/jquery/src/event.js | 492 +- .../bower_components/jquery/src/event/ajax.js | 15 +- .../jquery/src/event/alias.js | 34 +- .../jquery/src/event/focusin.js | 53 + .../jquery/src/event/support.js | 6 +- .../jquery/src/event/trigger.js | 199 + .../jquery/src/exports/amd.js | 6 +- .../jquery/src/exports/global.js | 10 +- .../bower_components/jquery/src/intro.js | 2 +- .../bower_components/jquery/src/jquery.js | 10 +- .../jquery/src/manipulation.js | 511 +- .../jquery/src/manipulation/_evalUrl.js | 10 +- .../jquery/src/manipulation/buildFragment.js | 102 + .../src/manipulation/createSafeFragment.js | 20 + .../jquery/src/manipulation/getAll.js | 21 + .../jquery/src/manipulation/setGlobalEval.js | 20 + .../jquery/src/manipulation/support.js | 13 +- .../jquery/src/manipulation/var/nodeNames.js | 5 + .../src/manipulation/var/rcheckableType.js | 6 +- .../manipulation/var/rleadingWhitespace.js | 3 + .../src/manipulation/var/rscriptType.js | 3 + .../jquery/src/manipulation/var/rtagName.js | 3 + .../jquery/src/manipulation/wrapMap.js | 27 + .../bower_components/jquery/src/offset.js | 69 +- .../bower_components/jquery/src/outro.js | 1 + .../bower_components/jquery/src/queue.js | 45 +- .../jquery/src/queue/delay.js | 12 +- .../jquery/src/selector-native.js | 175 +- .../jquery/src/selector-sizzle.js | 10 +- .../bower_components/jquery/src/selector.js | 2 +- .../bower_components/jquery/src/serialize.js | 42 +- .../jquery/src/sizzle/dist/sizzle.min.js | 3 - .../jquery/src/sizzle/dist/sizzle.min.map | 1 - .../bower_components/jquery/src/support.js | 63 + .../bower_components/jquery/src/traversing.js | 88 +- .../jquery/src/traversing/findFilter.js | 26 +- .../jquery/src/traversing/var/dir.js | 20 + .../src/traversing/var/rneedsContext.js | 4 +- .../jquery/src/traversing/var/siblings.js | 15 + .../bower_components/jquery/src/var/arr.js | 4 +- .../jquery/src/var/class2type.js | 5 +- .../bower_components/jquery/src/var/concat.js | 4 +- .../jquery/src/var/deletedIds.js | 3 + .../jquery/src/var/document.js | 3 + .../jquery/src/var/documentElement.js | 5 + .../bower_components/jquery/src/var/hasOwn.js | 4 +- .../jquery/src/var/indexOf.js | 4 +- .../bower_components/jquery/src/var/pnum.js | 6 +- .../bower_components/jquery/src/var/push.js | 4 +- .../jquery/src/var/rcssNum.js | 7 + .../jquery/src/var/rnotwhite.js | 6 +- .../bower_components/jquery/src/var/slice.js | 4 +- .../jquery/src/var/strundefined.js | 3 - .../jquery/src/var/support.js | 5 +- .../jquery/src/var/toString.js | 4 +- .../bower_components/jquery/src/wrap.js | 38 +- .../messageformat/.bower.json | 45 +- .../bower_components/messageformat/.gitignore | 45 - .../messageformat/.travis.yml | 4 - .../MIT-LICENSE.txt => messageformat/LICENSE} | 3 +- .../bower_components/messageformat/Makefile | 33 - .../bower_components/messageformat/README.md | 530 +- .../messageformat/bin/messageformat.js | 280 +- .../bower_components/messageformat/bower.json | 23 +- .../messageformat/component.json | 9 - .../doc/MessageFormat.formatters.html | 261 + .../messageformat/doc/MessageFormat.html | 1179 + .../messageformat/doc/Runtime.html | 1216 + .../messageformat/doc/index.html | 172 + .../messageformat/doc/messageformat.js.html | 607 + .../messageformat/doc/scripts/linenumber.js | 25 + .../scripts/prettify/Apache-License-2.0.txt | 202 + .../doc/scripts/prettify/lang-css.js | 2 + .../doc/scripts/prettify/prettify.js | 28 + .../doc/styles/prettify-jsdoc.css | 111 + .../doc/styles/prettify-tomorrow.css | 132 + .../messageformat/example/en/i18n.js | 56 +- .../example/en/sub/folder/plural.json | 2 +- .../messageformat/example/fr/i18n.js | 51 +- .../example/fr/sub/folder/plural.json | 2 +- .../messageformat/example/fr/true | 33 + .../messageformat/example/index.html | 5 +- .../messageformat/lib/message_parser.js | 1325 - .../messageformat/lib/message_parser.pegjs | 173 - .../messageformat/lib/messageformat.dev.js | 256 - .../lib/messageformat.include.js | 6 - .../messageformat/locale/af.js | 1 - .../messageformat/locale/am.js | 1 - .../messageformat/locale/ar.js | 18 - .../messageformat/locale/bg.js | 1 - .../messageformat/locale/bn.js | 1 - .../messageformat/locale/br.js | 18 - .../messageformat/locale/ca.js | 1 - .../messageformat/locale/cs.js | 9 - .../messageformat/locale/cy.js | 18 - .../messageformat/locale/da.js | 1 - .../messageformat/locale/de.js | 1 - .../messageformat/locale/el.js | 1 - .../messageformat/locale/en.js | 1 - .../messageformat/locale/es.js | 1 - .../messageformat/locale/et.js | 1 - .../messageformat/locale/eu.js | 1 - .../messageformat/locale/fa.js | 1 - .../messageformat/locale/fi.js | 1 - .../messageformat/locale/fil.js | 1 - .../messageformat/locale/fr.js | 1 - .../messageformat/locale/ga.js | 1 - .../messageformat/locale/gl.js | 1 - .../messageformat/locale/gsw.js | 1 - .../messageformat/locale/gu.js | 1 - .../messageformat/locale/he.js | 1 - .../messageformat/locale/hi.js | 1 - .../messageformat/locale/hr.js | 14 - .../messageformat/locale/hu.js | 1 - .../messageformat/locale/id.js | 1 - .../messageformat/locale/in.js | 1 - .../messageformat/locale/is.js | 1 - .../messageformat/locale/it.js | 1 - .../messageformat/locale/iw.js | 1 - .../messageformat/locale/ja.js | 1 - .../messageformat/locale/kn.js | 1 - .../messageformat/locale/ko.js | 1 - .../messageformat/locale/lag.js | 9 - .../messageformat/locale/ln.js | 1 - .../messageformat/locale/lt.js | 10 - .../messageformat/locale/lv.js | 9 - .../messageformat/locale/mk.js | 1 - .../messageformat/locale/ml.js | 1 - .../messageformat/locale/mo.js | 10 - .../messageformat/locale/mr.js | 1 - .../messageformat/locale/ms.js | 1 - .../messageformat/locale/mt.js | 12 - .../messageformat/locale/nl.js | 1 - .../messageformat/locale/no.js | 1 - .../messageformat/locale/or.js | 1 - .../messageformat/locale/pl.js | 15 - .../messageformat/locale/pt.js | 1 - .../messageformat/locale/ro.js | 10 - .../messageformat/locale/ru.js | 14 - .../messageformat/locale/shi.js | 9 - .../messageformat/locale/sk.js | 9 - .../messageformat/locale/sl.js | 12 - .../messageformat/locale/sq.js | 1 - .../messageformat/locale/sr.js | 14 - .../messageformat/locale/sv.js | 1 - .../messageformat/locale/sw.js | 1 - .../messageformat/locale/ta.js | 1 - .../messageformat/locale/te.js | 1 - .../messageformat/locale/th.js | 1 - .../messageformat/locale/tl.js | 1 - .../messageformat/locale/tr.js | 1 - .../messageformat/locale/uk.js | 14 - .../messageformat/locale/ur.js | 1 - .../messageformat/locale/vi.js | 1 - .../messageformat/locale/zh.js | 1 - .../messageformat/messageformat.js | 4125 +- .../messageformat/package.json | 45 - .../messageformat/test/common.js | 8 - .../messageformat/test/index.html | 25 - .../messageformat/test/jquery.min.js | 4 - .../messageformat/test/tests.js | 704 - .../bower_components/modernizr/.bower.json | 10 +- .../webapp/bower_components/modernizr/.jscsrc | 21 +- .../bower_components/modernizr/Gruntfile.js | 6 +- .../bower_components/modernizr/bin/modernizr | 2 +- .../modernizr/feature-detects/a/download.js | 2 +- .../modernizr/feature-detects/ambientlight.js | 2 +- .../modernizr/feature-detects/audio.js | 2 +- .../feature-detects/battery/lowbattery.js | 2 +- .../modernizr/feature-detects/blob.js | 2 +- .../feature-detects/canvas/blending.js | 2 +- .../feature-detects/canvas/winding.js | 2 +- .../feature-detects/contenteditable.js | 2 +- .../modernizr/feature-detects/crypto.js | 4 +- .../modernizr/feature-detects/css/all.js | 2 +- .../feature-detects/css/animations.js | 2 +- .../feature-detects/css/appearance.js | 2 +- .../feature-detects/css/backdropfilter.js | 2 +- .../feature-detects/css/backgroundcliptext.js | 6 +- .../css/backgroundposition-shorthand.js | 4 +- .../css/backgroundposition-xy.js | 2 +- .../feature-detects/css/backgroundrepeat.js | 6 +- .../feature-detects/css/backgroundsize.js | 4 +- .../css/backgroundsizecover.js | 2 +- .../feature-detects/css/borderradius.js | 2 +- .../feature-detects/css/boxsizing.js | 4 +- .../modernizr/feature-detects/css/chunit.js | 2 +- .../feature-detects/css/displayrunin.js | 2 +- .../modernizr/feature-detects/css/exunit.js | 2 +- .../modernizr/feature-detects/css/filters.js | 2 +- .../feature-detects/css/flexboxlegacy.js | 2 +- .../feature-detects/css/flexboxtweener.js | 2 +- .../modernizr/feature-detects/css/fontface.js | 6 +- .../feature-detects/css/generatedcontent.js | 2 +- .../feature-detects/css/gradients.js | 11 +- .../modernizr/feature-detects/css/hairline.js | 25 + .../modernizr/feature-detects/css/mask.js | 10 +- .../modernizr/feature-detects/css/nthchild.js | 15 +- .../feature-detects/css/objectfit.js | 2 +- .../feature-detects/css/overflow-scrolling.js | 2 +- .../feature-detects/css/pointerevents.js | 8 +- .../modernizr/feature-detects/css/regions.js | 2 +- .../modernizr/feature-detects/css/remunit.js | 2 +- .../modernizr/feature-detects/css/resize.js | 2 +- .../modernizr/feature-detects/css/rgba.js | 2 +- .../feature-detects/css/scrollsnappoints.js | 20 + .../modernizr/feature-detects/css/shapes.js | 4 +- .../modernizr/feature-detects/css/vhunit.js | 4 +- .../modernizr/feature-detects/css/vmaxunit.js | 4 +- .../modernizr/feature-detects/css/vminunit.js | 4 +- .../modernizr/feature-detects/css/vwunit.js | 2 +- .../feature-detects/css/will-change.js | 2 +- .../modernizr/feature-detects/css/wrapflow.js | 2 +- .../custom-protocol-handler.js | 2 +- .../modernizr/feature-detects/customevent.js | 2 +- .../modernizr/feature-detects/dart.js | 2 +- .../feature-detects/dom/documentfragment.js | 2 +- .../modernizr/feature-detects/dom/hidden.js | 2 +- .../feature-detects/dom/microdata.js | 2 +- .../modernizr/feature-detects/elem/bdi.js | 6 +- .../feature-detects/elem/datalist.js | 7 +- .../modernizr/feature-detects/elem/details.js | 2 +- .../modernizr/feature-detects/elem/output.js | 2 +- .../feature-detects/elem/progress-meter.js | 2 +- .../modernizr/feature-detects/elem/ruby.js | 2 +- .../modernizr/feature-detects/elem/time.js | 2 +- .../modernizr/feature-detects/elem/unknown.js | 2 +- .../modernizr/feature-detects/es6/array.js | 2 +- .../feature-detects/es6/collections.js | 22 + .../modernizr/feature-detects/es6/math.js | 2 +- .../modernizr/feature-detects/es6/number.js | 2 +- .../modernizr/feature-detects/es6/object.js | 2 +- .../modernizr/feature-detects/es6/promises.js | 2 +- .../modernizr/feature-detects/es6/string.js | 2 +- .../event/deviceorientation-motion.js | 2 +- .../feature-detects/event/oninput.js | 2 +- .../feature-detects/eventlistener.js | 2 +- .../modernizr/feature-detects/file/api.js | 2 +- .../feature-detects/file/filesystem.js | 2 +- .../modernizr/feature-detects/flash.js | 8 +- .../modernizr/feature-detects/forcetouch.js | 29 + .../feature-detects/forms/capture.js | 2 +- .../feature-detects/forms/inputnumber-l10n.js | 2 +- .../forms/requestautocomplete.js | 2 +- .../feature-detects/forms/validation.js | 2 +- .../modernizr/feature-detects/gamepad.js | 2 +- .../modernizr/feature-detects/hiddenscroll.js | 2 +- .../modernizr/feature-detects/history.js | 2 +- .../modernizr/feature-detects/htmlimports.js | 2 +- .../feature-detects/iframe/sandbox.js | 2 +- .../feature-detects/iframe/seamless.js | 2 +- .../feature-detects/iframe/srcdoc.js | 2 +- .../modernizr/feature-detects/img/apng.js | 2 +- .../feature-detects/img/crossorigin.js | 16 + .../modernizr/feature-detects/img/jpeg2000.js | 4 +- .../modernizr/feature-detects/img/jpegxr.js | 2 +- .../modernizr/feature-detects/img/srcset.js | 4 +- .../feature-detects/img/webp-alpha.js | 4 +- .../feature-detects/img/webp-animation.js | 4 +- .../feature-detects/img/webp-lossless.js | 2 +- .../modernizr/feature-detects/img/webp.js | 6 +- .../modernizr/feature-detects/indexeddb.js | 7 +- .../feature-detects/indexeddbblob.js | 9 +- .../modernizr/feature-detects/input.js | 4 +- .../feature-detects/input/formaction.js | 4 +- .../feature-detects/input/formenctype.js | 4 +- .../feature-detects/input/formmethod.js | 4 +- .../feature-detects/input/formtarget.js | 4 +- .../feature-detects/inputsearchevent.js | 4 +- .../modernizr/feature-detects/inputtypes.js | 6 +- .../modernizr/feature-detects/json.js | 2 +- .../modernizr/feature-detects/ligatures.js | 17 + .../modernizr/feature-detects/mathml.js | 2 +- .../feature-detects/network/connection.js | 4 +- .../feature-detects/network/eventsource.js | 4 +- .../network/xhr-responsetype-arraybuffer.js | 2 +- .../network/xhr-responsetype-blob.js | 2 +- .../network/xhr-responsetype-document.js | 2 +- .../network/xhr-responsetype-json.js | 4 +- .../network/xhr-responsetype-text.js | 2 +- .../network/xhr-responsetype.js | 2 +- .../modernizr/feature-detects/network/xhr2.js | 4 +- .../modernizr/feature-detects/notification.js | 28 +- .../feature-detects/pagevisibility-api.js | 2 +- .../modernizr/feature-detects/performance.js | 2 +- .../feature-detects/pointerevents.js | 2 +- .../modernizr/feature-detects/proximity.js | 2 +- .../feature-detects/queryselector.js | 2 +- .../feature-detects/quota-management-api.js | 2 +- .../feature-detects/requestanimationframe.js | 2 +- .../modernizr/feature-detects/script/defer.js | 2 +- .../modernizr/feature-detects/style/scoped.js | 2 +- .../feature-detects/svg/clippaths.js | 2 +- .../modernizr/feature-detects/svg/filters.js | 4 +- .../feature-detects/svg/foreignobject.js | 2 +- .../modernizr/feature-detects/svg/inline.js | 4 +- .../modernizr/feature-detects/svg/smil.js | 2 +- .../modernizr/feature-detects/touchevents.js | 4 +- .../modernizr/feature-detects/typed-arrays.js | 2 +- .../feature-detects/unicode-range.js | 4 +- .../modernizr/feature-detects/url/bloburls.js | 2 +- .../modernizr/feature-detects/url/data-uri.js | 2 +- .../modernizr/feature-detects/userdata.js | 2 +- .../modernizr/feature-detects/vibration.js | 2 +- .../modernizr/feature-detects/video.js | 2 +- .../feature-detects/video/autoplay.js | 2 +- .../modernizr/feature-detects/vml.js | 4 +- .../modernizr/feature-detects/web-intents.js | 2 +- .../feature-detects/webrtc/datachannel.js | 6 +- .../feature-detects/webrtc/getusermedia.js | 2 +- .../feature-detects/webrtc/peerconnection.js | 2 +- .../modernizr/feature-detects/websockets.js | 2 +- .../feature-detects/window/atob-btoa.js | 7 +- .../feature-detects/window/matchmedia.js | 2 +- .../feature-detects/workers/blobworkers.js | 4 +- .../feature-detects/workers/dataworkers.js | 2 +- .../feature-detects/workers/sharedworkers.js | 2 +- .../feature-detects/workers/webworkers.js | 2 +- .../feature-detects/xdomainrequest.js | 2 +- .../modernizr/lib/build-query.js | 24 +- .../bower_components/modernizr/lib/build.js | 46 +- .../modernizr/lib/config-all.json | 6 + .../modernizr/lib/generate-banner.js | 2 +- .../bower_components/modernizr/lib/options.js | 4 +- .../modernizr/lib/polyfills.json | 12 + .../bower_components/modernizr/package.json | 29 +- .../bower_components/modernizr/readme.md | 17 +- .../modernizr/src/ModernizrProto.js | 12 +- .../bower_components/modernizr/src/atRule.js | 2 +- .../modernizr/src/generate.js | 10 +- .../modernizr/src/hasEvent.js | 6 +- .../bower_components/modernizr/src/mStyle.js | 2 +- .../bower_components/modernizr/src/modElem.js | 2 +- .../bower_components/modernizr/src/mq.js | 2 +- .../modernizr/src/nativeTestProps.js | 2 +- .../modernizr/src/prefixed.js | 3 +- .../modernizr/src/testAllProps.js | 2 +- .../modernizr/src/testDOMProps.js | 6 + .../modernizr/src/testPropsAll.js | 8 + .../modernizr/test/browser/integration.jade | 2 +- .../test/browser/integration/caniuse.js | 8 +- .../test/browser/integration/classes.js | 2 +- .../test/browser/integration/iframe.js | 6 +- .../test/browser/integration/prefixed.js | 2 +- .../test/browser/integration/prefixedCSS.js | 4 +- .../modernizr/test/browser/setup.js | 2 +- .../modernizr/test/browser/src/generate.js | 6 + .../test/browser/src/html5printshiv.js | 6 +- .../modernizr/test/browser/src/html5shiv.js | 6 +- .../modernizr/test/browser/unit.jade | 2 +- .../modernizr/test/mocks/lib/build-query.js | 2 +- .../modernizr/test/mocks/lib/metadata.js | 2 +- .../modernizr/test/node/lib/cli.js | 5 + .../modernizr/test/node/lib/metadata.js | 56 +- .../lib/{build-hash.js => build-query.js} | 12 +- .../ng-file-upload/.bower.json | 10 +- .../bower_components/ng-file-upload/.versions | 4 + .../ng-file-upload/161a70d3.favicon.ico | Bin 1150 -> 0 bytes .../ng-file-upload/FileAPI.js | 2 - .../ng-file-upload/FileAPI.min.js | 7 +- .../ng-file-upload/favicon.ico | Bin 1150 -> 0 bytes .../ng-file-upload/index.html | 97 - .../ng-file-upload/ng-file-upload-all.js | 1300 +- .../ng-file-upload/ng-file-upload-all.min.js | 7 +- .../ng-file-upload/ng-file-upload-shim.js | 13 +- .../ng-file-upload/ng-file-upload-shim.min.js | 4 +- .../ng-file-upload/ng-file-upload.js | 1287 +- .../ng-file-upload/ng-file-upload.min.js | 5 +- .../ng-file-upload/package.js | 12 + .../ng-file-upload/robots.txt | 3 - .../ngInfiniteScroll/.bower.json | 10 +- .../ngInfiniteScroll/bower.json | 1 - .../build/ng-infinite-scroll.js | 12 +- .../build/ng-infinite-scroll.min.js | 4 +- .../src/infinite-scroll.coffee | 6 +- .../bower_components/ngstorage/.bower.json | 46 + .../bower_components/ngstorage/.editorconfig | 14 + .../bower_components/ngstorage/.gitattributes | 3 + .../bower_components/ngstorage/.npmignore | 7 + .../webapp/bower_components/ngstorage/LICENSE | 21 + .../bower_components/ngstorage/README.md | 244 + .../bower_components/ngstorage/bower.json | 36 + .../bower_components/ngstorage/ngStorage.js | 221 + .../ngstorage/ngStorage.min.js | 1 + .../bower_components/ngstorage/package.js | 13 + .../bower_components/swagger-ui/.bower.json | 12 +- .../swagger-ui/CONTRIBUTING.md | 5 +- .../bower_components/swagger-ui/LICENSE | 2 +- .../bower_components/swagger-ui/README.md | 25 +- .../bower_components/swagger-ui/bower.json | 2 +- .../swagger-ui/dist/css/print.css | 26 +- .../swagger-ui/dist/css/screen.css | 70 +- .../swagger-ui/dist/css/typography.css | 20 +- .../fonts/DroidSans-Bold.ttf} | Bin 40513 -> 42480 bytes ...ans-v6-latin-regular.ttf => DroidSans.ttf} | Bin 39069 -> 41028 bytes .../dist/fonts/droid-sans-v6-latin-700.eot | Bin 22922 -> 0 bytes .../dist/fonts/droid-sans-v6-latin-700.svg | 411 - .../dist/fonts/droid-sans-v6-latin-700.woff | Bin 25992 -> 0 bytes .../dist/fonts/droid-sans-v6-latin-700.woff2 | Bin 11480 -> 0 bytes .../fonts/droid-sans-v6-latin-regular.eot | Bin 22008 -> 0 bytes .../fonts/droid-sans-v6-latin-regular.svg | 403 - .../fonts/droid-sans-v6-latin-regular.woff | Bin 24868 -> 0 bytes .../fonts/droid-sans-v6-latin-regular.woff2 | Bin 11304 -> 0 bytes .../swagger-ui/dist/images/collapse.gif | Bin 0 -> 69 bytes .../swagger-ui/dist/images/expand.gif | Bin 0 -> 73 bytes .../swagger-ui/dist/index.html | 9 +- .../swagger-ui/dist/lang/en.js | 2 + .../swagger-ui/dist/lang/fr.js | 53 + .../swagger-ui/dist/lang/it.js | 52 + .../swagger-ui/dist/lang/ja.js | 53 + .../swagger-ui/dist/lang/pl.js | 53 + .../swagger-ui/dist/lang/ru.js | 11 +- .../swagger-ui/dist/lib/jsoneditor.min.js | 11 + .../swagger-ui/dist/lib/swagger-oauth.js | 110 +- .../swagger-ui/dist/swagger-ui.js | 34375 +++++++--------- .../swagger-ui/dist/swagger-ui.min.js | 23 +- .../bower_components/swagger-ui/gulpfile.js | 77 +- .../bower_components/swagger-ui/index.js | 4 +- .../bower_components/swagger-ui/lang/en.js | 2 + .../bower_components/swagger-ui/lang/fr.js | 53 + .../bower_components/swagger-ui/lang/it.js | 52 + .../bower_components/swagger-ui/lang/ja.js | 53 + .../bower_components/swagger-ui/lang/pl.js | 53 + .../bower_components/swagger-ui/lang/ru.js | 11 +- .../swagger-ui/lib/jsoneditor.min.js | 11 + .../swagger-ui/lib/swagger-oauth.js | 110 +- .../bower_components/swagger-ui/package.json | 6 +- .../swagger-ui/src/main/html/css/print.css | 26 +- .../swagger-ui/src/main/html/css/screen.css | 70 +- .../src/main/html/css/typography.css | 20 +- .../main/html/fonts/DroidSans-Bold.ttf} | Bin 40513 -> 42477 bytes ...ans-v6-latin-regular.ttf => DroidSans.ttf} | Bin 39069 -> 41025 bytes .../html/fonts/droid-sans-v6-latin-700.eot | Bin 22922 -> 0 bytes .../html/fonts/droid-sans-v6-latin-700.svg | 411 - .../html/fonts/droid-sans-v6-latin-700.woff | Bin 25992 -> 0 bytes .../html/fonts/droid-sans-v6-latin-700.woff2 | Bin 11480 -> 0 bytes .../fonts/droid-sans-v6-latin-regular.eot | Bin 22008 -> 0 bytes .../fonts/droid-sans-v6-latin-regular.svg | 403 - .../fonts/droid-sans-v6-latin-regular.woff | Bin 24868 -> 0 bytes .../fonts/droid-sans-v6-latin-regular.woff2 | Bin 11304 -> 0 bytes .../src/main/html/images/collapse.gif | Bin 0 -> 69 bytes .../src/main/html/images/expand.gif | Bin 0 -> 73 bytes .../swagger-ui/src/main/html/index.html | 9 +- .../src/main/javascript/SwaggerUi.js | 20 +- .../swagger-ui/src/main/javascript/doc.js | 15 +- .../src/main/javascript/helpers/handlebars.js | 7 +- .../main/javascript/view/BasicAuthButton.js | 7 +- .../src/main/javascript/view/MainView.js | 15 + .../src/main/javascript/view/OperationView.js | 84 +- .../src/main/javascript/view/ParameterView.js | 34 +- .../src/main/javascript/view/ResourceView.js | 1 + .../src/main/javascript/view/SignatureView.js | 12 +- .../main/javascript/view/StatusCodeView.js | 1 + .../swagger-ui/src/main/less/auth.less | 95 +- .../swagger-ui/src/main/less/screen.less | 212 +- .../swagger-ui/src/main/less/specs.less | 13 + .../src/main/template/content_type.handlebars | 2 +- .../src/main/template/operation.handlebars | 36 +- .../src/main/template/param.handlebars | 2 + .../main/template/param_readonly.handlebars | 1 + .../main/template/param_required.handlebars | 2 + .../parameter_content_type.handlebars | 4 +- .../template/response_content_type.handlebars | 2 +- .../src/main/template/signature.handlebars | 2 +- src/main/webapp/content/css/documentation.css | 3 + .../{assets/styles => content/css}/main.css | 37 +- .../images/development_ribbon.png | Bin .../{assets => content}/images/hipster.png | Bin .../{assets => content}/images/hipster2x.png | Bin src/main/webapp/favicon.ico | Bin src/main/webapp/i18n/angular-locale_en.js | 143 + src/main/webapp/i18n/en/activate.json | 2 +- src/main/webapp/i18n/en/bankAccount.json | 2 +- src/main/webapp/i18n/en/gateway.json | 15 + src/main/webapp/i18n/en/global.json | 8 +- src/main/webapp/i18n/en/health.json | 2 +- .../webapp/i18n/en/{main.json => home.json} | 6 +- src/main/webapp/i18n/en/label.json | 2 +- src/main/webapp/i18n/en/operation.json | 2 +- src/main/webapp/i18n/en/reset.json | 2 +- ...r.management.json => user-management.json} | 2 +- src/main/webapp/i18n/fr/activate.json | 9 - src/main/webapp/i18n/fr/audits.json | 27 - src/main/webapp/i18n/fr/bankAccount.json | 26 - src/main/webapp/i18n/fr/configuration.json | 10 - src/main/webapp/i18n/fr/error.json | 6 - src/main/webapp/i18n/fr/global.json | 121 - src/main/webapp/i18n/fr/health.json | 27 - src/main/webapp/i18n/fr/label.json | 24 - src/main/webapp/i18n/fr/login.json | 19 - src/main/webapp/i18n/fr/logs.json | 36 - src/main/webapp/i18n/fr/main.json | 19 - src/main/webapp/i18n/fr/metrics.json | 95 - src/main/webapp/i18n/fr/operation.json | 27 - src/main/webapp/i18n/fr/password.json | 12 - src/main/webapp/i18n/fr/register.json | 24 - src/main/webapp/i18n/fr/reset.json | 30 - src/main/webapp/i18n/fr/sessions.json | 15 - src/main/webapp/i18n/fr/settings.json | 32 - src/main/webapp/i18n/fr/user.management.json | 30 - src/main/webapp/index.html | 348 +- .../webapp/scripts/app/account/account.js | 10 - .../account/activate/activate.controller.js | 13 - .../scripts/app/account/activate/activate.js | 26 - .../app/account/login/login.controller.js | 27 - .../webapp/scripts/app/account/login/login.js | 26 - .../account/password/password.controller.js | 28 - .../account/password/password.directive.js | 81 - .../scripts/app/account/password/password.js | 26 - .../account/register/register.controller.js | 36 - .../scripts/app/account/register/register.js | 26 - .../reset/finish/reset.finish.controller.js | 26 - .../app/account/reset/finish/reset.finish.js | 25 - .../reset/request/reset.request.controller.js | 29 - .../account/reset/request/reset.request.js | 25 - .../account/sessions/sessions.controller.js | 24 - .../scripts/app/account/sessions/sessions.js | 26 - .../account/settings/settings.controller.js | 42 - .../scripts/app/account/settings/settings.js | 26 - src/main/webapp/scripts/app/admin/admin.js | 10 - .../app/admin/audits/audits.controller.js | 36 - .../webapp/scripts/app/admin/audits/audits.js | 26 - .../configuration/configuration.controller.js | 8 - .../admin/configuration/configuration.html | 24 - .../app/admin/configuration/configuration.js | 26 - .../webapp/scripts/app/admin/docs/docs.js | 24 - .../app/admin/health/health.controller.js | 150 - .../webapp/scripts/app/admin/health/health.js | 26 - .../admin/health/health.modal.controller.js | 12 - .../scripts/app/admin/logs/logs.controller.js | 12 - .../webapp/scripts/app/admin/logs/logs.html | 27 - .../webapp/scripts/app/admin/logs/logs.js | 26 - .../app/admin/metrics/metrics.controller.js | 59 - .../scripts/app/admin/metrics/metrics.html | 239 - .../scripts/app/admin/metrics/metrics.js | 26 - .../admin/metrics/metrics.modal.controller.js | 42 - ...ser-management-delete-dialog.controller.js | 17 - .../user-management-detail.controller.js | 12 - .../user-management-dialog.controller.js | 33 - .../user-management.controller.js | 47 - .../user-management/user-management.html | 74 - .../admin/user-management/user-management.js | 120 - src/main/webapp/scripts/app/app.constants.js | 9 - src/main/webapp/scripts/app/app.js | 135 - .../bankAccount-delete-dialog.controller.js | 17 - .../bankAccount-detail.controller.js | 16 - .../bankAccount/bankAccount-detail.html | 46 - .../bankAccount-dialog.controller.js | 38 - .../bankAccount/bankAccount.controller.js | 27 - .../app/entities/bankAccount/bankAccount.js | 123 - .../webapp/scripts/app/entities/entity.js | 10 - .../label/label-delete-dialog.controller.js | 17 - .../entities/label/label-detail.controller.js | 16 - .../app/entities/label/label-detail.html | 30 - .../entities/label/label-dialog.controller.js | 37 - .../app/entities/label/label.controller.js | 26 - .../scripts/app/entities/label/label.js | 122 - .../operation-delete-dialog.controller.js | 17 - .../operation/operation-detail.controller.js | 16 - .../entities/operation/operation-detail.html | 64 - .../operation/operation-dialog.controller.js | 47 - .../operation/operation.controller.js | 43 - .../app/entities/operation/operation.js | 124 - .../scripts/app/main/main.controller.js | 9 - src/main/webapp/scripts/app/main/main.js | 25 - .../components/admin/audits.service.js | 25 - .../components/admin/configuration.service.js | 17 - .../scripts/components/admin/logs.service.js | 9 - .../components/admin/monitoring.service.js | 24 - .../components/alert/alert.directive.js | 100 - .../scripts/components/auth/auth.service.js | 132 - .../components/auth/authority.directive.js | 79 - .../components/auth/principal.service.js | 73 - .../auth/provider/auth.session.service.js | 36 - .../auth/services/activate.service.js | 10 - .../auth/services/password.service.js | 19 - .../auth/services/register.service.js | 9 - .../auth/services/sessions.service.js | 11 - .../scripts/components/form/form.directive.js | 27 - .../components/form/uib-pager.config.js | 8 - .../components/form/uib-pagination.config.js | 12 - .../interceptor/auth.interceptor.js | 48 - .../interceptor/errorhandler.interceptor.js | 13 - .../interceptor/notification.interceptor.js | 14 - .../language/language.controller.js | 41 - .../components/language/language.service.js | 33 - .../components/navbar/navbar.controller.js | 13 - .../components/navbar/navbar.directive.js | 40 - .../scripts/components/user/user.service.js | 18 - .../components/util/capitalize.filter.js | 10 - .../components/util/data-util.service.js | 39 - .../components/util/date-util.service.js | 34 - .../scripts/components/util/sort.directive.js | 54 - src/main/webapp/swagger-ui/index.html | 171 +- .../simulations/BankAccountGatlingTest.scala | 10 +- .../simulations/LabelGatlingTest.scala | 6 +- .../simulations/OperationGatlingTest.scala | 6 +- .../myapp/service/UserServiceIntTest.java | 4 +- .../web/rest/AccountResourceIntTest.java | 28 +- .../myapp/web/rest/AuditResourceIntTest.java | 52 +- .../web/rest/BankAccountResourceIntTest.java | 34 +- .../myapp/web/rest/LabelResourceIntTest.java | 16 +- .../web/rest/OperationResourceIntTest.java | 22 +- .../myapp/web/rest/UserResourceIntTest.java | 8 +- src/test/javascript/e2e/account/account.js | 83 + .../javascript/e2e/admin/administration.js | 62 + .../javascript/e2e/entities/bank-account.js | 42 + src/test/javascript/e2e/entities/label.js | 42 + src/test/javascript/e2e/entities/operation.js | 42 + src/test/javascript/karma.conf.js | 65 +- src/test/javascript/protractor.conf.js | 73 + .../activate/activate.controller.spec.js | 10 +- .../account/login/login.controller.spec.js | 20 - ...> password-strength-bar.directive.spec.js} | 0 .../password/password.controller.spec.js | 38 +- .../register/register.controller.spec.js | 54 +- .../finish/reset.finish.controller.spec.js | 10 +- .../request/reset.request.controller.spec.js | 40 +- .../sessions/sessions.controller.spec.js | 24 +- .../settings/settings.controller.spec.js | 18 +- .../admin/health/health.controller.spec.js | 44 +- .../components/login/login.controller.spec.js | 25 + .../bank-account-detail.controller.spec.js} | 4 +- .../label/label-detail.controller.spec.js | 4 +- .../operation-detail.controller.spec.js | 4 +- .../services}/auth/auth.services.spec.js | 14 +- .../javascript/spec/helpers/httpBackend.js | 2 +- src/test/javascript/spec/helpers/module.js | 2 +- src/test/resources/config/application.yml | 7 +- 1822 files changed, 77682 insertions(+), 55010 deletions(-) create mode 100644 .eslintignore create mode 100644 .eslintrc.json delete mode 100644 Gruntfile.js create mode 100644 gulp/build.js create mode 100644 gulp/config.js create mode 100644 gulp/handleErrors.js create mode 100644 gulp/serve.js create mode 100644 gulp/utils.js create mode 100644 gulpfile.js create mode 100644 src/main/docker/Dockerfile create mode 100644 src/main/docker/app.yml create mode 100644 src/main/docker/mysql.yml delete mode 100644 src/main/docker/prod.yml rename src/main/java/com/mycompany/myapp/{Application.java => SampleApplicationApp.java} (77%) create mode 100644 src/main/java/com/mycompany/myapp/config/LoggingConfiguration.java delete mode 100644 src/main/java/com/mycompany/myapp/web/filter/StaticResourcesProductionFilter.java create mode 100644 src/main/java/com/mycompany/myapp/web/rest/mapper/UserMapper.java create mode 100644 src/main/resources/i18n/messages.properties delete mode 100644 src/main/resources/i18n/messages_fr.properties delete mode 100644 src/main/webapp/.htaccess create mode 100644 src/main/webapp/app/account/account.state.js create mode 100644 src/main/webapp/app/account/activate/activate.controller.js rename src/main/webapp/{scripts => }/app/account/activate/activate.html (56%) create mode 100644 src/main/webapp/app/account/activate/activate.state.js create mode 100644 src/main/webapp/app/account/password/password-strength-bar.directive.js create mode 100644 src/main/webapp/app/account/password/password.controller.js rename src/main/webapp/{scripts => }/app/account/password/password.html (82%) create mode 100644 src/main/webapp/app/account/password/password.state.js create mode 100644 src/main/webapp/app/account/register/register.controller.js rename src/main/webapp/{scripts => }/app/account/register/register.html (81%) create mode 100644 src/main/webapp/app/account/register/register.state.js create mode 100644 src/main/webapp/app/account/reset/finish/reset.finish.controller.js rename src/main/webapp/{scripts => }/app/account/reset/finish/reset.finish.html (79%) create mode 100644 src/main/webapp/app/account/reset/finish/reset.finish.state.js create mode 100644 src/main/webapp/app/account/reset/request/reset.request.controller.js rename src/main/webapp/{scripts => }/app/account/reset/request/reset.request.html (84%) create mode 100644 src/main/webapp/app/account/reset/request/reset.request.state.js create mode 100644 src/main/webapp/app/account/sessions/sessions.controller.js rename src/main/webapp/{scripts => }/app/account/sessions/sessions.html (72%) create mode 100644 src/main/webapp/app/account/sessions/sessions.state.js create mode 100644 src/main/webapp/app/account/settings/settings.controller.js rename src/main/webapp/{scripts => }/app/account/settings/settings.html (82%) create mode 100644 src/main/webapp/app/account/settings/settings.state.js create mode 100644 src/main/webapp/app/admin/admin.state.js create mode 100644 src/main/webapp/app/admin/audits/audits.controller.js rename src/main/webapp/{scripts => }/app/admin/audits/audits.html (79%) create mode 100644 src/main/webapp/app/admin/audits/audits.service.js create mode 100644 src/main/webapp/app/admin/audits/audits.state.js create mode 100644 src/main/webapp/app/admin/configuration/configuration.controller.js create mode 100644 src/main/webapp/app/admin/configuration/configuration.html create mode 100644 src/main/webapp/app/admin/configuration/configuration.service.js create mode 100644 src/main/webapp/app/admin/configuration/configuration.state.js rename src/main/webapp/{scripts => }/app/admin/docs/docs.html (100%) create mode 100644 src/main/webapp/app/admin/docs/docs.state.js create mode 100644 src/main/webapp/app/admin/health/health.controller.js rename src/main/webapp/{scripts => }/app/admin/health/health.html (65%) create mode 100644 src/main/webapp/app/admin/health/health.modal.controller.js rename src/main/webapp/{scripts => }/app/admin/health/health.modal.html (67%) create mode 100644 src/main/webapp/app/admin/health/health.service.js create mode 100644 src/main/webapp/app/admin/health/health.state.js create mode 100644 src/main/webapp/app/admin/logs/logs.controller.js create mode 100644 src/main/webapp/app/admin/logs/logs.html create mode 100644 src/main/webapp/app/admin/logs/logs.service.js create mode 100644 src/main/webapp/app/admin/logs/logs.state.js create mode 100644 src/main/webapp/app/admin/metrics/metrics.controller.js create mode 100644 src/main/webapp/app/admin/metrics/metrics.html create mode 100644 src/main/webapp/app/admin/metrics/metrics.modal.controller.js rename src/main/webapp/{scripts => }/app/admin/metrics/metrics.modal.html (75%) create mode 100644 src/main/webapp/app/admin/metrics/metrics.service.js create mode 100644 src/main/webapp/app/admin/metrics/metrics.state.js create mode 100644 src/main/webapp/app/admin/user-management/user-management-delete-dialog.controller.js rename src/main/webapp/{scripts => }/app/admin/user-management/user-management-delete-dialog.html (68%) create mode 100644 src/main/webapp/app/admin/user-management/user-management-detail.controller.js rename src/main/webapp/{scripts => }/app/admin/user-management/user-management-detail.html (64%) create mode 100644 src/main/webapp/app/admin/user-management/user-management-dialog.controller.js rename src/main/webapp/{scripts => }/app/admin/user-management/user-management-dialog.html (67%) create mode 100644 src/main/webapp/app/admin/user-management/user-management.controller.js create mode 100644 src/main/webapp/app/admin/user-management/user-management.html create mode 100644 src/main/webapp/app/admin/user-management/user-management.state.js create mode 100644 src/main/webapp/app/app.constants.js create mode 100644 src/main/webapp/app/app.module.js create mode 100644 src/main/webapp/app/app.state.js create mode 100644 src/main/webapp/app/blocks/config/alert.config.js create mode 100644 src/main/webapp/app/blocks/config/compile.config.js create mode 100644 src/main/webapp/app/blocks/config/http.config.js create mode 100644 src/main/webapp/app/blocks/config/localstorage.config.js create mode 100644 src/main/webapp/app/blocks/config/translation-storage.provider.js create mode 100644 src/main/webapp/app/blocks/config/translation.config.js create mode 100644 src/main/webapp/app/blocks/handlers/state.handler.js create mode 100644 src/main/webapp/app/blocks/handlers/translation.handler.js create mode 100644 src/main/webapp/app/blocks/interceptor/auth-expired.interceptor.js create mode 100644 src/main/webapp/app/blocks/interceptor/errorhandler.interceptor.js create mode 100644 src/main/webapp/app/blocks/interceptor/notification.interceptor.js create mode 100644 src/main/webapp/app/components/alert/alert-error.directive.js create mode 100644 src/main/webapp/app/components/alert/alert.directive.js rename src/main/webapp/{scripts => app}/components/alert/alert.service.js (78%) rename src/main/webapp/{scripts => app}/components/form/maxbytes.directive.js (52%) rename src/main/webapp/{scripts => app}/components/form/minbytes.directive.js (52%) create mode 100644 src/main/webapp/app/components/form/pagination.constants.js create mode 100644 src/main/webapp/app/components/form/show-validation.directive.js create mode 100644 src/main/webapp/app/components/form/uib-pager.config.js create mode 100644 src/main/webapp/app/components/form/uib-pagination.config.js create mode 100644 src/main/webapp/app/components/language/language.constants.js create mode 100644 src/main/webapp/app/components/language/language.controller.js create mode 100644 src/main/webapp/app/components/language/language.filter.js create mode 100644 src/main/webapp/app/components/language/language.service.js create mode 100644 src/main/webapp/app/components/login/login.controller.js rename src/main/webapp/{scripts/app/account => app/components}/login/login.html (61%) create mode 100644 src/main/webapp/app/components/login/login.service.js rename src/main/webapp/{scripts => app}/components/util/base64.service.js (75%) create mode 100644 src/main/webapp/app/components/util/capitalize.filter.js create mode 100644 src/main/webapp/app/components/util/data-util.service.js create mode 100644 src/main/webapp/app/components/util/date-util.service.js create mode 100644 src/main/webapp/app/components/util/jhi-item-count.directive.js create mode 100644 src/main/webapp/app/components/util/pagination-util.service.js rename src/main/webapp/{scripts => app}/components/util/parse-links.service.js (55%) create mode 100644 src/main/webapp/app/components/util/sort-by.directive.js create mode 100644 src/main/webapp/app/components/util/sort.directive.js rename src/main/webapp/{scripts/components/util/truncate.filter.js => app/components/util/truncate-characters.filter.js} (54%) create mode 100644 src/main/webapp/app/components/util/truncate-words.filter.js create mode 100644 src/main/webapp/app/entities/bank-account/bank-account-delete-dialog.controller.js rename src/main/webapp/{scripts/app/entities/bankAccount/bankAccount-delete-dialog.html => app/entities/bank-account/bank-account-delete-dialog.html} (66%) create mode 100644 src/main/webapp/app/entities/bank-account/bank-account-detail.controller.js create mode 100644 src/main/webapp/app/entities/bank-account/bank-account-detail.html create mode 100644 src/main/webapp/app/entities/bank-account/bank-account-dialog.controller.js rename src/main/webapp/{scripts/app/entities/bankAccount/bankAccount-dialog.html => app/entities/bank-account/bank-account-dialog.html} (75%) create mode 100644 src/main/webapp/app/entities/bank-account/bank-account.controller.js rename src/main/webapp/{scripts/components/entities/bankAccount/bankAccount.service.js => app/entities/bank-account/bank-account.service.js} (50%) create mode 100644 src/main/webapp/app/entities/bank-account/bank-account.state.js rename src/main/webapp/{scripts/app/entities/bankAccount/bankAccounts.html => app/entities/bank-account/bank-accounts.html} (69%) create mode 100644 src/main/webapp/app/entities/entity.state.js create mode 100644 src/main/webapp/app/entities/label/label-delete-dialog.controller.js rename src/main/webapp/{scripts => }/app/entities/label/label-delete-dialog.html (67%) create mode 100644 src/main/webapp/app/entities/label/label-detail.controller.js create mode 100644 src/main/webapp/app/entities/label/label-detail.html create mode 100644 src/main/webapp/app/entities/label/label-dialog.controller.js rename src/main/webapp/{scripts => }/app/entities/label/label-dialog.html (79%) create mode 100644 src/main/webapp/app/entities/label/label.controller.js rename src/main/webapp/{scripts/components => app}/entities/label/label.service.js (53%) create mode 100644 src/main/webapp/app/entities/label/label.state.js rename src/main/webapp/{scripts => }/app/entities/label/labels.html (81%) create mode 100644 src/main/webapp/app/entities/operation/operation-delete-dialog.controller.js rename src/main/webapp/{scripts => }/app/entities/operation/operation-delete-dialog.html (66%) create mode 100644 src/main/webapp/app/entities/operation/operation-detail.controller.js create mode 100644 src/main/webapp/app/entities/operation/operation-detail.html create mode 100644 src/main/webapp/app/entities/operation/operation-dialog.controller.js rename src/main/webapp/{scripts => }/app/entities/operation/operation-dialog.html (64%) create mode 100644 src/main/webapp/app/entities/operation/operation.controller.js rename src/main/webapp/{scripts/components => app}/entities/operation/operation.service.js (55%) create mode 100644 src/main/webapp/app/entities/operation/operation.state.js rename src/main/webapp/{scripts => }/app/entities/operation/operations.html (73%) create mode 100644 src/main/webapp/app/home/home.controller.js rename src/main/webapp/{scripts/app/main/main.html => app/home/home.html} (50%) create mode 100644 src/main/webapp/app/home/home.state.js rename src/main/webapp/{scripts/app => app/layouts}/error/accessdenied.html (100%) rename src/main/webapp/{scripts/app => app/layouts}/error/error.html (100%) rename src/main/webapp/{scripts/app/error/error.js => app/layouts/error/error.state.js} (75%) create mode 100644 src/main/webapp/app/layouts/navbar/active-link.directive.js create mode 100644 src/main/webapp/app/layouts/navbar/active-menu.directive.js create mode 100644 src/main/webapp/app/layouts/navbar/navbar.controller.js rename src/main/webapp/{scripts/components => app/layouts}/navbar/navbar.html (68%) rename src/main/webapp/{scripts/components/auth/services => app/services/auth}/account.service.js (50%) create mode 100644 src/main/webapp/app/services/auth/activate.service.js create mode 100644 src/main/webapp/app/services/auth/auth.service.js create mode 100644 src/main/webapp/app/services/auth/auth.session.service.js create mode 100644 src/main/webapp/app/services/auth/has-any-authority.directive.js create mode 100644 src/main/webapp/app/services/auth/has-authority.directive.js create mode 100644 src/main/webapp/app/services/auth/password-reset-finish.service.js create mode 100644 src/main/webapp/app/services/auth/password-reset-init.service.js create mode 100644 src/main/webapp/app/services/auth/password.service.js create mode 100644 src/main/webapp/app/services/auth/principal.service.js create mode 100644 src/main/webapp/app/services/auth/register.service.js create mode 100644 src/main/webapp/app/services/auth/sessions.service.js create mode 100644 src/main/webapp/app/services/user/user.service.js delete mode 100644 src/main/webapp/assets/styles/documentation.css create mode 100644 src/main/webapp/bower_components/angular-dynamic-locale/dist/tmhDynamicLocale.min.js create mode 100644 src/main/webapp/bower_components/angular-dynamic-locale/dist/tmhDynamicLocale.min.js.map create mode 100644 src/main/webapp/bower_components/angular-loading-bar/CONTRIBUTING.md create mode 100644 src/main/webapp/bower_components/angular-loading-bar/ISSUE_TEMPLATE.md create mode 100644 src/main/webapp/bower_components/angular-loading-bar/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/main/webapp/bower_components/angular-local-storage/.bower.json delete mode 100644 src/main/webapp/bower_components/angular-local-storage/.bowerrc delete mode 100644 src/main/webapp/bower_components/angular-local-storage/.gitattributes delete mode 100644 src/main/webapp/bower_components/angular-local-storage/.gitignore delete mode 100644 src/main/webapp/bower_components/angular-local-storage/.travis.yml delete mode 100644 src/main/webapp/bower_components/angular-local-storage/CHANGELOG.md delete mode 100644 src/main/webapp/bower_components/angular-local-storage/LICENSE delete mode 100644 src/main/webapp/bower_components/angular-local-storage/README.md delete mode 100644 src/main/webapp/bower_components/angular-local-storage/bower.json delete mode 100644 src/main/webapp/bower_components/angular-local-storage/demo/demo-app.js delete mode 100644 src/main/webapp/bower_components/angular-local-storage/demo/demo-style.css delete mode 100644 src/main/webapp/bower_components/angular-local-storage/demo/demo.html delete mode 100644 src/main/webapp/bower_components/angular-local-storage/dist/angular-local-storage.js delete mode 100644 src/main/webapp/bower_components/angular-local-storage/dist/angular-local-storage.min.js delete mode 100644 src/main/webapp/bower_components/angular-local-storage/package.json delete mode 100644 src/main/webapp/bower_components/angular-ui-router/api/angular-ui-router.d.ts create mode 100644 src/main/webapp/bower_components/bootstrap-ui-datetime-picker/.bower.json create mode 100644 src/main/webapp/bower_components/bootstrap-ui-datetime-picker/LICENSE create mode 100644 src/main/webapp/bower_components/bootstrap-ui-datetime-picker/README.md create mode 100644 src/main/webapp/bower_components/bootstrap-ui-datetime-picker/bootstrap-ui-datetime-picker-tests.js create mode 100644 src/main/webapp/bower_components/bootstrap-ui-datetime-picker/bower.json create mode 100644 src/main/webapp/bower_components/bootstrap-ui-datetime-picker/dist/datetime-picker.js create mode 100644 src/main/webapp/bower_components/bootstrap-ui-datetime-picker/dist/datetime-picker.min.js create mode 100644 src/main/webapp/bower_components/bootstrap-ui-datetime-picker/dist/datetime-picker.tpls.js create mode 100644 src/main/webapp/bower_components/bootstrap-ui-datetime-picker/example/index.html create mode 100644 src/main/webapp/bower_components/bootstrap-ui-datetime-picker/example/index.js create mode 100644 src/main/webapp/bower_components/bootstrap-ui-datetime-picker/example/style.css create mode 100644 src/main/webapp/bower_components/bootstrap-ui-datetime-picker/package.js create mode 100644 src/main/webapp/bower_components/bootstrap/CHANGELOG.md create mode 100644 src/main/webapp/bower_components/bootstrap/dist/css/bootstrap-theme.min.css.map create mode 100644 src/main/webapp/bower_components/bootstrap/dist/css/bootstrap.min.css.map create mode 100644 src/main/webapp/bower_components/bootstrap/nuget/MyGet.ps1 create mode 100644 src/main/webapp/bower_components/bootstrap/nuget/bootstrap.less.nuspec create mode 100644 src/main/webapp/bower_components/bootstrap/nuget/bootstrap.nuspec create mode 100644 src/main/webapp/bower_components/jquery/AUTHORS.txt create mode 100644 src/main/webapp/bower_components/jquery/LICENSE.txt create mode 100644 src/main/webapp/bower_components/jquery/README.md create mode 100644 src/main/webapp/bower_components/jquery/dist/jquery.slim.js create mode 100644 src/main/webapp/bower_components/jquery/dist/jquery.slim.min.js create mode 100644 src/main/webapp/bower_components/jquery/dist/jquery.slim.min.map create mode 100644 src/main/webapp/bower_components/jquery/sizzle/LICENSE.txt rename src/main/webapp/bower_components/jquery/{src => }/sizzle/dist/sizzle.js (85%) create mode 100644 src/main/webapp/bower_components/jquery/sizzle/dist/sizzle.min.js create mode 100644 src/main/webapp/bower_components/jquery/sizzle/dist/sizzle.min.map create mode 100644 src/main/webapp/bower_components/jquery/src/.jshintrc create mode 100644 src/main/webapp/bower_components/jquery/src/ajax/var/location.js create mode 100644 src/main/webapp/bower_components/jquery/src/core/DOMEval.js create mode 100644 src/main/webapp/bower_components/jquery/src/core/support.js create mode 100644 src/main/webapp/bower_components/jquery/src/css/adjustCSS.js create mode 100644 src/main/webapp/bower_components/jquery/src/css/showHide.js rename src/main/webapp/bower_components/jquery/src/css/{ => var}/swap.js (77%) create mode 100644 src/main/webapp/bower_components/jquery/src/data/support.js create mode 100644 src/main/webapp/bower_components/jquery/src/data/var/acceptData.js rename src/main/webapp/bower_components/jquery/src/data/var/{data_priv.js => dataPriv.js} (77%) rename src/main/webapp/bower_components/jquery/src/data/var/{data_user.js => dataUser.js} (77%) create mode 100644 src/main/webapp/bower_components/jquery/src/deferred/exceptionHook.js create mode 100644 src/main/webapp/bower_components/jquery/src/effects/support.js create mode 100644 src/main/webapp/bower_components/jquery/src/event/focusin.js create mode 100644 src/main/webapp/bower_components/jquery/src/event/trigger.js create mode 100644 src/main/webapp/bower_components/jquery/src/manipulation/buildFragment.js create mode 100644 src/main/webapp/bower_components/jquery/src/manipulation/createSafeFragment.js create mode 100644 src/main/webapp/bower_components/jquery/src/manipulation/getAll.js create mode 100644 src/main/webapp/bower_components/jquery/src/manipulation/setGlobalEval.js create mode 100644 src/main/webapp/bower_components/jquery/src/manipulation/var/nodeNames.js create mode 100644 src/main/webapp/bower_components/jquery/src/manipulation/var/rleadingWhitespace.js create mode 100644 src/main/webapp/bower_components/jquery/src/manipulation/var/rscriptType.js create mode 100644 src/main/webapp/bower_components/jquery/src/manipulation/var/rtagName.js create mode 100644 src/main/webapp/bower_components/jquery/src/manipulation/wrapMap.js delete mode 100644 src/main/webapp/bower_components/jquery/src/sizzle/dist/sizzle.min.js delete mode 100644 src/main/webapp/bower_components/jquery/src/sizzle/dist/sizzle.min.map create mode 100644 src/main/webapp/bower_components/jquery/src/support.js create mode 100644 src/main/webapp/bower_components/jquery/src/traversing/var/dir.js create mode 100644 src/main/webapp/bower_components/jquery/src/traversing/var/siblings.js create mode 100644 src/main/webapp/bower_components/jquery/src/var/deletedIds.js create mode 100644 src/main/webapp/bower_components/jquery/src/var/document.js create mode 100644 src/main/webapp/bower_components/jquery/src/var/documentElement.js create mode 100644 src/main/webapp/bower_components/jquery/src/var/rcssNum.js delete mode 100644 src/main/webapp/bower_components/jquery/src/var/strundefined.js delete mode 100644 src/main/webapp/bower_components/messageformat/.gitignore delete mode 100644 src/main/webapp/bower_components/messageformat/.travis.yml rename src/main/webapp/bower_components/{jquery/MIT-LICENSE.txt => messageformat/LICENSE} (93%) delete mode 100644 src/main/webapp/bower_components/messageformat/Makefile delete mode 100644 src/main/webapp/bower_components/messageformat/component.json create mode 100644 src/main/webapp/bower_components/messageformat/doc/MessageFormat.formatters.html create mode 100644 src/main/webapp/bower_components/messageformat/doc/MessageFormat.html create mode 100644 src/main/webapp/bower_components/messageformat/doc/Runtime.html create mode 100644 src/main/webapp/bower_components/messageformat/doc/index.html create mode 100644 src/main/webapp/bower_components/messageformat/doc/messageformat.js.html create mode 100644 src/main/webapp/bower_components/messageformat/doc/scripts/linenumber.js create mode 100644 src/main/webapp/bower_components/messageformat/doc/scripts/prettify/Apache-License-2.0.txt create mode 100644 src/main/webapp/bower_components/messageformat/doc/scripts/prettify/lang-css.js create mode 100644 src/main/webapp/bower_components/messageformat/doc/scripts/prettify/prettify.js create mode 100644 src/main/webapp/bower_components/messageformat/doc/styles/prettify-jsdoc.css create mode 100644 src/main/webapp/bower_components/messageformat/doc/styles/prettify-tomorrow.css create mode 100644 src/main/webapp/bower_components/messageformat/example/fr/true delete mode 100644 src/main/webapp/bower_components/messageformat/lib/message_parser.js delete mode 100644 src/main/webapp/bower_components/messageformat/lib/message_parser.pegjs delete mode 100644 src/main/webapp/bower_components/messageformat/lib/messageformat.dev.js delete mode 100644 src/main/webapp/bower_components/messageformat/lib/messageformat.include.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/af.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/am.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/ar.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/bg.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/bn.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/br.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/ca.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/cs.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/cy.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/da.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/de.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/el.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/en.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/es.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/et.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/eu.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/fa.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/fi.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/fil.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/fr.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/ga.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/gl.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/gsw.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/gu.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/he.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/hi.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/hr.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/hu.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/id.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/in.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/is.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/it.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/iw.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/ja.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/kn.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/ko.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/lag.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/ln.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/lt.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/lv.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/mk.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/ml.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/mo.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/mr.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/ms.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/mt.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/nl.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/no.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/or.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/pl.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/pt.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/ro.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/ru.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/shi.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/sk.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/sl.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/sq.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/sr.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/sv.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/sw.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/ta.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/te.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/th.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/tl.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/tr.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/uk.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/ur.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/vi.js delete mode 100644 src/main/webapp/bower_components/messageformat/locale/zh.js delete mode 100644 src/main/webapp/bower_components/messageformat/package.json delete mode 100644 src/main/webapp/bower_components/messageformat/test/common.js delete mode 100644 src/main/webapp/bower_components/messageformat/test/index.html delete mode 100644 src/main/webapp/bower_components/messageformat/test/jquery.min.js delete mode 100644 src/main/webapp/bower_components/messageformat/test/tests.js create mode 100644 src/main/webapp/bower_components/modernizr/feature-detects/css/hairline.js create mode 100644 src/main/webapp/bower_components/modernizr/feature-detects/css/scrollsnappoints.js create mode 100644 src/main/webapp/bower_components/modernizr/feature-detects/es6/collections.js create mode 100644 src/main/webapp/bower_components/modernizr/feature-detects/forcetouch.js create mode 100644 src/main/webapp/bower_components/modernizr/feature-detects/img/crossorigin.js create mode 100644 src/main/webapp/bower_components/modernizr/feature-detects/ligatures.js rename src/main/webapp/bower_components/modernizr/test/universal/lib/{build-hash.js => build-query.js} (85%) create mode 100644 src/main/webapp/bower_components/ng-file-upload/.versions delete mode 100644 src/main/webapp/bower_components/ng-file-upload/161a70d3.favicon.ico delete mode 100644 src/main/webapp/bower_components/ng-file-upload/favicon.ico delete mode 100644 src/main/webapp/bower_components/ng-file-upload/index.html create mode 100644 src/main/webapp/bower_components/ng-file-upload/package.js delete mode 100644 src/main/webapp/bower_components/ng-file-upload/robots.txt create mode 100644 src/main/webapp/bower_components/ngstorage/.bower.json create mode 100644 src/main/webapp/bower_components/ngstorage/.editorconfig create mode 100644 src/main/webapp/bower_components/ngstorage/.gitattributes create mode 100644 src/main/webapp/bower_components/ngstorage/.npmignore create mode 100644 src/main/webapp/bower_components/ngstorage/LICENSE create mode 100644 src/main/webapp/bower_components/ngstorage/README.md create mode 100644 src/main/webapp/bower_components/ngstorage/bower.json create mode 100644 src/main/webapp/bower_components/ngstorage/ngStorage.js create mode 100644 src/main/webapp/bower_components/ngstorage/ngStorage.min.js create mode 100644 src/main/webapp/bower_components/ngstorage/package.js rename src/main/webapp/bower_components/swagger-ui/{src/main/html/fonts/droid-sans-v6-latin-700.ttf => dist/fonts/DroidSans-Bold.ttf} (86%) rename src/main/webapp/bower_components/swagger-ui/dist/fonts/{droid-sans-v6-latin-regular.ttf => DroidSans.ttf} (86%) delete mode 100644 src/main/webapp/bower_components/swagger-ui/dist/fonts/droid-sans-v6-latin-700.eot delete mode 100644 src/main/webapp/bower_components/swagger-ui/dist/fonts/droid-sans-v6-latin-700.svg delete mode 100644 src/main/webapp/bower_components/swagger-ui/dist/fonts/droid-sans-v6-latin-700.woff delete mode 100644 src/main/webapp/bower_components/swagger-ui/dist/fonts/droid-sans-v6-latin-700.woff2 delete mode 100644 src/main/webapp/bower_components/swagger-ui/dist/fonts/droid-sans-v6-latin-regular.eot delete mode 100644 src/main/webapp/bower_components/swagger-ui/dist/fonts/droid-sans-v6-latin-regular.svg delete mode 100644 src/main/webapp/bower_components/swagger-ui/dist/fonts/droid-sans-v6-latin-regular.woff delete mode 100644 src/main/webapp/bower_components/swagger-ui/dist/fonts/droid-sans-v6-latin-regular.woff2 create mode 100644 src/main/webapp/bower_components/swagger-ui/dist/images/collapse.gif create mode 100644 src/main/webapp/bower_components/swagger-ui/dist/images/expand.gif create mode 100644 src/main/webapp/bower_components/swagger-ui/dist/lang/fr.js create mode 100644 src/main/webapp/bower_components/swagger-ui/dist/lang/it.js create mode 100755 src/main/webapp/bower_components/swagger-ui/dist/lang/ja.js create mode 100644 src/main/webapp/bower_components/swagger-ui/dist/lang/pl.js create mode 100644 src/main/webapp/bower_components/swagger-ui/dist/lib/jsoneditor.min.js create mode 100644 src/main/webapp/bower_components/swagger-ui/lang/fr.js create mode 100644 src/main/webapp/bower_components/swagger-ui/lang/it.js create mode 100755 src/main/webapp/bower_components/swagger-ui/lang/ja.js create mode 100644 src/main/webapp/bower_components/swagger-ui/lang/pl.js create mode 100644 src/main/webapp/bower_components/swagger-ui/lib/jsoneditor.min.js rename src/main/webapp/bower_components/swagger-ui/{dist/fonts/droid-sans-v6-latin-700.ttf => src/main/html/fonts/DroidSans-Bold.ttf} (86%) rename src/main/webapp/bower_components/swagger-ui/src/main/html/fonts/{droid-sans-v6-latin-regular.ttf => DroidSans.ttf} (86%) delete mode 100644 src/main/webapp/bower_components/swagger-ui/src/main/html/fonts/droid-sans-v6-latin-700.eot delete mode 100644 src/main/webapp/bower_components/swagger-ui/src/main/html/fonts/droid-sans-v6-latin-700.svg delete mode 100644 src/main/webapp/bower_components/swagger-ui/src/main/html/fonts/droid-sans-v6-latin-700.woff delete mode 100644 src/main/webapp/bower_components/swagger-ui/src/main/html/fonts/droid-sans-v6-latin-700.woff2 delete mode 100644 src/main/webapp/bower_components/swagger-ui/src/main/html/fonts/droid-sans-v6-latin-regular.eot delete mode 100644 src/main/webapp/bower_components/swagger-ui/src/main/html/fonts/droid-sans-v6-latin-regular.svg delete mode 100644 src/main/webapp/bower_components/swagger-ui/src/main/html/fonts/droid-sans-v6-latin-regular.woff delete mode 100644 src/main/webapp/bower_components/swagger-ui/src/main/html/fonts/droid-sans-v6-latin-regular.woff2 create mode 100644 src/main/webapp/bower_components/swagger-ui/src/main/html/images/collapse.gif create mode 100644 src/main/webapp/bower_components/swagger-ui/src/main/html/images/expand.gif create mode 100644 src/main/webapp/content/css/documentation.css rename src/main/webapp/{assets/styles => content/css}/main.css (82%) mode change 100755 => 100644 rename src/main/webapp/{assets => content}/images/development_ribbon.png (100%) rename src/main/webapp/{assets => content}/images/hipster.png (100%) rename src/main/webapp/{assets => content}/images/hipster2x.png (100%) mode change 100755 => 100644 src/main/webapp/favicon.ico create mode 100644 src/main/webapp/i18n/angular-locale_en.js create mode 100644 src/main/webapp/i18n/en/gateway.json rename src/main/webapp/i18n/en/{main.json => home.json} (85%) rename src/main/webapp/i18n/en/{user.management.json => user-management.json} (97%) delete mode 100644 src/main/webapp/i18n/fr/activate.json delete mode 100644 src/main/webapp/i18n/fr/audits.json delete mode 100644 src/main/webapp/i18n/fr/bankAccount.json delete mode 100644 src/main/webapp/i18n/fr/configuration.json delete mode 100644 src/main/webapp/i18n/fr/error.json delete mode 100644 src/main/webapp/i18n/fr/global.json delete mode 100644 src/main/webapp/i18n/fr/health.json delete mode 100644 src/main/webapp/i18n/fr/label.json delete mode 100644 src/main/webapp/i18n/fr/login.json delete mode 100644 src/main/webapp/i18n/fr/logs.json delete mode 100644 src/main/webapp/i18n/fr/main.json delete mode 100644 src/main/webapp/i18n/fr/metrics.json delete mode 100644 src/main/webapp/i18n/fr/operation.json delete mode 100644 src/main/webapp/i18n/fr/password.json delete mode 100644 src/main/webapp/i18n/fr/register.json delete mode 100644 src/main/webapp/i18n/fr/reset.json delete mode 100644 src/main/webapp/i18n/fr/sessions.json delete mode 100644 src/main/webapp/i18n/fr/settings.json delete mode 100644 src/main/webapp/i18n/fr/user.management.json delete mode 100644 src/main/webapp/scripts/app/account/account.js delete mode 100644 src/main/webapp/scripts/app/account/activate/activate.controller.js delete mode 100644 src/main/webapp/scripts/app/account/activate/activate.js delete mode 100644 src/main/webapp/scripts/app/account/login/login.controller.js delete mode 100644 src/main/webapp/scripts/app/account/login/login.js delete mode 100644 src/main/webapp/scripts/app/account/password/password.controller.js delete mode 100644 src/main/webapp/scripts/app/account/password/password.directive.js delete mode 100644 src/main/webapp/scripts/app/account/password/password.js delete mode 100644 src/main/webapp/scripts/app/account/register/register.controller.js delete mode 100644 src/main/webapp/scripts/app/account/register/register.js delete mode 100644 src/main/webapp/scripts/app/account/reset/finish/reset.finish.controller.js delete mode 100644 src/main/webapp/scripts/app/account/reset/finish/reset.finish.js delete mode 100644 src/main/webapp/scripts/app/account/reset/request/reset.request.controller.js delete mode 100644 src/main/webapp/scripts/app/account/reset/request/reset.request.js delete mode 100644 src/main/webapp/scripts/app/account/sessions/sessions.controller.js delete mode 100644 src/main/webapp/scripts/app/account/sessions/sessions.js delete mode 100644 src/main/webapp/scripts/app/account/settings/settings.controller.js delete mode 100644 src/main/webapp/scripts/app/account/settings/settings.js delete mode 100644 src/main/webapp/scripts/app/admin/admin.js delete mode 100644 src/main/webapp/scripts/app/admin/audits/audits.controller.js delete mode 100644 src/main/webapp/scripts/app/admin/audits/audits.js delete mode 100644 src/main/webapp/scripts/app/admin/configuration/configuration.controller.js delete mode 100644 src/main/webapp/scripts/app/admin/configuration/configuration.html delete mode 100644 src/main/webapp/scripts/app/admin/configuration/configuration.js delete mode 100644 src/main/webapp/scripts/app/admin/docs/docs.js delete mode 100644 src/main/webapp/scripts/app/admin/health/health.controller.js delete mode 100644 src/main/webapp/scripts/app/admin/health/health.js delete mode 100644 src/main/webapp/scripts/app/admin/health/health.modal.controller.js delete mode 100644 src/main/webapp/scripts/app/admin/logs/logs.controller.js delete mode 100644 src/main/webapp/scripts/app/admin/logs/logs.html delete mode 100644 src/main/webapp/scripts/app/admin/logs/logs.js delete mode 100644 src/main/webapp/scripts/app/admin/metrics/metrics.controller.js delete mode 100644 src/main/webapp/scripts/app/admin/metrics/metrics.html delete mode 100644 src/main/webapp/scripts/app/admin/metrics/metrics.js delete mode 100644 src/main/webapp/scripts/app/admin/metrics/metrics.modal.controller.js delete mode 100644 src/main/webapp/scripts/app/admin/user-management/user-management-delete-dialog.controller.js delete mode 100644 src/main/webapp/scripts/app/admin/user-management/user-management-detail.controller.js delete mode 100644 src/main/webapp/scripts/app/admin/user-management/user-management-dialog.controller.js delete mode 100644 src/main/webapp/scripts/app/admin/user-management/user-management.controller.js delete mode 100644 src/main/webapp/scripts/app/admin/user-management/user-management.html delete mode 100644 src/main/webapp/scripts/app/admin/user-management/user-management.js delete mode 100644 src/main/webapp/scripts/app/app.constants.js delete mode 100644 src/main/webapp/scripts/app/app.js delete mode 100644 src/main/webapp/scripts/app/entities/bankAccount/bankAccount-delete-dialog.controller.js delete mode 100644 src/main/webapp/scripts/app/entities/bankAccount/bankAccount-detail.controller.js delete mode 100644 src/main/webapp/scripts/app/entities/bankAccount/bankAccount-detail.html delete mode 100644 src/main/webapp/scripts/app/entities/bankAccount/bankAccount-dialog.controller.js delete mode 100644 src/main/webapp/scripts/app/entities/bankAccount/bankAccount.controller.js delete mode 100644 src/main/webapp/scripts/app/entities/bankAccount/bankAccount.js delete mode 100644 src/main/webapp/scripts/app/entities/entity.js delete mode 100644 src/main/webapp/scripts/app/entities/label/label-delete-dialog.controller.js delete mode 100644 src/main/webapp/scripts/app/entities/label/label-detail.controller.js delete mode 100644 src/main/webapp/scripts/app/entities/label/label-detail.html delete mode 100644 src/main/webapp/scripts/app/entities/label/label-dialog.controller.js delete mode 100644 src/main/webapp/scripts/app/entities/label/label.controller.js delete mode 100644 src/main/webapp/scripts/app/entities/label/label.js delete mode 100644 src/main/webapp/scripts/app/entities/operation/operation-delete-dialog.controller.js delete mode 100644 src/main/webapp/scripts/app/entities/operation/operation-detail.controller.js delete mode 100644 src/main/webapp/scripts/app/entities/operation/operation-detail.html delete mode 100644 src/main/webapp/scripts/app/entities/operation/operation-dialog.controller.js delete mode 100644 src/main/webapp/scripts/app/entities/operation/operation.controller.js delete mode 100644 src/main/webapp/scripts/app/entities/operation/operation.js delete mode 100644 src/main/webapp/scripts/app/main/main.controller.js delete mode 100644 src/main/webapp/scripts/app/main/main.js delete mode 100644 src/main/webapp/scripts/components/admin/audits.service.js delete mode 100644 src/main/webapp/scripts/components/admin/configuration.service.js delete mode 100644 src/main/webapp/scripts/components/admin/logs.service.js delete mode 100644 src/main/webapp/scripts/components/admin/monitoring.service.js delete mode 100644 src/main/webapp/scripts/components/alert/alert.directive.js delete mode 100644 src/main/webapp/scripts/components/auth/auth.service.js delete mode 100644 src/main/webapp/scripts/components/auth/authority.directive.js delete mode 100644 src/main/webapp/scripts/components/auth/principal.service.js delete mode 100644 src/main/webapp/scripts/components/auth/provider/auth.session.service.js delete mode 100644 src/main/webapp/scripts/components/auth/services/activate.service.js delete mode 100644 src/main/webapp/scripts/components/auth/services/password.service.js delete mode 100644 src/main/webapp/scripts/components/auth/services/register.service.js delete mode 100644 src/main/webapp/scripts/components/auth/services/sessions.service.js delete mode 100644 src/main/webapp/scripts/components/form/form.directive.js delete mode 100644 src/main/webapp/scripts/components/form/uib-pager.config.js delete mode 100644 src/main/webapp/scripts/components/form/uib-pagination.config.js delete mode 100644 src/main/webapp/scripts/components/interceptor/auth.interceptor.js delete mode 100644 src/main/webapp/scripts/components/interceptor/errorhandler.interceptor.js delete mode 100644 src/main/webapp/scripts/components/interceptor/notification.interceptor.js delete mode 100644 src/main/webapp/scripts/components/language/language.controller.js delete mode 100644 src/main/webapp/scripts/components/language/language.service.js delete mode 100644 src/main/webapp/scripts/components/navbar/navbar.controller.js delete mode 100644 src/main/webapp/scripts/components/navbar/navbar.directive.js delete mode 100644 src/main/webapp/scripts/components/user/user.service.js delete mode 100755 src/main/webapp/scripts/components/util/capitalize.filter.js delete mode 100644 src/main/webapp/scripts/components/util/data-util.service.js delete mode 100644 src/main/webapp/scripts/components/util/date-util.service.js delete mode 100644 src/main/webapp/scripts/components/util/sort.directive.js create mode 100644 src/test/javascript/e2e/account/account.js create mode 100644 src/test/javascript/e2e/admin/administration.js create mode 100644 src/test/javascript/e2e/entities/bank-account.js create mode 100644 src/test/javascript/e2e/entities/label.js create mode 100644 src/test/javascript/e2e/entities/operation.js create mode 100644 src/test/javascript/protractor.conf.js delete mode 100644 src/test/javascript/spec/app/account/login/login.controller.spec.js rename src/test/javascript/spec/app/account/password/{password.directive.spec.js => password-strength-bar.directive.spec.js} (100%) create mode 100644 src/test/javascript/spec/app/components/login/login.controller.spec.js rename src/test/javascript/spec/app/entities/{bankAccount/bankAccount-detail.controller.spec.js => bank-account/bank-account-detail.controller.spec.js} (91%) rename src/test/javascript/spec/{components => app/services}/auth/auth.services.spec.js (71%) diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 000000000..047e14a33 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,6 @@ +# more info here - http://eslint.org/docs/user-guide/configuring.html#ignoring-files-and-directories + +# node_modules ignored by default + +# ignore bower_components +src/main/webapp/bower_components diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 000000000..50047b2bc --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,29 @@ +// See: http://eslint.org/ +// See: https://www.npmjs.com/package/eslint-plugin-angular +{ + "extends": [ + "eslint:recommended", + "angular" + ], + "env": { + "node": true, + "browser": true + }, + // severity for a rule should be one of the following: 0 = off, 1 = warning, 2 = error + "rules": { + // coding style + "wrap-iife": [2, "inside"], + "eqeqeq": 2, + "no-use-before-define": [2, "nofunc"], + "no-unused-vars": [2, {"vars": "local", "args": "none"}], + "no-multi-str": 2, + "no-irregular-whitespace": 2, + "semi": [2, "always"], + "indent": 2, + + // os/git options + // we want to run on all OSes + "linebreak-style": 0, + "eol-last": 2 + } +} diff --git a/.gitignore b/.gitignore index e1711e779..fadb58c43 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,7 @@ ###################### # Project Specific ###################### -/src/main/webapp/dist +/target/www/** ###################### # Node @@ -126,3 +126,8 @@ Desktop.ini # Maven Wrapper ###################### !.mvn/wrapper/maven-wrapper.jar + +###################### +# ESLint +###################### +.eslintcache diff --git a/.mvn/wrapper/maven-wrapper.properties b/.mvn/wrapper/maven-wrapper.properties index eb9194764..c954cec91 100644 --- a/.mvn/wrapper/maven-wrapper.properties +++ b/.mvn/wrapper/maven-wrapper.properties @@ -1 +1 @@ -distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.3.3/apache-maven-3.3.3-bin.zip \ No newline at end of file +distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.3.9/apache-maven-3.3.9-bin.zip diff --git a/.travis.yml b/.travis.yml index bee0ef934..1b597121d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,9 +2,9 @@ language: node_js node_js: - "0.12" sudo: false -before_install: npm install -g grunt-cli +before_install: npm install -g gulp install: npm install -before_script: grunt build +before_script: gulp build notifications: webhooks: on_success: change # options: [always|never|change] default: always diff --git a/.yo-rc.json b/.yo-rc.json index 3b55e8edb..f5a53652f 100644 --- a/.yo-rc.json +++ b/.yo-rc.json @@ -12,15 +12,20 @@ "prodDatabaseType": "mysql", "useCompass": false, "buildTool": "maven", - "frontendBuilder": "grunt", - "javaVersion": "8", "rememberMeKey": "5c37379956bd1242f5636c8cb322c2966ad81277", "searchEngine": "no", "enableTranslation": true, - "useSass": false, + "applicationType": "monolith", "testFrameworks": [ - "gatling" + "gatling", + "protractor" ], - "enableSocialSignIn": false + "languages": [ + "en" + ], + "serverPort": 8080, + "jhipsterVersion": "3.0.0", + "enableSocialSignIn": false, + "useSass": false } } \ No newline at end of file diff --git a/Gruntfile.js b/Gruntfile.js deleted file mode 100644 index bd15806d6..000000000 --- a/Gruntfile.js +++ /dev/null @@ -1,362 +0,0 @@ -// Generated on 2016-03-07 using generator-jhipster 2.27.2 -'use strict'; -var fs = require('fs'); - -var parseString = require('xml2js').parseString; -// Returns the second occurence of the version number -var parseVersionFromPomXml = function() { - var version; - var pomXml = fs.readFileSync('pom.xml', "utf8"); - parseString(pomXml, function (err, result){ - if (result.project.version && result.project.version[0]) { - version = result.project.version[0]; - } else if (result.project.parent && result.project.parent[0] && result.project.parent[0].version && result.project.parent[0].version[0]) { - version = result.project.parent[0].version[0] - } else { - throw new Error('pom.xml is malformed. No version is defined'); - } - }); - return version; -}; - -// usemin custom step -var useminAutoprefixer = { - name: 'autoprefixer', - createConfig: function(context, block) { - if(block.src.length === 0) { - return {}; - } else { - return require('grunt-usemin/lib/config/cssmin').createConfig(context, block) // Reuse cssmins createConfig - } - } -}; - -module.exports = function (grunt) { - require('load-grunt-tasks')(grunt); - require('time-grunt')(grunt); - - grunt.initConfig({ - yeoman: { - // configurable paths - app: require('./bower.json').appPath || 'app', - dist: 'src/main/webapp/dist' - }, - watch: { - bower: { - files: ['bower.json'], - tasks: ['wiredep'] - }, - ngconstant: { - files: ['Gruntfile.js', 'pom.xml'], - tasks: ['ngconstant:dev'] - } - }, - autoprefixer: { - // src and dest is configured in a subtask called "generated" by usemin - }, - wiredep: { - app: { - src: ['src/main/webapp/index.html'], - exclude: [ - /angular-i18n/ // localizations are loaded dynamically - ] - }, - test: { - src: 'src/test/javascript/karma.conf.js', - exclude: [/angular-i18n/, /angular-scenario/], - ignorePath: /\.\.\/\.\.\//, // remove ../../ from paths of injected javascripts - devDependencies: true, - fileTypes: { - js: { - block: /(([\s\t]*)\/\/\s*bower:*(\S*))(\n|\r|.)*?(\/\/\s*endbower)/gi, - detect: { - js: /'(.*\.js)'/gi - }, - replace: { - js: '\'{{filePath}}\',' - } - } - } - } - }, - browserSync: { - dev: { - bsFiles: { - src : [ - 'src/main/webapp/**/*.html', - 'src/main/webapp/**/*.json', - 'src/main/webapp/assets/styles/**/*.css', - 'src/main/webapp/scripts/**/*.{js,html}', - 'src/main/webapp/assets/images/**/*.{png,jpg,jpeg,gif,webp,svg}', - 'tmp/**/*.{css,js}' - ] - } - }, - options: { - watchTask: true, - proxy: { - target: "localhost:8080", - proxyOptions: { - xfwd: true - } - } - } - }, - clean: { - dist: { - files: [{ - dot: true, - src: [ - '.tmp', - '<%= yeoman.dist %>/*', - '!<%= yeoman.dist %>/.git*' - ] - }] - }, - server: '.tmp' - }, - jshint: { - options: { - jshintrc: '.jshintrc' - }, - all: [ - 'Gruntfile.js', - 'src/main/webapp/scripts/app.js', - 'src/main/webapp/scripts/app/**/*.js', - 'src/main/webapp/scripts/components/**/*.js' - ] - }, - concat: { - // src and dest is configured in a subtask called "generated" by usemin - }, - uglifyjs: { - // src and dest is configured in a subtask called "generated" by usemin - }, - rev: { - dist: { - files: { - src: [ - '<%= yeoman.dist %>/scripts/**/*.js', - '<%= yeoman.dist %>/assets/styles/**/*.css', - '<%= yeoman.dist %>/assets/images/**/*.{png,jpg,jpeg,gif,webp,svg}', - '<%= yeoman.dist %>/assets/fonts/*' - ] - } - } - }, - useminPrepare: { - html: 'src/main/webapp/index.html', - options: { - dest: '<%= yeoman.dist %>', - flow: { - html: { - steps: { - js: ['concat', 'uglifyjs'], - css: ['cssmin', useminAutoprefixer] // Let cssmin concat files so it corrects relative paths to fonts and images - }, - post: {} - } - } - } - }, - usemin: { - html: ['<%= yeoman.dist %>/**/*.html'], - css: ['<%= yeoman.dist %>/assets/styles/**/*.css'], - js: ['<%= yeoman.dist %>/scripts/**/*.js'], - options: { - assetsDirs: ['<%= yeoman.dist %>', '<%= yeoman.dist %>/assets/styles', '<%= yeoman.dist %>/assets/images', '<%= yeoman.dist %>/assets/fonts'], - patterns: { - js: [ - [/(assets\/images\/.*?\.(?:gif|jpeg|jpg|png|webp|svg))/gm, 'Update the JS to reference our revved images'] - ] - }, - dirs: ['<%= yeoman.dist %>'] - } - }, - imagemin: { - dist: { - files: [{ - expand: true, - cwd: 'src/main/webapp/assets/images', - src: '**/*.{jpg,jpeg}', // we don't optimize PNG files as it doesn't work on Linux. If you are not on Linux, feel free to use '**/*.{png,jpg,jpeg}' - dest: '<%= yeoman.dist %>/assets/images' - }] - } - }, - svgmin: { - dist: { - files: [{ - expand: true, - cwd: 'src/main/webapp/assets/images', - src: '**/*.svg', - dest: '<%= yeoman.dist %>/assets/images' - }] - } - }, - cssmin: { - // src and dest is configured in a subtask called "generated" by usemin - }, - ngtemplates: { - dist: { - cwd: 'src/main/webapp', - src: ['scripts/app/**/*.html', 'scripts/components/**/*.html',], - dest: '.tmp/templates/templates.js', - options: { - module: 'sampleapplicationApp', - usemin: 'scripts/app.js', - htmlmin: '<%= htmlmin.dist.options %>' - } - } - }, - htmlmin: { - dist: { - options: { - removeCommentsFromCDATA: true, - // https://github.com/yeoman/grunt-usemin/issues/44 - collapseWhitespace: true, - collapseBooleanAttributes: true, - conservativeCollapse: true, - removeAttributeQuotes: true, - removeRedundantAttributes: true, - useShortDoctype: true, - removeEmptyAttributes: true, - keepClosingSlash: true - }, - files: [{ - expand: true, - cwd: '<%= yeoman.dist %>', - src: ['*.html'], - dest: '<%= yeoman.dist %>' - }] - } - }, - // Put files not handled in other tasks here - copy: { - fonts: { - files: [{ - expand: true, - dot: true, - flatten: true, - cwd: 'src/main/webapp', - dest: '<%= yeoman.dist %>/assets/fonts', - src: [ - 'bower_components/bootstrap/fonts/*.*' - ] - }] - }, - dist: { - files: [{ - expand: true, - dot: true, - cwd: 'src/main/webapp', - dest: '<%= yeoman.dist %>', - src: [ - '*.html', - 'scripts/**/*.html', - 'assets/images/**/*.{png,gif,webp,jpg,jpeg,svg}', - 'assets/fonts/*' - ] - }, { - expand: true, - cwd: '.tmp/assets/images', - dest: '<%= yeoman.dist %>/assets/images', - src: [ - 'generated/*' - ] - }] - } - }, - karma: { - unit: { - configFile: 'src/test/javascript/karma.conf.js', - singleRun: true - } - }, - ngAnnotate: { - dist: { - files: [{ - expand: true, - cwd: '.tmp/concat/scripts', - src: '*.js', - dest: '.tmp/concat/scripts' - }] - } - }, - buildcontrol: { - options: { - commit: true, - push: false, - connectCommits: false, - message: 'Built %sourceName% from commit %sourceCommit% on branch %sourceBranch%' - } - }, - ngconstant: { - options: { - name: 'sampleapplicationApp', - deps: false, - wrap: '"use strict";\n// DO NOT EDIT THIS FILE, EDIT THE GRUNT TASK NGCONSTANT SETTINGS INSTEAD WHICH GENERATES THIS FILE\n{%= __ngModule %}' - }, - dev: { - options: { - dest: 'src/main/webapp/scripts/app/app.constants.js' - }, - constants: { - ENV: 'dev', - VERSION: parseVersionFromPomXml() - } - }, - prod: { - options: { - dest: '.tmp/scripts/app/app.constants.js' - }, - constants: { - ENV: 'prod', - VERSION: parseVersionFromPomXml() - } - } - } - }); - - grunt.registerTask('serve', [ - 'clean:server', - 'wiredep', - 'ngconstant:dev', - 'browserSync', - 'watch' - ]); - - grunt.registerTask('server', function (target) { - grunt.log.warn('The `server` task has been deprecated. Use `grunt serve` to start a server.'); - grunt.task.run([target ? ('serve:' + target) : 'serve']); - }); - - grunt.registerTask('test', [ - 'clean:server', - 'wiredep:test', - 'ngconstant:dev', - 'karma' - ]); - - grunt.registerTask('build', [ - 'clean:dist', - 'wiredep:app', - 'ngconstant:prod', - 'useminPrepare', - 'ngtemplates', - 'imagemin', - 'svgmin', - 'concat', - 'copy:fonts', - 'copy:dist', - 'ngAnnotate', - 'cssmin', - 'autoprefixer', - 'uglify', - 'rev', - 'usemin', - 'htmlmin' - ]); - - - grunt.registerTask('default', ['serve']); -}; diff --git a/README.md b/README.md index 9356819bf..01c677104 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,8 @@ This application was generated using JHipster, you can find documentation and help at [https://jhipster.github.io](https://jhipster.github.io). +## Development + Before you can build this project, you must install and configure the following dependencies on your machine: 1. [Node.js][]: We use Node to run a development web server and build the project. @@ -12,25 +14,26 @@ After installing Node, you should be able to run the following command to instal npm install -We use [Grunt][] as our build system. Install the grunt command-line tool globally with: +We use [Gulp][] as our build system. Install the Gulp command-line tool globally with: - npm install -g grunt-cli + npm install -g gulp Run the following commands in two separate terminals to create a blissful development experience where your browser auto-refreshes when files change on your hard drive. - mvn - grunt + ./mvnw + gulp Bower is used to manage CSS and JavaScript dependencies used in this application. You can upgrade dependencies by specifying a newer version in `bower.json`. You can also run `bower update` and `bower install` to manage dependencies. Add the `-h` flag on any command to see how you can use it. For example, `bower update -h`. -# Building for production + +## Building for production To optimize the sampleApplication client for production, run: - mvn -Pprod clean package + ./mvnw -Pprod clean package This will concatenate and minify CSS and JavaScript files. It will also modify `index.html` so it references these new files. @@ -41,15 +44,16 @@ To ensure everything worked, run: Then navigate to [http://localhost:8080](http://localhost:8080) in your browser. -# Testing - -Unit tests are run by [Karma][] and written with [Jasmine][]. They're located in `src/test/javascript` and can be run with: +## Testing - grunt test +Unit tests are run by [Karma][] and written with [Jasmine][]. They're located in `src/test/javascript/` and can be run with: + gulp test +UI end-to-end tests are powered by [Protractor][], which is built on top of WebDriverJS. They're located in `src/test/javascript/e2e` +and can be run by starting Spring Boot in one terminal (`./mvnw spring-boot:run`) and running the tests (`gulp itest`) in a second one. -# Continuous Integration +## Continuous Integration To setup this project in Jenkins, use the following configuration: @@ -62,13 +66,21 @@ To setup this project in Jenkins, use the following configuration: * Poll SCM / Schedule: `H/5 * * * *` * Build * Invoke Maven / Tasks: `-Pprod clean package` + * Execute Shell / Command: + ```` + ./mvnw spring-boot:run & + bootPid=$! + sleep 30s + gulp itest + kill $bootPid + ```` * Post-build Actions - * Publish JUnit test result report / Test Report XMLs: `build/test-results/*.xml` + * Publish JUnit test result report / Test Report XMLs: `build/test-results/*.xml,build/reports/e2e/*.xml` [JHipster]: https://jhipster.github.io/ [Node.js]: https://nodejs.org/ [Bower]: http://bower.io/ -[Grunt]: http://gruntjs.com/ +[Gulp]: http://gulpjs.com/ [BrowserSync]: http://www.browsersync.io/ [Karma]: http://karma-runner.github.io/ [Jasmine]: http://jasmine.github.io/2.0/introduction.html diff --git a/bower.json b/bower.json index 3b30252aa..2addc69de 100644 --- a/bower.json +++ b/bower.json @@ -1,49 +1,62 @@ { - "name": "sampleApplication", "version": "0.0.0", - "appPath": "src/main/webapp", + "name": "sampleApplication", + "appPath": "src/main/webapp/", "testPath": "src/test/javascript/spec", "dependencies": { - "angular": "1.4.8", - "angular-aria": "1.4.8", - "angular-bootstrap": "0.14.3", + "angular": "1.5.2", + "angular-aria": "1.5.2", + "angular-bootstrap": "1.2.5", "angular-cache-buster": "0.4.3", - "angular-cookies": "1.4.8", - "angular-dynamic-locale": "0.1.28", - "angular-i18n": "1.4.8", - "angular-local-storage": "0.2.3", - "angular-loading-bar": "0.8.0", - "angular-resource": "1.4.8", - "angular-sanitize": "1.4.8", - "angular-translate": "2.8.1", - "angular-translate-interpolation-messageformat": "2.8.1", - "angular-translate-loader-partial": "2.8.1", - "angular-translate-storage-cookie": "2.8.1", - "angular-ui-router": "0.2.15", - "bootstrap": "3.3.5", - "jquery": "2.1.4", + "angular-cookies": "1.5.2", + "angular-dynamic-locale": "0.1.30", + "angular-i18n": "1.5.2", + "ngstorage": "0.3.10", + "angular-loading-bar": "0.9.0", + "angular-resource": "1.5.2", + "angular-sanitize": "1.5.2", + "angular-translate": "2.11.0", + "angular-translate-interpolation-messageformat": "2.11.0", + "angular-translate-loader-partial": "2.11.0", + "angular-translate-storage-cookie": "2.11.0", + "angular-ui-router": "0.2.18", + "bootstrap": "3.3.6", + "bootstrap-ui-datetime-picker": "2.2.3", + "jquery": "2.2.2", "json3": "3.3.2", - "modernizr": "3.2.0", - "ng-file-upload": "10.0.2", - "ngInfiniteScroll": "1.2.1", - "swagger-ui": "2.1.3" + "modernizr": "3.3.1", + "ng-file-upload": "12.0.4", + "ngInfiniteScroll": "1.2.2", + "swagger-ui": "2.1.4" }, "devDependencies": { - "angular-mocks": "1.4.8", - "angular-scenario": "1.4.8" + "angular-mocks": "1.5.2", + "angular-scenario": "1.5.2" }, "overrides": { + "angular": { + "dependencies": { + "jquery": "2.2.2" + } + }, "bootstrap": { "main": [ "dist/js/bootstrap.js", "dist/css/bootstrap.css", "less/bootstrap.less" ] + }, + "messageformat": { + "main": [ + "messageformat.js", + "locale/en.js" + ] } }, "resolutions": { - "angular": "1.4.8", - "angular-cookies": "1.4.8", - "jquery": "2.1.4" + "angular": "1.5.2", + "angular-cookies": "1.5.2", + "angular-bootstrap": "1.2.5", + "jquery": "2.2.2" } } diff --git a/gulp/build.js b/gulp/build.js new file mode 100644 index 000000000..27dadabf3 --- /dev/null +++ b/gulp/build.js @@ -0,0 +1,50 @@ +var fs = require('fs'), + gulp = require('gulp'), + lazypipe = require('lazypipe'), + footer = require('gulp-footer'), + sourcemaps = require('gulp-sourcemaps'), + rev = require('gulp-rev'), + htmlmin = require('gulp-htmlmin'), + ngAnnotate = require('gulp-ng-annotate'), + prefix = require('gulp-autoprefixer'), + cssnano = require('gulp-cssnano'), + uglify = require('gulp-uglify'), + useref = require("gulp-useref"), + revReplace = require("gulp-rev-replace") + plumber = require('gulp-plumber'), + gulpIf = require('gulp-if'), + handleErrors = require('./handleErrors'); + +var config = require('./config'); + +var initTask = lazypipe() + .pipe(sourcemaps.init) + .pipe(footer, ';'); +var jsTask = lazypipe() + .pipe(ngAnnotate) + .pipe(uglify); +var cssTask = lazypipe() + .pipe(prefix) + .pipe(cssnano); + +module.exports = function() { + var templates = fs.readFileSync(config.tmp + '/templates.js'); + var manifest = gulp.src(config.revManifest); + + return gulp.src([config.app + '**/*.html', + '!' + config.app + 'app/**/*.html', + '!' + config.app + 'swagger-ui/**/*', + '!' + config.bower + '**/*.html']) + .pipe(plumber({errorHandler: handleErrors})) + //init sourcemaps and prepend semicolon + .pipe(useref({}, initTask)) + //append html templates + .pipe(gulpIf('**/app.js', footer(templates))) + .pipe(gulpIf('*.js', jsTask())) + .pipe(gulpIf('*.css', cssTask())) + .pipe(gulpIf('*.html', htmlmin({collapseWhitespace: true}))) + .pipe(gulpIf('**/*.!(html)', rev())) + .pipe(revReplace({manifest})) + .pipe(sourcemaps.write('.')) + .pipe(gulp.dest(config.dist)); +} diff --git a/gulp/config.js b/gulp/config.js new file mode 100644 index 000000000..159f6e078 --- /dev/null +++ b/gulp/config.js @@ -0,0 +1,12 @@ +module.exports = { + app: 'src/main/webapp/', + dist: 'target/www/', + test: 'src/test/javascript/', + bower: 'src/main/webapp/bower_components/', + tmp: 'target/tmp', + revManifest: 'target/tmp/rev-manifest.json', + port: 9000, + apiPort: 8080, + liveReloadPort: 35729, + uri: 'http://localhost:' +}; diff --git a/gulp/handleErrors.js b/gulp/handleErrors.js new file mode 100644 index 000000000..d3689ef72 --- /dev/null +++ b/gulp/handleErrors.js @@ -0,0 +1,20 @@ +var notify = require("gulp-notify"); +var argv = require('yargs').argv; + +module.exports = function() { + + var args = Array.prototype.slice.call(arguments); + var notification = argv.notification === undefined ? true : argv.notification; + // Send error to notification center with gulp-notify + if(notification) { + notify.onError({ + title: "JHipster Gulp Build", + subtitle: "Failure!", + message: "Error: <%= error.message %>", + sound: "Beep" + }).apply(this, args); + } + // Keep gulp from hanging on this task + this.emit('end'); + +}; diff --git a/gulp/serve.js b/gulp/serve.js new file mode 100644 index 000000000..a5645cc4e --- /dev/null +++ b/gulp/serve.js @@ -0,0 +1,60 @@ +var gulp = require('gulp'), + util = require('./utils'), + url = require('url'), + browserSync = require('browser-sync'), + proxy = require('proxy-middleware'); + +var config = require('./config'); + +module.exports = function () { + var baseUri = config.uri + config.apiPort; + // Routes to proxy to the backend. Routes ending with a / will setup + // a redirect so that if accessed without a trailing slash, will + // redirect. This is required for some endpoints for proxy-middleware + // to correctly handle them. + var proxyRoutes = [ + '/' + ]; + + var requireTrailingSlash = proxyRoutes.filter(function (r) { + return util.endsWith(r, '/'); + }).map(function (r) { + // Strip trailing slash so we can use the route to match requests + // with non trailing slash + return r.substr(0, r.length - 1); + }); + + var proxies = [ + // Ensure trailing slash in routes that require it + function (req, res, next) { + requireTrailingSlash.forEach(function (route){ + if (url.parse(req.url).path === route) { + res.statusCode = 301; + res.setHeader('Location', route + '/'); + res.end(); + } + }); + + next(); + } + ] + .concat( + // Build a list of proxies for routes: [route1_proxy, route2_proxy, ...] + proxyRoutes.map(function (r) { + var options = url.parse(baseUri + r); + options.route = r; + options.preserveHost = true; + return proxy(options); + })); + + browserSync({ + open: true, + port: config.port, + server: { + baseDir: config.app, + middleware: proxies + } + }); + + gulp.start('watch'); +} diff --git a/gulp/utils.js b/gulp/utils.js new file mode 100644 index 000000000..9cc8b3971 --- /dev/null +++ b/gulp/utils.js @@ -0,0 +1,36 @@ +'use strict'; + +var fs = require('fs'); + +module.exports = { + endsWith : endsWith, + parseVersion : parseVersion, + isLintFixed : isLintFixed +} + +function endsWith(str, suffix) { + return str.indexOf('/', str.length - suffix.length) !== -1; +}; + +var parseString = require('xml2js').parseString; +// return the version number from `pom.xml` file +function parseVersion() { + var version; + var pomXml = fs.readFileSync('pom.xml', 'utf8'); + parseString(pomXml, function (err, result) { + if (result.project.version && result.project.version[0]) { + version = result.project.version[0]; + } else if (result.project.parent && result.project.parent[0] && result.project.parent[0].version && result.project.parent[0].version[0]) { + version = result.project.parent[0].version[0]; + } else { + throw new Error('pom.xml is malformed. No version is defined'); + } + }); + return version; +} + + +function isLintFixed(file) { + // Has ESLint fixed the file contents? + return file.eslint !== null && file.eslint.fixed; +} diff --git a/gulpfile.js b/gulpfile.js new file mode 100644 index 000000000..c9a02c085 --- /dev/null +++ b/gulpfile.js @@ -0,0 +1,275 @@ +// Generated on 2016-03-23 using generator-jhipster 3.0.0 +'use strict'; + +var gulp = require('gulp'), + rev = require('gulp-rev'), + templateCache = require('gulp-angular-templatecache'), + htmlmin = require('gulp-htmlmin'), + imagemin = require('gulp-imagemin'), + ngConstant = require('gulp-ng-constant-fork'), + eslint = require('gulp-eslint'), + argv = require('yargs').argv, + gutil = require('gulp-util'), + protractor = require('gulp-protractor').protractor, + es = require('event-stream'), + flatten = require('gulp-flatten'), + del = require('del'), + wiredep = require('wiredep').stream, + runSequence = require('run-sequence'), + browserSync = require('browser-sync'), + KarmaServer = require('karma').Server, + plumber = require('gulp-plumber'), + changed = require('gulp-changed'), + gulpIf = require('gulp-if'), + inject = require('gulp-inject'), + angularFilesort = require('gulp-angular-filesort'); + +var handleErrors = require('./gulp/handleErrors'), + serve = require('./gulp/serve'), + util = require('./gulp/utils'), + build = require('./gulp/build'); + +var yorc = require('./.yo-rc.json')['generator-jhipster']; + +var config = require('./gulp/config'); + +gulp.task('clean', function () { + return del([config.dist], { dot: true }); +}); + +gulp.task('copy', function () { + return es.merge( + gulp.src(config.app + 'i18n/**') + .pipe(plumber({errorHandler: handleErrors})) + .pipe(changed(config.dist + 'i18n/')) + .pipe(gulp.dest(config.dist + 'i18n/')), + gulp.src(config.bower + 'bootstrap/fonts/*.*') + .pipe(plumber({errorHandler: handleErrors})) + .pipe(changed(config.dist + 'content/fonts/')) + .pipe(rev()) + .pipe(gulp.dest(config.dist + 'content/fonts/')) + .pipe(rev.manifest(config.revManifest, { + base: config.dist, + merge: true + })) + .pipe(gulp.dest(config.dist)), + gulp.src(config.app + 'content/**/*.{woff,woff2,svg,ttf,eot,otf}') + .pipe(plumber({errorHandler: handleErrors})) + .pipe(changed(config.dist + 'content/fonts/')) + .pipe(flatten()) + .pipe(rev()) + .pipe(gulp.dest(config.dist + 'content/fonts/')) + .pipe(rev.manifest(config.revManifest, { + base: config.dist, + merge: true + })) + .pipe(gulp.dest(config.dist)), + gulp.src([config.app + 'robots.txt', config.app + 'favicon.ico', config.app + '.htaccess'], { dot: true }) + .pipe(plumber({errorHandler: handleErrors})) + .pipe(changed(config.dist)) + .pipe(gulp.dest(config.dist)) + ); +}); + +gulp.task('images', function () { + return gulp.src(config.app + 'content/images/**') + .pipe(plumber({errorHandler: handleErrors})) + .pipe(changed(config.dist + 'content/images')) + .pipe(imagemin({optimizationLevel: 5, progressive: true, interlaced: true})) + .pipe(rev()) + .pipe(gulp.dest(config.dist + 'content/images')) + .pipe(rev.manifest(config.revManifest, { + base: config.dist, + merge: true + })) + .pipe(gulp.dest(config.dist)) + .pipe(browserSync.reload({stream: true})); +}); + + +gulp.task('languages', function () { + var locales = yorc.languages.map(function (locale) { + return config.bower + 'angular-i18n/angular-locale_' + locale + '.js'; + }); + return gulp.src(locales) + .pipe(plumber({errorHandler: handleErrors})) + .pipe(changed(config.app + 'i18n/')) + .pipe(gulp.dest(config.app + 'i18n/')); +}); + +gulp.task('styles', [], function () { + return gulp.src(config.app + 'content/css') + .pipe(browserSync.reload({stream: true})); +}); + +gulp.task('inject', function () { + return gulp.src(config.app + 'index.html') + .pipe(inject(gulp.src(config.app + 'app/**/*.js').pipe(angularFilesort()), {relative: true})) + .pipe(gulp.dest(config.app)); +}); + +gulp.task('wiredep', ['wiredep:test', 'wiredep:app']); + +gulp.task('wiredep:app', function () { + var stream = gulp.src(config.app + 'index.html') + .pipe(plumber({errorHandler: handleErrors})) + .pipe(wiredep({ + exclude: [ + /angular-i18n/, // localizations are loaded dynamically + 'bower_components/bootstrap/dist/js/' // exclude bootstrap js files as we use ui-bootstrap + ] + })) + .pipe(gulp.dest(config.app)); + + return stream; +}); + +gulp.task('wiredep:test', function () { + return gulp.src(config.test + 'karma.conf.js') + .pipe(plumber({errorHandler: handleErrors})) + .pipe(wiredep({ + exclude: [ + /angular-i18n/, // localizations are loaded dynamically + /angular-scenario/, + 'bower_components/bootstrap/dist/js/' // exclude Bootstrap js files as we use ui-bootstrap + ], + ignorePath: /\.\.\/\.\.\//, // remove ../../ from paths of injected JavaScript files + devDependencies: true, + fileTypes: { + js: { + block: /(([\s\t]*)\/\/\s*bower:*(\S*))(\n|\r|.)*?(\/\/\s*endbower)/gi, + detect: { + js: /'(.*\.js)'/gi + }, + replace: { + js: '\'src/{{filePath}}\',' + } + } + } + })) + .pipe(gulp.dest(config.test)); +}); + +gulp.task('assets:prod', ['images', 'styles', 'html'], build); + +gulp.task('html', function () { + return gulp.src(config.app + 'app/**/*.html') + .pipe(htmlmin({collapseWhitespace: true})) + .pipe(templateCache({ + module: 'sampleApplicationApp', + root: 'app/', + moduleSystem: 'IIFE' + })) + .pipe(gulp.dest(config.tmp)); +}); + +gulp.task('ngconstant:dev', function () { + return ngConstant({ + dest: 'app.constants.js', + name: 'sampleApplicationApp', + deps: false, + noFile: true, + interpolate: /\{%=(.+?)%\}/g, + wrap: + '(function () {\n' + + ' "use strict";\n' + + ' // DO NOT EDIT THIS FILE, EDIT THE GULP TASK NGCONSTANT SETTINGS INSTEAD WHICH GENERATES THIS FILE\n' + + ' {%= __ngModule %}\n' + + '})();\n', + constants: { + ENV: 'dev', + VERSION: util.parseVersion() + } + }) + .pipe(gulp.dest(config.app + 'app/')); +}); + +gulp.task('ngconstant:prod', function () { + return ngConstant({ + dest: 'app.constants.js', + name: 'sampleApplicationApp', + deps: false, + noFile: true, + interpolate: /\{%=(.+?)%\}/g, + wrap: + '(function () {\n' + + ' "use strict";\n' + + ' // DO NOT EDIT THIS FILE, EDIT THE GULP TASK NGCONSTANT SETTINGS INSTEAD WHICH GENERATES THIS FILE\n' + + ' {%= __ngModule %}\n' + + '})();\n', + constants: { + ENV: 'prod', + VERSION: util.parseVersion() + } + }) + .pipe(gulp.dest(config.app + 'app/')); +}); + +// check app for eslint errors +gulp.task('eslint', function () { + return gulp.src(['gulpfile.js', config.app + 'app/**/*.js']) + .pipe(plumber({errorHandler: handleErrors})) + .pipe(eslint()) + .pipe(eslint.format()) + .pipe(eslint.failOnError()); +}); + +// check app for eslint errors anf fix some of them +gulp.task('eslint:fix', function () { + return gulp.src(config.app + 'app/**/*.js') + .pipe(plumber({errorHandler: handleErrors})) + .pipe(eslint({ + fix: true + })) + .pipe(eslint.format()) + .pipe(gulpIf(util.isLintFixed, gulp.dest(config.app + 'app'))); +}); + +gulp.task('test', ['wiredep:test', 'ngconstant:dev'], function (done) { + new KarmaServer({ + configFile: __dirname + '/' + config.test + 'karma.conf.js', + singleRun: true + }, done).start(); +}); + +/* to run individual suites pass `gulp itest --suite suiteName` */ +gulp.task('protractor', function () { + var configObj = { + configFile: config.test + 'protractor.conf.js' + }; + if (argv.suite) { + configObj['args'] = ['--suite', argv.suite]; + } + return gulp.src([]) + .pipe(plumber({errorHandler: handleErrors})) + .pipe(protractor(configObj)) + .on('error', function () { + gutil.log('E2E Tests failed'); + process.exit(1); + }); +}); + +gulp.task('itest', ['protractor']); + +gulp.task('watch', function () { + gulp.watch('bower.json', ['install']); + gulp.watch(['gulpfile.js', 'pom.xml'], ['ngconstant:dev']); + gulp.watch(config.app + 'content/css/**/*.css', ['styles']); + gulp.watch(config.app + 'content/images/**', ['images']); + gulp.watch(config.app + 'app/**/*.js', ['inject']); + gulp.watch([config.app + '*.html', config.app + 'app/**', config.app + 'i18n/**']).on('change', browserSync.reload); +}); + +gulp.task('install', function () { + runSequence(['wiredep', 'ngconstant:dev'], 'languages', 'inject'); +}); + +gulp.task('serve', function () { + runSequence('install', serve); +}); + +gulp.task('build', ['clean'], function (cb) { + runSequence(['copy', 'wiredep:app', 'ngconstant:prod', 'languages'], 'inject', 'assets:prod', cb); +}); + +gulp.task('default', ['serve']); diff --git a/package.json b/package.json index ae87275dd..9ffcae269 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "sampleapplication", + "name": "sample-application", "version": "0.0.0", "description": "Description for sampleApplication", "private": true, @@ -11,57 +11,62 @@ "bower": "^1.6.3" }, "devDependencies": { - "grunt": "0.4.5", - "grunt-autoprefixer": "3.0.3", - "grunt-build-control": "0.6.1", - "grunt-wiredep": "2.0.0", - "grunt-browser-sync": "2.2.0", - "browser-sync": "2.10.0", - "grunt-contrib-copy": "0.8.2", - "grunt-contrib-clean": "0.7.0", - "grunt-contrib-concat": "0.5.1", - "grunt-contrib-cssmin": "0.14.0", - "grunt-contrib-htmlmin": "0.6.0", - "grunt-contrib-imagemin": "1.0.0", - "grunt-contrib-jshint": "0.11.3", - "grunt-contrib-uglify": "0.10.1", - "grunt-contrib-watch": "0.6.1", - "grunt-modernizr": "1.0.1", - "grunt-ng-annotate": "1.0.1", - "grunt-ng-constant": "1.1.0", - "grunt-rev": "0.1.0", - "grunt-svgmin": "3.1.0", - "grunt-text-replace": "0.4.0", - "grunt-usemin": "3.1.1", - "grunt-angular-templates":"0.5.7", - "load-grunt-tasks": "3.3.0", - "grunt-karma": "0.12.1", - "time-grunt": "1.2.2", + "browser-sync": "2.11.2", + "del": "2.2.0", + "eslint-config-angular": "0.5.0", + "eslint-plugin-angular": "1.0.0", "event-stream": "3.3.2", - "jshint-stylish": "2.1.0", - "karma-script-launcher": "0.1.0", - "karma-chrome-launcher": "0.2.1", - "karma-html2js-preprocessor": "0.1.0", - "karma-jasmine": "0.3.6", - "karma-requirejs": "0.2.2", - "karma-phantomjs-launcher": "0.2.1", - "phantomjs": "1.9.18", - "karma": "0.13.19", - "karma-coverage": "0.5.3", + "generator-jhipster": "3.0.0", + "gulp": "3.9.1", + "gulp-angular-filesort": "1.1.1", + "gulp-angular-templatecache": "1.8.0", + "gulp-autoprefixer": "3.1.0", + "gulp-changed": "1.3.0", + "gulp-cssnano": "2.1.1", + "gulp-eslint": "2.0.0", + "gulp-flatten": "0.2.0", + "gulp-footer": "1.0.5", + "gulp-htmlmin": "1.3.0", + "gulp-if": "2.0.0", + "gulp-imagemin": "2.4.0", + "gulp-inject": "3.0.0", + "gulp-ng-annotate": "2.0.0", + "gulp-ng-constant-fork": "0.4.1", + "gulp-notify": "2.2.0", + "gulp-plumber": "1.1.0", + "gulp-protractor": "2.1.0", + "gulp-util": "3.0.7", + "gulp-rev": "7.0.0", + "gulp-rev-replace": "^0.4.3", + "gulp-sourcemaps": "1.6.0", + "gulp-uglify": "1.5.3", + "gulp-useref": "3.0.7", + "jasmine-core": "2.4.1", + "jasmine-reporters": "2.1.1", + "karma": "0.13.22", + "karma-chrome-launcher": "0.2.3", + "karma-coverage": "0.5.5", + "karma-jasmine": "0.3.8", "karma-jenkins-reporter": "0.0.2", - "generator-jhipster": "2.27.2", - "lodash": "3.10.1", - "xml2js": "0.4.15", - "yo": ">=1.3.0", - "requirejs": "2.1", - "jasmine-core": "2.3.4", - "zeparser": "0.0.7", - "wiredep": "2.2.2" + "karma-phantomjs-launcher": "1.0.0", + "karma-script-launcher": "0.2.0", + "lazypipe": "1.0.1", + "lodash": "4.6.1", + "map-stream": "0.0.6", + "phantomjs-prebuilt": "2.1.4", + "protractor": "3.1.1", + "protractor-jasmine2-screenshot-reporter": "0.3.0", + "proxy-middleware": "0.15.0", + "run-sequence": "1.1.5", + "wiredep": "4.0.0", + "xml2js": "0.4.16", + "yargs": "4.3.2" }, "engines": { - "node": "^0.12 || ^4.2" + "node": "^4.3" }, "scripts": { - "test": "grunt test" + "test": "gulp test", + "postinstall": "webdriver-manager update" } } diff --git a/pom.xml b/pom.xml index 63ddcb2e1..8719d4c20 100644 --- a/pom.xml +++ b/pom.xml @@ -5,12 +5,12 @@ spring-boot-starter-parent org.springframework.boot - 1.3.1.RELEASE + 1.3.3.RELEASE com.mycompany.myapp - sampleapplication + sample-application 0.0.1-SNAPSHOT war sampleApplication @@ -33,9 +33,9 @@ - 2.4.1 - 3.1.0 - 1.4.0 + 2.4.3 + 3.3.0 + 1.7.0 2.4 2.6 2.1.7 @@ -50,18 +50,19 @@ 3.5 1.0.0.Final yyyyMMddHHmmss - 1.3.1 - 2.3.0 + 1.4.1 + 2.5.0 1.2 - 3.1.2 + 3.1.3 + 4.6 false - 4.0.2.RELEASE - 2.0.3 + 4.0.4.RELEASE + 2.4.0 ${project.build.directory}/test-results - 2.6 - 0.7.4.201502262128 - src/main/webapp/assets/**/*.*, src/main/webapp/bower_components/**/*.*, src/main/webapp/dist/**/*.* + 2.7.1 + 0.7.6.201602180812 + src/main/webapp/content/**/*.*, src/main/webapp/bower_components/**/*.*, target/www/**/*.* jacoco ${project.testresult.directory}/coverage/jacoco/jacoco-it.exec ${project.testresult.directory}/coverage/jacoco/jacoco.exec @@ -204,12 +205,13 @@ + + com.zaxxer + HikariCP-agent + ${HikariCP.version} + + --> + commons-io commons-io @@ -336,6 +338,25 @@ + + net.logstash.logback + logstash-logback-encoder + ${logstash-logback-encoder.version} + + + ch.qos.logback + logback-core + + + ch.qos.logback + logback-classic + + + ch.qos.logback + logback-access + + + org.springframework.cloud spring-cloud-cloudfoundry-connector @@ -365,14 +386,14 @@ spring-boot:run - src/main/resources + src/main/resources/ true **/*.xml - src/main/resources + src/main/resources/ false **/*.xml @@ -381,9 +402,9 @@ - com.google.code.sortpom - maven-sortpom-plugin - ${maven-sortpom-plugin.version} + com.github.ekryd.sortpom + sortpom-maven-plugin + ${sortpom-maven-plugin.version} verify @@ -453,18 +474,11 @@ org.apache.maven.plugins maven-surefire-plugin - -Xmx256m ${surefireArgLine} + -Djava.security.egd=file:/dev/./urandom -Xmx256m ${surefireArgLine} alphabetical - - org.apache.maven.plugins - maven-war-plugin - - WEB-INF/lib/tomcat-*.jar - - org.jacoco jacoco-maven-plugin @@ -546,7 +560,7 @@ - hibernate:spring:com.mycompany.myapp.domain?dialect= + hibernate:spring:com.mycompany.myapp.domain?dialect=&hibernate.ejb.naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringNamingStrategy true debug @@ -573,12 +587,31 @@ spring-boot-maven-plugin true + --spring.profiles.active=dev + + com.spotify + docker-maven-plugin + 0.4.1 + + sampleapplication + src/main/docker + + + / + ${project.build.directory} + ${project.build.finalName}.war + + + + @@ -612,6 +645,23 @@ + + + com.github.trecloux + + yeoman-maven-plugin + + + [0.5,) + + + build + + + + + + @@ -641,34 +691,14 @@ true - - - fast - - - DEBUG - - - - org.springframework.boot - spring-boot-starter-undertow - - - org.springframework.boot - spring-boot-devtools - true - - - org.springframework.boot - spring-boot-maven-plugin + org.apache.maven.plugins + maven-war-plugin - true - - --spring.profiles.active=dev,fast - + src/main/webapp/ + WEB-INF/lib/tomcat-*.jar @@ -687,7 +717,7 @@ com.github.trecloux yeoman-maven-plugin - 0.4 + 0.5 run-frontend-build @@ -696,8 +726,8 @@ build - grunt - build --no-color + gulp + build --no-notification @@ -711,10 +741,7 @@ - src/main/webapp/dist - - - .tmp + target/www/ node_modules @@ -722,6 +749,14 @@ + + org.apache.maven.plugins + maven-war-plugin + + target/www/ + WEB-INF/lib/tomcat-*.jar + + org.springframework.boot spring-boot-maven-plugin diff --git a/src/main/docker/Dockerfile b/src/main/docker/Dockerfile new file mode 100644 index 000000000..54f1edd3d --- /dev/null +++ b/src/main/docker/Dockerfile @@ -0,0 +1,10 @@ +FROM java:openjdk-8-jdk-alpine + +# add directly the war +ADD *.war /app.war + +RUN sh -c 'touch /app.war' +VOLUME /tmp +CMD ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.war"] + +EXPOSE 8080 diff --git a/src/main/docker/app.yml b/src/main/docker/app.yml new file mode 100644 index 000000000..d34628c15 --- /dev/null +++ b/src/main/docker/app.yml @@ -0,0 +1,15 @@ +version: '2' +services: + sampleapplication-app: + image: sampleapplication + external_links: + - sampleapplication-mysql:mysql + environment: + - SPRING_PROFILES_ACTIVE=prod + - SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/sampleapplication?useUnicode=true&characterEncoding=utf8&useSSL=false + ports: + - 8080:8080 + sampleapplication-mysql: + extends: + file: mysql.yml + service: sampleapplication-mysql diff --git a/src/main/docker/mysql.yml b/src/main/docker/mysql.yml new file mode 100644 index 000000000..3593c3e32 --- /dev/null +++ b/src/main/docker/mysql.yml @@ -0,0 +1,14 @@ +version: '2' +services: + sampleapplication-mysql: + container_name: sampleapplication-mysql + image: mysql:5.7.11 + # volumes: + # - ~/volumes/jhipster/sampleApplication/mysql/:/var/lib/mysql/ + environment: + - MYSQL_USER=root + - MYSQL_ALLOW_EMPTY_PASSWORD=yes + - MYSQL_DATABASE=sampleapplication + ports: + - 3306:3306 + command: mysqld --lower_case_table_names=1 diff --git a/src/main/docker/prod.yml b/src/main/docker/prod.yml deleted file mode 100644 index 04de97f3d..000000000 --- a/src/main/docker/prod.yml +++ /dev/null @@ -1,12 +0,0 @@ -sampleapplication-mysql: - container_name: sampleapplication-mysql - image: mysql:5.7.9 - # volumes: - # - ~/volumes/jhipster/sampleApplication/mysql/:/var/lib/mysql/ - environment: - - MYSQL_USER=root - - MYSQL_ALLOW_EMPTY_PASSWORD=yes - - MYSQL_DATABASE=sampleapplication - ports: - - "3306:3306" - command: mysqld --lower_case_table_names=1 diff --git a/src/main/docker/sonar.yml b/src/main/docker/sonar.yml index d3d34bfa6..1a4de4941 100644 --- a/src/main/docker/sonar.yml +++ b/src/main/docker/sonar.yml @@ -1,6 +1,8 @@ -sampleapplication-sonar: - container_name: sampleapplication-sonar - image: sonarqube:4.5.6 - ports: - - "9000:9000" - - "9092:9092" +version: '2' +services: + sampleapplication-sonar: + container_name: sampleapplication-sonar + image: sonarqube:5.3 + ports: + - 9000:9000 + - 9092:9092 diff --git a/src/main/java/com/mycompany/myapp/ApplicationWebXml.java b/src/main/java/com/mycompany/myapp/ApplicationWebXml.java index 3d8317e77..b67f443e8 100644 --- a/src/main/java/com/mycompany/myapp/ApplicationWebXml.java +++ b/src/main/java/com/mycompany/myapp/ApplicationWebXml.java @@ -17,7 +17,7 @@ public class ApplicationWebXml extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.profiles(addDefaultProfile()) - .sources(Application.class); + .sources(SampleApplicationApp.class); } /** diff --git a/src/main/java/com/mycompany/myapp/Application.java b/src/main/java/com/mycompany/myapp/SampleApplicationApp.java similarity index 77% rename from src/main/java/com/mycompany/myapp/Application.java rename to src/main/java/com/mycompany/myapp/SampleApplicationApp.java index 038afb9b3..b4198f5d4 100644 --- a/src/main/java/com/mycompany/myapp/Application.java +++ b/src/main/java/com/mycompany/myapp/SampleApplicationApp.java @@ -6,8 +6,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.SpringApplication; -import org.springframework.boot.actuate.autoconfigure.MetricFilterAutoConfiguration; -import org.springframework.boot.actuate.autoconfigure.MetricRepositoryAutoConfiguration; +import org.springframework.boot.actuate.autoconfigure.*; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.liquibase.LiquibaseProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; @@ -17,7 +16,6 @@ import javax.annotation.PostConstruct; import javax.inject.Inject; -import java.io.IOException; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.Arrays; @@ -26,24 +24,22 @@ @ComponentScan @EnableAutoConfiguration(exclude = { MetricFilterAutoConfiguration.class, MetricRepositoryAutoConfiguration.class }) @EnableConfigurationProperties({ JHipsterProperties.class, LiquibaseProperties.class }) -public class Application { +public class SampleApplicationApp { - private static final Logger log = LoggerFactory.getLogger(Application.class); + private static final Logger log = LoggerFactory.getLogger(SampleApplicationApp.class); @Inject private Environment env; /** * Initializes sampleApplication. - *

+ *

* Spring profiles can be configured with a program arguments --spring.profiles.active=your-active-profile - *

*

- * You can find more information on how profiles work with JHipster on http://jhipster.github.io/profiles.html. - *

+ * You can find more information on how profiles work with JHipster on http://jhipster.github.io/profiles/. */ @PostConstruct - public void initApplication() throws IOException { + public void initApplication() { if (env.getActiveProfiles().length == 0) { log.warn("No Spring profile configured, running with default configuration"); } else { @@ -53,10 +49,6 @@ public void initApplication() throws IOException { log.error("You have misconfigured your application! " + "It should not run with both the 'dev' and 'prod' profiles at the same time."); } - if (activeProfiles.contains(Constants.SPRING_PROFILE_PRODUCTION) && activeProfiles.contains(Constants.SPRING_PROFILE_FAST)) { - log.error("You have misconfigured your application! " + - "It should not run with both the 'prod' and 'fast' profiles at the same time."); - } if (activeProfiles.contains(Constants.SPRING_PROFILE_DEVELOPMENT) && activeProfiles.contains(Constants.SPRING_PROFILE_CLOUD)) { log.error("You have misconfigured your application! " + "It should not run with both the 'dev' and 'cloud' profiles at the same time."); @@ -66,15 +58,20 @@ public void initApplication() throws IOException { /** * Main method, used to run the application. + * + * @param args the command line arguments + * @throws UnknownHostException if the local host name could not be resolved into an address */ public static void main(String[] args) throws UnknownHostException { - SpringApplication app = new SpringApplication(Application.class); + SpringApplication app = new SpringApplication(SampleApplicationApp.class); SimpleCommandLinePropertySource source = new SimpleCommandLinePropertySource(args); addDefaultProfile(app, source); Environment env = app.run(args).getEnvironment(); - log.info("Access URLs:\n----------------------------------------------------------\n\t" + + log.info("\n----------------------------------------------------------\n\t" + + "Application '{}' is running! Access URLs:\n\t" + "Local: \t\thttp://127.0.0.1:{}\n\t" + "External: \thttp://{}:{}\n----------------------------------------------------------", + env.getProperty("spring.application.name"), env.getProperty("server.port"), InetAddress.getLocalHost().getHostAddress(), env.getProperty("server.port")); diff --git a/src/main/java/com/mycompany/myapp/async/ExceptionHandlingAsyncTaskExecutor.java b/src/main/java/com/mycompany/myapp/async/ExceptionHandlingAsyncTaskExecutor.java index 300de6220..7603869da 100644 --- a/src/main/java/com/mycompany/myapp/async/ExceptionHandlingAsyncTaskExecutor.java +++ b/src/main/java/com/mycompany/myapp/async/ExceptionHandlingAsyncTaskExecutor.java @@ -22,7 +22,7 @@ public ExceptionHandlingAsyncTaskExecutor(AsyncTaskExecutor executor) { @Override public void execute(Runnable task) { - executor.execute(task); + executor.execute(createWrappedRunnable(task)); } @Override diff --git a/src/main/java/com/mycompany/myapp/config/AsyncConfiguration.java b/src/main/java/com/mycompany/myapp/config/AsyncConfiguration.java index 1d92d7458..cc1968775 100644 --- a/src/main/java/com/mycompany/myapp/config/AsyncConfiguration.java +++ b/src/main/java/com/mycompany/myapp/config/AsyncConfiguration.java @@ -33,7 +33,7 @@ public Executor getAsyncExecutor() { executor.setCorePoolSize(jHipsterProperties.getAsync().getCorePoolSize()); executor.setMaxPoolSize(jHipsterProperties.getAsync().getMaxPoolSize()); executor.setQueueCapacity(jHipsterProperties.getAsync().getQueueCapacity()); - executor.setThreadNamePrefix("sampleapplication-Executor-"); + executor.setThreadNamePrefix("sample-application-Executor-"); return new ExceptionHandlingAsyncTaskExecutor(executor); } diff --git a/src/main/java/com/mycompany/myapp/config/CacheConfiguration.java b/src/main/java/com/mycompany/myapp/config/CacheConfiguration.java index 242a6931c..5f1ccb143 100644 --- a/src/main/java/com/mycompany/myapp/config/CacheConfiguration.java +++ b/src/main/java/com/mycompany/myapp/config/CacheConfiguration.java @@ -22,7 +22,6 @@ @Configuration @EnableCaching @AutoConfigureAfter(value = { MetricsConfiguration.class, DatabaseConfiguration.class }) -@Profile("!" + Constants.SPRING_PROFILE_FAST) public class CacheConfiguration { private final Logger log = LoggerFactory.getLogger(CacheConfiguration.class); diff --git a/src/main/java/com/mycompany/myapp/config/Constants.java b/src/main/java/com/mycompany/myapp/config/Constants.java index b0addca91..07b981771 100644 --- a/src/main/java/com/mycompany/myapp/config/Constants.java +++ b/src/main/java/com/mycompany/myapp/config/Constants.java @@ -5,14 +5,17 @@ */ public final class Constants { - // Spring profile for development, production and "fast", see http://jhipster.github.io/profiles.html + // Spring profile for development and production, see http://jhipster.github.io/profiles/ public static final String SPRING_PROFILE_DEVELOPMENT = "dev"; public static final String SPRING_PROFILE_PRODUCTION = "prod"; - public static final String SPRING_PROFILE_FAST = "fast"; // Spring profile used when deploying with Spring Cloud (used when deploying to CloudFoundry) public static final String SPRING_PROFILE_CLOUD = "cloud"; // Spring profile used when deploying to Heroku public static final String SPRING_PROFILE_HEROKU = "heroku"; + // Spring profile used to disable swagger + public static final String SPRING_PROFILE_NO_SWAGGER = "no-swagger"; + // Spring profile used to disable running liquibase + public static final String SPRING_PROFILE_NO_LIQUIBASE = "no-liquibase"; public static final String SYSTEM_ACCOUNT = "system"; diff --git a/src/main/java/com/mycompany/myapp/config/DatabaseConfiguration.java b/src/main/java/com/mycompany/myapp/config/DatabaseConfiguration.java index ff3a5fd40..3babacfef 100644 --- a/src/main/java/com/mycompany/myapp/config/DatabaseConfiguration.java +++ b/src/main/java/com/mycompany/myapp/config/DatabaseConfiguration.java @@ -4,7 +4,6 @@ import com.codahale.metrics.MetricRegistry; import com.fasterxml.jackson.datatype.hibernate4.Hibernate4Module; -import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariDataSource; import liquibase.integration.spring.SpringLiquibase; import org.h2.tools.Server; @@ -12,8 +11,10 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; +import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder; import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties; import org.springframework.boot.autoconfigure.liquibase.LiquibaseProperties; +import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.ApplicationContextException; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -43,8 +44,9 @@ public class DatabaseConfiguration { private MetricRegistry metricRegistry; @Bean(destroyMethod = "close") - @ConditionalOnExpression("#{!environment.acceptsProfiles('cloud') && !environment.acceptsProfiles('heroku')}") - public DataSource dataSource(DataSourceProperties dataSourceProperties, JHipsterProperties jHipsterProperties) { + @ConditionalOnExpression("#{!environment.acceptsProfiles('" + Constants.SPRING_PROFILE_CLOUD + "') && !environment.acceptsProfiles('" + Constants.SPRING_PROFILE_HEROKU + "')}") + @ConfigurationProperties(prefix = "spring.datasource.hikari") + public DataSource dataSource(DataSourceProperties dataSourceProperties) { log.debug("Configuring Datasource"); if (dataSourceProperties.getUrl() == null) { log.error("Your database connection pool configuration is incorrect! The application" + @@ -53,34 +55,26 @@ public DataSource dataSource(DataSourceProperties dataSourceProperties, JHipster throw new ApplicationContextException("Database connection pool is not configured correctly"); } - HikariConfig config = new HikariConfig(); - config.setDataSourceClassName(dataSourceProperties.getDriverClassName()); - config.addDataSourceProperty("url", dataSourceProperties.getUrl()); - if (dataSourceProperties.getUsername() != null) { - config.addDataSourceProperty("user", dataSourceProperties.getUsername()); - } else { - config.addDataSourceProperty("user", ""); // HikariCP doesn't allow null user - } - if (dataSourceProperties.getPassword() != null) { - config.addDataSourceProperty("password", dataSourceProperties.getPassword()); - } else { - config.addDataSourceProperty("password", ""); // HikariCP doesn't allow null password - } + HikariDataSource hikariDataSource = (HikariDataSource) DataSourceBuilder + .create(dataSourceProperties.getClassLoader()) + .type(HikariDataSource.class) + .driverClassName(dataSourceProperties.getDriverClassName()) + .url(dataSourceProperties.getUrl()) + .username(dataSourceProperties.getUsername()) + .password(dataSourceProperties.getPassword()) + .build(); - //MySQL optimizations, see https://github.com/brettwooldridge/HikariCP/wiki/MySQL-Configuration - if ("com.mysql.jdbc.jdbc2.optional.MysqlDataSource".equals(dataSourceProperties.getDriverClassName())) { - config.addDataSourceProperty("cachePrepStmts", jHipsterProperties.getDatasource().isCachePrepStmts()); - config.addDataSourceProperty("prepStmtCacheSize", jHipsterProperties.getDatasource().getPrepStmtCacheSize()); - config.addDataSourceProperty("prepStmtCacheSqlLimit", jHipsterProperties.getDatasource().getPrepStmtCacheSqlLimit()); - } if (metricRegistry != null) { - config.setMetricRegistry(metricRegistry); + hikariDataSource.setMetricRegistry(metricRegistry); } - return new HikariDataSource(config); + return hikariDataSource; } /** * Open the TCP port for the H2 database, so it is available remotely. + * + * @return the H2 database TCP server + * @throws SQLException if the server failed to start */ @Bean(initMethod = "start", destroyMethod = "stop") @Profile(Constants.SPRING_PROFILE_DEVELOPMENT) @@ -99,18 +93,13 @@ public SpringLiquibase liquibase(DataSource dataSource, DataSourceProperties dat liquibase.setContexts(liquibaseProperties.getContexts()); liquibase.setDefaultSchema(liquibaseProperties.getDefaultSchema()); liquibase.setDropFirst(liquibaseProperties.isDropFirst()); - liquibase.setShouldRun(liquibaseProperties.isEnabled()); - if (env.acceptsProfiles(Constants.SPRING_PROFILE_FAST)) { - if ("org.h2.jdbcx.JdbcDataSource".equals(dataSourceProperties.getDriverClassName())) { - liquibase.setShouldRun(true); - log.warn("Using '{}' profile with H2 database in memory is not optimal, you should consider switching to" + - " MySQL or Postgresql to avoid rebuilding your database upon each start.", Constants.SPRING_PROFILE_FAST); - } else { - liquibase.setShouldRun(false); - } + if (env.acceptsProfiles(Constants.SPRING_PROFILE_NO_LIQUIBASE)) { + liquibase.setShouldRun(false); } else { + liquibase.setShouldRun(liquibaseProperties.isEnabled()); log.debug("Configuring Liquibase"); } + return liquibase; } diff --git a/src/main/java/com/mycompany/myapp/config/JHipsterProperties.java b/src/main/java/com/mycompany/myapp/config/JHipsterProperties.java index 3ebc310ae..75fb35d4e 100644 --- a/src/main/java/com/mycompany/myapp/config/JHipsterProperties.java +++ b/src/main/java/com/mycompany/myapp/config/JHipsterProperties.java @@ -5,6 +5,7 @@ import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.web.cors.CorsConfiguration; + /** * Properties specific to JHipster. * @@ -19,8 +20,6 @@ public class JHipsterProperties { private final Http http = new Http(); - private final Datasource datasource = new Datasource(); - private final Cache cache = new Cache(); private final Mail mail = new Mail(); @@ -33,8 +32,6 @@ public class JHipsterProperties { private final CorsConfiguration cors = new CorsConfiguration(); - - public Async getAsync() { return async; } @@ -43,10 +40,6 @@ public Http getHttp() { return http; } - public Datasource getDatasource() { - return datasource; - } - public Cache getCache() { return cache; } @@ -71,7 +64,6 @@ public CorsConfiguration getCors() { return cors; } - public static class Async { private int corePoolSize = 2; @@ -115,7 +107,7 @@ public Cache getCache() { public static class Cache { - private int timeToLiveInDays = 31; + private int timeToLiveInDays = 1461; public int getTimeToLiveInDays() { return timeToLiveInDays; @@ -127,49 +119,6 @@ public void setTimeToLiveInDays(int timeToLiveInDays) { } } - public static class Datasource { - - private boolean cachePrepStmts = true; - - private int prepStmtCacheSize = 250; - - private int prepStmtCacheSqlLimit = 2048; - - private boolean useServerPrepStmts = true; - - public boolean isCachePrepStmts() { - return cachePrepStmts; - } - - public void setCachePrepStmts(boolean cachePrepStmts) { - this.cachePrepStmts = cachePrepStmts; - } - - public int getPrepStmtCacheSize() { - return prepStmtCacheSize; - } - - public void setPrepStmtCacheSize(int prepStmtCacheSize) { - this.prepStmtCacheSize = prepStmtCacheSize; - } - - public int getPrepStmtCacheSqlLimit() { - return prepStmtCacheSqlLimit; - } - - public void setPrepStmtCacheSqlLimit(int prepStmtCacheSqlLimit) { - this.prepStmtCacheSqlLimit = prepStmtCacheSqlLimit; - } - - public boolean isUseServerPrepStmts() { - return useServerPrepStmts; - } - - public void setUseServerPrepStmts(boolean useServerPrepStmts) { - this.useServerPrepStmts = useServerPrepStmts; - } - } - public static class Cache { private int timeToLiveSeconds = 3600; @@ -217,13 +166,13 @@ public void setFrom(String from) { public static class Security { - private final Rememberme rememberme = new Rememberme(); + private final RememberMe rememberMe = new RememberMe(); - public Rememberme getRememberme() { - return rememberme; + public RememberMe getRememberMe() { + return rememberMe; } - public static class Rememberme { + public static class RememberMe { @NotNull private String key; @@ -248,7 +197,11 @@ public static class Swagger { private String termsOfServiceUrl; - private String contact; + private String contactName; + + private String contactUrl; + + private String contactEmail; private String license; @@ -286,12 +239,28 @@ public void setTermsOfServiceUrl(String termsOfServiceUrl) { this.termsOfServiceUrl = termsOfServiceUrl; } - public String getContact() { - return contact; + public String getContactName() { + return contactName; } - public void setContact(String contact) { - this.contact = contact; + public void setContactName(String contactName) { + this.contactName = contactName; + } + + public String getContactUrl() { + return contactUrl; + } + + public void setContactUrl(String contactUrl) { + this.contactUrl = contactUrl; + } + + public String getContactEmail() { + return contactEmail; + } + + public void setContactEmail(String contactEmail) { + this.contactEmail = contactEmail; } public String getLicense() { @@ -319,6 +288,8 @@ public static class Metrics { private final Graphite graphite = new Graphite(); + private final Logs logs = new Logs(); + public Jmx getJmx() { return jmx; } @@ -331,6 +302,11 @@ public Graphite getGraphite() { return graphite; } + public Logs getLogs() { + return logs; + } + + public static class Jmx { private boolean enabled = true; @@ -419,5 +395,67 @@ public void setPrefix(String prefix) { this.prefix = prefix; } } + + public static class Logs { + + private boolean enabled = false; + + private long reportFrequency = 60; + + public long getReportFrequency() { + return reportFrequency; + } + + public void setReportFrequency(int reportFrequency) { + this.reportFrequency = reportFrequency; + } + + public boolean isEnabled() { + return enabled; + } + + public void setEnabled(boolean enabled) { + this.enabled = enabled; + } + } } + + private final Logging logging = new Logging(); + + public Logging getLogging() { return logging; } + + public static class Logging { + + private final Logstash logstash = new Logstash(); + + public Logstash getLogstash() { return logstash; } + + public static class Logstash { + + private boolean enabled = false; + + private String host = "localhost"; + + private int port = 5000; + + private int queueSize = 512; + + public boolean isEnabled() { return enabled; } + + public void setEnabled(boolean enabled) { this.enabled = enabled; } + + public String getHost() { return host; } + + public void setHost(String host) { this.host = host; } + + public int getPort() { return port; } + + public void setPort(int port) { this.port = port; } + + public int getQueueSize() { return queueSize; } + + public void setQueueSize(int queueSize) { this.queueSize = queueSize; } + } + } + } diff --git a/src/main/java/com/mycompany/myapp/config/LocaleConfiguration.java b/src/main/java/com/mycompany/myapp/config/LocaleConfiguration.java index 1a51df6d7..0775b8bba 100644 --- a/src/main/java/com/mycompany/myapp/config/LocaleConfiguration.java +++ b/src/main/java/com/mycompany/myapp/config/LocaleConfiguration.java @@ -4,10 +4,8 @@ import org.springframework.boot.bind.RelaxedPropertyResolver; import org.springframework.context.EnvironmentAware; -import org.springframework.context.MessageSource; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.context.support.ReloadableResourceBundleMessageSource; import org.springframework.core.env.Environment; import org.springframework.web.servlet.LocaleResolver; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; @@ -31,15 +29,6 @@ public LocaleResolver localeResolver() { return cookieLocaleResolver; } - @Bean - public MessageSource messageSource() { - ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource(); - messageSource.setBasename("classpath:/i18n/messages"); - messageSource.setDefaultEncoding("UTF-8"); - messageSource.setCacheSeconds(propertyResolver.getProperty("cache-seconds", Integer.class, -1)); - return messageSource; - } - @Override public void addInterceptors(InterceptorRegistry registry) { LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor(); diff --git a/src/main/java/com/mycompany/myapp/config/LoggingConfiguration.java b/src/main/java/com/mycompany/myapp/config/LoggingConfiguration.java new file mode 100644 index 000000000..75921d4a5 --- /dev/null +++ b/src/main/java/com/mycompany/myapp/config/LoggingConfiguration.java @@ -0,0 +1,62 @@ +package com.mycompany.myapp.config; + +import ch.qos.logback.classic.AsyncAppender; +import ch.qos.logback.classic.LoggerContext; +import net.logstash.logback.appender.LogstashSocketAppender; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; + +import javax.annotation.PostConstruct; +import javax.inject.Inject; + +@Configuration +public class LoggingConfiguration { + + private final Logger log = LoggerFactory.getLogger(LoggingConfiguration.class); + + private LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); + + @Value("${spring.application.name}") + private String appName; + + @Value("${server.port}") + private String serverPort; + + @Inject + private JHipsterProperties jHipsterProperties; + + @PostConstruct + private void init() { + if (jHipsterProperties.getLogging().getLogstash().isEnabled()) { + addLogstashAppender(); + } + } + + public void addLogstashAppender() { + log.info("Initializing Logstash logging"); + + LogstashSocketAppender logstashAppender = new LogstashSocketAppender(); + logstashAppender.setName("LOGSTASH"); + logstashAppender.setContext(context); + + String customFields = "{\"app_name\":\"" + appName + "\",\"app_port\":\"" + serverPort + "\"}"; + + // Set the Logstash appender config from JHipster properties + logstashAppender.setSyslogHost(jHipsterProperties.getLogging().getLogstash().getHost()); + logstashAppender.setPort(jHipsterProperties.getLogging().getLogstash().getPort()); + logstashAppender.setCustomFields(customFields); + logstashAppender.start(); + + // Wrap the appender in an Async appender for performance + AsyncAppender asyncLogstashAppender = new AsyncAppender(); + asyncLogstashAppender.setContext(context); + asyncLogstashAppender.setName("ASYNC_LOGSTASH"); + asyncLogstashAppender.setQueueSize(jHipsterProperties.getLogging().getLogstash().getQueueSize()); + asyncLogstashAppender.addAppender(logstashAppender); + asyncLogstashAppender.start(); + + context.getLogger("ROOT").addAppender(asyncLogstashAppender); + } +} diff --git a/src/main/java/com/mycompany/myapp/config/MetricsConfiguration.java b/src/main/java/com/mycompany/myapp/config/MetricsConfiguration.java index d3a2f17d8..d5b4cf1c1 100644 --- a/src/main/java/com/mycompany/myapp/config/MetricsConfiguration.java +++ b/src/main/java/com/mycompany/myapp/config/MetricsConfiguration.java @@ -2,6 +2,7 @@ import com.codahale.metrics.JmxReporter; import com.codahale.metrics.MetricRegistry; +import com.codahale.metrics.Slf4jReporter; import com.codahale.metrics.graphite.Graphite; import com.codahale.metrics.graphite.GraphiteReporter; import com.codahale.metrics.health.HealthCheckRegistry; @@ -22,7 +23,6 @@ @Configuration @EnableMetrics(proxyTargetClass = true) -@Profile("!" + Constants.SPRING_PROFILE_FAST) public class MetricsConfiguration extends MetricsConfigurerAdapter { private static final String PROP_METRIC_REG_JVM_MEMORY = "jvm.memory"; @@ -65,11 +65,20 @@ public void init() { JmxReporter jmxReporter = JmxReporter.forRegistry(metricRegistry).build(); jmxReporter.start(); } + + if (jHipsterProperties.getMetrics().getLogs().isEnabled()) { + log.info("Initializing Metrics Log reporting"); + final Slf4jReporter reporter = Slf4jReporter.forRegistry(metricRegistry) + .outputTo(LoggerFactory.getLogger("metrics")) + .convertRatesTo(TimeUnit.SECONDS) + .convertDurationsTo(TimeUnit.MILLISECONDS) + .build(); + reporter.start(jHipsterProperties.getMetrics().getLogs().getReportFrequency(), TimeUnit.SECONDS); + } } @Configuration @ConditionalOnClass(Graphite.class) - @Profile("!" + Constants.SPRING_PROFILE_FAST) public static class GraphiteRegistry { private final Logger log = LoggerFactory.getLogger(GraphiteRegistry.class); @@ -100,7 +109,6 @@ private void init() { @Configuration @ConditionalOnClass(SparkReporter.class) - @Profile("!" + Constants.SPRING_PROFILE_FAST) public static class SparkRegistry { private final Logger log = LoggerFactory.getLogger(SparkRegistry.class); diff --git a/src/main/java/com/mycompany/myapp/config/SecurityConfiguration.java b/src/main/java/com/mycompany/myapp/config/SecurityConfiguration.java index c8a5586f7..02a1d7a6c 100644 --- a/src/main/java/com/mycompany/myapp/config/SecurityConfiguration.java +++ b/src/main/java/com/mycompany/myapp/config/SecurityConfiguration.java @@ -2,9 +2,11 @@ import com.mycompany.myapp.security.*; import com.mycompany.myapp.web.filter.CsrfCookieGeneratorFilter; +import com.mycompany.myapp.config.JHipsterProperties; + import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.core.env.Environment; +import org.springframework.http.HttpMethod; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; import org.springframework.security.config.annotation.web.builders.HttpSecurity; @@ -27,7 +29,7 @@ public class SecurityConfiguration extends WebSecurityConfigurerAdapter { @Inject - private Environment env; + private JHipsterProperties jHipsterProperties; @Inject private AjaxAuthenticationSuccessHandler ajaxAuthenticationSuccessHandler; @@ -62,10 +64,11 @@ public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception @Override public void configure(WebSecurity web) throws Exception { web.ignoring() - .antMatchers("/scripts/**/*.{js,html}") + .antMatchers(HttpMethod.OPTIONS, "/**") + .antMatchers("/app/**/*.{js,html}") .antMatchers("/bower_components/**") .antMatchers("/i18n/**") - .antMatchers("/assets/**") + .antMatchers("/content/**") .antMatchers("/swagger-ui/index.html") .antMatchers("/test/**") .antMatchers("/h2-console/**"); @@ -84,7 +87,7 @@ protected void configure(HttpSecurity http) throws Exception { .rememberMe() .rememberMeServices(rememberMeServices) .rememberMeParameter("remember-me") - .key(env.getProperty("jhipster.security.rememberme.key")) + .key(jHipsterProperties.getSecurity().getRememberMe().getKey()) .and() .formLogin() .loginProcessingUrl("/api/authentication") @@ -123,7 +126,6 @@ protected void configure(HttpSecurity http) throws Exception { .antMatchers("/info/**").hasAuthority(AuthoritiesConstants.ADMIN) .antMatchers("/autoconfig/**").hasAuthority(AuthoritiesConstants.ADMIN) .antMatchers("/env/**").hasAuthority(AuthoritiesConstants.ADMIN) - .antMatchers("/trace/**").hasAuthority(AuthoritiesConstants.ADMIN) .antMatchers("/mappings/**").hasAuthority(AuthoritiesConstants.ADMIN) .antMatchers("/liquibase/**").hasAuthority(AuthoritiesConstants.ADMIN) .antMatchers("/v2/api-docs/**").permitAll() diff --git a/src/main/java/com/mycompany/myapp/config/ThymeleafConfiguration.java b/src/main/java/com/mycompany/myapp/config/ThymeleafConfiguration.java index d1dd3d673..1b7565851 100644 --- a/src/main/java/com/mycompany/myapp/config/ThymeleafConfiguration.java +++ b/src/main/java/com/mycompany/myapp/config/ThymeleafConfiguration.java @@ -3,9 +3,7 @@ import org.apache.commons.lang.CharEncoding; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.context.MessageSource; import org.springframework.context.annotation.*; -import org.springframework.context.support.ReloadableResourceBundleMessageSource; import org.thymeleaf.templateresolver.ClassLoaderTemplateResolver; @Configuration @@ -24,14 +22,4 @@ public ClassLoaderTemplateResolver emailTemplateResolver() { emailTemplateResolver.setOrder(1); return emailTemplateResolver; } - - @Bean - @Description("Spring mail message resolver") - public MessageSource emailMessageSource() { - log.info("loading non-reloadable mail messages resources"); - ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource(); - messageSource.setBasename("classpath:/mails/messages/messages"); - messageSource.setDefaultEncoding(CharEncoding.UTF_8); - return messageSource; - } } diff --git a/src/main/java/com/mycompany/myapp/config/WebConfigurer.java b/src/main/java/com/mycompany/myapp/config/WebConfigurer.java index 674b56ca9..edfdcadeb 100644 --- a/src/main/java/com/mycompany/myapp/config/WebConfigurer.java +++ b/src/main/java/com/mycompany/myapp/config/WebConfigurer.java @@ -4,7 +4,6 @@ import com.codahale.metrics.servlet.InstrumentedFilter; import com.codahale.metrics.servlets.MetricsServlet; import com.mycompany.myapp.web.filter.CachingHttpHeadersFilter; -import com.mycompany.myapp.web.filter.StaticResourcesProductionFilter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -19,6 +18,7 @@ import org.springframework.web.cors.UrlBasedCorsConfigurationSource; import org.springframework.web.filter.CorsFilter; +import java.io.File; import java.util.*; import javax.inject.Inject; import javax.servlet.*; @@ -35,7 +35,7 @@ public class WebConfigurer implements ServletContextInitializer, EmbeddedServlet private Environment env; @Inject - private JHipsterProperties props; + private JHipsterProperties jHipsterProperties; @Autowired(required = false) private MetricRegistry metricRegistry; @@ -44,12 +44,9 @@ public class WebConfigurer implements ServletContextInitializer, EmbeddedServlet public void onStartup(ServletContext servletContext) throws ServletException { log.info("Web application configuration, using profiles: {}", Arrays.toString(env.getActiveProfiles())); EnumSet disps = EnumSet.of(DispatcherType.REQUEST, DispatcherType.FORWARD, DispatcherType.ASYNC); - if (!env.acceptsProfiles(Constants.SPRING_PROFILE_FAST)) { - initMetrics(servletContext, disps); - } + initMetrics(servletContext, disps); if (env.acceptsProfiles(Constants.SPRING_PROFILE_PRODUCTION)) { initCachingHttpHeadersFilter(servletContext, disps); - initStaticResourcesProductionFilter(servletContext, disps); } if (env.acceptsProfiles(Constants.SPRING_PROFILE_DEVELOPMENT)) { initH2Console(servletContext); @@ -58,7 +55,7 @@ public void onStartup(ServletContext servletContext) throws ServletException { } /** - * Set up Mime types. + * Set up Mime types and, if needed, set the document root. */ @Override public void customize(ConfigurableEmbeddedServletContainer container) { @@ -68,24 +65,17 @@ public void customize(ConfigurableEmbeddedServletContainer container) { // CloudFoundry issue, see https://github.com/cloudfoundry/gorouter/issues/64 mappings.add("json", "text/html;charset=utf-8"); container.setMimeMappings(mappings); - } - /** - * Initializes the static resources production Filter. - */ - private void initStaticResourcesProductionFilter(ServletContext servletContext, - EnumSet disps) { - - log.debug("Registering static resources production Filter"); - FilterRegistration.Dynamic staticResourcesProductionFilter = - servletContext.addFilter("staticResourcesProductionFilter", - new StaticResourcesProductionFilter()); - - staticResourcesProductionFilter.addMappingForUrlPatterns(disps, true, "/"); - staticResourcesProductionFilter.addMappingForUrlPatterns(disps, true, "/index.html"); - staticResourcesProductionFilter.addMappingForUrlPatterns(disps, true, "/assets/*"); - staticResourcesProductionFilter.addMappingForUrlPatterns(disps, true, "/scripts/*"); - staticResourcesProductionFilter.setAsyncSupported(true); + // When running in an IDE or with ./mvnw spring-boot:run, set location of the static web assets. + File root; + if (env.acceptsProfiles(Constants.SPRING_PROFILE_PRODUCTION)) { + root = new File("target/www/"); + } else { + root = new File("src/main/webapp/"); + } + if (root.exists() && root.isDirectory()) { + container.setDocumentRoot(root); + } } /** @@ -96,10 +86,10 @@ private void initCachingHttpHeadersFilter(ServletContext servletContext, log.debug("Registering Caching HTTP Headers Filter"); FilterRegistration.Dynamic cachingHttpHeadersFilter = servletContext.addFilter("cachingHttpHeadersFilter", - new CachingHttpHeadersFilter(env)); + new CachingHttpHeadersFilter(jHipsterProperties)); - cachingHttpHeadersFilter.addMappingForUrlPatterns(disps, true, "/dist/assets/*"); - cachingHttpHeadersFilter.addMappingForUrlPatterns(disps, true, "/dist/scripts/*"); + cachingHttpHeadersFilter.addMappingForUrlPatterns(disps, true, "/content/*"); + cachingHttpHeadersFilter.addMappingForUrlPatterns(disps, true, "/app/*"); cachingHttpHeadersFilter.setAsyncSupported(true); } @@ -132,7 +122,7 @@ private void initMetrics(ServletContext servletContext, EnumSet @Bean public CorsFilter corsFilter() { UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); - CorsConfiguration config = props.getCors(); + CorsConfiguration config = jHipsterProperties.getCors(); if (config.getAllowedOrigins() != null && !config.getAllowedOrigins().isEmpty()) { source.registerCorsConfiguration("/api/**", config); source.registerCorsConfiguration("/v2/api-docs", config); @@ -148,7 +138,7 @@ private void initH2Console(ServletContext servletContext) { log.debug("Initialize H2 console"); ServletRegistration.Dynamic h2ConsoleServlet = servletContext.addServlet("H2Console", new org.h2.server.web.WebServlet()); h2ConsoleServlet.addMapping("/h2-console/*"); - h2ConsoleServlet.setInitParameter("-properties", "src/main/resources"); + h2ConsoleServlet.setInitParameter("-properties", "src/main/resources/"); h2ConsoleServlet.setLoadOnStartup(1); } } diff --git a/src/main/java/com/mycompany/myapp/config/apidoc/SwaggerConfiguration.java b/src/main/java/com/mycompany/myapp/config/apidoc/SwaggerConfiguration.java index de4fe7edd..7c939658e 100644 --- a/src/main/java/com/mycompany/myapp/config/apidoc/SwaggerConfiguration.java +++ b/src/main/java/com/mycompany/myapp/config/apidoc/SwaggerConfiguration.java @@ -6,11 +6,13 @@ import java.util.Date; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; import org.springframework.context.annotation.*; import org.springframework.data.domain.Pageable; import org.springframework.http.ResponseEntity; import org.springframework.util.StopWatch; import springfox.documentation.service.ApiInfo; +import springfox.documentation.service.Contact; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.swagger2.annotations.EnableSwagger2; @@ -26,7 +28,7 @@ */ @Configuration @EnableSwagger2 -@Profile("!" + Constants.SPRING_PROFILE_PRODUCTION) +@ConditionalOnExpression("#{!environment.acceptsProfiles('" + Constants.SPRING_PROFILE_NO_SWAGGER + "') && !environment.acceptsProfiles('" + Constants.SPRING_PROFILE_PRODUCTION + "')}") public class SwaggerConfiguration { private final Logger log = LoggerFactory.getLogger(SwaggerConfiguration.class); @@ -35,29 +37,36 @@ public class SwaggerConfiguration { /** * Swagger Springfox configuration. + * + * @param jHipsterProperties the properties of the application + * @return the Swagger Springfox configuration */ @Bean - @Profile("!" + Constants.SPRING_PROFILE_FAST) public Docket swaggerSpringfoxDocket(JHipsterProperties jHipsterProperties) { log.debug("Starting Swagger"); StopWatch watch = new StopWatch(); watch.start(); + Contact contact = new Contact( + jHipsterProperties.getSwagger().getContactName(), + jHipsterProperties.getSwagger().getContactUrl(), + jHipsterProperties.getSwagger().getContactEmail()); + ApiInfo apiInfo = new ApiInfo( jHipsterProperties.getSwagger().getTitle(), jHipsterProperties.getSwagger().getDescription(), jHipsterProperties.getSwagger().getVersion(), jHipsterProperties.getSwagger().getTermsOfServiceUrl(), - jHipsterProperties.getSwagger().getContact(), + contact, jHipsterProperties.getSwagger().getLicense(), jHipsterProperties.getSwagger().getLicenseUrl()); Docket docket = new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo) - .genericModelSubstitutes(ResponseEntity.class) .forCodeGeneration(true) .genericModelSubstitutes(ResponseEntity.class) .ignoredParameterTypes(Pageable.class) - .directModelSubstitute(java.time.LocalDate.class, String.class) + .ignoredParameterTypes(java.sql.Date.class) + .directModelSubstitute(java.time.LocalDate.class, java.sql.Date.class) .directModelSubstitute(java.time.ZonedDateTime.class, Date.class) .directModelSubstitute(java.time.LocalDateTime.class, Date.class) .select() diff --git a/src/main/java/com/mycompany/myapp/config/liquibase/AsyncSpringLiquibase.java b/src/main/java/com/mycompany/myapp/config/liquibase/AsyncSpringLiquibase.java index c932d22e3..41fed7c84 100644 --- a/src/main/java/com/mycompany/myapp/config/liquibase/AsyncSpringLiquibase.java +++ b/src/main/java/com/mycompany/myapp/config/liquibase/AsyncSpringLiquibase.java @@ -16,7 +16,7 @@ /** * Specific liquibase.integration.spring.SpringLiquibase that will update the database asynchronously. *

- * By default, this asynchronous version only works when using the "dev" profile.
+ * By default, this asynchronous version only works when using the "dev" profile.

* The standard liquibase.integration.spring.SpringLiquibase starts Liquibase in the current thread: *

    *
  • This is needed if you want to do some database requests at startup
  • @@ -27,7 +27,6 @@ *
  • On a recent MacBook Pro, start-up time is down from 14 seconds to 8 seconds
  • *
  • In production, this can help your application run on platforms like Heroku, where it must start/restart very quickly
  • *
- *

*/ public class AsyncSpringLiquibase extends SpringLiquibase { @@ -42,18 +41,22 @@ public class AsyncSpringLiquibase extends SpringLiquibase { @Override public void afterPropertiesSet() throws LiquibaseException { - if (env.acceptsProfiles(Constants.SPRING_PROFILE_DEVELOPMENT, Constants.SPRING_PROFILE_HEROKU)) { - taskExecutor.execute(() -> { - try { - log.warn("Starting Liquibase asynchronously, your database might not be ready at startup!"); - initDb(); - } catch (LiquibaseException e) { - log.error("Liquibase could not start correctly, your database is NOT ready: {}", e.getMessage(), e); - } - }); + if (!env.acceptsProfiles(Constants.SPRING_PROFILE_NO_LIQUIBASE)) { + if (env.acceptsProfiles(Constants.SPRING_PROFILE_DEVELOPMENT, Constants.SPRING_PROFILE_HEROKU)) { + taskExecutor.execute(() -> { + try { + log.warn("Starting Liquibase asynchronously, your database might not be ready at startup!"); + initDb(); + } catch (LiquibaseException e) { + log.error("Liquibase could not start correctly, your database is NOT ready: {}", e.getMessage(), e); + } + }); + } else { + log.debug("Starting Liquibase synchronously"); + initDb(); + } } else { - log.debug("Starting Liquibase synchronously"); - initDb(); + log.debug("Liquibase is disabled"); } } diff --git a/src/main/java/com/mycompany/myapp/domain/AbstractAuditingEntity.java b/src/main/java/com/mycompany/myapp/domain/AbstractAuditingEntity.java index 65e75f7fd..28d6857b3 100644 --- a/src/main/java/com/mycompany/myapp/domain/AbstractAuditingEntity.java +++ b/src/main/java/com/mycompany/myapp/domain/AbstractAuditingEntity.java @@ -28,13 +28,11 @@ public abstract class AbstractAuditingEntity implements Serializable { private static final long serialVersionUID = 1L; @CreatedBy - @NotNull @Column(name = "created_by", nullable = false, length = 50, updatable = false) @JsonIgnore private String createdBy; @CreatedDate - @NotNull @Column(name = "created_date", nullable = false) @JsonIgnore private ZonedDateTime createdDate = ZonedDateTime.now(); diff --git a/src/main/java/com/mycompany/myapp/domain/Authority.java b/src/main/java/com/mycompany/myapp/domain/Authority.java index 796ca480d..251fa2703 100644 --- a/src/main/java/com/mycompany/myapp/domain/Authority.java +++ b/src/main/java/com/mycompany/myapp/domain/Authority.java @@ -18,6 +18,8 @@ @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) public class Authority implements Serializable { + private static final long serialVersionUID = 1L; + @NotNull @Size(min = 0, max = 50) @Id diff --git a/src/main/java/com/mycompany/myapp/domain/BankAccount.java b/src/main/java/com/mycompany/myapp/domain/BankAccount.java index 31670bf80..16a181f4c 100644 --- a/src/main/java/com/mycompany/myapp/domain/BankAccount.java +++ b/src/main/java/com/mycompany/myapp/domain/BankAccount.java @@ -20,6 +20,8 @@ @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) public class BankAccount implements Serializable { + private static final long serialVersionUID = 1L; + @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; @@ -27,13 +29,12 @@ public class BankAccount implements Serializable { @NotNull @Column(name = "name", nullable = false) private String name; - + @NotNull @Column(name = "balance", precision=10, scale=2, nullable = false) private BigDecimal balance; - + @ManyToOne - @JoinColumn(name = "user_id") private User user; @OneToMany(mappedBy = "bankAccount") @@ -52,7 +53,7 @@ public void setId(Long id) { public String getName() { return name; } - + public void setName(String name) { this.name = name; } @@ -60,7 +61,7 @@ public void setName(String name) { public BigDecimal getBalance() { return balance; } - + public void setBalance(BigDecimal balance) { this.balance = balance; } diff --git a/src/main/java/com/mycompany/myapp/domain/Label.java b/src/main/java/com/mycompany/myapp/domain/Label.java index 69ae9f154..fad09d17e 100644 --- a/src/main/java/com/mycompany/myapp/domain/Label.java +++ b/src/main/java/com/mycompany/myapp/domain/Label.java @@ -19,6 +19,8 @@ @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) public class Label implements Serializable { + private static final long serialVersionUID = 1L; + @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; @@ -27,7 +29,7 @@ public class Label implements Serializable { @Size(min = 3) @Column(name = "label", nullable = false) private String label; - + @ManyToMany(mappedBy = "labels") @JsonIgnore @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) @@ -44,7 +46,7 @@ public void setId(Long id) { public String getLabel() { return label; } - + public void setLabel(String label) { this.label = label; } diff --git a/src/main/java/com/mycompany/myapp/domain/Operation.java b/src/main/java/com/mycompany/myapp/domain/Operation.java index efe7cef51..c5e7570b0 100644 --- a/src/main/java/com/mycompany/myapp/domain/Operation.java +++ b/src/main/java/com/mycompany/myapp/domain/Operation.java @@ -2,12 +2,12 @@ import org.hibernate.annotations.Cache; import org.hibernate.annotations.CacheConcurrencyStrategy; -import java.time.ZonedDateTime; import javax.persistence.*; import javax.validation.constraints.*; import java.io.Serializable; import java.math.BigDecimal; +import java.time.ZonedDateTime; import java.util.HashSet; import java.util.Set; import java.util.Objects; @@ -20,6 +20,8 @@ @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) public class Operation implements Serializable { + private static final long serialVersionUID = 1L; + @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; @@ -27,16 +29,15 @@ public class Operation implements Serializable { @NotNull @Column(name = "date", nullable = false) private ZonedDateTime date; - + @Column(name = "description") private String description; - + @NotNull @Column(name = "amount", precision=10, scale=2, nullable = false) private BigDecimal amount; - + @ManyToOne - @JoinColumn(name = "bank_account_id") private BankAccount bankAccount; @ManyToMany @@ -57,7 +58,7 @@ public void setId(Long id) { public ZonedDateTime getDate() { return date; } - + public void setDate(ZonedDateTime date) { this.date = date; } @@ -65,7 +66,7 @@ public void setDate(ZonedDateTime date) { public String getDescription() { return description; } - + public void setDescription(String description) { this.description = description; } @@ -73,7 +74,7 @@ public void setDescription(String description) { public BigDecimal getAmount() { return amount; } - + public void setAmount(BigDecimal amount) { this.amount = amount; } diff --git a/src/main/java/com/mycompany/myapp/domain/PersistentToken.java b/src/main/java/com/mycompany/myapp/domain/PersistentToken.java index 86dd023ae..6ebc196d2 100644 --- a/src/main/java/com/mycompany/myapp/domain/PersistentToken.java +++ b/src/main/java/com/mycompany/myapp/domain/PersistentToken.java @@ -22,10 +22,9 @@ @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) public class PersistentToken implements Serializable { - + private static final long serialVersionUID = 1L; + private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("d MMMM yyyy"); - - private static final int MAX_USER_AGENT_LEN = 255; diff --git a/src/main/java/com/mycompany/myapp/domain/User.java b/src/main/java/com/mycompany/myapp/domain/User.java index f86173989..a86e77379 100644 --- a/src/main/java/com/mycompany/myapp/domain/User.java +++ b/src/main/java/com/mycompany/myapp/domain/User.java @@ -22,6 +22,8 @@ @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) public class User extends AbstractAuditingEntity implements Serializable { + private static final long serialVersionUID = 1L; + @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; @@ -46,11 +48,13 @@ public class User extends AbstractAuditingEntity implements Serializable { @Column(name = "last_name", length = 50) private String lastName; + @NotNull @Email @Size(max = 100) @Column(length = 100, unique = true) private String email; + @NotNull @Column(nullable = false) private boolean activated = false; diff --git a/src/main/java/com/mycompany/myapp/domain/util/JSR310DateTimeSerializer.java b/src/main/java/com/mycompany/myapp/domain/util/JSR310DateTimeSerializer.java index 4becb6338..ddcbe0215 100644 --- a/src/main/java/com/mycompany/myapp/domain/util/JSR310DateTimeSerializer.java +++ b/src/main/java/com/mycompany/myapp/domain/util/JSR310DateTimeSerializer.java @@ -12,7 +12,7 @@ public final class JSR310DateTimeSerializer extends JsonSerializer { private static final DateTimeFormatter ISOFormatter = - DateTimeFormatter.ISO_OFFSET_DATE_TIME.withZone(ZoneId.of("Z")); + DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").withZone(ZoneId.of("Z")); public static final JSR310DateTimeSerializer INSTANCE = new JSR310DateTimeSerializer(); diff --git a/src/main/java/com/mycompany/myapp/repository/CustomAuditEventRepository.java b/src/main/java/com/mycompany/myapp/repository/CustomAuditEventRepository.java index 7da8cd308..f34eb4b48 100644 --- a/src/main/java/com/mycompany/myapp/repository/CustomAuditEventRepository.java +++ b/src/main/java/com/mycompany/myapp/repository/CustomAuditEventRepository.java @@ -5,7 +5,6 @@ import org.springframework.boot.actuate.audit.AuditEvent; import org.springframework.boot.actuate.audit.AuditEventRepository; -import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; @@ -18,54 +17,48 @@ import java.util.List; /** - * Wraps an implementation of Spring Boot's AuditEventRepository. + * An implementation of Spring Boot's AuditEventRepository. */ @Repository -public class CustomAuditEventRepository { +public class CustomAuditEventRepository implements AuditEventRepository { - @Inject - private PersistenceAuditEventRepository persistenceAuditEventRepository; + private static final String AUTHORIZATION_FAILURE = "AUTHORIZATION_FAILURE"; - @Bean - public AuditEventRepository auditEventRepository() { - return new AuditEventRepository() { + private static final String ANONYMOUS_USER = "anonymousUser"; - private static final String AUTHORIZATION_FAILURE = "AUTHORIZATION_FAILURE"; - - private static final String ANONYMOUS_USER = "anonymousUser"; + @Inject + private PersistenceAuditEventRepository persistenceAuditEventRepository; - @Inject - private AuditEventConverter auditEventConverter; + @Inject + private AuditEventConverter auditEventConverter; - @Override - public List find(String principal, Date after) { - Iterable persistentAuditEvents; - if (principal == null && after == null) { - persistentAuditEvents = persistenceAuditEventRepository.findAll(); - } else if (after == null) { - persistentAuditEvents = persistenceAuditEventRepository.findByPrincipal(principal); - } else { - persistentAuditEvents = - persistenceAuditEventRepository.findByPrincipalAndAuditEventDateAfter(principal, LocalDateTime.from(after.toInstant())); - } - return auditEventConverter.convertToAuditEvent(persistentAuditEvents); - } + @Override + public List find(String principal, Date after) { + Iterable persistentAuditEvents; + if (principal == null && after == null) { + persistentAuditEvents = persistenceAuditEventRepository.findAll(); + } else if (after == null) { + persistentAuditEvents = persistenceAuditEventRepository.findByPrincipal(principal); + } else { + persistentAuditEvents = + persistenceAuditEventRepository.findByPrincipalAndAuditEventDateAfter(principal, LocalDateTime.from(after.toInstant())); + } + return auditEventConverter.convertToAuditEvent(persistentAuditEvents); + } - @Override - @Transactional(propagation = Propagation.REQUIRES_NEW) - public void add(AuditEvent event) { - if (!AUTHORIZATION_FAILURE.equals(event.getType()) && - !ANONYMOUS_USER.equals(event.getPrincipal().toString())) { + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW) + public void add(AuditEvent event) { + if (!AUTHORIZATION_FAILURE.equals(event.getType()) && + !ANONYMOUS_USER.equals(event.getPrincipal().toString())) { - PersistentAuditEvent persistentAuditEvent = new PersistentAuditEvent(); - persistentAuditEvent.setPrincipal(event.getPrincipal()); - persistentAuditEvent.setAuditEventType(event.getType()); - Instant instant = Instant.ofEpochMilli(event.getTimestamp().getTime()); - persistentAuditEvent.setAuditEventDate(LocalDateTime.ofInstant(instant, ZoneId.systemDefault())); - persistentAuditEvent.setData(auditEventConverter.convertDataToStrings(event.getData())); - persistenceAuditEventRepository.save(persistentAuditEvent); - } - } - }; + PersistentAuditEvent persistentAuditEvent = new PersistentAuditEvent(); + persistentAuditEvent.setPrincipal(event.getPrincipal()); + persistentAuditEvent.setAuditEventType(event.getType()); + Instant instant = Instant.ofEpochMilli(event.getTimestamp().getTime()); + persistentAuditEvent.setAuditEventDate(LocalDateTime.ofInstant(instant, ZoneId.systemDefault())); + persistentAuditEvent.setData(auditEventConverter.convertDataToStrings(event.getData())); + persistenceAuditEventRepository.save(persistentAuditEvent); + } } } diff --git a/src/main/java/com/mycompany/myapp/repository/PersistenceAuditEventRepository.java b/src/main/java/com/mycompany/myapp/repository/PersistenceAuditEventRepository.java index c87393046..05582531c 100644 --- a/src/main/java/com/mycompany/myapp/repository/PersistenceAuditEventRepository.java +++ b/src/main/java/com/mycompany/myapp/repository/PersistenceAuditEventRepository.java @@ -4,6 +4,8 @@ import java.time.LocalDateTime; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import java.util.List; @@ -16,5 +18,5 @@ public interface PersistenceAuditEventRepository extends JpaRepository findByPrincipalAndAuditEventDateAfter(String principal, LocalDateTime after); - List findAllByAuditEventDateBetween(LocalDateTime fromDate, LocalDateTime toDate); + Page findAllByAuditEventDateBetween(LocalDateTime fromDate, LocalDateTime toDate, Pageable pageable); } diff --git a/src/main/java/com/mycompany/myapp/security/CustomPersistentRememberMeServices.java b/src/main/java/com/mycompany/myapp/security/CustomPersistentRememberMeServices.java index 7e971c5ea..dbceb3da2 100644 --- a/src/main/java/com/mycompany/myapp/security/CustomPersistentRememberMeServices.java +++ b/src/main/java/com/mycompany/myapp/security/CustomPersistentRememberMeServices.java @@ -4,6 +4,7 @@ import com.mycompany.myapp.domain.User; import com.mycompany.myapp.repository.PersistentTokenRepository; import com.mycompany.myapp.repository.UserRepository; +import com.mycompany.myapp.config.JHipsterProperties; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.core.env.Environment; @@ -25,9 +26,9 @@ /** * Custom implementation of Spring Security's RememberMeServices. - *

+ *

* Persistent tokens are used by Spring Security to automatically log in users. - *

+ *

* This is a specific implementation of Spring Security's remember-me authentication, but it is much * more powerful than the standard implementations: *

    @@ -35,17 +36,16 @@ *
  • It stores more information, such as the IP address and the user agent, for audit purposes
  • *
  • When a user logs out, only his current session is invalidated, and not all of his sessions
  • *
- *

+ *

* This is inspired by: *

- *

+ *

* The main algorithm comes from Spring Security's PersistentTokenBasedRememberMeServices, but this class * couldn't be cleanly extended. - *

*/ @Service public class CustomPersistentRememberMeServices extends @@ -71,15 +71,14 @@ public class CustomPersistentRememberMeServices extends private UserRepository userRepository; @Inject - public CustomPersistentRememberMeServices(Environment env, org.springframework.security.core.userdetails + public CustomPersistentRememberMeServices(JHipsterProperties jHipsterProperties, org.springframework.security.core.userdetails .UserDetailsService userDetailsService) { - super(env.getProperty("jhipster.security.rememberme.key"), userDetailsService); + super(jHipsterProperties.getSecurity().getRememberMe().getKey(), userDetailsService); random = new SecureRandom(); } @Override - @Transactional protected UserDetails processAutoLoginCookie(String[] cookieTokens, HttpServletRequest request, HttpServletResponse response) { @@ -129,7 +128,7 @@ protected void onLoginSuccess(HttpServletRequest request, HttpServletResponse re /** * When logout occurs, only invalidate the current token, and not all user sessions. - *

+ *

* The standard Spring Security implementations are too basic: they invalidate all tokens for the * current user, so when he logs out from one browser, all his other sessions are destroyed. */ diff --git a/src/main/java/com/mycompany/myapp/security/SecurityUtils.java b/src/main/java/com/mycompany/myapp/security/SecurityUtils.java index 752a3a0de..a93352f06 100644 --- a/src/main/java/com/mycompany/myapp/security/SecurityUtils.java +++ b/src/main/java/com/mycompany/myapp/security/SecurityUtils.java @@ -5,7 +5,6 @@ import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.context.SecurityContext; import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.core.userdetails.User; import org.springframework.security.core.userdetails.UserDetails; import java.util.Collection; @@ -20,6 +19,8 @@ private SecurityUtils() { /** * Get the login of the current user. + * + * @return the login of the current user */ public static String getCurrentUserLogin() { SecurityContext securityContext = SecurityContextHolder.getContext(); @@ -54,27 +55,13 @@ public static boolean isAuthenticated() { return true; } - /** - * Return the current user, or throws an exception, if the user is not - * authenticated yet. - * - * @return the current user - */ - public static User getCurrentUser() { - SecurityContext securityContext = SecurityContextHolder.getContext(); - Authentication authentication = securityContext.getAuthentication(); - if (authentication != null) { - if (authentication.getPrincipal() instanceof User) { - return (User) authentication.getPrincipal(); - } - } - throw new IllegalStateException("User not found!"); - } - /** * If the current user has a specific authority (security role). * *

The name of this method comes from the isUserInRole() method in the Servlet API

+ * + * @param authority the authorithy to check + * @return true if the current user has the authority, false otherwise */ public static boolean isCurrentUserInRole(String authority) { SecurityContext securityContext = SecurityContextHolder.getContext(); diff --git a/src/main/java/com/mycompany/myapp/service/AuditEventService.java b/src/main/java/com/mycompany/myapp/service/AuditEventService.java index 948d9afad..6419a54fc 100644 --- a/src/main/java/com/mycompany/myapp/service/AuditEventService.java +++ b/src/main/java/com/mycompany/myapp/service/AuditEventService.java @@ -1,10 +1,11 @@ package com.mycompany.myapp.service; import com.mycompany.myapp.config.audit.AuditEventConverter; -import com.mycompany.myapp.domain.PersistentAuditEvent; import com.mycompany.myapp.repository.PersistenceAuditEventRepository; import java.time.LocalDateTime; import org.springframework.boot.actuate.audit.AuditEvent; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -14,7 +15,6 @@ /** * Service for managing audit events. - *

*

* This is the default implementation to support SpringBoot Actuator AuditEventRepository *

@@ -36,15 +36,14 @@ public AuditEventService( this.auditEventConverter = auditEventConverter; } - public List findAll() { - return auditEventConverter.convertToAuditEvent(persistenceAuditEventRepository.findAll()); + public Page findAll(Pageable pageable) { + return persistenceAuditEventRepository.findAll(pageable) + .map(persistentAuditEvents -> auditEventConverter.convertToAuditEvent(persistentAuditEvents)); } - public List findByDates(LocalDateTime fromDate, LocalDateTime toDate) { - List persistentAuditEvents = - persistenceAuditEventRepository.findAllByAuditEventDateBetween(fromDate, toDate); - - return auditEventConverter.convertToAuditEvent(persistentAuditEvents); + public Page findByDates(LocalDateTime fromDate, LocalDateTime toDate, Pageable pageable) { + return persistenceAuditEventRepository.findAllByAuditEventDateBetween(fromDate, toDate, pageable) + .map(persistentAuditEvents -> auditEventConverter.convertToAuditEvent(persistentAuditEvents)); } public Optional find(Long id) { diff --git a/src/main/java/com/mycompany/myapp/service/MailService.java b/src/main/java/com/mycompany/myapp/service/MailService.java index a51cf48a3..4ce2b3f3d 100644 --- a/src/main/java/com/mycompany/myapp/service/MailService.java +++ b/src/main/java/com/mycompany/myapp/service/MailService.java @@ -22,7 +22,6 @@ /** * Service for sending e-mails. - *

*

* We use the @Async annotation to send e-mails asynchronously. *

diff --git a/src/main/java/com/mycompany/myapp/service/UserService.java b/src/main/java/com/mycompany/myapp/service/UserService.java index 2e560e023..f4c393e52 100644 --- a/src/main/java/com/mycompany/myapp/service/UserService.java +++ b/src/main/java/com/mycompany/myapp/service/UserService.java @@ -31,12 +31,14 @@ public class UserService { private final Logger log = LoggerFactory.getLogger(UserService.class); + @Inject private PasswordEncoder passwordEncoder; @Inject private UserRepository userRepository; + @Inject private PersistentTokenRepository persistentTokenRepository; @@ -45,7 +47,7 @@ public class UserService { public Optional activateRegistration(String key) { log.debug("Activating user for activation key {}", key); - userRepository.findOneByActivationKey(key) + return userRepository.findOneByActivationKey(key) .map(user -> { // activate given user for the registration key. user.setActivated(true); @@ -54,7 +56,6 @@ public Optional activateRegistration(String key) { log.debug("Activated user: {}", user); return user; }); - return Optional.empty(); } public Optional completePasswordReset(String newPassword, String key) { @@ -117,7 +118,7 @@ public User createUser(ManagedUserDTO managedUserDTO) { user.setLastName(managedUserDTO.getLastName()); user.setEmail(managedUserDTO.getEmail()); if (managedUserDTO.getLangKey() == null) { - user.setLangKey("en"); // default language is English + user.setLangKey("en"); // default language } else { user.setLangKey(managedUserDTO.getLangKey()); } @@ -139,7 +140,7 @@ public User createUser(ManagedUserDTO managedUserDTO) { } public void updateUserInformation(String firstName, String lastName, String email, String langKey) { - userRepository.findOneByLogin(SecurityUtils.getCurrentUser().getUsername()).ifPresent(u -> { + userRepository.findOneByLogin(SecurityUtils.getCurrentUserLogin()).ifPresent(u -> { u.setFirstName(firstName); u.setLastName(lastName); u.setEmail(email); @@ -157,7 +158,7 @@ public void deleteUserInformation(String login) { } public void changePassword(String password) { - userRepository.findOneByLogin(SecurityUtils.getCurrentUser().getUsername()).ifPresent(u -> { + userRepository.findOneByLogin(SecurityUtils.getCurrentUserLogin()).ifPresent(u -> { String encryptedPassword = passwordEncoder.encode(password); u.setPassword(encryptedPassword); userRepository.save(u); @@ -182,7 +183,7 @@ public User getUserWithAuthorities(Long id) { @Transactional(readOnly = true) public User getUserWithAuthorities() { - User user = userRepository.findOneByLogin(SecurityUtils.getCurrentUser().getUsername()).get(); + User user = userRepository.findOneByLogin(SecurityUtils.getCurrentUserLogin()).get(); user.getAuthorities().size(); // eagerly load the association return user; } @@ -190,7 +191,6 @@ public User getUserWithAuthorities() { /** * Persistent Token are used for providing automatic authentication, they should be automatically deleted after * 30 days. - *

*

* This is scheduled to get fired everyday, at midnight. *

@@ -208,7 +208,6 @@ public void removeOldPersistentTokens() { /** * Not activated users should be automatically deleted after 3 days. - *

*

* This is scheduled to get fired everyday, at 01:00 (am). *

diff --git a/src/main/java/com/mycompany/myapp/web/filter/CachingHttpHeadersFilter.java b/src/main/java/com/mycompany/myapp/web/filter/CachingHttpHeadersFilter.java index 85022cb66..79c76e587 100644 --- a/src/main/java/com/mycompany/myapp/web/filter/CachingHttpHeadersFilter.java +++ b/src/main/java/com/mycompany/myapp/web/filter/CachingHttpHeadersFilter.java @@ -1,6 +1,6 @@ package com.mycompany.myapp.web.filter; -import org.springframework.core.env.Environment; +import com.mycompany.myapp.config.JHipsterProperties; import javax.servlet.*; import javax.servlet.http.HttpServletResponse; @@ -15,18 +15,17 @@ public class CachingHttpHeadersFilter implements Filter { // We consider the last modified date is the start up time of the server private final static long LAST_MODIFIED = System.currentTimeMillis(); - private long CACHE_TIME_TO_LIVE = TimeUnit.DAYS.toMillis(31L); + private long CACHE_TIME_TO_LIVE = TimeUnit.DAYS.toMillis(1461L); - private Environment env; + private JHipsterProperties jHipsterProperties;; - public CachingHttpHeadersFilter(Environment env) { - this.env = env; + public CachingHttpHeadersFilter(JHipsterProperties jHipsterProperties) { + this.jHipsterProperties = jHipsterProperties; } @Override public void init(FilterConfig filterConfig) throws ServletException { - CACHE_TIME_TO_LIVE = TimeUnit.DAYS.toMillis(env.getProperty("jhipster.http.cache.timeToLiveInDays", - Long.class, 31L)); + CACHE_TIME_TO_LIVE = TimeUnit.DAYS.toMillis(jHipsterProperties.getHttp().getCache().getTimeToLiveInDays()); } @Override diff --git a/src/main/java/com/mycompany/myapp/web/filter/StaticResourcesProductionFilter.java b/src/main/java/com/mycompany/myapp/web/filter/StaticResourcesProductionFilter.java deleted file mode 100644 index ee5f9a994..000000000 --- a/src/main/java/com/mycompany/myapp/web/filter/StaticResourcesProductionFilter.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.mycompany.myapp.web.filter; - - -import org.apache.commons.lang.StringUtils; - -import javax.servlet.*; -import javax.servlet.http.HttpServletRequest; -import java.io.IOException; - -/** - * This filter is used in production, to serve static resources generated by "grunt build". - *

- *

- * It is configured to serve resources from the "dist" directory, which is the Grunt - * destination directory. - *

- */ -public class StaticResourcesProductionFilter implements Filter { - - @Override - public void init(FilterConfig filterConfig) throws ServletException { - // Nothing to initialize - } - - @Override - public void destroy() { - // Nothing to destroy - } - - @Override - public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { - HttpServletRequest httpRequest = (HttpServletRequest) request; - String contextPath = ((HttpServletRequest) request).getContextPath(); - String requestURI = httpRequest.getRequestURI(); - requestURI = StringUtils.substringAfter(requestURI, contextPath); - if (StringUtils.equals("/", requestURI)) { - requestURI = "/index.html"; - } - String newURI = "/dist" + requestURI; - request.getRequestDispatcher(newURI).forward(request, response); - } -} diff --git a/src/main/java/com/mycompany/myapp/web/rest/AccountResource.java b/src/main/java/com/mycompany/myapp/web/rest/AccountResource.java index 8c1b77c53..e8b6ad2a2 100644 --- a/src/main/java/com/mycompany/myapp/web/rest/AccountResource.java +++ b/src/main/java/com/mycompany/myapp/web/rest/AccountResource.java @@ -16,6 +16,7 @@ import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; @@ -50,17 +51,25 @@ public class AccountResource { private MailService mailService; /** - * POST /register -> register the user. + * POST /register : register the user. + * + * @param userDTO the user DTO + * @param request the HTTP request + * @return the ResponseEntity with status 201 (Created) if the user is registred or 400 (Bad Request) if the login or e-mail is already in use */ @RequestMapping(value = "/register", - method = RequestMethod.POST, - produces = MediaType.TEXT_PLAIN_VALUE) + method = RequestMethod.POST, + produces={MediaType.APPLICATION_JSON_VALUE, MediaType.TEXT_PLAIN_VALUE}) @Timed public ResponseEntity registerAccount(@Valid @RequestBody UserDTO userDTO, HttpServletRequest request) { + + HttpHeaders textPlainHeaders = new HttpHeaders(); + textPlainHeaders.setContentType(MediaType.TEXT_PLAIN); + return userRepository.findOneByLogin(userDTO.getLogin()) - .map(user -> new ResponseEntity<>("login already in use", HttpStatus.BAD_REQUEST)) + .map(user -> new ResponseEntity<>("login already in use", textPlainHeaders, HttpStatus.BAD_REQUEST)) .orElseGet(() -> userRepository.findOneByEmail(userDTO.getEmail()) - .map(user -> new ResponseEntity<>("e-mail address already in use", HttpStatus.BAD_REQUEST)) + .map(user -> new ResponseEntity<>("e-mail address already in use", textPlainHeaders, HttpStatus.BAD_REQUEST)) .orElseGet(() -> { User user = userService.createUserInformation(userDTO.getLogin(), userDTO.getPassword(), userDTO.getFirstName(), userDTO.getLastName(), userDTO.getEmail().toLowerCase(), @@ -79,20 +88,26 @@ public ResponseEntity registerAccount(@Valid @RequestBody UserDTO userDTO, Ht } /** - * GET /activate -> activate the registered user. + * GET /activate : activate the registered user. + * + * @param key the activation key + * @return the ResponseEntity with status 200 (OK) and the activated user in body, or status 500 (Internal Server Error) if the user couldn't be activated */ @RequestMapping(value = "/activate", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) @Timed public ResponseEntity activateAccount(@RequestParam(value = "key") String key) { - return Optional.ofNullable(userService.activateRegistration(key)) + return userService.activateRegistration(key) .map(user -> new ResponseEntity(HttpStatus.OK)) .orElse(new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR)); } /** - * GET /authenticate -> check if the user is authenticated, and return its login. + * GET /authenticate : check if the user is authenticated, and return its login. + * + * @param request the HTTP request + * @return the login if the user is authenticated */ @RequestMapping(value = "/authenticate", method = RequestMethod.GET, @@ -104,7 +119,9 @@ public String isAuthenticated(HttpServletRequest request) { } /** - * GET /account -> get the current user. + * GET /account : get the current user. + * + * @return the ResponseEntity with status 200 (OK) and the current user in body, or status 500 (Internal Server Error) if the user couldn't be returned */ @RequestMapping(value = "/account", method = RequestMethod.GET, @@ -117,7 +134,10 @@ public ResponseEntity getAccount() { } /** - * POST /account -> update the current user information. + * POST /account : update the current user information. + * + * @param userDTO the current user information + * @return the ResponseEntity with status 200 (OK), or status 400 (Bad Request) or 500 (Internal Server Error) if the user couldn't be updated */ @RequestMapping(value = "/account", method = RequestMethod.POST, @@ -129,7 +149,7 @@ public ResponseEntity saveAccount(@RequestBody UserDTO userDTO) { return ResponseEntity.badRequest().headers(HeaderUtil.createFailureAlert("user-management", "emailexists", "Email already in use")).body(null); } return userRepository - .findOneByLogin(SecurityUtils.getCurrentUser().getUsername()) + .findOneByLogin(SecurityUtils.getCurrentUserLogin()) .map(u -> { userService.updateUserInformation(userDTO.getFirstName(), userDTO.getLastName(), userDTO.getEmail(), userDTO.getLangKey()); @@ -139,11 +159,14 @@ public ResponseEntity saveAccount(@RequestBody UserDTO userDTO) { } /** - * POST /change_password -> changes the current user's password + * POST /account/change_password : changes the current user's password + * + * @param password the new password + * @return the ResponseEntity with status 200 (OK), or status 400 (Bad Request) if the new password is not strong enough */ @RequestMapping(value = "/account/change_password", method = RequestMethod.POST, - produces = MediaType.APPLICATION_JSON_VALUE) + produces = MediaType.TEXT_PLAIN_VALUE) @Timed public ResponseEntity changePassword(@RequestBody String password) { if (!checkPasswordLength(password)) { @@ -154,14 +177,17 @@ public ResponseEntity changePassword(@RequestBody String password) { } /** - * GET /account/sessions -> get the current open sessions. + * GET /account/sessions : get the current open sessions. + * + * @return the ResponseEntity with status 200 (OK) and the current open sessions in body, + * or status 500 (Internal Server Error) if the current open sessions couldn't be retrieved */ @RequestMapping(value = "/account/sessions", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) @Timed public ResponseEntity> getCurrentSessions() { - return userRepository.findOneByLogin(SecurityUtils.getCurrentUser().getUsername()) + return userRepository.findOneByLogin(SecurityUtils.getCurrentUserLogin()) .map(user -> new ResponseEntity<>( persistentTokenRepository.findByUser(user), HttpStatus.OK)) @@ -169,7 +195,7 @@ public ResponseEntity> getCurrentSessions() { } /** - * DELETE /account/sessions?series={series} -> invalidate an existing session. + * DELETE /account/sessions?series={series} : invalidate an existing session. * * - You can only delete your own sessions, not any other user's session * - If you delete one of your existing sessions, and that you are currently logged in on that session, you will @@ -180,19 +206,29 @@ public ResponseEntity> getCurrentSessions() { * anymore. * There is an API to invalidate the current session, but there is no API to check which session uses which * cookie. + * + * @param series the series of an existing session + * @throws UnsupportedEncodingException if the series couldnt be URL decoded */ @RequestMapping(value = "/account/sessions/{series}", method = RequestMethod.DELETE) @Timed public void invalidateSession(@PathVariable String series) throws UnsupportedEncodingException { String decodedSeries = URLDecoder.decode(series, "UTF-8"); - userRepository.findOneByLogin(SecurityUtils.getCurrentUser().getUsername()).ifPresent(u -> { + userRepository.findOneByLogin(SecurityUtils.getCurrentUserLogin()).ifPresent(u -> { persistentTokenRepository.findByUser(u).stream() .filter(persistentToken -> StringUtils.equals(persistentToken.getSeries(), decodedSeries)) .findAny().ifPresent(t -> persistentTokenRepository.delete(decodedSeries)); }); } + /** + * POST /account/reset_password/init : Send an e-mail to reset the password of the user + * + * @param mail the mail of the user + * @param request the HTTP request + * @return the ResponseEntity with status 200 (OK) if the e-mail was sent, or status 400 (Bad Request) if the e-mail address is not registred + */ @RequestMapping(value = "/account/reset_password/init", method = RequestMethod.POST, produces = MediaType.TEXT_PLAIN_VALUE) @@ -211,16 +247,24 @@ public ResponseEntity requestPasswordReset(@RequestBody String mail, HttpServ }).orElse(new ResponseEntity<>("e-mail address not registered", HttpStatus.BAD_REQUEST)); } + /** + * POST /account/reset_password/finish : Finish to reset the password of the user + * + * @param keyAndPassword the generated key and the new password + * @return the ResponseEntity with status 200 (OK) if the password has been reset, + * or status 400 (Bad Request) or 500 (Internal Server Error) if the password could not be reset + */ @RequestMapping(value = "/account/reset_password/finish", method = RequestMethod.POST, - produces = MediaType.APPLICATION_JSON_VALUE) + produces = MediaType.TEXT_PLAIN_VALUE) @Timed public ResponseEntity finishPasswordReset(@RequestBody KeyAndPasswordDTO keyAndPassword) { if (!checkPasswordLength(keyAndPassword.getNewPassword())) { return new ResponseEntity<>("Incorrect password", HttpStatus.BAD_REQUEST); } return userService.completePasswordReset(keyAndPassword.getNewPassword(), keyAndPassword.getKey()) - .map(user -> new ResponseEntity(HttpStatus.OK)).orElse(new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR)); + .map(user -> new ResponseEntity(HttpStatus.OK)) + .orElse(new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR)); } private boolean checkPasswordLength(String password) { diff --git a/src/main/java/com/mycompany/myapp/web/rest/AuditResource.java b/src/main/java/com/mycompany/myapp/web/rest/AuditResource.java index 1dbccb5fc..dd45cc94d 100644 --- a/src/main/java/com/mycompany/myapp/web/rest/AuditResource.java +++ b/src/main/java/com/mycompany/myapp/web/rest/AuditResource.java @@ -3,13 +3,18 @@ import com.mycompany.myapp.service.AuditEventService; import java.time.LocalDate; +import com.mycompany.myapp.web.rest.util.PaginationUtil; import org.springframework.boot.actuate.audit.AuditEvent; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.format.annotation.DateTimeFormat; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.*; import org.springframework.http.HttpStatus; +import org.springframework.http.HttpHeaders; import org.springframework.http.ResponseEntity; +import java.net.URISyntaxException; import javax.inject.Inject; import java.util.List; @@ -27,20 +32,48 @@ public AuditResource(AuditEventService auditEventService) { this.auditEventService = auditEventService; } + /** + * GET /audits : get a page of AuditEvents. + * + * @param pageable the pagination information + * @return the ResponseEntity with status 200 (OK) and the list of AuditEvents in body + * @throws URISyntaxException if there is an error to generate the pagination HTTP headers + */ @RequestMapping(method = RequestMethod.GET) - public List getAll() { - return auditEventService.findAll(); + public ResponseEntity> getAll(Pageable pageable) throws URISyntaxException { + Page page = auditEventService.findAll(pageable); + HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(page, "/api/audits"); + return new ResponseEntity<>(page.getContent(), headers, HttpStatus.OK); } + /** + * GET /audits : get a page of AuditEvents between the fromDate and toDate. + * + * @param fromDate the start of the time period of AuditEvents to get + * @param toDate the end of the time period of AuditEvents to get + * @param pageable the pagination information + * @return the ResponseEntity with status 200 (OK) and the list of AuditEvents in body + * @throws URISyntaxException if there is an error to generate the pagination HTTP headers + */ + @RequestMapping(method = RequestMethod.GET, params = {"fromDate", "toDate"}) - public List getByDates( + public ResponseEntity> getByDates( @RequestParam(value = "fromDate") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate fromDate, - @RequestParam(value = "toDate") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate toDate) { + @RequestParam(value = "toDate") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate toDate, + Pageable pageable) throws URISyntaxException { - return auditEventService.findByDates(fromDate.atTime(0, 0), toDate.atTime(23, 59)); + Page page = auditEventService.findByDates(fromDate.atTime(0, 0), toDate.atTime(23, 59), pageable); + HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(page, "/api/audits"); + return new ResponseEntity<>(page.getContent(), headers, HttpStatus.OK); } + /** + * GET /audits/:id : get an AuditEvent by id. + * + * @param id the id of the entity to get + * @return the ResponseEntity with status 200 (OK) and the AuditEvent in body, or status 404 (Not Found) + */ @RequestMapping(value = "/{id:.+}", method = RequestMethod.GET) public ResponseEntity get(@PathVariable Long id) { diff --git a/src/main/java/com/mycompany/myapp/web/rest/BankAccountResource.java b/src/main/java/com/mycompany/myapp/web/rest/BankAccountResource.java index 611ff4ea9..409256ba5 100644 --- a/src/main/java/com/mycompany/myapp/web/rest/BankAccountResource.java +++ b/src/main/java/com/mycompany/myapp/web/rest/BankAccountResource.java @@ -32,9 +32,13 @@ public class BankAccountResource { private BankAccountRepository bankAccountRepository; /** - * POST /bankAccounts -> Create a new bankAccount. + * POST /bank-accounts : Create a new bankAccount. + * + * @param bankAccount the bankAccount to create + * @return the ResponseEntity with status 201 (Created) and with body the new bankAccount, or with status 400 (Bad Request) if the bankAccount has already an ID + * @throws URISyntaxException if the Location URI syntax is incorrect */ - @RequestMapping(value = "/bankAccounts", + @RequestMapping(value = "/bank-accounts", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE) @Timed @@ -44,15 +48,21 @@ public ResponseEntity createBankAccount(@Valid @RequestBody BankAcc return ResponseEntity.badRequest().headers(HeaderUtil.createFailureAlert("bankAccount", "idexists", "A new bankAccount cannot already have an ID")).body(null); } BankAccount result = bankAccountRepository.save(bankAccount); - return ResponseEntity.created(new URI("/api/bankAccounts/" + result.getId())) + return ResponseEntity.created(new URI("/api/bank-accounts/" + result.getId())) .headers(HeaderUtil.createEntityCreationAlert("bankAccount", result.getId().toString())) .body(result); } /** - * PUT /bankAccounts -> Updates an existing bankAccount. + * PUT /bank-accounts : Updates an existing bankAccount. + * + * @param bankAccount the bankAccount to update + * @return the ResponseEntity with status 200 (OK) and with body the updated bankAccount, + * or with status 400 (Bad Request) if the bankAccount is not valid, + * or with status 500 (Internal Server Error) if the bankAccount couldnt be updated + * @throws URISyntaxException if the Location URI syntax is incorrect */ - @RequestMapping(value = "/bankAccounts", + @RequestMapping(value = "/bank-accounts", method = RequestMethod.PUT, produces = MediaType.APPLICATION_JSON_VALUE) @Timed @@ -68,21 +78,27 @@ public ResponseEntity updateBankAccount(@Valid @RequestBody BankAcc } /** - * GET /bankAccounts -> get all the bankAccounts. + * GET /bank-accounts : get all the bankAccounts. + * + * @return the ResponseEntity with status 200 (OK) and the list of bankAccounts in body */ - @RequestMapping(value = "/bankAccounts", + @RequestMapping(value = "/bank-accounts", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) @Timed public List getAllBankAccounts() { log.debug("REST request to get all BankAccounts"); - return bankAccountRepository.findAll(); - } + List bankAccounts = bankAccountRepository.findAll(); + return bankAccounts; + } /** - * GET /bankAccounts/:id -> get the "id" bankAccount. + * GET /bank-accounts/:id : get the "id" bankAccount. + * + * @param id the id of the bankAccount to retrieve + * @return the ResponseEntity with status 200 (OK) and with body the bankAccount, or with status 404 (Not Found) */ - @RequestMapping(value = "/bankAccounts/{id}", + @RequestMapping(value = "/bank-accounts/{id}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) @Timed @@ -97,9 +113,12 @@ public ResponseEntity getBankAccount(@PathVariable Long id) { } /** - * DELETE /bankAccounts/:id -> delete the "id" bankAccount. + * DELETE /bank-accounts/:id : delete the "id" bankAccount. + * + * @param id the id of the bankAccount to delete + * @return the ResponseEntity with status 200 (OK) */ - @RequestMapping(value = "/bankAccounts/{id}", + @RequestMapping(value = "/bank-accounts/{id}", method = RequestMethod.DELETE, produces = MediaType.APPLICATION_JSON_VALUE) @Timed @@ -108,4 +127,5 @@ public ResponseEntity deleteBankAccount(@PathVariable Long id) { bankAccountRepository.delete(id); return ResponseEntity.ok().headers(HeaderUtil.createEntityDeletionAlert("bankAccount", id.toString())).build(); } + } diff --git a/src/main/java/com/mycompany/myapp/web/rest/LabelResource.java b/src/main/java/com/mycompany/myapp/web/rest/LabelResource.java index 76ac0e944..71301b88e 100644 --- a/src/main/java/com/mycompany/myapp/web/rest/LabelResource.java +++ b/src/main/java/com/mycompany/myapp/web/rest/LabelResource.java @@ -32,7 +32,11 @@ public class LabelResource { private LabelRepository labelRepository; /** - * POST /labels -> Create a new label. + * POST /labels : Create a new label. + * + * @param label the label to create + * @return the ResponseEntity with status 201 (Created) and with body the new label, or with status 400 (Bad Request) if the label has already an ID + * @throws URISyntaxException if the Location URI syntax is incorrect */ @RequestMapping(value = "/labels", method = RequestMethod.POST, @@ -50,7 +54,13 @@ public ResponseEntity