@llm4ts/shell 0.17.0 → 0.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (269) hide show
  1. package/dist/Cli.d.ts +4 -0
  2. package/dist/Cli.d.ts.map +1 -1
  3. package/dist/Cli.js +69 -8
  4. package/dist/Cli.js.map +1 -1
  5. package/dist/FlowCatalog.d.ts +10 -4
  6. package/dist/FlowCatalog.d.ts.map +1 -1
  7. package/dist/FlowCatalog.js +25 -14
  8. package/dist/FlowCatalog.js.map +1 -1
  9. package/flows/epic-stories.js +1 -8
  10. package/flows/hello.js +15 -0
  11. package/flows/implement.js +1 -8
  12. package/flows/issue-pr.js +1 -8
  13. package/flows/judge-suite.js +1 -4
  14. package/flows/lib/epic-stories.js +3 -4
  15. package/flows/local.js +2 -5
  16. package/flows/modernize-bench.js +3 -12
  17. package/flows/modernize-extract.js +8 -18
  18. package/flows/modernize-implement.js +4 -15
  19. package/flows/modernize-pack-check.js +1 -8
  20. package/flows/modernize-review.js +4 -13
  21. package/flows/modernize-seed.js +3 -11
  22. package/flows/modernize-survey.js +0 -0
  23. package/flows/modernize-verify.js +5 -13
  24. package/flows/sdd.js +2 -12
  25. package/kits/j2ee-nextjs/README.md +29 -0
  26. package/kits/j2ee-nextjs/fixtures/demo-bank/RUNBOOK.md +156 -0
  27. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/PAGES.md +67 -0
  28. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/pom.xml +49 -0
  29. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/java/com/demobank/legacy/dto/AcctOvwDTO.java +58 -0
  30. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/java/com/demobank/legacy/dto/BenfDTO.java +49 -0
  31. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/java/com/demobank/legacy/dto/TrfDTO.java +70 -0
  32. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/java/com/demobank/legacy/esb/EsbAcctListService.java +53 -0
  33. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/java/com/demobank/legacy/esb/EsbBenfListService.java +58 -0
  34. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/java/com/demobank/legacy/esb/EsbBenfMaintService.java +58 -0
  35. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/java/com/demobank/legacy/esb/EsbException.java +21 -0
  36. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/java/com/demobank/legacy/esb/EsbGateway.java +44 -0
  37. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/java/com/demobank/legacy/esb/EsbTrfExecService.java +53 -0
  38. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/java/com/demobank/legacy/esb/EsbTrfValidateService.java +45 -0
  39. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/java/com/demobank/legacy/web/AccountOverviewServlet.java +90 -0
  40. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/java/com/demobank/legacy/web/BeneficiaryServlet.java +195 -0
  41. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/java/com/demobank/legacy/web/TransferDraft.java +62 -0
  42. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/java/com/demobank/legacy/web/TransferServlet.java +223 -0
  43. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/WEB-INF/web.xml +59 -0
  44. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/accountOverview.jsp +65 -0
  45. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/beneficiaryEdit.jsp +70 -0
  46. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/beneficiaryList.jsp +43 -0
  47. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/css/bank.css +132 -0
  48. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/dashboard.jsp +28 -0
  49. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/footer.jsp +8 -0
  50. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/header.jsp +22 -0
  51. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/help.jsp +32 -0
  52. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/js/jquery-1.12.4.min.js +1 -0
  53. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/js/validate.js +79 -0
  54. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/login.jsp +29 -0
  55. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/messages.jsp +34 -0
  56. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/nav.jsp +14 -0
  57. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/oldTransfer.jsp +34 -0
  58. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/profile.jsp +26 -0
  59. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/promoQ3.jsp +23 -0
  60. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/settings.jsp +34 -0
  61. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/testHarness.jsp +39 -0
  62. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/transferConfirm.jsp +35 -0
  63. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/transferStep1.jsp +73 -0
  64. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/transferStep2.jsp +40 -0
  65. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/CONTRIBUTING.md +76 -0
  66. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/README.md +46 -0
  67. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/contracts/cards.openapi.yaml +57 -0
  68. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/contracts/profile.openapi.yaml +73 -0
  69. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/eslint.config.mjs +24 -0
  70. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/next-env.d.ts +5 -0
  71. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/next.config.mjs +10 -0
  72. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/package.json +29 -0
  73. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/pnpm-lock.yaml +2895 -0
  74. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/app/cards/page.tsx +62 -0
  75. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/app/layout.tsx +41 -0
  76. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/app/page.tsx +26 -0
  77. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/app/profile/page.tsx +134 -0
  78. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/app/signed-in-badge.tsx +9 -0
  79. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/auth/AuthProvider.tsx +36 -0
  80. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/components/Button.tsx +27 -0
  81. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/components/Card.tsx +18 -0
  82. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/components/DataTable.tsx +57 -0
  83. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/components/Field.tsx +34 -0
  84. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/components/Form.tsx +70 -0
  85. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/components/PageLayout.tsx +39 -0
  86. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/components/Stepper.tsx +29 -0
  87. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/components/index.ts +19 -0
  88. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/services/cards/mock.ts +47 -0
  89. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/services/cards/port.ts +31 -0
  90. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/services/profile/mock.ts +45 -0
  91. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/services/profile/port.ts +24 -0
  92. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/services/registry.ts +20 -0
  93. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/theme/components.css +269 -0
  94. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/theme/tokens.css +38 -0
  95. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/tests/cards.page.test.tsx +81 -0
  96. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/tests/profile.page.test.tsx +87 -0
  97. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/tsconfig.json +54 -0
  98. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/vitest.config.ts +17 -0
  99. package/kits/j2ee-nextjs/fixtures/demo-bank/preflight.mjs +45 -0
  100. package/kits/j2ee-nextjs/fixtures/demo-bank/reset-demo.mjs +40 -0
  101. package/kits/j2ee-nextjs/fixtures/demo-bank/seed-legacy-j2ee.mjs +71 -0
  102. package/kits/j2ee-nextjs/fixtures/demo-bank/seed-nextjs.mjs +111 -0
  103. package/kits/j2ee-nextjs/fixtures/demo-bank/smoke-legacy-j2ee.mjs +144 -0
  104. package/kits/j2ee-nextjs/fixtures/demo-bank/smoke-nextjs.mjs +118 -0
  105. package/{flows → kits/j2ee-nextjs/flows}/convert-all.js +1 -7
  106. package/{flows → kits/j2ee-nextjs/flows}/convert-page.js +2 -6
  107. package/{flows → kits/j2ee-nextjs/flows}/lib/convert.js +6 -16
  108. package/{flows → kits/j2ee-nextjs}/packs/j2ee-nextjs-spa/pack.md +1 -1
  109. package/{flows → kits/j2ee-nextjs}/packs/jsp-bff-nextjs/pack.md +1 -1
  110. package/{flows → kits/j2ee-nextjs}/packs/jsp-nextjs/pack.md +1 -1
  111. package/kits/mainframe-java/README.md +31 -0
  112. package/{flows → kits/mainframe-java}/packs/ace-integration/pack.md +1 -1
  113. package/{flows → kits/mainframe-java}/packs/ace-kafka/pack.md +1 -1
  114. package/{flows → kits/mainframe-java}/packs/cobol-kafka/pack.md +1 -1
  115. package/{flows → kits/mainframe-java}/packs/cobol-springboot/pack.md +1 -1
  116. package/package.json +6 -6
  117. package/src/Cli.ts +92 -9
  118. package/src/FlowCatalog.ts +29 -13
  119. /package/{flows → kits/j2ee-nextjs}/packs/j2ee-nextjs-spa/patterns/PAT-J2EE-001-jstl-table.md +0 -0
  120. /package/{flows → kits/j2ee-nextjs}/packs/j2ee-nextjs-spa/patterns/PAT-J2EE-002-jquery-validation.md +0 -0
  121. /package/{flows → kits/j2ee-nextjs}/packs/j2ee-nextjs-spa/patterns/PAT-J2EE-003-session-stepper.md +0 -0
  122. /package/{flows → kits/j2ee-nextjs}/packs/j2ee-nextjs-spa/patterns/PAT-J2EE-004-esb-port.md +0 -0
  123. /package/{flows → kits/j2ee-nextjs}/packs/j2ee-nextjs-spa/patterns/PAT-J2EE-005-include-shell.md +0 -0
  124. /package/{flows → kits/j2ee-nextjs}/packs/j2ee-nextjs-spa/prompts/analysis.md +0 -0
  125. /package/{flows → kits/j2ee-nextjs}/packs/j2ee-nextjs-spa/prompts/bdd.md +0 -0
  126. /package/{flows → kits/j2ee-nextjs}/packs/j2ee-nextjs-spa/prompts/implement.md +0 -0
  127. /package/{flows → kits/j2ee-nextjs}/packs/j2ee-nextjs-spa/prompts/plan.md +0 -0
  128. /package/{flows → kits/j2ee-nextjs}/packs/j2ee-nextjs-spa/prompts/review.md +0 -0
  129. /package/{flows → kits/j2ee-nextjs}/packs/j2ee-nextjs-spa/prompts/spec.md +0 -0
  130. /package/{flows → kits/j2ee-nextjs}/packs/j2ee-nextjs-spa/prompts/survey-refine.md +0 -0
  131. /package/{flows → kits/j2ee-nextjs}/packs/j2ee-nextjs-spa/prompts/survey-triage.md +0 -0
  132. /package/{flows → kits/j2ee-nextjs}/packs/j2ee-nextjs-spa/reviewers/acl-purity.md +0 -0
  133. /package/{flows → kits/j2ee-nextjs}/packs/j2ee-nextjs-spa/reviewers/house-style.md +0 -0
  134. /package/{flows → kits/j2ee-nextjs}/packs/jsp-bff-nextjs/lessons.md +0 -0
  135. /package/{flows → kits/j2ee-nextjs}/packs/jsp-bff-nextjs/prompts/analysis.md +0 -0
  136. /package/{flows → kits/j2ee-nextjs}/packs/jsp-bff-nextjs/prompts/bdd.md +0 -0
  137. /package/{flows → kits/j2ee-nextjs}/packs/jsp-bff-nextjs/prompts/implement.md +0 -0
  138. /package/{flows → kits/j2ee-nextjs}/packs/jsp-bff-nextjs/prompts/plan.md +0 -0
  139. /package/{flows → kits/j2ee-nextjs}/packs/jsp-bff-nextjs/prompts/review.md +0 -0
  140. /package/{flows → kits/j2ee-nextjs}/packs/jsp-bff-nextjs/prompts/spec.md +0 -0
  141. /package/{flows → kits/j2ee-nextjs}/packs/jsp-bff-nextjs/prompts/survey-refine.md +0 -0
  142. /package/{flows → kits/j2ee-nextjs}/packs/jsp-bff-nextjs/prompts/survey-triage.md +0 -0
  143. /package/{flows → kits/j2ee-nextjs}/packs/jsp-bff-nextjs/reviewers/bff-boundary.md +0 -0
  144. /package/{flows/packs/ace-integration → kits/j2ee-nextjs/packs/jsp-bff-nextjs}/reviewers/traceability.md +0 -0
  145. /package/{flows → kits/j2ee-nextjs}/packs/jsp-nextjs/lessons.md +0 -0
  146. /package/{flows → kits/j2ee-nextjs}/packs/jsp-nextjs/prompts/analysis.md +0 -0
  147. /package/{flows → kits/j2ee-nextjs}/packs/jsp-nextjs/prompts/bdd.md +0 -0
  148. /package/{flows → kits/j2ee-nextjs}/packs/jsp-nextjs/prompts/implement.md +0 -0
  149. /package/{flows → kits/j2ee-nextjs}/packs/jsp-nextjs/prompts/plan.md +0 -0
  150. /package/{flows → kits/j2ee-nextjs}/packs/jsp-nextjs/prompts/review.md +0 -0
  151. /package/{flows → kits/j2ee-nextjs}/packs/jsp-nextjs/prompts/spec.md +0 -0
  152. /package/{flows → kits/j2ee-nextjs}/packs/jsp-nextjs/prompts/survey-refine.md +0 -0
  153. /package/{flows → kits/j2ee-nextjs}/packs/jsp-nextjs/prompts/survey-triage.md +0 -0
  154. /package/{flows/packs/ace-kafka → kits/j2ee-nextjs/packs/jsp-nextjs}/reviewers/traceability.md +0 -0
  155. /package/{flows → kits/j2ee-nextjs}/packs/jsp-nextjs/reviewers/ux-fidelity.md +0 -0
  156. /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/nextjs-spa/README.md +0 -0
  157. /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/nextjs-spa/app/layout.js +0 -0
  158. /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/nextjs-spa/app/page.js +0 -0
  159. /package/{flows/fixtures/scaffolds/kafka-streams-service/src/test/resources/features → kits/j2ee-nextjs/scaffolds/nextjs-spa/docs/specs}/.gitkeep +0 -0
  160. /package/{flows/fixtures/scaffolds/nextjs-spa/docs/specs → kits/j2ee-nextjs/scaffolds/nextjs-spa/features}/.gitkeep +0 -0
  161. /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/nextjs-spa/next.config.js +0 -0
  162. /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/nextjs-spa/package.json +0 -0
  163. /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/nextjs-spa/tests/smoke.test.js +0 -0
  164. /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/spring-bff/README.md +0 -0
  165. /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/spring-bff/frontend/app/layout.js +0 -0
  166. /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/spring-bff/frontend/app/page.js +0 -0
  167. /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/spring-bff/frontend/next.config.js +0 -0
  168. /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/spring-bff/frontend/package.json +0 -0
  169. /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/spring-bff/frontend/tests/smoke.test.js +0 -0
  170. /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/spring-bff/pom.xml +0 -0
  171. /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/spring-bff/scripts/test.sh +0 -0
  172. /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/spring-bff/src/main/java/com/meridian/bff/Application.java +0 -0
  173. /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/spring-bff/src/main/resources/application.yaml +0 -0
  174. /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/spring-bff/src/test/java/com/meridian/bff/ApplicationTests.java +0 -0
  175. /package/{flows/fixtures/scaffolds/nextjs-spa → kits/j2ee-nextjs/scaffolds/spring-bff/src/test/resources}/features/.gitkeep +0 -0
  176. /package/{flows → kits/mainframe-java}/packs/ace-integration/lessons.md +0 -0
  177. /package/{flows → kits/mainframe-java}/packs/ace-integration/prompts/analysis.md +0 -0
  178. /package/{flows → kits/mainframe-java}/packs/ace-integration/prompts/bdd.md +0 -0
  179. /package/{flows → kits/mainframe-java}/packs/ace-integration/prompts/implement.md +0 -0
  180. /package/{flows → kits/mainframe-java}/packs/ace-integration/prompts/plan.md +0 -0
  181. /package/{flows → kits/mainframe-java}/packs/ace-integration/prompts/review.md +0 -0
  182. /package/{flows → kits/mainframe-java}/packs/ace-integration/prompts/spec.md +0 -0
  183. /package/{flows → kits/mainframe-java}/packs/ace-integration/reviewers/routing-fidelity.md +0 -0
  184. /package/{flows/packs/cobol-kafka → kits/mainframe-java/packs/ace-integration}/reviewers/traceability.md +0 -0
  185. /package/{flows → kits/mainframe-java}/packs/ace-kafka/lessons.md +0 -0
  186. /package/{flows → kits/mainframe-java}/packs/ace-kafka/prompts/analysis.md +0 -0
  187. /package/{flows → kits/mainframe-java}/packs/ace-kafka/prompts/bdd.md +0 -0
  188. /package/{flows → kits/mainframe-java}/packs/ace-kafka/prompts/implement.md +0 -0
  189. /package/{flows → kits/mainframe-java}/packs/ace-kafka/prompts/plan.md +0 -0
  190. /package/{flows → kits/mainframe-java}/packs/ace-kafka/prompts/review.md +0 -0
  191. /package/{flows → kits/mainframe-java}/packs/ace-kafka/prompts/spec.md +0 -0
  192. /package/{flows → kits/mainframe-java}/packs/ace-kafka/prompts/vectors.md +0 -0
  193. /package/{flows → kits/mainframe-java}/packs/ace-kafka/reviewers/event-contracts.md +0 -0
  194. /package/{flows → kits/mainframe-java}/packs/ace-kafka/reviewers/routing-fidelity.md +0 -0
  195. /package/{flows/packs/cobol-springboot → kits/mainframe-java/packs/ace-kafka}/reviewers/traceability.md +0 -0
  196. /package/{flows → kits/mainframe-java}/packs/cobol-kafka/lessons.md +0 -0
  197. /package/{flows → kits/mainframe-java}/packs/cobol-kafka/patterns/PAT-STREAM-001-record-to-event.md +0 -0
  198. /package/{flows → kits/mainframe-java}/packs/cobol-kafka/patterns/PAT-STREAM-002-job-step-topology.md +0 -0
  199. /package/{flows → kits/mainframe-java}/packs/cobol-kafka/patterns/PAT-STREAM-003-checkpoint-idempotence.md +0 -0
  200. /package/{flows → kits/mainframe-java}/packs/cobol-kafka/patterns/PAT-STREAM-004-eod-totals-window.md +0 -0
  201. /package/{flows → kits/mainframe-java}/packs/cobol-kafka/patterns/PAT-STREAM-005-reject-topic.md +0 -0
  202. /package/{flows → kits/mainframe-java}/packs/cobol-kafka/patterns/PAT-STREAM-006-keyed-state-store.md +0 -0
  203. /package/{flows → kits/mainframe-java}/packs/cobol-kafka/patterns/PAT-STREAM-007-outbox.md +0 -0
  204. /package/{flows → kits/mainframe-java}/packs/cobol-kafka/patterns/PAT-STREAM-008-partition-key.md +0 -0
  205. /package/{flows → kits/mainframe-java}/packs/cobol-kafka/patterns/PAT-STREAM-009-batch-window-cutoff.md +0 -0
  206. /package/{flows → kits/mainframe-java}/packs/cobol-kafka/patterns/PAT-STREAM-010-replay-backfill.md +0 -0
  207. /package/{flows → kits/mainframe-java}/packs/cobol-kafka/prompts/analysis.md +0 -0
  208. /package/{flows → kits/mainframe-java}/packs/cobol-kafka/prompts/bdd.md +0 -0
  209. /package/{flows → kits/mainframe-java}/packs/cobol-kafka/prompts/implement.md +0 -0
  210. /package/{flows → kits/mainframe-java}/packs/cobol-kafka/prompts/plan.md +0 -0
  211. /package/{flows → kits/mainframe-java}/packs/cobol-kafka/prompts/review.md +0 -0
  212. /package/{flows → kits/mainframe-java}/packs/cobol-kafka/prompts/spec.md +0 -0
  213. /package/{flows → kits/mainframe-java}/packs/cobol-kafka/prompts/survey-refine.md +0 -0
  214. /package/{flows → kits/mainframe-java}/packs/cobol-kafka/prompts/survey-triage.md +0 -0
  215. /package/{flows → kits/mainframe-java}/packs/cobol-kafka/prompts/vectors.md +0 -0
  216. /package/{flows → kits/mainframe-java}/packs/cobol-kafka/reviewers/cobol-fidelity.md +0 -0
  217. /package/{flows → kits/mainframe-java}/packs/cobol-kafka/reviewers/pattern-conformance.md +0 -0
  218. /package/{flows/packs/jsp-bff-nextjs → kits/mainframe-java/packs/cobol-kafka}/reviewers/traceability.md +0 -0
  219. /package/{flows → kits/mainframe-java}/packs/cobol-springboot/lessons.md +0 -0
  220. /package/{flows → kits/mainframe-java}/packs/cobol-springboot/prompts/analysis.md +0 -0
  221. /package/{flows → kits/mainframe-java}/packs/cobol-springboot/prompts/bdd.md +0 -0
  222. /package/{flows → kits/mainframe-java}/packs/cobol-springboot/prompts/implement.md +0 -0
  223. /package/{flows → kits/mainframe-java}/packs/cobol-springboot/prompts/plan.md +0 -0
  224. /package/{flows → kits/mainframe-java}/packs/cobol-springboot/prompts/review.md +0 -0
  225. /package/{flows → kits/mainframe-java}/packs/cobol-springboot/prompts/spec.md +0 -0
  226. /package/{flows → kits/mainframe-java}/packs/cobol-springboot/prompts/survey-refine.md +0 -0
  227. /package/{flows → kits/mainframe-java}/packs/cobol-springboot/prompts/survey-triage.md +0 -0
  228. /package/{flows → kits/mainframe-java}/packs/cobol-springboot/prompts/vectors.md +0 -0
  229. /package/{flows → kits/mainframe-java}/packs/cobol-springboot/reviewers/cobol-fidelity.md +0 -0
  230. /package/{flows → kits/mainframe-java}/packs/cobol-springboot/reviewers/pattern-conformance.md +0 -0
  231. /package/{flows/packs/jsp-nextjs → kits/mainframe-java/packs/cobol-springboot}/reviewers/traceability.md +0 -0
  232. /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-001-comp3-money.md +0 -0
  233. /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-002-redefines.md +0 -0
  234. /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-003-88-levels.md +0 -0
  235. /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-004-perform-thru.md +0 -0
  236. /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-005-file-status.md +0 -0
  237. /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-006-sqlcode.md +0 -0
  238. /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-007-validation-order.md +0 -0
  239. /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-008-zoned-decimal.md +0 -0
  240. /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-009-occurs-table.md +0 -0
  241. /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-010-copybook-record.md +0 -0
  242. /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-011-batch-counters.md +0 -0
  243. /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-012-commit-frequency.md +0 -0
  244. /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-013-abend.md +0 -0
  245. /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-014-reject-file.md +0 -0
  246. /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-015-accept-date.md +0 -0
  247. /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-016-string-building.md +0 -0
  248. /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-017-cursor-loop.md +0 -0
  249. /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-018-yn-switches.md +0 -0
  250. /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-019-shared-accumulators.md +0 -0
  251. /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-020-tiered-fees.md +0 -0
  252. /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-021-overdraft-floor.md +0 -0
  253. /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-022-jcl-job-net.md +0 -0
  254. /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-023-sort-step.md +0 -0
  255. /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-024-fixed-width-records.md +0 -0
  256. /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-025-audit-rows.md +0 -0
  257. /package/{flows/fixtures → kits/mainframe-java}/scaffolds/kafka-streams-service/README.md +0 -0
  258. /package/{flows/fixtures → kits/mainframe-java}/scaffolds/kafka-streams-service/pom.xml +0 -0
  259. /package/{flows/fixtures → kits/mainframe-java}/scaffolds/kafka-streams-service/scripts/replay.sh +0 -0
  260. /package/{flows/fixtures → kits/mainframe-java}/scaffolds/kafka-streams-service/src/main/java/com/meridian/scaffold/Application.java +0 -0
  261. /package/{flows/fixtures → kits/mainframe-java}/scaffolds/kafka-streams-service/src/test/java/com/meridian/scaffold/ApplicationTests.java +0 -0
  262. /package/{flows/fixtures/scaffolds/spring-bff → kits/mainframe-java/scaffolds/kafka-streams-service}/src/test/resources/features/.gitkeep +0 -0
  263. /package/{flows/fixtures → kits/mainframe-java}/scaffolds/spring-boot-service/README.md +0 -0
  264. /package/{flows/fixtures → kits/mainframe-java}/scaffolds/spring-boot-service/pom.xml +0 -0
  265. /package/{flows/fixtures → kits/mainframe-java}/scaffolds/spring-boot-service/scripts/replay.sh +0 -0
  266. /package/{flows/fixtures → kits/mainframe-java}/scaffolds/spring-boot-service/src/main/java/com/meridian/scaffold/Application.java +0 -0
  267. /package/{flows/fixtures → kits/mainframe-java}/scaffolds/spring-boot-service/src/main/resources/application.yaml +0 -0
  268. /package/{flows/fixtures → kits/mainframe-java}/scaffolds/spring-boot-service/src/test/java/com/meridian/scaffold/ApplicationTests.java +0 -0
  269. /package/{flows/fixtures → kits/mainframe-java}/scaffolds/spring-boot-service/src/test/resources/features/.gitkeep +0 -0
@@ -0,0 +1,223 @@
1
+ package com.demobank.legacy.web;
2
+
3
+ import java.io.IOException;
4
+ import java.math.BigDecimal;
5
+ import java.util.List;
6
+
7
+ import javax.servlet.RequestDispatcher;
8
+ import javax.servlet.ServletException;
9
+ import javax.servlet.http.HttpServlet;
10
+ import javax.servlet.http.HttpServletRequest;
11
+ import javax.servlet.http.HttpServletResponse;
12
+ import javax.servlet.http.HttpSession;
13
+
14
+ import com.demobank.legacy.dto.BenfDTO;
15
+ import com.demobank.legacy.dto.TrfDTO;
16
+ import com.demobank.legacy.esb.EsbBenfListService;
17
+ import com.demobank.legacy.esb.EsbException;
18
+ import com.demobank.legacy.esb.EsbTrfExecService;
19
+ import com.demobank.legacy.esb.EsbTrfValidateService;
20
+
21
+ /**
22
+ * HERO 3 controller. Mapped on /transfer. Drives the 3-step wizard and
23
+ * keeps the in-flight TransferDraft in HttpSession ("trfDraft") -- the
24
+ * hardest conversion case in the fixture.
25
+ *
26
+ * GET /transfer -> start (or resume) at step 1; loads the
27
+ * beneficiary combo via ESB_BENF_LIST
28
+ * POST step=1 -> parse + validate entry, store draft in
29
+ * session, ESB_TRF_VAL, forward to step 2
30
+ * POST step=3 -> ESB_TRF_EXEC with the session draft, clear
31
+ * the draft, forward to confirmation
32
+ *
33
+ * (There is no POST step=2: the review page holds no fields, it re-posts
34
+ * only the confirmation. Numbering kept for the ops runbook.)
35
+ *
36
+ * ESB dependencies: ESB_BENF_LIST, ESB_TRF_VAL, ESB_TRF_EXEC.
37
+ */
38
+ public class TransferServlet extends HttpServlet {
39
+
40
+ private static final long serialVersionUID = 1L;
41
+
42
+ private final EsbBenfListService benfListService = new EsbBenfListService();
43
+ private final EsbTrfValidateService validateService = new EsbTrfValidateService();
44
+ private final EsbTrfExecService execService = new EsbTrfExecService();
45
+
46
+ protected void doGet(HttpServletRequest request, HttpServletResponse response)
47
+ throws ServletException, IOException {
48
+ // Entry point and "Back" target: always renders step 1, keeping any
49
+ // draft already in session so the fields come back pre-filled.
50
+ renderStep1(request, response, null);
51
+ }
52
+
53
+ protected void doPost(HttpServletRequest request, HttpServletResponse response)
54
+ throws ServletException, IOException {
55
+
56
+ String step = request.getParameter("step");
57
+ if ("1".equals(step)) {
58
+ handleStep1(request, response);
59
+ } else if ("3".equals(step)) {
60
+ handleStep3(request, response);
61
+ } else {
62
+ // Unknown step: restart the wizard (legacy catch-all).
63
+ response.sendRedirect("transfer");
64
+ }
65
+ }
66
+
67
+ /** Parse the entry form, ESB-validate, park the draft in session. */
68
+ private void handleStep1(HttpServletRequest request, HttpServletResponse response)
69
+ throws ServletException, IOException {
70
+
71
+ HttpSession session = request.getSession(true);
72
+ String custId = custId(session);
73
+
74
+ String benfId = trim(request.getParameter("benfId"));
75
+ String amtRaw = trim(request.getParameter("trfAmt"));
76
+
77
+ if (isEmpty(benfId) || isEmpty(amtRaw)) {
78
+ renderStep1(request, response, "Beneficiary and amount are required.");
79
+ return;
80
+ }
81
+
82
+ BigDecimal amt;
83
+ try {
84
+ // Server accepts the dot only; the client tolerates a comma and
85
+ // rewrites it -- known mismatch DB-3302, users with JS disabled
86
+ // hit this branch.
87
+ amt = new BigDecimal(amtRaw);
88
+ } catch (NumberFormatException e) {
89
+ renderStep1(request, response, "Amount format not valid (use 1234.56).");
90
+ return;
91
+ }
92
+ if (amt.compareTo(BigDecimal.ZERO) <= 0 || amt.scale() > 2) {
93
+ renderStep1(request, response, "Amount must be positive with max 2 decimals.");
94
+ return;
95
+ }
96
+
97
+ TransferDraft draft = new TransferDraft();
98
+ draft.setBenfId(benfId);
99
+ draft.setTrfAmt(amt);
100
+ draft.setTrfCcy("EUR"); // only EUR online, combo is decorative
101
+ draft.setTrfDesc(sanitizeDesc(request.getParameter("trfDesc")));
102
+ draft.setValDt(trim(request.getParameter("valDt")));
103
+
104
+ try {
105
+ BenfDTO benf = benfListService.getBeneficiary(custId, benfId);
106
+ if (benf == null) {
107
+ renderStep1(request, response, "Selected beneficiary no longer exists.");
108
+ return;
109
+ }
110
+ draft.setBenfNm(benf.getBenfNm());
111
+ draft.setBenfIban(benf.getBenfIban());
112
+
113
+ String rc = validateService.validate(custId, draft);
114
+ if (!"0000".equals(rc)) {
115
+ renderStep1(request, response, validationMessage(rc));
116
+ return;
117
+ }
118
+ // Real portal: VAL-TOKEN comes back inside ESB_TRF_VAL response;
119
+ // wrapper keeps it on the draft via this setter since rel. 2.5.
120
+ if (draft.getValToken() == null) {
121
+ draft.setValToken("VT-" + session.getId());
122
+ }
123
+ } catch (EsbException e) {
124
+ renderStep1(request, response,
125
+ "Service temporarily unavailable, please retry (rc " + e.getEsbRc() + ").");
126
+ return;
127
+ }
128
+
129
+ // Park the draft for step 2/3. THE session attribute of this app.
130
+ session.setAttribute("trfDraft", draft);
131
+
132
+ request.setAttribute("draft", draft);
133
+ forward(request, response, "/transferStep2.jsp");
134
+ }
135
+
136
+ /** Execute against the host using the session draft, then clear it. */
137
+ private void handleStep3(HttpServletRequest request, HttpServletResponse response)
138
+ throws ServletException, IOException {
139
+
140
+ HttpSession session = request.getSession(true);
141
+ TransferDraft draft = (TransferDraft) session.getAttribute("trfDraft");
142
+ if (draft == null) {
143
+ // Session expired between review and confirm: restart.
144
+ response.sendRedirect("transfer");
145
+ return;
146
+ }
147
+
148
+ TrfDTO res;
149
+ try {
150
+ res = execService.execute(custId(session), draft);
151
+ } catch (EsbException e) {
152
+ res = new TrfDTO();
153
+ res.setStatus("KO");
154
+ res.setHostRc(e.getEsbRc());
155
+ res.setHostMsg("HOST UNREACHABLE - TRANSFER NOT EXECUTED");
156
+ }
157
+
158
+ // Draft must not survive execution (double-submit guard is host-side
159
+ // via VAL-TOKEN, but keep the session clean anyway).
160
+ session.removeAttribute("trfDraft");
161
+
162
+ request.setAttribute("trfRes", res);
163
+ forward(request, response, "/transferConfirm.jsp");
164
+ }
165
+
166
+ private void renderStep1(HttpServletRequest request, HttpServletResponse response,
167
+ String stepErr) throws ServletException, IOException {
168
+
169
+ HttpSession session = request.getSession(true);
170
+ try {
171
+ List combo = benfListService.listBeneficiaries(custId(session));
172
+ request.setAttribute("benfCombo", combo);
173
+ } catch (EsbException e) {
174
+ request.setAttribute("benfCombo", new java.util.ArrayList());
175
+ }
176
+ // Pre-fill from any draft still in session (Back from review).
177
+ TransferDraft draft = (TransferDraft) session.getAttribute("trfDraft");
178
+ if (draft != null) {
179
+ request.setAttribute("draft", draft);
180
+ }
181
+ if (stepErr != null) {
182
+ request.setAttribute("stepErr", stepErr);
183
+ }
184
+ forward(request, response, "/transferStep1.jsp");
185
+ }
186
+
187
+ /** Host charset is restrictive; strip what SEPA remittance rejects. */
188
+ private String sanitizeDesc(String desc) {
189
+ if (desc == null) return null;
190
+ String cleaned = desc.replaceAll("[^A-Za-z0-9 .,/()-]", " ").trim();
191
+ return cleaned.length() > 140 ? cleaned.substring(0, 140) : cleaned;
192
+ }
193
+
194
+ private String validationMessage(String rc) {
195
+ if ("0201".equals(rc)) return "Insufficient available balance.";
196
+ if ("0205".equals(rc)) return "Daily online transfer limit exceeded (EUR 5,000.00).";
197
+ if ("0207".equals(rc)) return "Transfer refused by compliance screening.";
198
+ return "Transfer refused by the bank host (code " + rc + ").";
199
+ }
200
+
201
+ private void forward(HttpServletRequest request, HttpServletResponse response,
202
+ String jsp) throws ServletException, IOException {
203
+ RequestDispatcher rd = request.getRequestDispatcher(jsp);
204
+ rd.forward(request, response);
205
+ }
206
+
207
+ private String custId(HttpSession session) {
208
+ String custId = (String) session.getAttribute("custId");
209
+ if (custId == null) {
210
+ custId = "CUST0042";
211
+ session.setAttribute("custId", custId);
212
+ }
213
+ return custId;
214
+ }
215
+
216
+ private String trim(String s) {
217
+ return s == null ? null : s.trim();
218
+ }
219
+
220
+ private boolean isEmpty(String s) {
221
+ return s == null || s.trim().length() == 0;
222
+ }
223
+ }
@@ -0,0 +1,59 @@
1
+ <?xml version="1.0" encoding="ISO-8859-1"?>
2
+ <web-app xmlns="http://java.sun.com/xml/ns/javaee"
3
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
+ xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
5
+ http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
6
+ version="2.5">
7
+
8
+ <display-name>DemoBank Internet Banking Portal</display-name>
9
+
10
+ <context-param>
11
+ <param-name>demobank.esb.endpoint</param-name>
12
+ <param-value>http://esb-gw.internal.demobank.example:7801/esb/router</param-value>
13
+ </context-param>
14
+ <context-param>
15
+ <param-name>demobank.esb.timeoutMs</param-name>
16
+ <param-value>12000</param-value>
17
+ </context-param>
18
+
19
+ <servlet>
20
+ <servlet-name>AccountOverviewServlet</servlet-name>
21
+ <servlet-class>com.demobank.legacy.web.AccountOverviewServlet</servlet-class>
22
+ </servlet>
23
+ <servlet-mapping>
24
+ <servlet-name>AccountOverviewServlet</servlet-name>
25
+ <url-pattern>/accountOverview</url-pattern>
26
+ </servlet-mapping>
27
+
28
+ <servlet>
29
+ <servlet-name>BeneficiaryServlet</servlet-name>
30
+ <servlet-class>com.demobank.legacy.web.BeneficiaryServlet</servlet-class>
31
+ </servlet>
32
+ <servlet-mapping>
33
+ <servlet-name>BeneficiaryServlet</servlet-name>
34
+ <url-pattern>/beneficiary</url-pattern>
35
+ </servlet-mapping>
36
+
37
+ <servlet>
38
+ <servlet-name>TransferServlet</servlet-name>
39
+ <servlet-class>com.demobank.legacy.web.TransferServlet</servlet-class>
40
+ </servlet>
41
+ <servlet-mapping>
42
+ <servlet-name>TransferServlet</servlet-name>
43
+ <url-pattern>/transfer</url-pattern>
44
+ </servlet-mapping>
45
+
46
+ <session-config>
47
+ <session-timeout>10</session-timeout>
48
+ </session-config>
49
+
50
+ <welcome-file-list>
51
+ <welcome-file>login.jsp</welcome-file>
52
+ </welcome-file-list>
53
+
54
+ <error-page>
55
+ <error-code>500</error-code>
56
+ <location>/help.jsp</location>
57
+ </error-page>
58
+
59
+ </web-app>
@@ -0,0 +1,65 @@
1
+ <%@ page contentType="text/html; charset=ISO-8859-1" %>
2
+ <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
3
+ <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
4
+ <%-- HERO 1: account overview. Server-rendered from AccountOverviewServlet
5
+ ("accts" request attribute, list of AcctOvwDTO) plus an AJAX refresh
6
+ that re-reads balances as JSON. --%>
7
+ <jsp:include page="header.jsp" />
8
+
9
+ <h1>Account Overview</h1>
10
+ <p>Position as of <c:out value="${asOfTs}" /> &nbsp;
11
+ <input type="button" id="btnRefresh" class="btn" value="Refresh balances" />
12
+ <span id="refreshMsg"></span>
13
+ </p>
14
+
15
+ <table class="data" id="acctTable">
16
+ <tr>
17
+ <th>Account</th>
18
+ <th>Description</th>
19
+ <th>Ccy</th>
20
+ <th class="num">Current balance</th>
21
+ <th class="num">Available balance</th>
22
+ </tr>
23
+ <c:forEach var="a" items="${accts}" varStatus="st">
24
+ <tr class="${st.index % 2 == 1 ? 'odd' : ''}">
25
+ <td><c:out value="${a.acctNo}" /></td>
26
+ <td><c:out value="${a.acctDesc}" /></td>
27
+ <td><c:out value="${a.ccyCd}" /></td>
28
+ <td class="num curBal"><fmt:formatNumber value="${a.curBal}" minFractionDigits="2" maxFractionDigits="2" /></td>
29
+ <td class="num avlBal"><fmt:formatNumber value="${a.avlBal}" minFractionDigits="2" maxFractionDigits="2" /></td>
30
+ </tr>
31
+ </c:forEach>
32
+ <c:if test="${empty accts}">
33
+ <tr><td colspan="5">No accounts found for customer.</td></tr>
34
+ </c:if>
35
+ </table>
36
+
37
+ <script type="text/javascript">
38
+ $(document).ready(function() {
39
+ $("#btnRefresh").click(function() {
40
+ $("#refreshMsg").text("Refreshing...");
41
+ $.ajax({
42
+ url: "accountOverview",
43
+ type: "GET",
44
+ data: { fmt: "json" },
45
+ dataType: "json",
46
+ cache: false,
47
+ success: function(data) {
48
+ // Row order from the ESB matches the rendered table (host keeps
49
+ // acct order stable per customer), so update positionally.
50
+ var rows = $("#acctTable tr").not(":first");
51
+ for (var i = 0; i < data.accts.length && i < rows.length; i++) {
52
+ $(rows[i]).find("td.curBal").text(data.accts[i].curBal);
53
+ $(rows[i]).find("td.avlBal").text(data.accts[i].avlBal);
54
+ }
55
+ $("#refreshMsg").text("Updated " + data.asOfTs).removeClass("msgErr").addClass("msgOk");
56
+ },
57
+ error: function() {
58
+ $("#refreshMsg").text("Refresh failed, please retry.").removeClass("msgOk").addClass("msgErr");
59
+ }
60
+ });
61
+ });
62
+ });
63
+ </script>
64
+
65
+ <jsp:include page="footer.jsp" />
@@ -0,0 +1,70 @@
1
+ <%@ page contentType="text/html; charset=ISO-8859-1" %>
2
+ <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
3
+ <%-- HERO 2 (form): add/edit beneficiary. Client-side jQuery validation
4
+ (inline + validate.js) AND server-side validation in BeneficiaryServlet.
5
+ The two rule sets overlap but are NOT identical on purpose:
6
+ - client allows 70 chars for name, server allows 60 (DB-2988)
7
+ - client IBAN check is shape-only, server also checks country IT/DE/FR
8
+ - client tolerates decimal comma, server does not (DB-3302 pattern)
9
+ "benf" request attribute holds the BenfDTO being edited (may be new). --%>
10
+ <jsp:include page="header.jsp" />
11
+
12
+ <h1><c:choose><c:when test="${empty benf.benfId}">Add beneficiary</c:when><c:otherwise>Edit beneficiary</c:otherwise></c:choose></h1>
13
+
14
+ <c:if test="${not empty srvErrs}">
15
+ <ul>
16
+ <c:forEach var="e" items="${srvErrs}">
17
+ <li class="msgErr"><c:out value="${e}" /></li>
18
+ </c:forEach>
19
+ </ul>
20
+ </c:if>
21
+
22
+ <form id="benfForm" class="legacy" method="post" action="beneficiary">
23
+ <input type="hidden" name="benfId" value="<c:out value='${benf.benfId}' />" />
24
+ <div class="row">
25
+ <label for="benfNm">Beneficiary name</label>
26
+ <input type="text" id="benfNm" name="benfNm" size="50" maxlength="70"
27
+ value="<c:out value='${benf.benfNm}' />" />
28
+ </div>
29
+ <div class="row">
30
+ <label for="benfIban">IBAN</label>
31
+ <input type="text" id="benfIban" name="benfIban" size="40"
32
+ value="<c:out value='${benf.benfIban}' />" />
33
+ </div>
34
+ <div class="row">
35
+ <label for="bankNm">Bank name</label>
36
+ <input type="text" id="bankNm" name="bankNm" size="40"
37
+ value="<c:out value='${benf.bankNm}' />" />
38
+ </div>
39
+ <div class="row">
40
+ <label for="ccyCd">Currency</label>
41
+ <select id="ccyCd" name="ccyCd">
42
+ <option value="EUR" <c:if test="${benf.ccyCd == 'EUR'}">selected="selected"</c:if>>EUR</option>
43
+ <option value="USD" <c:if test="${benf.ccyCd == 'USD'}">selected="selected"</c:if>>USD</option>
44
+ <option value="GBP" <c:if test="${benf.ccyCd == 'GBP'}">selected="selected"</c:if>>GBP</option>
45
+ </select>
46
+ </div>
47
+ <div class="row">
48
+ <input type="submit" class="btn" value="Save" />
49
+ <input type="button" class="btn btnGrey" value="Cancel"
50
+ onclick="window.location='beneficiary';" />
51
+ </div>
52
+ </form>
53
+
54
+ <script type="text/javascript">
55
+ $(document).ready(function() {
56
+ $("#benfForm").submit(function() {
57
+ var ok = true;
58
+ // NB: client allows up to 70 chars, the host field is CHAR(60) --
59
+ // servlet rejects instead of truncating. Kept as-is since 2011, see DB-2988.
60
+ if (!dbRequired("#benfNm", "Beneficiary name is required")) ok = false;
61
+ else if (!dbMaxLen("#benfNm", 70)) ok = false;
62
+ if (!dbRequired("#benfIban", "IBAN is required")) ok = false;
63
+ else if (!dbIbanShape("#benfIban")) ok = false;
64
+ // bankNm optional on the client; server requires it for non-EUR.
65
+ return ok;
66
+ });
67
+ });
68
+ </script>
69
+
70
+ <jsp:include page="footer.jsp" />
@@ -0,0 +1,43 @@
1
+ <%@ page contentType="text/html; charset=ISO-8859-1" %>
2
+ <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
3
+ <%-- HERO 2 (list): beneficiary management. Rendered by BeneficiaryServlet
4
+ with "benfList" (list of BenfDTO). Delete goes back through the same
5
+ servlet with action=delete. --%>
6
+ <jsp:include page="header.jsp" />
7
+
8
+ <h1>Beneficiaries</h1>
9
+
10
+ <c:if test="${not empty flashMsg}">
11
+ <p class="msgOk"><c:out value="${flashMsg}" /></p>
12
+ </c:if>
13
+
14
+ <p><a class="btn" href="beneficiary?action=new">Add beneficiary</a></p>
15
+
16
+ <table class="data">
17
+ <tr>
18
+ <th>Name</th>
19
+ <th>IBAN</th>
20
+ <th>Bank</th>
21
+ <th>Ccy</th>
22
+ <th>Actions</th>
23
+ </tr>
24
+ <c:forEach var="b" items="${benfList}" varStatus="st">
25
+ <tr class="${st.index % 2 == 1 ? 'odd' : ''}">
26
+ <td><c:out value="${b.benfNm}" /></td>
27
+ <td><c:out value="${b.benfIban}" /></td>
28
+ <td><c:out value="${b.bankNm}" /></td>
29
+ <td><c:out value="${b.ccyCd}" /></td>
30
+ <td>
31
+ <a href="beneficiary?action=edit&amp;benfId=${b.benfId}">Edit</a>
32
+ &nbsp;
33
+ <a href="beneficiary?action=delete&amp;benfId=${b.benfId}"
34
+ onclick="return confirm('Delete beneficiary ${b.benfNm}?');">Delete</a>
35
+ </td>
36
+ </tr>
37
+ </c:forEach>
38
+ <c:if test="${empty benfList}">
39
+ <tr><td colspan="5">No beneficiaries registered.</td></tr>
40
+ </c:if>
41
+ </table>
42
+
43
+ <jsp:include page="footer.jsp" />
@@ -0,0 +1,132 @@
1
+ /* DemoBank portal stylesheet. Grown organically since 2005 -- beware. */
2
+
3
+ body {
4
+ margin: 0;
5
+ padding: 0;
6
+ font-family: Verdana, Arial, Helvetica, sans-serif;
7
+ font-size: 11px;
8
+ background-color: #eef2f5;
9
+ color: #222222;
10
+ }
11
+
12
+ #topbar {
13
+ background-color: #003b6f;
14
+ color: #ffffff;
15
+ padding: 8px 14px;
16
+ }
17
+ #topbar .logo {
18
+ font-size: 18px;
19
+ font-weight: bold;
20
+ letter-spacing: 1px;
21
+ }
22
+ #topbar .userbox {
23
+ float: right;
24
+ padding-top: 4px;
25
+ }
26
+ #topbar a {
27
+ color: #ffd24d;
28
+ }
29
+
30
+ #nav {
31
+ background-color: #0d5ca3;
32
+ }
33
+ #nav ul {
34
+ margin: 0;
35
+ padding: 0 10px;
36
+ list-style: none;
37
+ }
38
+ #nav li {
39
+ display: inline;
40
+ }
41
+ #nav a {
42
+ display: inline-block;
43
+ padding: 6px 12px;
44
+ color: #ffffff;
45
+ text-decoration: none;
46
+ }
47
+ #nav a:hover {
48
+ background-color: #1470c4;
49
+ }
50
+
51
+ #content {
52
+ padding: 16px;
53
+ min-height: 380px;
54
+ }
55
+
56
+ #footer {
57
+ border-top: 1px solid #b8c4ce;
58
+ padding: 8px 14px;
59
+ color: #667788;
60
+ }
61
+ #footer .small {
62
+ font-size: 9px;
63
+ }
64
+
65
+ h1 {
66
+ font-size: 16px;
67
+ color: #003b6f;
68
+ }
69
+ h2 {
70
+ font-size: 13px;
71
+ color: #0d5ca3;
72
+ }
73
+
74
+ table.data {
75
+ border-collapse: collapse;
76
+ width: 100%;
77
+ background-color: #ffffff;
78
+ }
79
+ table.data th {
80
+ background-color: #d7e3ee;
81
+ text-align: left;
82
+ padding: 4px 8px;
83
+ border: 1px solid #b8c4ce;
84
+ }
85
+ table.data td {
86
+ padding: 4px 8px;
87
+ border: 1px solid #d0d8e0;
88
+ }
89
+ table.data tr.odd {
90
+ background-color: #f4f8fb;
91
+ }
92
+ td.num,
93
+ th.num {
94
+ text-align: right;
95
+ }
96
+
97
+ .btn {
98
+ background-color: #0d5ca3;
99
+ color: #ffffff;
100
+ border: 1px solid #003b6f;
101
+ padding: 3px 12px;
102
+ cursor: pointer;
103
+ }
104
+ .btnGrey {
105
+ background-color: #8899aa;
106
+ border-color: #667788;
107
+ }
108
+
109
+ .fldErr {
110
+ border: 1px solid #cc0000;
111
+ background-color: #fff2f2;
112
+ }
113
+ .errMsg {
114
+ color: #cc0000;
115
+ padding-left: 6px;
116
+ }
117
+ .msgOk {
118
+ color: #1a7a1a;
119
+ font-weight: bold;
120
+ }
121
+ .msgErr {
122
+ color: #cc0000;
123
+ font-weight: bold;
124
+ }
125
+
126
+ form.legacy label {
127
+ display: inline-block;
128
+ width: 160px;
129
+ }
130
+ form.legacy .row {
131
+ margin-bottom: 6px;
132
+ }
@@ -0,0 +1,28 @@
1
+ <%@ page contentType="text/html; charset=ISO-8859-1" %>
2
+ <%@ page import="java.text.SimpleDateFormat" %>
3
+ <%@ page import="java.util.Date" %>
4
+ <%-- Landing page after login (filler). Scriptlet date banner is original
5
+ 2006 code, do not convert to JSTL (breaks the branch kiosk build?). --%>
6
+ <jsp:include page="header.jsp" />
7
+
8
+ <%
9
+ SimpleDateFormat sdf = new SimpleDateFormat("EEEE dd MMMM yyyy");
10
+ String today = sdf.format(new Date());
11
+ %>
12
+ <h1>Welcome to DemoBank</h1>
13
+ <p>Today is <%= today %>. Your last access was on your previous visit.</p>
14
+
15
+ <h2>Quick links</h2>
16
+ <ul>
17
+ <li><a href="accountOverview">Account overview</a></li>
18
+ <li><a href="transfer">Make a wire transfer</a></li>
19
+ <li><a href="beneficiary">Manage beneficiaries</a></li>
20
+ </ul>
21
+
22
+ <h2>Notices</h2>
23
+ <p>
24
+ Scheduled maintenance every Sunday 02:00-05:00 CET. During this window
25
+ balances may be temporarily unavailable.
26
+ </p>
27
+
28
+ <jsp:include page="footer.jsp" />
@@ -0,0 +1,8 @@
1
+ <%@ page contentType="text/html; charset=ISO-8859-1" %>
2
+ </div><%-- /content --%>
3
+ <div id="footer">
4
+ <p>DemoBank S.p.A. - Fictional demo institution. Internet Banking Portal v2.7</p>
5
+ <p class="small">For assistance call 800 000 000 (Mon-Fri 8:00-20:00). &copy; 2005-2013 DemoBank.</p>
6
+ </div>
7
+ </body>
8
+ </html>
@@ -0,0 +1,22 @@
1
+ <%@ page contentType="text/html; charset=ISO-8859-1" %>
2
+ <%-- DemoBank shared header. Included from every page. Last touched 2013-05-17 (rmasi). --%>
3
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+ <html xmlns="http://www.w3.org/1999/xhtml">
6
+ <head>
7
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
8
+ <title>DemoBank Internet Banking</title>
9
+ <link rel="stylesheet" type="text/css" href="css/bank.css" />
10
+ <script type="text/javascript" src="js/jquery-1.12.4.min.js"></script>
11
+ <script type="text/javascript" src="js/validate.js"></script>
12
+ </head>
13
+ <body>
14
+ <div id="topbar">
15
+ <span class="logo">DemoBank</span>
16
+ <span class="userbox">
17
+ Welcome, <%= session.getAttribute("custNm") == null ? "MARIO BIANCHI" : session.getAttribute("custNm") %>
18
+ &nbsp;|&nbsp; <a href="login.jsp">Logout</a>
19
+ </span>
20
+ </div>
21
+ <jsp:include page="nav.jsp" />
22
+ <div id="content">