DDS Catalog
DDS (and related PF / LF / DSPF / PRTF) members describe record formats and fields. Parsing them with RPGFileType.DDS yields a CompilationUnit whose dataDescriptions hold RecordFormat nodes — a field catalog you can join with F-specs from RPGLE programs.
Add Dependencies
- Kotlin
- Java
repositories {
mavenLocal()
mavenCentral()
flatDir {
dirs("deps")
}
}
dependencies {
implementation(files("deps/rpgparser-2.2.0-all.jar"))
}
repositories {
mavenLocal()
mavenCentral()
flatDir {
dirs("deps")
}
}
dependencies {
implementation(files("deps/rpgparser-2.2.0-all.jar"))
implementation "com.strumenta.kolasu:kolasu-javalib:1.5.107"
}
Parse a DDS member
Use an explicit file type (or parserFromExtension when the extension is dds / pf / lf / dspf / prtf):
- Kotlin
- Java
import com.strumenta.kolasu.commercial.LicenseManager
import com.strumenta.rpgparser.RPGFileType
import com.strumenta.rpgparser.RPGKolasuParser
import com.strumenta.rpgparser.model.RecordFormat
import java.io.File
fun catalogDds(ddsFile: File, license: File) {
LicenseManager.registerLicense(license)
val result = RPGKolasuParser(RPGFileType.DDS).parse(ddsFile)
val root = result.root ?: return
root.dataDescriptions.filterIsInstance<RecordFormat>().forEach { format ->
println("Record format: ${format.name} (${format.recordFileType})")
format.fields.forEach { field ->
println(" ${field.name} @ ${field.position}")
}
}
}
import com.strumenta.kolasu.commercial.LicenseManager;
import com.strumenta.rpgparser.RPGFileType;
import com.strumenta.rpgparser.RPGKolasuParser;
import com.strumenta.rpgparser.model.CompilationUnit;
import com.strumenta.rpgparser.model.DataDescriptionField;
import com.strumenta.rpgparser.model.DataDescriptionSpecification;
import com.strumenta.rpgparser.model.RecordFormat;
import java.io.File;
public class DdsCatalog {
public static void catalogDds(File ddsFile, File license) {
LicenseManager.INSTANCE.registerLicense(license);
CompilationUnit root = new RPGKolasuParser(RPGFileType.DDS).parse(ddsFile).getRoot();
if (root == null) {
return;
}
for (DataDescriptionSpecification desc : root.getDataDescriptions()) {
if (desc instanceof RecordFormat format) {
System.out.println("Record format: " + format.getName()
+ " (" + format.getRecordFileType() + ")");
for (DataDescriptionField field : format.getFields()) {
System.out.println(" " + field.getName() + " @ " + field.getPosition());
}
}
}
}
}
Physical vs logical files
When present on the model, record file type metadata distinguishes physical and logical files. Use it when building impact analysis for database migrations. Combining a DDS catalog with F-specs from RPGLE (program inventory, file I/O) and symbol resolution across a project directory gives you a complete file/field landscape.