Passing values to my Base Doc Template - Create Doc From Scratch

I am using a plugin to create a doc from scratch. Any idea why it is not passing value to my base doc template, please see the method createVariable(). I expect the values in my base word doc ( C:\\2020\MyTemplate.docx used in Java code below ) to be replaced by what is passed from Java variables createVariable() method calls in the plugin code.

C:\\2020\MyTemplate.docx contains the following on 2nd page after the Title page.

Document Control
Name: ${TEXT, “NAME”}		Role: ${TEXT, “ROLE”}
Reviewers
Name: ${TEXT, REVIEWER_NAME}	Role: ${TEXT, REVIEWER_ROLE}
Sign Off
Name: ${TEXT, SIGNOFF_NAME}		Role: ${TEXT, SIGNOFF_ROLE}
Last Modified Date: ${TEXT, LAST_MODIFIED}	Last Modified By: ${TEXT, LAST_MODIFIED_BY}

My Java plugin code is as below:

public class MyDocController implements VPActionController {

IArchiMateDiagramUIModel enterpriseArchiMateDiagram;
IReportDiagramUIModel reportDiagramUIModel = null;
IDiagramUIModel currentState = null;
IReportDiagramDetailsContainer reportDiagramDetailsContainer = null;
IReportDiagramDetails reportDiagramDetails = null;
IProject project = null;

@Override
public void performAction(VPAction arg0) {

	DiagramManager diagramManager = ApplicationManager.instance().getDiagramManager();

	project = ApplicationManager.instance().getProjectManager().getProject();
	
	Iterator<IReportDiagramDetailsContainer> reportDiagramIterator = 
							project.modelElementIterator( IModelElementFactory.MODEL_TYPE_REPORT_DIAGRAM_DETAILS_CONTAINER );
	
	if (reportDiagramIterator.hasNext()) {
		reportDiagramDetailsContainer = reportDiagramIterator.next();
	} else {
		reportDiagramDetailsContainer = IModelElementFactory.instance().createReportDiagramDetailsContainer();
	}

	enterpriseArchiMateDiagram = (IArchiMateDiagramUIModel)ApplicationManager.instance().getDiagramManager().getActiveDiagram();
	
	reportDiagramUIModel = (IReportDiagramUIModel) diagramManager.createDiagram( IDiagramTypeConstants.DIAGRAM_TYPE_REPORT_DIAGRAM );
	reportDiagramDetails = reportDiagramDetailsContainer.createReportDiagramDetails();
	reportDiagramUIModel.setGenericXMLElementAddress( reportDiagramDetails.getAddress() );
	reportDiagramDetails.setFillInDoc( false );
	
	IReportDiagramOption reportDiagramOption = IModelElementFactory.instance().createReportDiagramOption();
	reportDiagramOption.setUseWordDocumnentTemplate( true );
	reportDiagramOption.setWordDocumnentTemplatePath( "C:\\\\2020\\MyTemplate.docx" );
	reportDiagramDetails.setReportDiagramOption( reportDiagramOption );

	if (reportDiagramOption.getReportDocInfo() == null) {
		reportDiagramOption.setReportDocInfo( reportDiagramOption.createReportDocInfo() );
	}
	
	IReportDocInfo docInfo = reportDiagramOption.getReportDocInfo();
	docInfo.setTitle( project.getName() );
	docInfo.setAuthor( enterpriseArchiMateDiagram.getPmAuthor() );
	
	reportDiagramDetails.addRDPageBreakTemplate( IModelElementFactory.instance().createRDPageBreakTemplate() );
	
	IRDOOTemplate currentIRDOOTemplate = reportDiagramDetails.createRDOOTemplate();
	currentIRDOOTemplate.setTemplateURI("Diagram:ArchiMateDiagram/DIAGRAM/CurrentState");
	currentIRDOOTemplate.setSourceType(1);
	
	currentIRDOOTemplate.setSourceId(enterpriseArchiMateDiagram.getId());
	
	ICompositeValueSpecification stateValueSpec = IModelElementFactory.instance().createCompositeValueSpecification();
	stateValueSpec.setName(enterpriseArchiMateDiagram.getId());
	stateValueSpec.setValue("Current State - Application,Current State - Technology,Current State - Business,Current State - Motivations");

	currentIRDOOTemplate.addLayerFilter(stateValueSpec);
	
	reportDiagramDetails.addTemplate(currentIRDOOTemplate);

	createVariable( "PROJECT", ApplicationManager.instance().getProjectManager().getProject().getName(), reportDiagramDetails );
	createVariable( "VERSION", "1.0", reportDiagramDetails );
	createVariable( "NAME", enterpriseArchiMateDiagram.getPmAuthor(), reportDiagramDetails );
	createVariable( "ROLE", "Architect", reportDiagramDetails );
	createVariable( "REVIEWER_NAME", enterpriseArchiMateDiagram.getPmAuthor(), reportDiagramDetails );
	createVariable( "REVIEWER_ROLE", "Architect", reportDiagramDetails );
	createVariable( "SIGNOFF_NAME", enterpriseArchiMateDiagram.getPmAuthor(), reportDiagramDetails );
	createVariable( "SIGNOFF_ROLE", "Architect", reportDiagramDetails );
	SimpleDateFormat simpleDateFormat = new SimpleDateFormat( "dd-MMM-yyyy" );
	createVariable( "CREATED_DATE", formatDate( enterpriseArchiMateDiagram.getCreationTime(), simpleDateFormat), reportDiagramDetails );
	createVariable( "LAST_MODIFIED", formatDate( enterpriseArchiMateDiagram.getLastCommitted(), simpleDateFormat), reportDiagramDetails );
	createVariable( "LAST_MODIFIED_BY", String.valueOf( enterpriseArchiMateDiagram.getLastCommittedUser() ), reportDiagramDetails );

	
	ApplicationManager.instance().getDocumentationManager().generateDocComposerWord( reportDiagramUIModel, new File( "C:\\\\2020\\MyGeneratedDoc.docx" ), null);
	
	
}

private void createVariable(String name, String value, IReportDiagramDetails diagramDetails) {
	try {
		IFIText variable = diagramDetails.getFITextByName(name);
		if (null == variable) {
			variable = diagramDetails.createFIText();
		}
		variable.setName(name);
		variable.setNickname(name);
		variable.setNickDescription(value);
		diagramDetails.addFiField(variable);
		ApplicationManager.instance().getViewManager().showMessage("Adding variable -> " + name +" value " + value);
		
		IFITextInstance lTextInstance;
		if (0 == variable.instanceCount()) {
			lTextInstance = IModelElementFactory.instance().createFITextInstance();
			variable.addInstance(lTextInstance);
		} else {
			lTextInstance = variable.getInstanceByIndex(0);
		}
		lTextInstance.setName(name);
		lTextInstance.setNickDescription(name);
		lTextInstance.setNickHTMLDescription("<html><body>"+value+"</body></html>");
		diagramDetails.addFIText(variable);
			
	} catch (Exception e) {
		ApplicationManager.instance().getViewManager().showMessage("Error when creating variable -> "+e.getMessage());
		// Silent Catch - Do Nothing & proceed!
	}
}

private String formatDate(Long longTime, SimpleDateFormat simpleDateFormat) {
	String dateToReturn = null;
	try {
		Date date = new Date(longTime);
		dateToReturn = String.valueOf( simpleDateFormat.format(date) );
	} catch(Exception e) {
		// Silent Catch, Do Nothing!
		return "";
	}
	return dateToReturn;
}

@Override
public void update(VPAction arg0) {
	// TODO Auto-generated method stub
	
}

}

Sorry, ${TEXT, …} is not supported in Build from Scratch.

Doc. Composer support 2 different methods to compose your document:

  • Build from scratch
  • Fill-in

The ${TEXT, ...} is supported in Fill-in doc only.
Since your document is built from scratch, ${TEXT, ...} won’t function.

You may try to read the introduction of Build from scratch & Fill-in Doc. here: