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
}
}