Creating a model and writing a file

CapabilityLoader capabilityLoader = new CapabilityLoader();
ProgressMonitor progressMonitor = new PrintStreamProgressMonitor();
Requirement<ResourceSetRequirement, ResourceSet> requirement = ServiceCapabilityFactory.createRequirement(ResourceSet.class);
ResourceSet resourceSet = capabilityLoader.loadOne(requirement, progressMonitor);

File moduleFile = new File("target/module.xlsx").getCanonicalFile();
Resource excelResource = resourceSet.createResource(URI.createFileURI(moduleFile.getAbsolutePath()));
Workbook workbook = ExcelFactory.eINSTANCE.createWorkbook();
excelResource.getContents().add(workbook);

Module module = getClass().getModule();
ModuleDescriptor descriptor = module.getDescriptor();

RowSheet rowSheet = workbook.addRowSheet(module.getName());

CellRow headerRow = rowSheet.addCellRow();
headerRow.addStringCell("Name");
headerRow.addStringCell("Modifiers");
headerRow.addStringCell("Version");

for (Requires req: descriptor.requires()) {
	CellRow reqRow = rowSheet.addCellRow();
	reqRow.addStringCell(req.name());

	StringBuilder modifiersBuilder = new StringBuilder();
	req.modifiers().forEach(m -> {
		if (!modifiersBuilder.isEmpty()) {
			modifiersBuilder.append(", ");
		}
		modifiersBuilder.append(m);
	});
	reqRow.addStringCell(modifiersBuilder.toString());

	Optional<Version> versionOpt = req.compiledVersion();
	if (versionOpt.isEmpty()) {
		reqRow.addBlankCell();
	} else {
		Version version = versionOpt.get();
		reqRow.addStringCell(version.toString());
	}
}
excelResource.save(null);

Series and column builders

CapabilityLoader capabilityLoader = new CapabilityLoader();
ProgressMonitor progressMonitor = new PrintStreamProgressMonitor();
Requirement<ResourceSetRequirement, ResourceSet> requirement = ServiceCapabilityFactory.createRequirement(ResourceSet.class);
ResourceSet resourceSet = capabilityLoader.loadOne(requirement, progressMonitor);

File moduleFile = new File("target/module-series.xlsx").getCanonicalFile();
Resource excelResource = resourceSet.createResource(URI.createFileURI(moduleFile.getAbsolutePath()));
Workbook workbook = ExcelFactory.eINSTANCE.createWorkbook();
excelResource.getContents().add(workbook);

Module module = getClass().getModule();
ModuleDescriptor descriptor = module.getDescriptor();

List<ColumnBuilder<Requires>> columnBuilders = new ArrayList<>();

columnBuilders.add(TitleAndDescriptionColumnBuilder.stringColumnBuilder(
		"Name",
		"Requires name",
		Requires::name,
		null));

columnBuilders.add(TitleAndDescriptionColumnBuilder.stringColumnBuilder(
		"Modifiers",
		"Requires modifiers",
		req -> {
			StringBuilder modifiersBuilder = new StringBuilder();
			req.modifiers().forEach(m -> {
				if (!modifiersBuilder.isEmpty()) {
					modifiersBuilder.append(", ");
				}
				modifiersBuilder.append(m);
			});
			return modifiersBuilder.toString();
		},
		null));

columnBuilders.add(TitleAndDescriptionColumnBuilder.stringColumnBuilder(
		"Version",
		"Requires version",
		req -> {
			Optional<Version> versionOpt = req.compiledVersion();
			if (versionOpt.isEmpty()) {
				return null;
			}
			Version version = versionOpt.get();
			return version.toString();
		},
		null));

Series<Requires> series = Series.of(
		"Requires",
		columnBuilders,
		descriptor.requires(),
		true);

series.generate(workbook);

excelResource.save(null);

Column builder group

ColumnBuilderGroup<Requires> requiresGroup = new ColumnBuilderGroup<ModuleDescriptor.Requires>(
		"Requires",
		"Information about requires",
		columnBuilders);

Series<Requires> groupSeries = Series.of(
		"Requires group",
		Collections.singletonList(requiresGroup),
		descriptor.requires(),
		true);

groupSeries.generate(workbook);

Reading a file

CapabilityLoader capabilityLoader = new CapabilityLoader();
ProgressMonitor progressMonitor = new PrintStreamProgressMonitor();
Requirement<ResourceSetRequirement, ResourceSet> requirement = ServiceCapabilityFactory.createRequirement(ResourceSet.class);
ResourceSet resourceSet = capabilityLoader.loadOne(requirement, progressMonitor);

File moduleFile = new File("target/module.xlsx").getCanonicalFile();

Resource excelResource = resourceSet.getResource(URI.createFileURI(moduleFile.getAbsolutePath()), true);
for (EObject root: excelResource.getContents()) {
	for (Sheet sheet: ((Workbook) root).getSheets()) {
		System.out.println(sheet.getName() + " " + sheet.eClass().getName());
		for (Row row: ((RowSheet) sheet).getRows()) {
			System.out.println("	" + row.getNumber() + " " + row.eClass().getName());
			for (Cell cell: ((CellRow) row).getCells()) {
				System.out.println("		" + cell.getColumnIndex() + " " + cell.eClass().getName());
				if (cell instanceof StringCell) {
					System.out.println("			" + ((StringCell) cell).getValue());
				}
			}
		}
	}
}