You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by jo...@apache.org on 2015/10/05 20:06:56 UTC
[51/52] [abbrv] [partial] struts-examples git commit: Add new rest
plugin and angularjs based example application with support for bean
validation and multi language support
Add new rest plugin and angularjs based example application with support for bean validation and multi language support
Project: http://git-wip-us.apache.org/repos/asf/struts-examples/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts-examples/commit/a183bf5c
Tree: http://git-wip-us.apache.org/repos/asf/struts-examples/tree/a183bf5c
Diff: http://git-wip-us.apache.org/repos/asf/struts-examples/diff/a183bf5c
Branch: refs/heads/master
Commit: a183bf5cb414ee19ad5788e09d579f71d4f0ddea
Parents: eb48254
Author: Johannes Geppert <jo...@apache.org>
Authored: Mon Oct 5 19:23:17 2015 +0200
Committer: Johannes Geppert <jo...@apache.org>
Committed: Mon Oct 5 19:23:18 2015 +0200
----------------------------------------------------------------------
pom.xml | 7 +-
rest-angular/pom.xml | 227 +
.../struts/actions/IndexController.java | 56 +
.../struts/actions/data/LanguageController.java | 41 +
.../struts/actions/data/OrderController.java | 80 +
.../struts/actions/data/package-info.java | 6 +
.../ExceptionHandlerInterceptor.java | 52 +
.../apache/examples/struts/models/Order.java | 86 +
.../examples/struts/services/OrdersService.java | 41 +
.../src/main/resources/exceptions_de.properties | 1 +
.../src/main/resources/exceptions_en.properties | 1 +
.../src/main/resources/frontend_de.properties | 16 +
.../src/main/resources/frontend_en.properties | 16 +
rest-angular/src/main/resources/jshint.conf.js | 13 +
rest-angular/src/main/resources/log4j2.xml | 16 +
rest-angular/src/main/resources/struts.xml | 82 +
.../src/main/resources/validation_de.properties | 2 +
.../src/main/resources/validation_en.properties | 2 +
.../src/main/webapp/WEB-INF/content/index.jsp | 78 +
rest-angular/src/main/webapp/WEB-INF/web.xml | 20 +
rest-angular/src/main/webapp/css/app.css | 4 +
.../src/main/webapp/css/bootstrap-theme.css | 476 +
.../src/main/webapp/css/bootstrap-theme.css.map | 1 +
.../src/main/webapp/css/bootstrap-theme.min.css | 5 +
rest-angular/src/main/webapp/css/bootstrap.css | 6584 +++
.../src/main/webapp/css/bootstrap.css.map | 1 +
.../src/main/webapp/css/bootstrap.min.css | 5 +
.../fonts/glyphicons-halflings-regular.eot | Bin 0 -> 20127 bytes
.../fonts/glyphicons-halflings-regular.svg | 288 +
.../fonts/glyphicons-halflings-regular.ttf | Bin 0 -> 45404 bytes
.../fonts/glyphicons-halflings-regular.woff | Bin 0 -> 23424 bytes
.../fonts/glyphicons-halflings-regular.woff2 | Bin 0 -> 18028 bytes
rest-angular/src/main/webapp/index.jsp | 1 +
rest-angular/src/main/webapp/js/app.js | 26 +
rest-angular/src/main/webapp/js/config.js | 57 +
.../main/webapp/js/controllers/AppController.js | 53 +
.../webapp/js/controllers/OrderAddController.js | 47 +
.../js/controllers/OrderDetailController.js | 44 +
.../js/controllers/OrderEditController.js | 56 +
.../webapp/js/controllers/OrdersController.js | 51 +
.../js/lib/angular-translate-loader-url.min.js | 6 +
.../main/webapp/js/lib/angular-translate.min.js | 6 +
.../webapp/js/lib/angular/angular-animate.js | 3862 ++
.../js/lib/angular/angular-animate.min.js | 56 +
.../js/lib/angular/angular-animate.min.js.map | 8 +
.../main/webapp/js/lib/angular/angular-aria.js | 393 +
.../webapp/js/lib/angular/angular-aria.min.js | 13 +
.../js/lib/angular/angular-aria.min.js.map | 8 +
.../webapp/js/lib/angular/angular-cookies.js | 321 +
.../js/lib/angular/angular-cookies.min.js | 9 +
.../js/lib/angular/angular-cookies.min.js.map | 8 +
.../main/webapp/js/lib/angular/angular-csp.css | 21 +
.../webapp/js/lib/angular/angular-loader.js | 443 +
.../webapp/js/lib/angular/angular-loader.min.js | 10 +
.../js/lib/angular/angular-loader.min.js.map | 8 +
.../js/lib/angular/angular-message-format.js | 980 +
.../lib/angular/angular-message-format.min.js | 26 +
.../angular/angular-message-format.min.js.map | 8 +
.../webapp/js/lib/angular/angular-messages.js | 678 +
.../js/lib/angular/angular-messages.min.js | 11 +
.../js/lib/angular/angular-messages.min.js.map | 8 +
.../main/webapp/js/lib/angular/angular-mocks.js | 2458 +
.../webapp/js/lib/angular/angular-resource.js | 675 +
.../js/lib/angular/angular-resource.min.js | 13 +
.../js/lib/angular/angular-resource.min.js.map | 8 +
.../main/webapp/js/lib/angular/angular-route.js | 991 +
.../webapp/js/lib/angular/angular-route.min.js | 15 +
.../js/lib/angular/angular-route.min.js.map | 8 +
.../webapp/js/lib/angular/angular-sanitize.js | 683 +
.../js/lib/angular/angular-sanitize.min.js | 16 +
.../js/lib/angular/angular-sanitize.min.js.map | 8 +
.../webapp/js/lib/angular/angular-scenario.js | 40108 +++++++++++++++++
.../main/webapp/js/lib/angular/angular-touch.js | 628 +
.../webapp/js/lib/angular/angular-touch.min.js | 13 +
.../js/lib/angular/angular-touch.min.js.map | 8 +
.../src/main/webapp/js/lib/angular/angular.js | 28688 ++++++++++++
.../main/webapp/js/lib/angular/angular.min.js | 293 +
.../webapp/js/lib/angular/angular.min.js.map | 8 +
.../src/main/webapp/js/lib/angular/errors.json | 1 +
.../js/lib/angular/i18n/angular-locale_aa-dj.js | 128 +
.../js/lib/angular/i18n/angular-locale_aa-er.js | 128 +
.../js/lib/angular/i18n/angular-locale_aa-et.js | 128 +
.../js/lib/angular/i18n/angular-locale_aa.js | 128 +
.../js/lib/angular/i18n/angular-locale_af-na.js | 110 +
.../js/lib/angular/i18n/angular-locale_af-za.js | 110 +
.../js/lib/angular/i18n/angular-locale_af.js | 110 +
.../lib/angular/i18n/angular-locale_agq-cm.js | 128 +
.../js/lib/angular/i18n/angular-locale_agq.js | 128 +
.../js/lib/angular/i18n/angular-locale_ak-gh.js | 128 +
.../js/lib/angular/i18n/angular-locale_ak.js | 128 +
.../js/lib/angular/i18n/angular-locale_am-et.js | 110 +
.../js/lib/angular/i18n/angular-locale_am.js | 110 +
.../lib/angular/i18n/angular-locale_ar-001.js | 110 +
.../js/lib/angular/i18n/angular-locale_ar-ae.js | 110 +
.../js/lib/angular/i18n/angular-locale_ar-bh.js | 110 +
.../js/lib/angular/i18n/angular-locale_ar-dj.js | 110 +
.../js/lib/angular/i18n/angular-locale_ar-dz.js | 110 +
.../js/lib/angular/i18n/angular-locale_ar-eg.js | 110 +
.../js/lib/angular/i18n/angular-locale_ar-eh.js | 110 +
.../js/lib/angular/i18n/angular-locale_ar-er.js | 110 +
.../js/lib/angular/i18n/angular-locale_ar-il.js | 110 +
.../js/lib/angular/i18n/angular-locale_ar-iq.js | 110 +
.../js/lib/angular/i18n/angular-locale_ar-jo.js | 110 +
.../js/lib/angular/i18n/angular-locale_ar-km.js | 110 +
.../js/lib/angular/i18n/angular-locale_ar-kw.js | 110 +
.../js/lib/angular/i18n/angular-locale_ar-lb.js | 110 +
.../js/lib/angular/i18n/angular-locale_ar-ly.js | 110 +
.../js/lib/angular/i18n/angular-locale_ar-ma.js | 110 +
.../js/lib/angular/i18n/angular-locale_ar-mr.js | 110 +
.../js/lib/angular/i18n/angular-locale_ar-om.js | 110 +
.../js/lib/angular/i18n/angular-locale_ar-ps.js | 110 +
.../js/lib/angular/i18n/angular-locale_ar-qa.js | 110 +
.../js/lib/angular/i18n/angular-locale_ar-sa.js | 110 +
.../js/lib/angular/i18n/angular-locale_ar-sd.js | 110 +
.../js/lib/angular/i18n/angular-locale_ar-so.js | 110 +
.../js/lib/angular/i18n/angular-locale_ar-ss.js | 110 +
.../js/lib/angular/i18n/angular-locale_ar-sy.js | 110 +
.../js/lib/angular/i18n/angular-locale_ar-td.js | 110 +
.../js/lib/angular/i18n/angular-locale_ar-tn.js | 110 +
.../js/lib/angular/i18n/angular-locale_ar-ye.js | 110 +
.../js/lib/angular/i18n/angular-locale_ar.js | 110 +
.../js/lib/angular/i18n/angular-locale_as-in.js | 128 +
.../js/lib/angular/i18n/angular-locale_as.js | 128 +
.../lib/angular/i18n/angular-locale_asa-tz.js | 128 +
.../js/lib/angular/i18n/angular-locale_asa.js | 128 +
.../lib/angular/i18n/angular-locale_ast-es.js | 128 +
.../js/lib/angular/i18n/angular-locale_ast.js | 128 +
.../angular/i18n/angular-locale_az-cyrl-az.js | 110 +
.../lib/angular/i18n/angular-locale_az-cyrl.js | 110 +
.../angular/i18n/angular-locale_az-latn-az.js | 110 +
.../lib/angular/i18n/angular-locale_az-latn.js | 110 +
.../js/lib/angular/i18n/angular-locale_az.js | 110 +
.../lib/angular/i18n/angular-locale_bas-cm.js | 128 +
.../js/lib/angular/i18n/angular-locale_bas.js | 128 +
.../js/lib/angular/i18n/angular-locale_be-by.js | 110 +
.../js/lib/angular/i18n/angular-locale_be.js | 110 +
.../lib/angular/i18n/angular-locale_bem-zm.js | 128 +
.../js/lib/angular/i18n/angular-locale_bem.js | 128 +
.../lib/angular/i18n/angular-locale_bez-tz.js | 128 +
.../js/lib/angular/i18n/angular-locale_bez.js | 128 +
.../js/lib/angular/i18n/angular-locale_bg-bg.js | 110 +
.../js/lib/angular/i18n/angular-locale_bg.js | 110 +
.../angular/i18n/angular-locale_bm-latn-ml.js | 128 +
.../lib/angular/i18n/angular-locale_bm-latn.js | 128 +
.../js/lib/angular/i18n/angular-locale_bm-ml.js | 115 +
.../js/lib/angular/i18n/angular-locale_bm.js | 128 +
.../js/lib/angular/i18n/angular-locale_bn-bd.js | 110 +
.../js/lib/angular/i18n/angular-locale_bn-in.js | 110 +
.../js/lib/angular/i18n/angular-locale_bn.js | 110 +
.../js/lib/angular/i18n/angular-locale_bo-cn.js | 128 +
.../js/lib/angular/i18n/angular-locale_bo-in.js | 128 +
.../js/lib/angular/i18n/angular-locale_bo.js | 128 +
.../js/lib/angular/i18n/angular-locale_br-fr.js | 110 +
.../js/lib/angular/i18n/angular-locale_br.js | 110 +
.../lib/angular/i18n/angular-locale_brx-in.js | 128 +
.../js/lib/angular/i18n/angular-locale_brx.js | 128 +
.../angular/i18n/angular-locale_bs-cyrl-ba.js | 128 +
.../lib/angular/i18n/angular-locale_bs-cyrl.js | 128 +
.../angular/i18n/angular-locale_bs-latn-ba.js | 128 +
.../lib/angular/i18n/angular-locale_bs-latn.js | 128 +
.../js/lib/angular/i18n/angular-locale_bs.js | 128 +
.../lib/angular/i18n/angular-locale_byn-er.js | 115 +
.../js/lib/angular/i18n/angular-locale_byn.js | 115 +
.../js/lib/angular/i18n/angular-locale_ca-ad.js | 128 +
.../i18n/angular-locale_ca-es-valencia.js | 128 +
.../js/lib/angular/i18n/angular-locale_ca-es.js | 128 +
.../js/lib/angular/i18n/angular-locale_ca-fr.js | 128 +
.../js/lib/angular/i18n/angular-locale_ca-it.js | 128 +
.../js/lib/angular/i18n/angular-locale_ca.js | 128 +
.../lib/angular/i18n/angular-locale_cgg-ug.js | 128 +
.../js/lib/angular/i18n/angular-locale_cgg.js | 128 +
.../lib/angular/i18n/angular-locale_chr-us.js | 110 +
.../js/lib/angular/i18n/angular-locale_chr.js | 110 +
.../angular/i18n/angular-locale_ckb-arab-iq.js | 128 +
.../angular/i18n/angular-locale_ckb-arab-ir.js | 128 +
.../lib/angular/i18n/angular-locale_ckb-arab.js | 128 +
.../lib/angular/i18n/angular-locale_ckb-iq.js | 128 +
.../lib/angular/i18n/angular-locale_ckb-ir.js | 128 +
.../angular/i18n/angular-locale_ckb-latn-iq.js | 128 +
.../lib/angular/i18n/angular-locale_ckb-latn.js | 128 +
.../js/lib/angular/i18n/angular-locale_ckb.js | 128 +
.../js/lib/angular/i18n/angular-locale_cs-cz.js | 128 +
.../js/lib/angular/i18n/angular-locale_cs.js | 128 +
.../js/lib/angular/i18n/angular-locale_cy-gb.js | 110 +
.../js/lib/angular/i18n/angular-locale_cy.js | 110 +
.../js/lib/angular/i18n/angular-locale_da-dk.js | 141 +
.../js/lib/angular/i18n/angular-locale_da-gl.js | 141 +
.../js/lib/angular/i18n/angular-locale_da.js | 141 +
.../lib/angular/i18n/angular-locale_dav-ke.js | 128 +
.../js/lib/angular/i18n/angular-locale_dav.js | 128 +
.../js/lib/angular/i18n/angular-locale_de-at.js | 128 +
.../js/lib/angular/i18n/angular-locale_de-be.js | 128 +
.../js/lib/angular/i18n/angular-locale_de-ch.js | 128 +
.../js/lib/angular/i18n/angular-locale_de-de.js | 128 +
.../js/lib/angular/i18n/angular-locale_de-li.js | 128 +
.../js/lib/angular/i18n/angular-locale_de-lu.js | 128 +
.../js/lib/angular/i18n/angular-locale_de.js | 128 +
.../lib/angular/i18n/angular-locale_dje-ne.js | 128 +
.../js/lib/angular/i18n/angular-locale_dje.js | 128 +
.../lib/angular/i18n/angular-locale_dsb-de.js | 128 +
.../js/lib/angular/i18n/angular-locale_dsb.js | 128 +
.../lib/angular/i18n/angular-locale_dua-cm.js | 128 +
.../js/lib/angular/i18n/angular-locale_dua.js | 128 +
.../lib/angular/i18n/angular-locale_dyo-sn.js | 128 +
.../js/lib/angular/i18n/angular-locale_dyo.js | 128 +
.../js/lib/angular/i18n/angular-locale_dz-bt.js | 128 +
.../js/lib/angular/i18n/angular-locale_dz.js | 128 +
.../lib/angular/i18n/angular-locale_ebu-ke.js | 128 +
.../js/lib/angular/i18n/angular-locale_ebu.js | 128 +
.../js/lib/angular/i18n/angular-locale_ee-gh.js | 128 +
.../js/lib/angular/i18n/angular-locale_ee-tg.js | 128 +
.../js/lib/angular/i18n/angular-locale_ee.js | 128 +
.../js/lib/angular/i18n/angular-locale_el-cy.js | 110 +
.../js/lib/angular/i18n/angular-locale_el-gr.js | 110 +
.../js/lib/angular/i18n/angular-locale_el.js | 110 +
.../lib/angular/i18n/angular-locale_en-001.js | 128 +
.../lib/angular/i18n/angular-locale_en-150.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-ag.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-ai.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-as.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-au.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-bb.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-be.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-bm.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-bs.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-bw.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-bz.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-ca.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-cc.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-ck.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-cm.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-cx.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-dg.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-dm.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-er.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-fj.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-fk.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-fm.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-gb.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-gd.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-gg.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-gh.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-gi.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-gm.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-gu.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-gy.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-hk.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-ie.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-im.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-in.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-io.js | 128 +
.../lib/angular/i18n/angular-locale_en-iso.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-je.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-jm.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-ke.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-ki.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-kn.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-ky.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-lc.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-lr.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-ls.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-mg.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-mh.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-mo.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-mp.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-ms.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-mt.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-mu.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-mw.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-my.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-na.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-nf.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-ng.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-nr.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-nu.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-nz.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-pg.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-ph.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-pk.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-pn.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-pr.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-pw.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-rw.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-sb.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-sc.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-sd.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-sg.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-sh.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-sl.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-ss.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-sx.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-sz.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-tc.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-tk.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-to.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-tt.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-tv.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-tz.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-ug.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-um.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-us.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-vc.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-vg.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-vi.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-vu.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-ws.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-za.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-zm.js | 128 +
.../js/lib/angular/i18n/angular-locale_en-zw.js | 128 +
.../js/lib/angular/i18n/angular-locale_en.js | 128 +
.../lib/angular/i18n/angular-locale_eo-001.js | 128 +
.../js/lib/angular/i18n/angular-locale_eo.js | 128 +
.../lib/angular/i18n/angular-locale_es-419.js | 110 +
.../js/lib/angular/i18n/angular-locale_es-ar.js | 110 +
.../js/lib/angular/i18n/angular-locale_es-bo.js | 110 +
.../js/lib/angular/i18n/angular-locale_es-cl.js | 110 +
.../js/lib/angular/i18n/angular-locale_es-co.js | 110 +
.../js/lib/angular/i18n/angular-locale_es-cr.js | 110 +
.../js/lib/angular/i18n/angular-locale_es-cu.js | 110 +
.../js/lib/angular/i18n/angular-locale_es-do.js | 110 +
.../js/lib/angular/i18n/angular-locale_es-ea.js | 110 +
.../js/lib/angular/i18n/angular-locale_es-ec.js | 110 +
.../js/lib/angular/i18n/angular-locale_es-es.js | 110 +
.../js/lib/angular/i18n/angular-locale_es-gq.js | 110 +
.../js/lib/angular/i18n/angular-locale_es-gt.js | 110 +
.../js/lib/angular/i18n/angular-locale_es-hn.js | 110 +
.../js/lib/angular/i18n/angular-locale_es-ic.js | 110 +
.../js/lib/angular/i18n/angular-locale_es-mx.js | 110 +
.../js/lib/angular/i18n/angular-locale_es-ni.js | 110 +
.../js/lib/angular/i18n/angular-locale_es-pa.js | 110 +
.../js/lib/angular/i18n/angular-locale_es-pe.js | 110 +
.../js/lib/angular/i18n/angular-locale_es-ph.js | 110 +
.../js/lib/angular/i18n/angular-locale_es-pr.js | 110 +
.../js/lib/angular/i18n/angular-locale_es-py.js | 110 +
.../js/lib/angular/i18n/angular-locale_es-sv.js | 110 +
.../js/lib/angular/i18n/angular-locale_es-us.js | 110 +
.../js/lib/angular/i18n/angular-locale_es-uy.js | 110 +
.../js/lib/angular/i18n/angular-locale_es-ve.js | 110 +
.../js/lib/angular/i18n/angular-locale_es.js | 110 +
.../js/lib/angular/i18n/angular-locale_et-ee.js | 128 +
.../js/lib/angular/i18n/angular-locale_et.js | 128 +
.../js/lib/angular/i18n/angular-locale_eu-es.js | 110 +
.../js/lib/angular/i18n/angular-locale_eu.js | 110 +
.../lib/angular/i18n/angular-locale_ewo-cm.js | 128 +
.../js/lib/angular/i18n/angular-locale_ewo.js | 128 +
.../js/lib/angular/i18n/angular-locale_fa-af.js | 110 +
.../js/lib/angular/i18n/angular-locale_fa-ir.js | 110 +
.../js/lib/angular/i18n/angular-locale_fa.js | 110 +
.../js/lib/angular/i18n/angular-locale_ff-cm.js | 128 +
.../js/lib/angular/i18n/angular-locale_ff-gn.js | 128 +
.../js/lib/angular/i18n/angular-locale_ff-mr.js | 128 +
.../js/lib/angular/i18n/angular-locale_ff-sn.js | 128 +
.../js/lib/angular/i18n/angular-locale_ff.js | 128 +
.../js/lib/angular/i18n/angular-locale_fi-fi.js | 128 +
.../js/lib/angular/i18n/angular-locale_fi.js | 128 +
.../lib/angular/i18n/angular-locale_fil-ph.js | 128 +
.../js/lib/angular/i18n/angular-locale_fil.js | 128 +
.../js/lib/angular/i18n/angular-locale_fo-fo.js | 128 +
.../js/lib/angular/i18n/angular-locale_fo.js | 128 +
.../js/lib/angular/i18n/angular-locale_fr-be.js | 110 +
.../js/lib/angular/i18n/angular-locale_fr-bf.js | 110 +
.../js/lib/angular/i18n/angular-locale_fr-bi.js | 110 +
.../js/lib/angular/i18n/angular-locale_fr-bj.js | 110 +
.../js/lib/angular/i18n/angular-locale_fr-bl.js | 110 +
.../js/lib/angular/i18n/angular-locale_fr-ca.js | 110 +
.../js/lib/angular/i18n/angular-locale_fr-cd.js | 110 +
.../js/lib/angular/i18n/angular-locale_fr-cf.js | 110 +
.../js/lib/angular/i18n/angular-locale_fr-cg.js | 110 +
.../js/lib/angular/i18n/angular-locale_fr-ch.js | 110 +
.../js/lib/angular/i18n/angular-locale_fr-ci.js | 110 +
.../js/lib/angular/i18n/angular-locale_fr-cm.js | 110 +
.../js/lib/angular/i18n/angular-locale_fr-dj.js | 110 +
.../js/lib/angular/i18n/angular-locale_fr-dz.js | 110 +
.../js/lib/angular/i18n/angular-locale_fr-fr.js | 110 +
.../js/lib/angular/i18n/angular-locale_fr-ga.js | 110 +
.../js/lib/angular/i18n/angular-locale_fr-gf.js | 110 +
.../js/lib/angular/i18n/angular-locale_fr-gn.js | 110 +
.../js/lib/angular/i18n/angular-locale_fr-gp.js | 110 +
.../js/lib/angular/i18n/angular-locale_fr-gq.js | 110 +
.../js/lib/angular/i18n/angular-locale_fr-ht.js | 110 +
.../js/lib/angular/i18n/angular-locale_fr-km.js | 110 +
.../js/lib/angular/i18n/angular-locale_fr-lu.js | 110 +
.../js/lib/angular/i18n/angular-locale_fr-ma.js | 110 +
.../js/lib/angular/i18n/angular-locale_fr-mc.js | 110 +
.../js/lib/angular/i18n/angular-locale_fr-mf.js | 110 +
.../js/lib/angular/i18n/angular-locale_fr-mg.js | 110 +
.../js/lib/angular/i18n/angular-locale_fr-ml.js | 110 +
.../js/lib/angular/i18n/angular-locale_fr-mq.js | 110 +
.../js/lib/angular/i18n/angular-locale_fr-mr.js | 110 +
.../js/lib/angular/i18n/angular-locale_fr-mu.js | 110 +
.../js/lib/angular/i18n/angular-locale_fr-nc.js | 110 +
.../js/lib/angular/i18n/angular-locale_fr-ne.js | 110 +
.../js/lib/angular/i18n/angular-locale_fr-pf.js | 110 +
.../js/lib/angular/i18n/angular-locale_fr-pm.js | 110 +
.../js/lib/angular/i18n/angular-locale_fr-re.js | 110 +
.../js/lib/angular/i18n/angular-locale_fr-rw.js | 110 +
.../js/lib/angular/i18n/angular-locale_fr-sc.js | 110 +
.../js/lib/angular/i18n/angular-locale_fr-sn.js | 110 +
.../js/lib/angular/i18n/angular-locale_fr-sy.js | 110 +
.../js/lib/angular/i18n/angular-locale_fr-td.js | 110 +
.../js/lib/angular/i18n/angular-locale_fr-tg.js | 110 +
.../js/lib/angular/i18n/angular-locale_fr-tn.js | 110 +
.../js/lib/angular/i18n/angular-locale_fr-vu.js | 110 +
.../js/lib/angular/i18n/angular-locale_fr-wf.js | 110 +
.../js/lib/angular/i18n/angular-locale_fr-yt.js | 110 +
.../js/lib/angular/i18n/angular-locale_fr.js | 110 +
.../lib/angular/i18n/angular-locale_fur-it.js | 128 +
.../js/lib/angular/i18n/angular-locale_fur.js | 128 +
.../js/lib/angular/i18n/angular-locale_fy-nl.js | 128 +
.../js/lib/angular/i18n/angular-locale_fy.js | 128 +
.../js/lib/angular/i18n/angular-locale_ga-ie.js | 110 +
.../js/lib/angular/i18n/angular-locale_ga.js | 110 +
.../js/lib/angular/i18n/angular-locale_gd-gb.js | 128 +
.../js/lib/angular/i18n/angular-locale_gd.js | 128 +
.../js/lib/angular/i18n/angular-locale_gl-es.js | 128 +
.../js/lib/angular/i18n/angular-locale_gl.js | 128 +
.../lib/angular/i18n/angular-locale_gsw-ch.js | 110 +
.../lib/angular/i18n/angular-locale_gsw-fr.js | 110 +
.../lib/angular/i18n/angular-locale_gsw-li.js | 110 +
.../js/lib/angular/i18n/angular-locale_gsw.js | 110 +
.../js/lib/angular/i18n/angular-locale_gu-in.js | 110 +
.../js/lib/angular/i18n/angular-locale_gu.js | 110 +
.../lib/angular/i18n/angular-locale_guz-ke.js | 128 +
.../js/lib/angular/i18n/angular-locale_guz.js | 128 +
.../js/lib/angular/i18n/angular-locale_gv-im.js | 128 +
.../js/lib/angular/i18n/angular-locale_gv.js | 128 +
.../angular/i18n/angular-locale_ha-latn-gh.js | 128 +
.../angular/i18n/angular-locale_ha-latn-ne.js | 128 +
.../angular/i18n/angular-locale_ha-latn-ng.js | 128 +
.../lib/angular/i18n/angular-locale_ha-latn.js | 128 +
.../js/lib/angular/i18n/angular-locale_ha.js | 128 +
.../lib/angular/i18n/angular-locale_haw-us.js | 110 +
.../js/lib/angular/i18n/angular-locale_haw.js | 110 +
.../js/lib/angular/i18n/angular-locale_he-il.js | 128 +
.../js/lib/angular/i18n/angular-locale_he.js | 128 +
.../js/lib/angular/i18n/angular-locale_hi-in.js | 110 +
.../js/lib/angular/i18n/angular-locale_hi.js | 110 +
.../js/lib/angular/i18n/angular-locale_hr-ba.js | 128 +
.../js/lib/angular/i18n/angular-locale_hr-hr.js | 128 +
.../js/lib/angular/i18n/angular-locale_hr.js | 128 +
.../lib/angular/i18n/angular-locale_hsb-de.js | 128 +
.../js/lib/angular/i18n/angular-locale_hsb.js | 128 +
.../js/lib/angular/i18n/angular-locale_hu-hu.js | 110 +
.../js/lib/angular/i18n/angular-locale_hu.js | 110 +
.../js/lib/angular/i18n/angular-locale_hy-am.js | 110 +
.../js/lib/angular/i18n/angular-locale_hy.js | 110 +
.../js/lib/angular/i18n/angular-locale_ia-fr.js | 128 +
.../js/lib/angular/i18n/angular-locale_ia.js | 128 +
.../js/lib/angular/i18n/angular-locale_id-id.js | 110 +
.../js/lib/angular/i18n/angular-locale_id.js | 110 +
.../js/lib/angular/i18n/angular-locale_ig-ng.js | 128 +
.../js/lib/angular/i18n/angular-locale_ig.js | 128 +
.../js/lib/angular/i18n/angular-locale_ii-cn.js | 128 +
.../js/lib/angular/i18n/angular-locale_ii.js | 128 +
.../js/lib/angular/i18n/angular-locale_in.js | 110 +
.../js/lib/angular/i18n/angular-locale_is-is.js | 141 +
.../js/lib/angular/i18n/angular-locale_is.js | 141 +
.../js/lib/angular/i18n/angular-locale_it-ch.js | 128 +
.../js/lib/angular/i18n/angular-locale_it-it.js | 128 +
.../js/lib/angular/i18n/angular-locale_it-sm.js | 128 +
.../js/lib/angular/i18n/angular-locale_it.js | 128 +
.../js/lib/angular/i18n/angular-locale_iw.js | 128 +
.../js/lib/angular/i18n/angular-locale_ja-jp.js | 110 +
.../js/lib/angular/i18n/angular-locale_ja.js | 110 +
.../lib/angular/i18n/angular-locale_jgo-cm.js | 128 +
.../js/lib/angular/i18n/angular-locale_jgo.js | 128 +
.../lib/angular/i18n/angular-locale_jmc-tz.js | 128 +
.../js/lib/angular/i18n/angular-locale_jmc.js | 128 +
.../js/lib/angular/i18n/angular-locale_ka-ge.js | 110 +
.../js/lib/angular/i18n/angular-locale_ka.js | 110 +
.../lib/angular/i18n/angular-locale_kab-dz.js | 128 +
.../js/lib/angular/i18n/angular-locale_kab.js | 128 +
.../lib/angular/i18n/angular-locale_kam-ke.js | 128 +
.../js/lib/angular/i18n/angular-locale_kam.js | 128 +
.../lib/angular/i18n/angular-locale_kde-tz.js | 128 +
.../js/lib/angular/i18n/angular-locale_kde.js | 128 +
.../lib/angular/i18n/angular-locale_kea-cv.js | 128 +
.../js/lib/angular/i18n/angular-locale_kea.js | 128 +
.../lib/angular/i18n/angular-locale_khq-ml.js | 128 +
.../js/lib/angular/i18n/angular-locale_khq.js | 128 +
.../js/lib/angular/i18n/angular-locale_ki-ke.js | 128 +
.../js/lib/angular/i18n/angular-locale_ki.js | 128 +
.../angular/i18n/angular-locale_kk-cyrl-kz.js | 110 +
.../lib/angular/i18n/angular-locale_kk-cyrl.js | 110 +
.../js/lib/angular/i18n/angular-locale_kk.js | 110 +
.../lib/angular/i18n/angular-locale_kkj-cm.js | 128 +
.../js/lib/angular/i18n/angular-locale_kkj.js | 128 +
.../js/lib/angular/i18n/angular-locale_kl-gl.js | 128 +
.../js/lib/angular/i18n/angular-locale_kl.js | 128 +
.../lib/angular/i18n/angular-locale_kln-ke.js | 128 +
.../js/lib/angular/i18n/angular-locale_kln.js | 128 +
.../js/lib/angular/i18n/angular-locale_km-kh.js | 110 +
.../js/lib/angular/i18n/angular-locale_km.js | 110 +
.../js/lib/angular/i18n/angular-locale_kn-in.js | 110 +
.../js/lib/angular/i18n/angular-locale_kn.js | 110 +
.../js/lib/angular/i18n/angular-locale_ko-kp.js | 110 +
.../js/lib/angular/i18n/angular-locale_ko-kr.js | 110 +
.../js/lib/angular/i18n/angular-locale_ko.js | 110 +
.../lib/angular/i18n/angular-locale_kok-in.js | 128 +
.../js/lib/angular/i18n/angular-locale_kok.js | 128 +
.../angular/i18n/angular-locale_ks-arab-in.js | 128 +
.../lib/angular/i18n/angular-locale_ks-arab.js | 128 +
.../js/lib/angular/i18n/angular-locale_ks.js | 128 +
.../lib/angular/i18n/angular-locale_ksb-tz.js | 128 +
.../js/lib/angular/i18n/angular-locale_ksb.js | 128 +
.../lib/angular/i18n/angular-locale_ksf-cm.js | 128 +
.../js/lib/angular/i18n/angular-locale_ksf.js | 128 +
.../lib/angular/i18n/angular-locale_ksh-de.js | 128 +
.../js/lib/angular/i18n/angular-locale_ksh.js | 128 +
.../js/lib/angular/i18n/angular-locale_kw-gb.js | 128 +
.../js/lib/angular/i18n/angular-locale_kw.js | 128 +
.../angular/i18n/angular-locale_ky-cyrl-kg.js | 110 +
.../lib/angular/i18n/angular-locale_ky-cyrl.js | 110 +
.../js/lib/angular/i18n/angular-locale_ky.js | 110 +
.../lib/angular/i18n/angular-locale_lag-tz.js | 128 +
.../js/lib/angular/i18n/angular-locale_lag.js | 128 +
.../js/lib/angular/i18n/angular-locale_lb-lu.js | 128 +
.../js/lib/angular/i18n/angular-locale_lb.js | 128 +
.../js/lib/angular/i18n/angular-locale_lg-ug.js | 128 +
.../js/lib/angular/i18n/angular-locale_lg.js | 128 +
.../lib/angular/i18n/angular-locale_lkt-us.js | 128 +
.../js/lib/angular/i18n/angular-locale_lkt.js | 128 +
.../js/lib/angular/i18n/angular-locale_ln-ao.js | 110 +
.../js/lib/angular/i18n/angular-locale_ln-cd.js | 110 +
.../js/lib/angular/i18n/angular-locale_ln-cf.js | 110 +
.../js/lib/angular/i18n/angular-locale_ln-cg.js | 110 +
.../js/lib/angular/i18n/angular-locale_ln.js | 110 +
.../js/lib/angular/i18n/angular-locale_lo-la.js | 110 +
.../js/lib/angular/i18n/angular-locale_lo.js | 110 +
.../js/lib/angular/i18n/angular-locale_lt-lt.js | 128 +
.../js/lib/angular/i18n/angular-locale_lt.js | 128 +
.../js/lib/angular/i18n/angular-locale_lu-cd.js | 128 +
.../js/lib/angular/i18n/angular-locale_lu.js | 128 +
.../lib/angular/i18n/angular-locale_luo-ke.js | 128 +
.../js/lib/angular/i18n/angular-locale_luo.js | 128 +
.../lib/angular/i18n/angular-locale_luy-ke.js | 128 +
.../js/lib/angular/i18n/angular-locale_luy.js | 128 +
.../js/lib/angular/i18n/angular-locale_lv-lv.js | 128 +
.../js/lib/angular/i18n/angular-locale_lv.js | 128 +
.../lib/angular/i18n/angular-locale_mas-ke.js | 128 +
.../lib/angular/i18n/angular-locale_mas-tz.js | 128 +
.../js/lib/angular/i18n/angular-locale_mas.js | 128 +
.../lib/angular/i18n/angular-locale_mer-ke.js | 128 +
.../js/lib/angular/i18n/angular-locale_mer.js | 128 +
.../lib/angular/i18n/angular-locale_mfe-mu.js | 128 +
.../js/lib/angular/i18n/angular-locale_mfe.js | 128 +
.../js/lib/angular/i18n/angular-locale_mg-mg.js | 128 +
.../js/lib/angular/i18n/angular-locale_mg.js | 128 +
.../lib/angular/i18n/angular-locale_mgh-mz.js | 128 +
.../js/lib/angular/i18n/angular-locale_mgh.js | 128 +
.../lib/angular/i18n/angular-locale_mgo-cm.js | 128 +
.../js/lib/angular/i18n/angular-locale_mgo.js | 128 +
.../js/lib/angular/i18n/angular-locale_mk-mk.js | 128 +
.../js/lib/angular/i18n/angular-locale_mk.js | 128 +
.../js/lib/angular/i18n/angular-locale_ml-in.js | 110 +
.../js/lib/angular/i18n/angular-locale_ml.js | 110 +
.../angular/i18n/angular-locale_mn-cyrl-mn.js | 110 +
.../lib/angular/i18n/angular-locale_mn-cyrl.js | 110 +
.../js/lib/angular/i18n/angular-locale_mn.js | 110 +
.../js/lib/angular/i18n/angular-locale_mr-in.js | 110 +
.../js/lib/angular/i18n/angular-locale_mr.js | 110 +
.../angular/i18n/angular-locale_ms-latn-bn.js | 110 +
.../angular/i18n/angular-locale_ms-latn-my.js | 110 +
.../angular/i18n/angular-locale_ms-latn-sg.js | 110 +
.../lib/angular/i18n/angular-locale_ms-latn.js | 110 +
.../js/lib/angular/i18n/angular-locale_ms.js | 110 +
.../js/lib/angular/i18n/angular-locale_mt-mt.js | 110 +
.../js/lib/angular/i18n/angular-locale_mt.js | 110 +
.../lib/angular/i18n/angular-locale_mua-cm.js | 128 +
.../js/lib/angular/i18n/angular-locale_mua.js | 128 +
.../js/lib/angular/i18n/angular-locale_my-mm.js | 110 +
.../js/lib/angular/i18n/angular-locale_my.js | 110 +
.../lib/angular/i18n/angular-locale_naq-na.js | 128 +
.../js/lib/angular/i18n/angular-locale_naq.js | 128 +
.../js/lib/angular/i18n/angular-locale_nb-no.js | 110 +
.../js/lib/angular/i18n/angular-locale_nb-sj.js | 110 +
.../js/lib/angular/i18n/angular-locale_nb.js | 110 +
.../js/lib/angular/i18n/angular-locale_nd-zw.js | 128 +
.../js/lib/angular/i18n/angular-locale_nd.js | 128 +
.../js/lib/angular/i18n/angular-locale_ne-in.js | 110 +
.../js/lib/angular/i18n/angular-locale_ne-np.js | 110 +
.../js/lib/angular/i18n/angular-locale_ne.js | 110 +
.../js/lib/angular/i18n/angular-locale_nl-aw.js | 128 +
.../js/lib/angular/i18n/angular-locale_nl-be.js | 128 +
.../js/lib/angular/i18n/angular-locale_nl-bq.js | 128 +
.../js/lib/angular/i18n/angular-locale_nl-cw.js | 128 +
.../js/lib/angular/i18n/angular-locale_nl-nl.js | 128 +
.../js/lib/angular/i18n/angular-locale_nl-sr.js | 128 +
.../js/lib/angular/i18n/angular-locale_nl-sx.js | 128 +
.../js/lib/angular/i18n/angular-locale_nl.js | 128 +
.../lib/angular/i18n/angular-locale_nmg-cm.js | 128 +
.../js/lib/angular/i18n/angular-locale_nmg.js | 128 +
.../js/lib/angular/i18n/angular-locale_nn-no.js | 128 +
.../js/lib/angular/i18n/angular-locale_nn.js | 128 +
.../lib/angular/i18n/angular-locale_nnh-cm.js | 128 +
.../js/lib/angular/i18n/angular-locale_nnh.js | 128 +
.../js/lib/angular/i18n/angular-locale_no-no.js | 110 +
.../js/lib/angular/i18n/angular-locale_no.js | 110 +
.../js/lib/angular/i18n/angular-locale_nr-za.js | 128 +
.../js/lib/angular/i18n/angular-locale_nr.js | 128 +
.../lib/angular/i18n/angular-locale_nso-za.js | 128 +
.../js/lib/angular/i18n/angular-locale_nso.js | 128 +
.../lib/angular/i18n/angular-locale_nus-sd.js | 128 +
.../js/lib/angular/i18n/angular-locale_nus.js | 128 +
.../lib/angular/i18n/angular-locale_nyn-ug.js | 128 +
.../js/lib/angular/i18n/angular-locale_nyn.js | 128 +
.../js/lib/angular/i18n/angular-locale_om-et.js | 128 +
.../js/lib/angular/i18n/angular-locale_om-ke.js | 128 +
.../js/lib/angular/i18n/angular-locale_om.js | 128 +
.../js/lib/angular/i18n/angular-locale_or-in.js | 110 +
.../js/lib/angular/i18n/angular-locale_or.js | 110 +
.../js/lib/angular/i18n/angular-locale_os-ge.js | 128 +
.../js/lib/angular/i18n/angular-locale_os-ru.js | 128 +
.../js/lib/angular/i18n/angular-locale_os.js | 128 +
.../angular/i18n/angular-locale_pa-arab-pk.js | 110 +
.../lib/angular/i18n/angular-locale_pa-arab.js | 110 +
.../angular/i18n/angular-locale_pa-guru-in.js | 110 +
.../lib/angular/i18n/angular-locale_pa-guru.js | 110 +
.../js/lib/angular/i18n/angular-locale_pa.js | 110 +
.../js/lib/angular/i18n/angular-locale_pl-pl.js | 128 +
.../js/lib/angular/i18n/angular-locale_pl.js | 128 +
.../js/lib/angular/i18n/angular-locale_ps-af.js | 128 +
.../js/lib/angular/i18n/angular-locale_ps.js | 128 +
.../js/lib/angular/i18n/angular-locale_pt-ao.js | 110 +
.../js/lib/angular/i18n/angular-locale_pt-br.js | 110 +
.../js/lib/angular/i18n/angular-locale_pt-cv.js | 110 +
.../js/lib/angular/i18n/angular-locale_pt-gw.js | 110 +
.../js/lib/angular/i18n/angular-locale_pt-mo.js | 110 +
.../js/lib/angular/i18n/angular-locale_pt-mz.js | 110 +
.../js/lib/angular/i18n/angular-locale_pt-pt.js | 110 +
.../js/lib/angular/i18n/angular-locale_pt-st.js | 110 +
.../js/lib/angular/i18n/angular-locale_pt-tl.js | 110 +
.../js/lib/angular/i18n/angular-locale_pt.js | 110 +
.../js/lib/angular/i18n/angular-locale_qu-bo.js | 128 +
.../js/lib/angular/i18n/angular-locale_qu-ec.js | 128 +
.../js/lib/angular/i18n/angular-locale_qu-pe.js | 128 +
.../js/lib/angular/i18n/angular-locale_qu.js | 128 +
.../js/lib/angular/i18n/angular-locale_rm-ch.js | 128 +
.../js/lib/angular/i18n/angular-locale_rm.js | 128 +
.../js/lib/angular/i18n/angular-locale_rn-bi.js | 128 +
.../js/lib/angular/i18n/angular-locale_rn.js | 128 +
.../js/lib/angular/i18n/angular-locale_ro-md.js | 128 +
.../js/lib/angular/i18n/angular-locale_ro-ro.js | 128 +
.../js/lib/angular/i18n/angular-locale_ro.js | 128 +
.../lib/angular/i18n/angular-locale_rof-tz.js | 128 +
.../js/lib/angular/i18n/angular-locale_rof.js | 128 +
.../js/lib/angular/i18n/angular-locale_ru-by.js | 128 +
.../js/lib/angular/i18n/angular-locale_ru-kg.js | 128 +
.../js/lib/angular/i18n/angular-locale_ru-kz.js | 128 +
.../js/lib/angular/i18n/angular-locale_ru-md.js | 128 +
.../js/lib/angular/i18n/angular-locale_ru-ru.js | 128 +
.../js/lib/angular/i18n/angular-locale_ru-ua.js | 128 +
.../js/lib/angular/i18n/angular-locale_ru.js | 128 +
.../js/lib/angular/i18n/angular-locale_rw-rw.js | 128 +
.../js/lib/angular/i18n/angular-locale_rw.js | 128 +
.../lib/angular/i18n/angular-locale_rwk-tz.js | 128 +
.../js/lib/angular/i18n/angular-locale_rwk.js | 128 +
.../lib/angular/i18n/angular-locale_sah-ru.js | 128 +
.../js/lib/angular/i18n/angular-locale_sah.js | 128 +
.../lib/angular/i18n/angular-locale_saq-ke.js | 128 +
.../js/lib/angular/i18n/angular-locale_saq.js | 128 +
.../lib/angular/i18n/angular-locale_sbp-tz.js | 128 +
.../js/lib/angular/i18n/angular-locale_sbp.js | 128 +
.../js/lib/angular/i18n/angular-locale_se-fi.js | 128 +
.../js/lib/angular/i18n/angular-locale_se-no.js | 128 +
.../js/lib/angular/i18n/angular-locale_se-se.js | 128 +
.../js/lib/angular/i18n/angular-locale_se.js | 128 +
.../lib/angular/i18n/angular-locale_seh-mz.js | 128 +
.../js/lib/angular/i18n/angular-locale_seh.js | 128 +
.../lib/angular/i18n/angular-locale_ses-ml.js | 128 +
.../js/lib/angular/i18n/angular-locale_ses.js | 128 +
.../js/lib/angular/i18n/angular-locale_sg-cf.js | 128 +
.../js/lib/angular/i18n/angular-locale_sg.js | 128 +
.../angular/i18n/angular-locale_shi-latn-ma.js | 128 +
.../lib/angular/i18n/angular-locale_shi-latn.js | 128 +
.../angular/i18n/angular-locale_shi-tfng-ma.js | 128 +
.../lib/angular/i18n/angular-locale_shi-tfng.js | 128 +
.../js/lib/angular/i18n/angular-locale_shi.js | 128 +
.../js/lib/angular/i18n/angular-locale_si-lk.js | 128 +
.../js/lib/angular/i18n/angular-locale_si.js | 128 +
.../js/lib/angular/i18n/angular-locale_sk-sk.js | 128 +
.../js/lib/angular/i18n/angular-locale_sk.js | 128 +
.../js/lib/angular/i18n/angular-locale_sl-si.js | 128 +
.../js/lib/angular/i18n/angular-locale_sl.js | 128 +
.../lib/angular/i18n/angular-locale_smn-fi.js | 128 +
.../js/lib/angular/i18n/angular-locale_smn.js | 128 +
.../js/lib/angular/i18n/angular-locale_sn-zw.js | 128 +
.../js/lib/angular/i18n/angular-locale_sn.js | 128 +
.../js/lib/angular/i18n/angular-locale_so-dj.js | 128 +
.../js/lib/angular/i18n/angular-locale_so-et.js | 128 +
.../js/lib/angular/i18n/angular-locale_so-ke.js | 128 +
.../js/lib/angular/i18n/angular-locale_so-so.js | 128 +
.../js/lib/angular/i18n/angular-locale_so.js | 128 +
.../js/lib/angular/i18n/angular-locale_sq-al.js | 110 +
.../js/lib/angular/i18n/angular-locale_sq-mk.js | 110 +
.../js/lib/angular/i18n/angular-locale_sq-xk.js | 110 +
.../js/lib/angular/i18n/angular-locale_sq.js | 110 +
.../angular/i18n/angular-locale_sr-cyrl-ba.js | 128 +
.../angular/i18n/angular-locale_sr-cyrl-me.js | 128 +
.../angular/i18n/angular-locale_sr-cyrl-rs.js | 128 +
.../angular/i18n/angular-locale_sr-cyrl-xk.js | 128 +
.../lib/angular/i18n/angular-locale_sr-cyrl.js | 128 +
.../angular/i18n/angular-locale_sr-latn-ba.js | 128 +
.../angular/i18n/angular-locale_sr-latn-me.js | 128 +
.../angular/i18n/angular-locale_sr-latn-rs.js | 128 +
.../angular/i18n/angular-locale_sr-latn-xk.js | 128 +
.../lib/angular/i18n/angular-locale_sr-latn.js | 128 +
.../js/lib/angular/i18n/angular-locale_sr.js | 128 +
.../js/lib/angular/i18n/angular-locale_ss-sz.js | 128 +
.../js/lib/angular/i18n/angular-locale_ss-za.js | 128 +
.../js/lib/angular/i18n/angular-locale_ss.js | 128 +
.../lib/angular/i18n/angular-locale_ssy-er.js | 128 +
.../js/lib/angular/i18n/angular-locale_ssy.js | 128 +
.../js/lib/angular/i18n/angular-locale_st-ls.js | 115 +
.../js/lib/angular/i18n/angular-locale_st-za.js | 115 +
.../js/lib/angular/i18n/angular-locale_st.js | 115 +
.../js/lib/angular/i18n/angular-locale_sv-ax.js | 128 +
.../js/lib/angular/i18n/angular-locale_sv-fi.js | 128 +
.../js/lib/angular/i18n/angular-locale_sv-se.js | 128 +
.../js/lib/angular/i18n/angular-locale_sv.js | 128 +
.../js/lib/angular/i18n/angular-locale_sw-cd.js | 128 +
.../js/lib/angular/i18n/angular-locale_sw-ke.js | 128 +
.../js/lib/angular/i18n/angular-locale_sw-tz.js | 128 +
.../js/lib/angular/i18n/angular-locale_sw-ug.js | 128 +
.../js/lib/angular/i18n/angular-locale_sw.js | 128 +
.../lib/angular/i18n/angular-locale_swc-cd.js | 128 +
.../js/lib/angular/i18n/angular-locale_swc.js | 128 +
.../js/lib/angular/i18n/angular-locale_ta-in.js | 110 +
.../js/lib/angular/i18n/angular-locale_ta-lk.js | 110 +
.../js/lib/angular/i18n/angular-locale_ta-my.js | 110 +
.../js/lib/angular/i18n/angular-locale_ta-sg.js | 110 +
.../js/lib/angular/i18n/angular-locale_ta.js | 110 +
.../js/lib/angular/i18n/angular-locale_te-in.js | 110 +
.../js/lib/angular/i18n/angular-locale_te.js | 110 +
.../lib/angular/i18n/angular-locale_teo-ke.js | 128 +
.../lib/angular/i18n/angular-locale_teo-ug.js | 128 +
.../js/lib/angular/i18n/angular-locale_teo.js | 128 +
.../angular/i18n/angular-locale_tg-cyrl-tj.js | 115 +
.../lib/angular/i18n/angular-locale_tg-cyrl.js | 115 +
.../js/lib/angular/i18n/angular-locale_tg.js | 115 +
.../js/lib/angular/i18n/angular-locale_th-th.js | 110 +
.../js/lib/angular/i18n/angular-locale_th.js | 110 +
.../js/lib/angular/i18n/angular-locale_ti-er.js | 128 +
.../js/lib/angular/i18n/angular-locale_ti-et.js | 128 +
.../js/lib/angular/i18n/angular-locale_ti.js | 128 +
.../lib/angular/i18n/angular-locale_tig-er.js | 115 +
.../js/lib/angular/i18n/angular-locale_tig.js | 115 +
.../js/lib/angular/i18n/angular-locale_tl.js | 128 +
.../js/lib/angular/i18n/angular-locale_tn-bw.js | 128 +
.../js/lib/angular/i18n/angular-locale_tn-za.js | 128 +
.../js/lib/angular/i18n/angular-locale_tn.js | 128 +
.../js/lib/angular/i18n/angular-locale_to-to.js | 128 +
.../js/lib/angular/i18n/angular-locale_to.js | 128 +
.../js/lib/angular/i18n/angular-locale_tr-cy.js | 110 +
.../js/lib/angular/i18n/angular-locale_tr-tr.js | 110 +
.../js/lib/angular/i18n/angular-locale_tr.js | 110 +
.../js/lib/angular/i18n/angular-locale_ts-za.js | 128 +
.../js/lib/angular/i18n/angular-locale_ts.js | 128 +
.../lib/angular/i18n/angular-locale_twq-ne.js | 128 +
.../js/lib/angular/i18n/angular-locale_twq.js | 128 +
.../angular/i18n/angular-locale_tzm-latn-ma.js | 128 +
.../lib/angular/i18n/angular-locale_tzm-latn.js | 128 +
.../js/lib/angular/i18n/angular-locale_tzm.js | 128 +
.../angular/i18n/angular-locale_ug-arab-cn.js | 128 +
.../lib/angular/i18n/angular-locale_ug-arab.js | 128 +
.../js/lib/angular/i18n/angular-locale_ug.js | 128 +
.../js/lib/angular/i18n/angular-locale_uk-ua.js | 128 +
.../js/lib/angular/i18n/angular-locale_uk.js | 128 +
.../js/lib/angular/i18n/angular-locale_ur-in.js | 128 +
.../js/lib/angular/i18n/angular-locale_ur-pk.js | 128 +
.../js/lib/angular/i18n/angular-locale_ur.js | 128 +
.../angular/i18n/angular-locale_uz-arab-af.js | 110 +
.../lib/angular/i18n/angular-locale_uz-arab.js | 110 +
.../angular/i18n/angular-locale_uz-cyrl-uz.js | 110 +
.../lib/angular/i18n/angular-locale_uz-cyrl.js | 110 +
.../angular/i18n/angular-locale_uz-latn-uz.js | 110 +
.../lib/angular/i18n/angular-locale_uz-latn.js | 110 +
.../js/lib/angular/i18n/angular-locale_uz.js | 110 +
.../angular/i18n/angular-locale_vai-latn-lr.js | 128 +
.../lib/angular/i18n/angular-locale_vai-latn.js | 128 +
.../angular/i18n/angular-locale_vai-vaii-lr.js | 128 +
.../lib/angular/i18n/angular-locale_vai-vaii.js | 128 +
.../js/lib/angular/i18n/angular-locale_vai.js | 128 +
.../js/lib/angular/i18n/angular-locale_ve-za.js | 128 +
.../js/lib/angular/i18n/angular-locale_ve.js | 128 +
.../js/lib/angular/i18n/angular-locale_vi-vn.js | 110 +
.../js/lib/angular/i18n/angular-locale_vi.js | 110 +
.../lib/angular/i18n/angular-locale_vo-001.js | 128 +
.../js/lib/angular/i18n/angular-locale_vo.js | 128 +
.../lib/angular/i18n/angular-locale_vun-tz.js | 128 +
.../js/lib/angular/i18n/angular-locale_vun.js | 128 +
.../lib/angular/i18n/angular-locale_wae-ch.js | 128 +
.../js/lib/angular/i18n/angular-locale_wae.js | 128 +
.../lib/angular/i18n/angular-locale_wal-et.js | 115 +
.../js/lib/angular/i18n/angular-locale_wal.js | 115 +
.../js/lib/angular/i18n/angular-locale_xh-za.js | 115 +
.../js/lib/angular/i18n/angular-locale_xh.js | 115 +
.../lib/angular/i18n/angular-locale_xog-ug.js | 128 +
.../js/lib/angular/i18n/angular-locale_xog.js | 128 +
.../lib/angular/i18n/angular-locale_yav-cm.js | 128 +
.../js/lib/angular/i18n/angular-locale_yav.js | 128 +
.../lib/angular/i18n/angular-locale_yi-001.js | 128 +
.../js/lib/angular/i18n/angular-locale_yi.js | 128 +
.../js/lib/angular/i18n/angular-locale_yo-bj.js | 128 +
.../js/lib/angular/i18n/angular-locale_yo-ng.js | 128 +
.../js/lib/angular/i18n/angular-locale_yo.js | 128 +
.../lib/angular/i18n/angular-locale_zgh-ma.js | 128 +
.../js/lib/angular/i18n/angular-locale_zgh.js | 128 +
.../js/lib/angular/i18n/angular-locale_zh-cn.js | 110 +
.../angular/i18n/angular-locale_zh-hans-cn.js | 110 +
.../angular/i18n/angular-locale_zh-hans-hk.js | 110 +
.../angular/i18n/angular-locale_zh-hans-mo.js | 110 +
.../angular/i18n/angular-locale_zh-hans-sg.js | 110 +
.../lib/angular/i18n/angular-locale_zh-hans.js | 110 +
.../angular/i18n/angular-locale_zh-hant-hk.js | 110 +
.../angular/i18n/angular-locale_zh-hant-mo.js | 110 +
.../angular/i18n/angular-locale_zh-hant-tw.js | 110 +
.../lib/angular/i18n/angular-locale_zh-hant.js | 110 +
.../js/lib/angular/i18n/angular-locale_zh-hk.js | 110 +
.../js/lib/angular/i18n/angular-locale_zh-tw.js | 110 +
.../js/lib/angular/i18n/angular-locale_zh.js | 110 +
.../js/lib/angular/i18n/angular-locale_zu-za.js | 110 +
.../js/lib/angular/i18n/angular-locale_zu.js | 110 +
.../src/main/webapp/js/lib/angular/version.json | 1 +
.../src/main/webapp/js/lib/angular/version.txt | 1 +
.../js/lib/ui-bootstrap-tpls-0.13.3.min.js | 10 +
.../src/main/webapp/js/services/DataService.js | 102 +
.../src/main/webapp/partials/order-detail.html | 22 +
.../src/main/webapp/partials/order-form.html | 46 +
.../src/main/webapp/partials/orders.html | 25 +
.../struts/actions/IndexControllerTest.java | 30 +
.../actions/data/OrderControllerTest.java | 110 +
rest-angular/src/test/resources/log4j2.xml | 14 +
833 files changed, 180863 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/a183bf5c/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index ebc876f..7e803d3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -66,6 +66,7 @@
<module>message-resource</module>
<module>preparable-interface</module>
<module>restful2actionmapper</module>
+ <module>rest-angular</module>
<module>spring-struts</module>
<module>themes</module>
<module>themes-override</module>
@@ -96,10 +97,10 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
- <version>2.3.2</version>
+ <version>3.3</version>
<configuration>
- <source>1.7</source>
- <target>1.7</target>
+ <source>1.8</source>
+ <target>1.8</target>
</configuration>
</plugin>
</plugins>
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/a183bf5c/rest-angular/pom.xml
----------------------------------------------------------------------
diff --git a/rest-angular/pom.xml b/rest-angular/pom.xml
new file mode 100644
index 0000000..395073a
--- /dev/null
+++ b/rest-angular/pom.xml
@@ -0,0 +1,227 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>struts.apache.org</groupId>
+ <artifactId>struts2examples</artifactId>
+ <version>1.0.0</version>
+ </parent>
+
+ <artifactId>rest-angular</artifactId>
+
+ <name>REST Plugin based application with AngularJS frontend</name>
+
+ <description>A REST Plugin based Struts2 application with AngularJS frontend, Bean validation, Exception Handling and multi language support.</description>
+
+ <properties>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ </properties>
+
+ <dependencies>
+
+ <dependency>
+ <groupId>org.apache.struts</groupId>
+ <artifactId>struts2-core</artifactId>
+ <version>${struts2.version}</version>
+ <exclusions>
+ <exclusion>
+ <artifactId>asm</artifactId>
+ <groupId>asm</groupId>
+ </exclusion>
+ <exclusion>
+ <artifactId>asm-commons</artifactId>
+ <groupId>asm</groupId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.struts</groupId>
+ <artifactId>struts2-java8-support-plugin</artifactId>
+ <version>${struts2.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.struts</groupId>
+ <artifactId>struts2-convention-plugin</artifactId>
+ <version>${struts2.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.struts</groupId>
+ <artifactId>struts2-rest-plugin</artifactId>
+ <version>${struts2.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.struts</groupId>
+ <artifactId>struts2-junit-plugin</artifactId>
+ <version>${struts2.version}</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.hamcrest</groupId>
+ <artifactId>hamcrest-all</artifactId>
+ <version>1.3</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.struts</groupId>
+ <artifactId>struts2-bean-validation-plugin</artifactId>
+ <version>${struts2.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-validator</artifactId>
+ <version>4.3.2.Final</version>
+ </dependency>
+
+ <dependency>
+ <groupId>com.fasterxml.jackson.core</groupId>
+ <artifactId>jackson-core</artifactId>
+ <version>2.6.1</version>
+ </dependency>
+ <dependency>
+ <groupId>com.fasterxml.jackson.core</groupId>
+ <artifactId>jackson-annotations</artifactId>
+ <version>2.6.1</version>
+ </dependency>
+ <dependency>
+ <groupId>com.fasterxml.jackson.core</groupId>
+ <artifactId>jackson-databind</artifactId>
+ <version>2.6.1</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.logging.log4j</groupId>
+ <artifactId>log4j-core</artifactId>
+ <version>${log4j2.version}</version>
+ </dependency>
+
+
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>4.5</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>com.jayway.jsonpath</groupId>
+ <artifactId>json-path</artifactId>
+ <version>2.0.0</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>javax.servlet-api</artifactId>
+ <version>3.1.0</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>jsp-api</artifactId>
+ <version>2.0</version>
+ <scope>provided</scope>
+ </dependency>
+
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>com.cj.jshintmojo</groupId>
+ <artifactId>jshint-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <goals>
+ <goal>lint</goal>
+ </goals>
+ </execution>
+ </executions>
+ <configuration>
+ <configFile>src/main/resources/jshint.conf.js</configFile>
+ <directories>
+ <directory>src/main/webapp/js/</directory>
+ </directories>
+ <excludes>
+ <exclude>src/main/webapp/js/lib</exclude>
+ </excludes>
+ <reporter>jslint</reporter>
+ <reportFile>target/jshint.xml</reportFile>
+ <failOnError>true</failOnError>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>com.samaxes.maven</groupId>
+ <artifactId>minify-maven-plugin</artifactId>
+ <version>1.7.4</version>
+ <executions>
+ <execution>
+ <id>external-minify</id>
+ <phase>package</phase>
+ <configuration>
+ <jsEngine>CLOSURE</jsEngine>
+ <closureLanguage>ECMASCRIPT5_STRICT</closureLanguage>
+ <skipMinify>true</skipMinify>
+ <jsFinalFile>external.js</jsFinalFile>
+ <jsSourceFiles>
+ <jsSourceFile>lib/angular/angular.min.js</jsSourceFile>
+ <jsSourceFile>lib/angular/angular-route.min.js</jsSourceFile>
+ <jsSourceFile>lib/ui-bootstrap-tpls-0.13.3.min.js</jsSourceFile>
+ <jsSourceFile>lib/angular-translate.min.js</jsSourceFile>
+ <jsSourceFile>lib/angular-translate-loader-url.min.js</jsSourceFile>
+ </jsSourceFiles>
+ </configuration>
+ <goals>
+ <goal>minify</goal>
+ </goals>
+ </execution>
+ <execution>
+ <id>application-minify</id>
+ <phase>package</phase>
+ <configuration>
+ <jsEngine>CLOSURE</jsEngine>
+ <closureLanguage>ECMASCRIPT5_STRICT</closureLanguage>
+ <jsFinalFile>application.js</jsFinalFile>
+ <jsSourceFiles>
+ <jsSourceFile>app.js</jsSourceFile>
+ <jsSourceFile>config.js</jsSourceFile>
+ </jsSourceFiles>
+ <jsSourceIncludes>
+ <jsSourceInclude>services/*.js</jsSourceInclude>
+ <jsSourceInclude>controllers/*.js</jsSourceInclude>
+ </jsSourceIncludes>
+
+ </configuration>
+ <goals>
+ <goal>minify</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-maven-plugin</artifactId>
+ <version>9.3.3.v20150827</version>
+ <configuration>
+ <webApp>
+ <contextPath>/${artifactId}</contextPath>
+ </webApp>
+ <stopKey>CTRL+C</stopKey>
+ <stopPort>8999</stopPort>
+ <scanIntervalSeconds>10</scanIntervalSeconds>
+ <webAppSourceDirectory>${basedir}/src/main/webapp/</webAppSourceDirectory>
+ <webAppConfig>
+ <descriptor>${basedir}/src/main/webapp/WEB-INF/web.xml</descriptor>
+ </webAppConfig>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/a183bf5c/rest-angular/src/main/java/org/apache/examples/struts/actions/IndexController.java
----------------------------------------------------------------------
diff --git a/rest-angular/src/main/java/org/apache/examples/struts/actions/IndexController.java b/rest-angular/src/main/java/org/apache/examples/struts/actions/IndexController.java
new file mode 100644
index 0000000..126e422
--- /dev/null
+++ b/rest-angular/src/main/java/org/apache/examples/struts/actions/IndexController.java
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.examples.struts.actions;
+
+import com.opensymphony.xwork2.Action;
+import org.apache.struts2.rest.DefaultHttpHeaders;
+import org.apache.struts2.rest.HttpHeaders;
+import org.apache.struts2.rest.RestActionSupport;
+
+public class IndexController extends RestActionSupport {
+
+ private static final long serialVersionUID = 6153177836211979662L;
+
+ private boolean useMinifiedResources = false;
+
+ public HttpHeaders index() {
+ return new DefaultHttpHeaders("index")
+ .disableCaching();
+ }
+
+ public HttpHeaders show() {
+ return new DefaultHttpHeaders("show");
+ }
+
+ public String edit() {
+ return Action.SUCCESS;
+ }
+
+ public String editNew() {
+ return Action.SUCCESS;
+ }
+
+ public boolean isUseMinifiedResources() {
+ return useMinifiedResources;
+ }
+
+ public void setUseMinifiedResources(boolean useMinifiedResources) {
+ this.useMinifiedResources = useMinifiedResources;
+ }
+}
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/a183bf5c/rest-angular/src/main/java/org/apache/examples/struts/actions/data/LanguageController.java
----------------------------------------------------------------------
diff --git a/rest-angular/src/main/java/org/apache/examples/struts/actions/data/LanguageController.java b/rest-angular/src/main/java/org/apache/examples/struts/actions/data/LanguageController.java
new file mode 100644
index 0000000..1fa09a5
--- /dev/null
+++ b/rest-angular/src/main/java/org/apache/examples/struts/actions/data/LanguageController.java
@@ -0,0 +1,41 @@
+package org.apache.examples.struts.actions.data;
+
+import com.opensymphony.xwork2.Action;
+import com.opensymphony.xwork2.ActionContext;
+import com.opensymphony.xwork2.ModelDriven;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.struts2.rest.RestActionSupport;
+
+import java.util.Locale;
+import java.util.Map;
+import java.util.ResourceBundle;
+import java.util.stream.Collectors;
+
+public class LanguageController extends RestActionSupport implements ModelDriven<Map<String, String>> {
+
+ private static final Logger log = LogManager.getLogger(LanguageController.class);
+
+ private Map<String, String> model;
+
+ public String index() throws Exception {
+
+ Locale locale = ActionContext.getContext().getLocale();
+ log.debug("Get texts resources for locale: {}", locale);
+
+ ResourceBundle bundle = getTexts("frontend");
+ this.model = bundle.keySet()
+ .stream()
+ .collect(Collectors.toMap(
+ key -> key,
+ bundle::getString));
+
+ return Action.SUCCESS;
+ }
+
+
+ @Override
+ public Map<String, String> getModel() {
+ return model;
+ }
+}
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/a183bf5c/rest-angular/src/main/java/org/apache/examples/struts/actions/data/OrderController.java
----------------------------------------------------------------------
diff --git a/rest-angular/src/main/java/org/apache/examples/struts/actions/data/OrderController.java b/rest-angular/src/main/java/org/apache/examples/struts/actions/data/OrderController.java
new file mode 100644
index 0000000..5b6aefb
--- /dev/null
+++ b/rest-angular/src/main/java/org/apache/examples/struts/actions/data/OrderController.java
@@ -0,0 +1,80 @@
+package org.apache.examples.struts.actions.data;
+
+import com.opensymphony.xwork2.ModelDriven;
+import org.apache.examples.struts.models.Order;
+import org.apache.examples.struts.services.OrdersService;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.struts2.rest.DefaultHttpHeaders;
+import org.apache.struts2.rest.HttpHeaders;
+import org.apache.struts2.rest.RestActionSupport;
+
+import java.util.Collection;
+
+public class OrderController extends RestActionSupport implements ModelDriven<Object> {
+
+ private static final Logger log = LogManager.getLogger(OrderController.class);
+
+ private Order model = new Order();
+ private String id;
+ private Collection<Order> list = null;
+ private OrdersService ordersService = new OrdersService();
+
+ // GET /data/order/1
+ public HttpHeaders show() {
+ return new DefaultHttpHeaders("show");
+ }
+
+ // GET /data/order
+ public HttpHeaders index() {
+ list = ordersService.getAll();
+ return new DefaultHttpHeaders("index")
+ .disableCaching();
+ }
+
+ // DELETE /data/order/1
+ public String destroy() {
+ log.debug("Delete order with id: {}", id);
+
+ // To demonstrate exception handling we throw an exception when someone tries to delete an order
+ if(id != null) {
+ throw new RuntimeException(getText("exception.operation.not.supported"));
+ }
+
+ ordersService.remove(id);
+ return "success";
+ }
+
+ // POST /data/order
+ public HttpHeaders create() {
+ log.debug("Create new order: {}", model);
+ ordersService.save(model);
+ return new DefaultHttpHeaders("success")
+ .setLocationId(model.getId());
+ }
+
+ // PUT /data/order/1
+ public String update() {
+ log.debug("Update order: {}", model);
+ ordersService.save(model);
+ return "success";
+ }
+
+ public void setId(String id) {
+ if (id != null) {
+ this.model = ordersService.get(id);
+ }
+ this.id = id;
+ }
+
+ public Object getModel() {
+ if(list != null) {
+ return list;
+ } else {
+ if(model == null) {
+ model = new Order();
+ }
+ return model;
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/a183bf5c/rest-angular/src/main/java/org/apache/examples/struts/actions/data/package-info.java
----------------------------------------------------------------------
diff --git a/rest-angular/src/main/java/org/apache/examples/struts/actions/data/package-info.java b/rest-angular/src/main/java/org/apache/examples/struts/actions/data/package-info.java
new file mode 100644
index 0000000..fdd45c0
--- /dev/null
+++ b/rest-angular/src/main/java/org/apache/examples/struts/actions/data/package-info.java
@@ -0,0 +1,6 @@
+@ParentPackage("data")
+@Namespace("/data")
+package org.apache.examples.struts.actions.data;
+
+import org.apache.struts2.convention.annotation.Namespace;
+import org.apache.struts2.convention.annotation.ParentPackage;
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/a183bf5c/rest-angular/src/main/java/org/apache/examples/struts/interceptors/ExceptionHandlerInterceptor.java
----------------------------------------------------------------------
diff --git a/rest-angular/src/main/java/org/apache/examples/struts/interceptors/ExceptionHandlerInterceptor.java b/rest-angular/src/main/java/org/apache/examples/struts/interceptors/ExceptionHandlerInterceptor.java
new file mode 100644
index 0000000..a5c4d38
--- /dev/null
+++ b/rest-angular/src/main/java/org/apache/examples/struts/interceptors/ExceptionHandlerInterceptor.java
@@ -0,0 +1,52 @@
+package org.apache.examples.struts.interceptors;
+
+import com.opensymphony.xwork2.Action;
+import com.opensymphony.xwork2.ActionInvocation;
+import com.opensymphony.xwork2.inject.Inject;
+import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.struts2.rest.ContentTypeHandlerManager;
+import org.apache.struts2.rest.DefaultHttpHeaders;
+import org.apache.struts2.rest.HttpHeaders;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.HashMap;
+import java.util.Map;
+
+public class ExceptionHandlerInterceptor extends MethodFilterInterceptor {
+
+ private static final Logger log = LogManager.getLogger(ExceptionHandlerInterceptor.class);
+
+ private static final String ACTION_ERROR = "actionError";
+
+ private ContentTypeHandlerManager manager;
+
+ @Inject
+ public void setContentTypeHandlerManager(ContentTypeHandlerManager mgr) {
+ this.manager = mgr;
+ }
+
+ @Override
+ protected String doIntercept(ActionInvocation actionInvocation) throws Exception {
+ try{
+ return actionInvocation.invoke();
+ } catch (Exception exception){
+ log.warn("Exception occurred: {}", exception.getMessage());
+ Map<String, Object> errors = new HashMap<>();
+
+ HttpHeaders httpHeaders = new DefaultHttpHeaders()
+ .disableCaching()
+ .withStatus(HttpServletResponse.SC_BAD_REQUEST)
+ .renderResult(Action.INPUT);
+
+ if(exception instanceof SecurityException) {
+ errors.put(ACTION_ERROR, "Operation not allowed!");
+ httpHeaders.setStatus(HttpServletResponse.SC_FORBIDDEN);
+ } else {
+ errors.put(ACTION_ERROR, exception.getMessage());
+ }
+ return manager.handleResult(actionInvocation.getProxy().getConfig(), httpHeaders, errors);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/a183bf5c/rest-angular/src/main/java/org/apache/examples/struts/models/Order.java
----------------------------------------------------------------------
diff --git a/rest-angular/src/main/java/org/apache/examples/struts/models/Order.java b/rest-angular/src/main/java/org/apache/examples/struts/models/Order.java
new file mode 100644
index 0000000..a71303f
--- /dev/null
+++ b/rest-angular/src/main/java/org/apache/examples/struts/models/Order.java
@@ -0,0 +1,86 @@
+package org.apache.examples.struts.models;
+
+import org.apache.commons.lang3.builder.EqualsBuilder;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.hibernate.validator.constraints.NotBlank;
+
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
+
+public class Order {
+
+
+ String id;
+
+ @NotBlank(message = "validation.order.client")
+ String clientName;
+
+ @Min(value = 10, message = "validation.order.amount")
+ @Max(value = 666, message = "validation.order.amount")
+ int amount;
+
+ public Order() {}
+
+ public Order(String id, String clientName, int amount) {
+ super();
+ this.id = id;
+ this.clientName = clientName;
+ this.amount = amount;
+ }
+ public int getAmount() {
+ return amount;
+ }
+ public void setAmount(int amount) {
+ this.amount = amount;
+ }
+ public String getClientName() {
+ return clientName;
+ }
+ public void setClientName(String clientName) {
+ this.clientName = clientName;
+ }
+ public String getId() {
+ return id;
+ }
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (obj == null) {
+ return false;
+ }
+ if (obj == this) {
+ return true;
+ }
+ if (obj.getClass() != getClass()) {
+ return false;
+ }
+ Order rhs = (Order) obj;
+ return new EqualsBuilder()
+ .append(this.id, rhs.id)
+ .append(this.clientName, rhs.clientName)
+ .append(this.amount, rhs.amount)
+ .isEquals();
+ }
+
+ @Override
+ public int hashCode() {
+ return new HashCodeBuilder()
+ .append(id)
+ .append(clientName)
+ .append(amount)
+ .toHashCode();
+ }
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this)
+ .append("id", id)
+ .append("clientName", clientName)
+ .append("amount", amount)
+ .toString();
+ }
+}
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/a183bf5c/rest-angular/src/main/java/org/apache/examples/struts/services/OrdersService.java
----------------------------------------------------------------------
diff --git a/rest-angular/src/main/java/org/apache/examples/struts/services/OrdersService.java b/rest-angular/src/main/java/org/apache/examples/struts/services/OrdersService.java
new file mode 100644
index 0000000..47e63aa
--- /dev/null
+++ b/rest-angular/src/main/java/org/apache/examples/struts/services/OrdersService.java
@@ -0,0 +1,41 @@
+package org.apache.examples.struts.services;
+
+import org.apache.examples.struts.models.Order;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class OrdersService {
+
+ private static Map<String,Order> orders = new HashMap<>();
+ private static int nextId = 6;
+ static {
+ orders.put("3", new Order("3", "Bob", 33));
+ orders.put("4", new Order("4", "Sarah", 44));
+ orders.put("5", new Order("5", "Jim", 66));
+ }
+
+ public Order get(String id) {
+ return orders.get(id);
+ }
+
+ public List<Order> getAll() {
+ return new ArrayList<>(orders.values());
+ }
+
+ public void save(Order order) {
+ if (order.getId() == null) {
+ order.setId(String.valueOf(nextId++));
+ }
+
+ orders.put(order.getId(), order);
+ }
+
+ public void remove(String id) {
+ orders.remove(id);
+ //throw new RuntimeException("Order remove currently not supported!");
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/a183bf5c/rest-angular/src/main/resources/exceptions_de.properties
----------------------------------------------------------------------
diff --git a/rest-angular/src/main/resources/exceptions_de.properties b/rest-angular/src/main/resources/exceptions_de.properties
new file mode 100644
index 0000000..f704e35
--- /dev/null
+++ b/rest-angular/src/main/resources/exceptions_de.properties
@@ -0,0 +1 @@
+exception.operation.not.supported = L\u00F6schen ist zur Zeit nicht unterst\u00FCtzt\!
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/a183bf5c/rest-angular/src/main/resources/exceptions_en.properties
----------------------------------------------------------------------
diff --git a/rest-angular/src/main/resources/exceptions_en.properties b/rest-angular/src/main/resources/exceptions_en.properties
new file mode 100644
index 0000000..d5cb4bf
--- /dev/null
+++ b/rest-angular/src/main/resources/exceptions_en.properties
@@ -0,0 +1 @@
+exception.operation.not.supported = Delete is currently not supported\!
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/a183bf5c/rest-angular/src/main/resources/frontend_de.properties
----------------------------------------------------------------------
diff --git a/rest-angular/src/main/resources/frontend_de.properties b/rest-angular/src/main/resources/frontend_de.properties
new file mode 100644
index 0000000..62c1066
--- /dev/null
+++ b/rest-angular/src/main/resources/frontend_de.properties
@@ -0,0 +1,16 @@
+app.name=Struts2 Bestellverwaltung
+
+orders = Bestellungen
+orders.edit = Bearbeiten
+orders.view = Ansehen
+orders.delete = L\u00F6schen
+orders.new = Neue Bestellung erstellen
+orders.back = Zur Bestell\u00FCbersicht
+
+order = Bestellung
+order.new = Neue Bestellung
+order.edit = Bearbeite Bestellung
+order.client = Kunde
+order.amount = Anzahl
+
+save = Speichern
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/a183bf5c/rest-angular/src/main/resources/frontend_en.properties
----------------------------------------------------------------------
diff --git a/rest-angular/src/main/resources/frontend_en.properties b/rest-angular/src/main/resources/frontend_en.properties
new file mode 100644
index 0000000..0ab07e4
--- /dev/null
+++ b/rest-angular/src/main/resources/frontend_en.properties
@@ -0,0 +1,16 @@
+app.name=Struts2 Order Manager
+
+orders = Orders
+orders.edit = Edit
+orders.view = View
+orders.delete = Delete
+orders.new = Create a new order
+orders.back = Back to Orders
+
+order = Order
+order.new = New Order
+order.edit = Edit Order
+order.client = Client
+order.amount = Amount
+
+save = Save
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/a183bf5c/rest-angular/src/main/resources/jshint.conf.js
----------------------------------------------------------------------
diff --git a/rest-angular/src/main/resources/jshint.conf.js b/rest-angular/src/main/resources/jshint.conf.js
new file mode 100644
index 0000000..350b03a
--- /dev/null
+++ b/rest-angular/src/main/resources/jshint.conf.js
@@ -0,0 +1,13 @@
+{
+ "maxparams": 5,
+ "indent": true,
+ "camelcase": true,
+ "eqeqeq": true,
+ "forin": true,
+ "immed": true,
+ "latedef": false,
+ "noarg": true,
+ "noempty": true,
+ "nonew": true,
+ "globals": {}
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/a183bf5c/rest-angular/src/main/resources/log4j2.xml
----------------------------------------------------------------------
diff --git a/rest-angular/src/main/resources/log4j2.xml b/rest-angular/src/main/resources/log4j2.xml
new file mode 100644
index 0000000..712b825
--- /dev/null
+++ b/rest-angular/src/main/resources/log4j2.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Configuration>
+ <Appenders>
+ <Console name="STDOUT" target="SYSTEM_OUT">
+ <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/>
+ </Console>
+ </Appenders>
+ <Loggers>
+ <Logger name="com.opensymphony.xwork2" level="debug"/>
+ <Logger name="org.apache.struts2" level="debug"/>
+ <Logger name="org.apache.examples.struts" level="debug"/>
+ <Root level="warn">
+ <AppenderRef ref="STDOUT"/>
+ </Root>
+ </Loggers>
+</Configuration>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/a183bf5c/rest-angular/src/main/resources/struts.xml
----------------------------------------------------------------------
diff --git a/rest-angular/src/main/resources/struts.xml b/rest-angular/src/main/resources/struts.xml
new file mode 100644
index 0000000..950f0f2
--- /dev/null
+++ b/rest-angular/src/main/resources/struts.xml
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE struts PUBLIC
+ "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
+ "http://struts.apache.org/dtds/struts-2.5.dtd">
+<struts>
+
+ <constant name="struts.enable.DynamicMethodInvocation" value="false"/>
+
+ <!-- Disable dev mode in productions -->
+ <constant name="struts.devMode" value="false"/>
+ <constant name="struts.handle.exception" value="false"/>
+
+ <!-- Overwrite Convention -->
+ <constant name="struts.convention.action.suffix" value="Controller"/>
+ <constant name="struts.convention.action.mapAllMatches" value="true"/>
+ <constant name="struts.convention.package.locators" value="actions"/>
+ <constant name="struts.convention.default.parent.package" value="rest-angular"/>
+ <constant name="struts.action.extension" value=",,xml,json,action"/>
+
+ <constant name="struts.custom.i18n.resources" value="frontend,validation,exceptions"/>
+
+ <constant name="struts.mapper.class" value="rest"/>
+
+ <!-- Use Jackson lib as content handler for all JSON requests -->
+ <bean type="org.apache.struts2.rest.handler.ContentTypeHandler" name="jackson" class="org.apache.struts2.rest.handler.JacksonLibHandler"/>
+ <constant name="struts.rest.handlerOverride.json" value="jackson"/>
+
+ <!-- Set to false if the json content can be returned for any kind of http method -->
+ <constant name="struts.rest.content.restrictToGET" value="false"/>
+
+ <!-- Set validation failure status code -->
+ <constant name="struts.rest.validationFailureStatusCode" value="406"/>
+
+
+ <!-- Set encoding to UTF-8, default is ISO-8859-1 -->
+ <constant name="struts.i18n.encoding" value="UTF-8"/>
+ <package name="rest-angular" extends="rest-default">
+ <default-action-ref name="index" />
+ <global-allowed-methods>index,show,create,update,destroy</global-allowed-methods>
+ </package>
+ <package name="data" extends="rest-angular" namespace="/data">
+ <interceptors>
+ <!-- See BaseDataController -->
+ <interceptor name="dataError" class="org.apache.examples.struts.interceptors.ExceptionHandlerInterceptor"/>
+ <interceptor name="beanValidation" class="org.apache.struts.beanvalidation.validation.interceptor.BeanValidationInterceptor"/>
+
+ <interceptor-stack name="dataDefaultStack">
+ <interceptor-ref name="dataError"/>
+ <interceptor-ref name="alias"/>
+ <interceptor-ref name="servletConfig"/>
+ <interceptor-ref name="messages">
+ <param name="operationMode">AUTOMATIC</param>
+ </interceptor-ref>
+ <interceptor-ref name="prepare"/>
+ <interceptor-ref name="i18n"/>
+ <interceptor-ref name="chain"/>
+ <interceptor-ref name="actionMappingParams"/>
+ <interceptor-ref name="scopedModelDriven"/>
+ <interceptor-ref name="modelDriven">
+ <param name="refreshModelBeforeResult">true</param>
+ </interceptor-ref>
+ <interceptor-ref name="fileUpload"/>
+ <interceptor-ref name="checkbox"/>
+ <interceptor-ref name="staticParams"/>
+ <interceptor-ref name="params"/>
+ <interceptor-ref name="rest" />
+ <interceptor-ref name="conversionError"/>
+ <interceptor-ref name="beanValidation">
+ <param name="excludeMethods">input,back,cancel,browse,index,show,edit,editNew</param>
+ </interceptor-ref>
+ <interceptor-ref name="restWorkflow">
+ <param name="excludeMethods">input,back,cancel,browse,index,show,edit,editNew</param>
+ </interceptor-ref>
+ </interceptor-stack>
+
+ </interceptors>
+
+ <default-interceptor-ref name="dataDefaultStack"/>
+
+ </package>
+
+</struts>
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/a183bf5c/rest-angular/src/main/resources/validation_de.properties
----------------------------------------------------------------------
diff --git a/rest-angular/src/main/resources/validation_de.properties b/rest-angular/src/main/resources/validation_de.properties
new file mode 100644
index 0000000..269740b
--- /dev/null
+++ b/rest-angular/src/main/resources/validation_de.properties
@@ -0,0 +1,2 @@
+validation.order.client = Kunden Name darf nicht leer sein
+validation.order.amount = Anzahl muss zwischen 10 und 666 sein
http://git-wip-us.apache.org/repos/asf/struts-examples/blob/a183bf5c/rest-angular/src/main/resources/validation_en.properties
----------------------------------------------------------------------
diff --git a/rest-angular/src/main/resources/validation_en.properties b/rest-angular/src/main/resources/validation_en.properties
new file mode 100644
index 0000000..a1e8e9c
--- /dev/null
+++ b/rest-angular/src/main/resources/validation_en.properties
@@ -0,0 +1,2 @@
+validation.order.client = Client name can not be blank
+validation.order.amount = Order amount needs to be between 10 and 666