Generated for ASP.NET Core migration planning
src/main/java/com/detroitdiesel/ddec/)Total Java Files: ~550+
| Package | File Count | Purpose |
|---|---|---|
bean |
1 | Data transfer objects - TableDetails for database metadata |
common |
6 | Shared utility programs (COBOL conversions): Bomedit, Cobdate, Gredate, R35sflot, R35sspdb, R51punmv |
common.model |
15 | Common data models shared across transactions (R00y*, R33*, R35*, Waay*) |
configurations |
1 | Spring Boot configuration - DdecConfiguration (main app config) |
dao |
29 | Data Access Objects for IMS database emulation |
engineering |
2 | Engineering calibration tools: JavaToC, V2DdecCalibrationSplitter |
engineering.dto |
6 | DTOs for engineering workflows |
engineering.util |
7 | Utilities: EncodingUtil, FileUtil, SftpClient, batch request builders |
r19 |
~40 | DDEC II transaction programs (legacy COBOL conversions) |
r19.model |
~95 | DDEC II data models and structures |
r19.screenModel |
~120 | DDEC II JSP screen models (auto-generated from MFS) |
r24 |
~70 | DDEC III/V transaction programs (legacy COBOL conversions) |
r24.model |
~95 | DDEC III/V data models and structures |
r24.screenModel |
~150 | DDEC III/V JSP screen models |
support |
31 | IMS segment models and access patterns for data access |
support.r19 |
20 | DDEC II specific support models (Sdd2*, Cmpat*, etc.) |
support.r24 |
22 | DDEC III/V specific support models (R24y*, Sdcr*, etc.) |
test |
~15 | Test handlers for various database segments |
utils |
~18 | Utilities: DdecFunctions, Dfsort, Iibatch, CheckpointGenerator, And/Or logic |
utils.beans |
3 | Batch processing beans for R24prc01 job |
utils.dao |
2 | Repository handlers for R35DPSP |
utils.vsam |
3 | VSAM file emulation: CustCodeFile, CustCodeFileLoader, CustCodeTruncateTbl |
| Class | Endpoints | Purpose |
|---|---|---|
| SpdbController | GET /admin/spdb/list |
Admin endpoint to list SPDB cache contents (Scratch Pad Database). Requires ADMIN role. Returns R35DPSP root and continuation cache data. |
| EngineeringController | GET /engineering/ddec/basecal |
Download base calibration ZIP files |
POST /engineering/ddec/basecal/process |
Process calibration requests (download, parse, decrypt/decompress) | |
POST /engineering/ddec/releasecal |
Release (upload) calibration files via SFTP. Invokes shell scripts r24kd500.sh and r24kd505.sh |
Note: The application does NOT use traditional Spring MVC controllers. Instead, it uses the QRE framework's IMS transaction emulation where COBOL programs (R24*, R19*) handle user interactions through JSP pages.
No traditional @Service annotated classes found.
Business logic is embedded in:
AbstractCobolCodeModel contain business logic converted from mainframe COBOL programs| Category | Programs | Description |
|---|---|---|
| Menu | R24pmenu | DDEC III main menu |
| Unit Management | R24pchun, R19pd2un | Change/display unit data |
| History Management | R24p5chn, R24pslhp | Change history, select history |
| Component Management | R24p5cap, R24p5cdp | Add/change components |
| Horse Power Management | R24p5ahp, R24puphp | Adjust/update HP |
| File Extract | R24pfe01-R24pfe08 | Billing extracts for DDEC III/V |
| BOM Management | R19pbm4d, R19pbm4m, R19pbm4u | BOM display/modify/update |
| Class | Purpose |
|---|---|
| DdecCoreDao | Core DAO with generic CRUD operations. Translates IMS DLI calls (GU, GN, ISRT, REPL, DLET) to SQL Server queries. Handles dynamic SQL generation based on segment metadata. |
| DdecBaseDao | Extends DdecCoreDao. Contains segment-to-class mappings for all IMS segments. Maps 30+ segment names to Java model classes. |
| DAO Class | Database/Segment | Tables/Entities |
|---|---|---|
| IcxdpcusDao | ICXDPCUS | Customer code validation (ICXDPCUS table) |
| IdbdpacfDao | IDBDPACF | Access facility/security (DBPACF01 segment) |
| R19dlbm1Dao | R19DLBM1 | BOM data for DDEC II |
| R19dpbmDao | R19DPBM | BOM program database for DDEC II |
| R19dpd2Dao | R19DPD2 | DDEC II unit database - segments: SDD2ROOT, SDD2UNIT, SDD2HIST, SDD2PROG |
| R19dsd21Dao | R19DSD21 | DDEC II secondary index database |
| R24dpclDao | R24DPCL | DDEC III/V customer location |
| R24dpd2Dao | R24DPD2 | DDEC II units (same structure as R19DPD2) |
| R24dpd3Dao | R24DPD3 | DDEC III unit database - segments: SDD3UNIT, SDD3HIST, SDD3PROG, SDD3FINC, SDD3RECV |
| R24dpd5Dao | R24DPD5 | DDEC V unit database - segments: SDD5UNIT, SDD5HIST, SDD5PROG, SDD5FINC |
| R24dpocDao | R24DPOC | Order confirmation database (R24OCSEG segment) |
| R24dpspDao | R24DPSP | Scratch Pad Database (R24SPSEG segment) - temporary working storage |
| R24dsd31Dao | R24DSD31 | DDEC III secondary index |
| R24dsd51Dao | R24DSD51 | DDEC V secondary index |
| R24na2usDao | R24NA2US | Named segment R24NA2US |
| R24na3usDao | R24NA3US | Named segment R24NA3US |
| R24na4usDao | R24NA4US | Named segment R24NA4US |
| R24na7usDao | R24NA7US | Named segment R24NA7US (730+ columns - largest table) |
| R24na9usDao | R24NA9US | Named segment R24NA9US |
| R24nb0usDao | R24NB0US | Named segment R24NB0US |
| R24nb3usDao | R24NB3US | Named segment R24NB3US |
| R24nb4usDao | R24NB4US | Named segment R24NB4US |
| R24nb5usDao | R24NB5US | Named segment R24NB5US |
| R24nb6usDao | R24NB6US | Named segment R24NB6US |
| R24nb7usDao | R24NB7US | Named segment R24NB7US |
| R24nb8usDao | R24NB8US | Named segment R24NB8US |
| DAO | Purpose |
|---|---|
| R35dpspHandler | Custom handler for R35DPSP scratch pad with caching |
| R35dpspRepository | Repository interface for R35DPSP with cache management (CACHE_R35DPSP_ROOT, CACHE_R35DPSP_CONT) |
All DAOs translate IMS hierarchical database calls to SQL Server relational queries using Spring JDBC Template.
A. Common Models (15 classes in common.model)
B. DDEC II Models (95+ classes in r19.model)
Key models:
C. DDEC III/V Models (95+ classes in r24.model)
Key models:
D. Support Models (74 classes in support, support.r19, support.r24)
Each segment has a pair:
DataStructure<T>, contains actual field definitionsImsAccessModel<T>, defines primary key, foreign key, database key columns, and key field accessorAll models use QRE framework legacy data types:
FixedLengthString - for character fieldsPackedDecimal - for numeric fieldsZonedDecimal - for zoned decimal fieldsDataStructure<T> for IMS segment mappingKey features:
@EnableKeycloak - Security via Keycloak SSO@Import({MvsImsConfiguration.class}) - Imports QRE MVS/IMS emulation framework@ComponentScan({"com.detroitdiesel.ddec.utils"}) - Scans utils package@EnableCaching - Enables Spring cachingexclude = HibernateJpaAutoConfiguration.class - No JPA, uses JDBC| Configuration | Profile | Purpose |
|---|---|---|
| DdecWebConfiguration | web |
Configures IMS terminal suppliers (General, PDC, Master terminals). Loads terminal properties from /config/terminals-*.properties. Response mode: FORCRESP |
| DdecDataConfiguration | !local-test |
Component scans DAO package: com.detroitdiesel.ddec.dao |
| DdecBatchConfiguration | batch |
Configures IndexedDiskFile (VSAM emulation) with prototype scope. Uses CustCodeFile implementation |
| DdecR35dpspConfiguration | Conditional | Initializes R35DPSP database schema. Different scripts for SQL Server vs HSQLDB |
| DdecTestConfiguration | local-test |
Test configuration with mock CbltdliDbDao. Returns GB (end of database) status |
@EnableKeycloak annotation@PreAuthorize on controller methods:
hasRole('ADMIN') - for admin endpointshasRole('ANY') - for engineering endpointsTotal JSP Count: ~240 files
src/ddec-web/src/main/webapp/
A. Engineering Pages (3 files)
engineering/download-calibration.jsp - Download calibration interfaceengineering/release-calibration.jsp - Release calibration interfaceengineering/engineering-main.jsp - Engineering main menuB. DDEC II Pages (~100 files)
Patterns: Bm*, D21*, D2*
Bm4d01-02Form.jsp - BOM Display screensBm4m01-02Form.jsp - BOM Modify screensBm4u01-02Form.jsp - BOM Update screensD21302-D21405Form.jsp - D213/D214 function screensD2ad-D2u5Form.jsp - Various DDEC II function screensC. DDEC III/V Pages (~135 files)
Patterns: D3*, D5*
| Prefix | Function | Screen Count |
|---|---|---|
| D3au | Add Unit | 4 screens |
| D3ca | Change Authorization | 2 screens |
| D3ch | Change History | 11 screens |
| D3cu | Change Unit | 12 screens |
| D3dl | Delete | 2 screens |
| D3et | Enter Transaction | 2 screens |
| D3fd | Find | 6 screens |
| D3hp | Horse Power | 10 screens |
| D3ic | Inquiry Calibration | 2 screens |
| D3ir | Inquiry Request | 2 screens |
| D3me | Menu | 1 screen |
| D3pr | 2 screens | |
| D3rc | Receive | 2 screens |
| D3re | Request | 3 screens |
| D3sh | Ship | 3 screens |
| D3up | Update | 3 screens |
| D5** | DDEC V equivalents | ~30 screens |
D. Common Pages
accessDenied.jsp - Security access denied pageresources/theme/QAStyle.jsp - QA styling<qre:screen>, <qre:position>, <qre:input>, <qre:label>)${screenmodel.fieldname}| Class | Purpose |
|---|---|
| DdecFunctions | DDEC-specific helper functions |
| DdecJcl2KornRunScriptGeneratorHelper | Generates Korn shell scripts from JCL definitions |
| Dfsort | DFSORT emulation for sorting data |
| Dfs0aer | DFSORT support |
| Dfsudmp0 | DFSORT dump utility |
| And / Or | Logical AND/OR operations (extends AbstractCobolCodeModel) |
| MultipleSortData | Multiple column sort support |
| CheckpointGenerator | Batch checkpoint generation |
| Iibatch | Batch processing utilities |
| Class | Purpose |
|---|---|
| Cobdate | COBOL date conversion/formatting |
| Gredate | Gregorian date functions |
| Waasdate | Date utilities |
| Waasdatr | Date range utilities |
| Class | Purpose |
|---|---|
| CustCodeFile | VSAM customer code file emulation |
| CustCodeFileLoader | Loads customer code data |
| CustCodeTruncateTbl | Truncates customer code table |
| Class | Purpose |
|---|---|
| EncodingUtil | Character encoding conversions (XOR encryption, EBCDIC) |
| EngineeringConstants | Engineering constants (TYPE_OK, TYPE_ERROR) |
| EngineeringUtil | General engineering utilities |
| FileUtil | File operations (getFileContents) |
| R24kd500shDownloadRequestBuilder | Builds download batch job requests |
| R24kd505shReleaseRequestBuilder | Builds release batch job requests |
| SftpClient | SFTP file transfer client (JSch-based) |
| JavaToC | JNI bridge to C library (XCompress for PKWARE compression) |
| V2DdecCalibrationSplitter | Splits/processes calibration DAT files |
| Class | Purpose |
|---|---|
| R24prc01R35dgiv1FileReader | Custom file reader for R24PRC01 batch job, handles EBCDIC + binary data |
| R24prc01R35dgiv1RecordProcessor | Processes input records |
| R24prc01R35dgov1RecordProcessor | Processes output records |
| Program | Purpose |
|---|---|
| R24PRC01 | Main batch calibration processor - reads R35DGIV1, processes calibration requests, writes R35DGOV1 |
| R24PFE01-08 | File extract jobs - extract billing data for DDEC II/III/V units to flat files |
| Script | Purpose |
|---|---|
| r24kd500.sh | Download calibration batch job. Reads DDECREQ0.DAT, queries unit/calibration data, writes download.dat. Invoked by EngineeringController.processBaseCal() |
| r24kd505.sh | Release calibration batch job. Reads uploaded calibration file, validates and processes release, updates database. Invoked by EngineeringController.releaseCalibration() |
CRITICAL: The application is heavily dependent on com.csc.qre (QRE Framework) for mainframe emulation.
Found in ALL COBOL-converted program files (~99 programs):
import com.csc.qre.core.datatype.*; // FixedLengthString, PackedDecimal, ZonedDecimal
import com.csc.qre.core.datatype.constant.*;
import com.csc.qre.core.datatype.support.*;
import com.csc.qre.core.constant.ComparisonOperator;
import com.csc.qre.core.exception.*;
import com.csc.qre.core.annotations.LegacyProgram;
import com.csc.qre.core.util.*;
import static com.csc.qre.cobol.lang.CobolFunctions.*;
import static com.csc.qre.cobol.lang.CobolArithmeticFunctions.*;
import static com.csc.qre.cobol.lang.CobolArrayFunctions.*;
import static com.csc.qre.cobol.lang.CobolConditionFunctions.*;
import static com.csc.qre.cobol.lang.CobolConstants.*;
import static com.csc.qre.cobol.lang.CobolDateFunctions.*;
import static com.csc.qre.cobol.lang.CobolDeclarationFunctions.*;
import static com.csc.qre.cobol.lang.CobolNumberFunctions.*;
import static com.csc.qre.cobol.lang.CobolStringFunctions.*;
import com.csc.qre.cobol.lang.support.AbstractCobolCodeModel;
import com.csc.qre.ims.dli.DLIModule;
import static com.csc.qre.ims.dli.DLIModule.dliCall;
import com.csc.qre.ims.constants.DliFunctions; // GU, GN, GNP, ISRT, REPL, DLET
import com.csc.qre.ims.constants.DliStatusCodes; // GB, GE, etc.
import com.csc.qre.ims.dli.db.CbltdliDbDao;
import com.csc.qre.ims.dli.db.QualifiedSsa;
import com.csc.qre.ims.process.*; // PcbMask, ImsSession, ImsContext
import com.csc.qre.file.OpenMode;
import com.csc.qre.file.AccessMode;
import com.csc.qre.file.disk.IndexedDiskFile;
import com.csc.qre.file.disk.SequentialDiskFile;
import com.csc.qre.file.support.FlatFileReader;
import com.csc.qre.file.support.RecordProcessor;
| Category | Count | Description |
|---|---|---|
| COBOL program classes | 99 | R19*, R24*, Bomedit, Cobdate, etc. |
| DAO classes | 29 | All implement CbltdliDbDao |
| Support model classes | 74 | DataStructure extensions |
| Data model classes | 210+ | FixedLengthString, PackedDecimal fields |
| Configuration | 1 | DdecConfiguration |
| Engineering utilities | ~10 | Various |
| Batch beans | 3 | R24prc01 related |
| QRE Class | Purpose | Usage |
|---|---|---|
AbstractCobolCodeModel |
Base class for all COBOL programs | 99 programs |
DataStructure<T> |
Base class for all IMS segments | 210+ models |
FixedLengthString |
COBOL PIC X fields | All data structures |
PackedDecimal |
COBOL COMP-3 fields | Numeric fields |
ZonedDecimal |
COBOL zoned decimal | Display numerics |
CbltdliDbDao |
IMS DLI database interface | 29 DAOs |
DliFunctions |
IMS function codes (GU, GN, ISRT, REPL, DLET) | All DAOs |
DliStatusCodes |
IMS status codes (GB, GE, etc.) | DLI response handling |
QualifiedSsa |
SSA (Segment Search Argument) parser | Database queries |
PcbMask |
Program Control Block | All IMS operations |
ImsTerminalSupplier |
Terminal emulation | Configuration |
ImsSession |
IMS session management | Controllers |
| Component Type | Count | Details |
|---|---|---|
| Total Java Files | ~550 | Main application code |
| Controllers | 2 | REST controllers only |
| DAO Classes | 29 | Database access layer |
| Business Logic Programs | 99 | COBOL-converted transaction programs |
| Data Models | ~210 | Entity/segment classes |
| Support Models | 74 | Access model pairs |
| Utility Classes | ~30 | Various helpers |
| Configuration Classes | 1 (+ 5 nested) | Spring configuration |
| JSP Pages | ~240 | Web UI screens |
| Batch Programs | ~10 | Background jobs |
| Files Using QRE | 451+ | Dependency on QRE framework |
| # | File | Why It Matters |
|---|---|---|
| 1 | configurations/DdecConfiguration.java |
Application bootstrap, all Spring config |
| 2 | dao/DdecCoreDao.java |
Core data access pattern - how IMS calls become SQL |
| 3 | dao/DdecBaseDao.java |
Segment-to-class mappings |
| 4 | utils/EngineeringController.java |
REST API endpoints |
| 5 | utils/SpdbController.java |
Admin functions |
| 6 | r24/R24pmenu.java |
Main menu program - entry point |
| 7 | r24/R24p5chn.java |
Complex business logic example |
| 8 | r24/R24prc01.java |
Batch processing |
| 9 | dao/R24dpd3Dao.java |
DDEC III database DAO |
| 10 | support/r24/R24yunit.java |
Unit data structure |
| 11 | support/r24/R24yunitModel.java |
Unit access model |
| 12 | engineering/V2DdecCalibrationSplitter.java |
Calibration processing |
| 13 | utils/beans/R24prc01R35dgiv1FileReader.java |
Batch I/O with EBCDIC |
| 14 | common/Bomedit.java |
Example COBOL-converted program |
QRE Framework Replacement is the PRIMARY challenge:
Each QRE class needs a replacement strategy defined in the migration.