blob: f01e53cf7e49c06d3d3cb69a92d129ea5d924b9e [file] [log] [blame]
/*****************************************************************************
* Copyright (c) 2020 CEA LIST and others.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
*
*****************************************************************************/
package org.eclipse.papyrus.model2doc.odt.emf.template2pdf.internal.handler;
import java.util.List;
import java.util.Map;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.expressions.IEvaluationContext;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExecutableExtension;
import org.eclipse.papyrus.model2doc.emf.template2document.internal.handler.GenerateStructureAndDocumentHandler;
import org.eclipse.papyrus.model2doc.odt.emf.template2pdf.Activator;
import org.eclipse.papyrus.model2doc.odt.emf.template2pdf.internal.menu.Template2PDFMenuConstants;
import org.eclipse.papyrus.model2doc.odt.internal.pdf.PDFExporter;
import org.eclipse.papyrus.model2doc.odt.internal.pdf.PDFVersion;
/**
* This handler allows to generate the document structure and the final document
* in one step
*/
public class GenerateStructureDocumentAndPDFHandler extends GenerateStructureAndDocumentHandler
implements IExecutableExtension {
/**
* handler parameter ID to get the PDF version (defined in the plugin.xml and
* initialized by Eclipse with {@link #setInitializationData(IConfigurationElement, String, Object)})
*/
private static final String HANDLER_PARAMETER_ID = "org.eclipse.papyrus.model2doc.odt.emf.template2pdf.pdfVersion"; //$NON-NLS-1$
/**
* the version of the pdf to use for the export
*/
private PDFVersion pdfVersion = PDFVersion.PDF_DEFAULT;
/**
* {@inheritDoc}
*
* @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
* @return the path of the generated file
*/
@Override
public Object execute(final ExecutionEvent event) throws ExecutionException {
final Object result = super.execute(event);
if (result instanceof String) {
String generatedDocumentPath = (String) result;
PDFExporter exporter = new PDFExporter();
exporter.setPDFVersion(this.pdfVersion);
exporter.setOpenEndDialog(true);
try {
return exporter.exportToPDF(generatedDocumentPath);
} catch (Exception e) {
Activator.log.error(e);
}
}
return null;
}
/**
*
* @param evaluationContext
* @return
*/
@Override
protected boolean computeEnable(Object evaluationContext) {
boolean enable = super.computeEnable(evaluationContext);
if (evaluationContext instanceof IEvaluationContext) {
final IEvaluationContext iEvaluationContext = (IEvaluationContext) evaluationContext;
iEvaluationContext.addVariable(Template2PDFMenuConstants.VARIABLE_PDF_VERSION_MENU_LABEL, this.pdfVersion.getName());
}
return enable;
}
/**
*
* @param labels
* @return
*/
@Override
protected String createMenuLabel(final List<String> labels) {
labels.add(this.pdfVersion.getName());
return super.createMenuLabel(labels);
}
/**
* initialization of the pdf version to use for the export parameters for the
* handler is declared in the plugin.xml and this method is called by Eclipse
* framework
*/
@Override
public void setInitializationData(final IConfigurationElement config, final String propertyName, final Object data)
throws CoreException {
if (data instanceof Map<?, ?> && HANDLER_PARAMETER_ID != null) {
this.pdfVersion = PDFVersion.getPDFVersionByString((String) ((Map<?, ?>) data).get(HANDLER_PARAMETER_ID));
}
if (this.pdfVersion == null) {
// should not be possible
this.pdfVersion = PDFVersion.PDF_DEFAULT;
}
}
}