diff --git a/plugins/core/org.eclipse.papyrus.model2doc.core/META-INF/MANIFEST.MF b/plugins/core/org.eclipse.papyrus.model2doc.core/META-INF/MANIFEST.MF
index deb6887..151ee4f 100755
--- a/plugins/core/org.eclipse.papyrus.model2doc.core/META-INF/MANIFEST.MF
+++ b/plugins/core/org.eclipse.papyrus.model2doc.core/META-INF/MANIFEST.MF
@@ -6,28 +6,19 @@
 Bundle-Localization: plugin
 Bundle-SymbolicName: org.eclipse.papyrus.model2doc.core
 Bundle-Activator: org.eclipse.papyrus.model2doc.core.Activator
-Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.15.0,4.0.0)",
- org.eclipse.core.commands;bundle-version="[3.0.0,4.0.0)",
- org.eclipse.uml2.uml;bundle-version="[5.5.0,6.0.0)",
+Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.20.0,4.0.0)",
  org.eclipse.core.resources;bundle-version="[3.13.0,4.0.0)",
- org.eclipse.papyrus.uml.internationalization.utils;bundle-version="[2.0.0,3.0.0)",
- org.eclipse.gmf.runtime.notation.edit;bundle-version="[1.0.0,2.0.0)",
- org.eclipse.papyrus.infra.gmfdiag.common;bundle-version="[4.0.0,5.0.0)",
- org.eclipse.emf.ecore;bundle-version="[2.17.0,3.0.0)",
- org.eclipse.gmf.runtime.diagram.ui.render;bundle-version="[1.7.0,2.0.0)",
- org.eclipse.papyrus.model2doc.core.generatorconfiguration;bundle-version="[0.7.0,1.0.0)",
- org.eclipse.papyrus.model2doc.core.generatorconfiguration.edit;bundle-version="[0.7.0,1.0.0)",
- org.eclipse.papyrus.model2doc.core.builtintypes;bundle-version="[0.7.0,1.0.0)",
- org.eclipse.papyrus.model2doc.core.author;bundle-version="[0.7.0,1.0.0)",
+ org.eclipse.papyrus.model2doc.core.generatorconfiguration;bundle-version="[0.8.0,1.0.0)",
+ org.eclipse.papyrus.model2doc.core.generatorconfiguration.edit;bundle-version="[0.8.0,1.0.0)",
+ org.eclipse.papyrus.model2doc.core.builtintypes;bundle-version="[0.8.0,1.0.0)",
+ org.eclipse.papyrus.model2doc.core.author;bundle-version="[0.8.0,1.0.0)",
  org.eclipse.ui.workbench;bundle-version="[3.122.0,4.0.0)",
  org.eclipse.papyrus.infra.core.log;bundle-version="[2.0.0,3.0.0)",
- org.eclipse.gmf.runtime.diagram.core;bundle-version="[1.7.0,2.0.0)",
- org.eclipse.gmf.runtime.diagram.ui;bundle-version="[1.9.0,2.0.0)"
+ org.eclipse.swt;bundle-version="[3.115.0,4.0.0)",
+ org.eclipse.jface;bundle-version="[3.22.0,4.0.0)"
 Bundle-RequiredExecutionEnvironment: JavaSE-11
 Bundle-ActivationPolicy: lazy
-Export-Package: org.eclipse.papyrus.model2doc.core.internal.transcriber;x-internal:=true,
- org.eclipse.papyrus.model2doc.core.internal.transcription;x-internal:=true,
- org.eclipse.papyrus.model2doc.core.internal.util;x-internal:=true,
+Export-Package: org.eclipse.papyrus.model2doc.core.internal.util;x-internal:=true,
  org.eclipse.papyrus.model2doc.core.service,
  org.eclipse.papyrus.model2doc.core.status,
  org.eclipse.papyrus.model2doc.core.transcriber,
diff --git a/plugins/core/org.eclipse.papyrus.model2doc.core/src/org/eclipse/papyrus/model2doc/core/config/GeneratorConfig.java b/plugins/core/org.eclipse.papyrus.model2doc.core/src/org/eclipse/papyrus/model2doc/core/config/GeneratorConfig.java
deleted file mode 100755
index eaf8c2c..0000000
--- a/plugins/core/org.eclipse.papyrus.model2doc.core/src/org/eclipse/papyrus/model2doc/core/config/GeneratorConfig.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*****************************************************************************
- * Copyright (c) 2019 CEA LIST.
- *
- * 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
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *  Yupanqui Munoz (CEA LIST) yupanqui.munozjulho@cea.fr - Initial API and implementation
- *	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
- *****************************************************************************/
-package org.eclipse.papyrus.model2doc.core.config;
-
-/**
- * Generator Configuration Interface. 
- *
- */
-public interface GeneratorConfig {
-	
-	/**
-	 * Get Document Name.
-	 * 
-	 * @return
-	 */
-	public String getDocumentName();
-	
-	/**
-	 * Set Document Name.
-	 * 
-	 * @param documentName
-	 */
-	public void setDocumentName(String documentName);
-	
-	/**
-	 * Get Eclipse Project Name.
-	 * 
-	 * @return
-	 */
-	public String getProject();
-	
-	/**
-	 * Set Eclipse Project Name.
-	 * 
-	 * @param project
-	 */
-	public void setProject(String project);
-	
-	/**
-	 * Get Output Folder.
-	 * 
-	 * @return
-	 */
-	public String getOutputFolder();
-	
-	/**
-	 * Set Output Folder.
-	 * 
-	 * @param outputFolder
-	 */
-	public void setOutputFolder(String outputFolder);
-	
-	/**
-	 * Get Template Style File URI.
-	 * 
-	 * @return
-	 */
-	public String getTemplateStyleFileURI();
-	
-	/**
-	 * Set Template Style File URI.
-	 * 
-	 * @param templateStyleFileURI
-	 */
-	public void setTemplateStyleFileURI(String templateStyleFileURI);
-
-}
diff --git a/plugins/core/org.eclipse.papyrus.model2doc.core/src/org/eclipse/papyrus/model2doc/core/config/GeneratorConfigFactory.java b/plugins/core/org.eclipse.papyrus.model2doc.core/src/org/eclipse/papyrus/model2doc/core/config/GeneratorConfigFactory.java
deleted file mode 100755
index 3fb3891..0000000
--- a/plugins/core/org.eclipse.papyrus.model2doc.core/src/org/eclipse/papyrus/model2doc/core/config/GeneratorConfigFactory.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*****************************************************************************
- * Copyright (c) 2019 CEA LIST.
- *
- * 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
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *  Yupanqui Munoz (CEA LIST) yupanqui.munozjulho@cea.fr - Initial API and implementation
- *	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
- *****************************************************************************/
-package org.eclipse.papyrus.model2doc.core.config;
-
-import org.eclipse.papyrus.model2doc.core.internal.config.DefaultGeneratorConfig;
-
-/**
- * Generator Configuration Factory.
- *
- */
-public class GeneratorConfigFactory {
-	
-	public static final GeneratorConfigFactory INSTANCE = new GeneratorConfigFactory();
-	
-	/**
-	 * Constructor.
-	 *
-	 */
-	private GeneratorConfigFactory() {
-		// to avoid instantiation
-	}
-	
-	
-	/**
-	 * Get default image description.
-	 * 
-	 * @return
-	 */
-	public GeneratorConfig getDefaultGeneratorConfig() {
-		return new DefaultGeneratorConfig();
-	}
-}
diff --git a/plugins/core/org.eclipse.papyrus.model2doc.core/src/org/eclipse/papyrus/model2doc/core/internal/config/DefaultGeneratorConfig.java b/plugins/core/org.eclipse.papyrus.model2doc.core/src/org/eclipse/papyrus/model2doc/core/internal/config/DefaultGeneratorConfig.java
deleted file mode 100755
index 8a1221c..0000000
--- a/plugins/core/org.eclipse.papyrus.model2doc.core/src/org/eclipse/papyrus/model2doc/core/internal/config/DefaultGeneratorConfig.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*****************************************************************************
- * Copyright (c) 2019 CEA LIST.
- *
- * 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
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *  Yupanqui Munoz (CEA LIST) yupanqui.munozjulho@cea.fr - Initial API and implementation
- *  Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
- *****************************************************************************/
-package org.eclipse.papyrus.model2doc.core.internal.config;
-
-import org.eclipse.papyrus.model2doc.core.config.GeneratorConfig;
-
-/**
- * Generator Configuration.
- *
- */
-public class DefaultGeneratorConfig implements GeneratorConfig {
-
-	private String documentName;
-
-	private String project;
-
-	private String outputFolder;
-
-	private String templateStyleFileURI;
-
-	@Override
-	public String getDocumentName() {
-		return documentName;
-	}
-
-	@Override
-	public void setDocumentName(String documentName) {
-		this.documentName = documentName;
-	}
-
-	@Override
-	public String getProject() {
-		return project;
-	}
-
-	@Override
-	public void setProject(String project) {
-		this.project = project;
-	}
-
-	@Override
-	public String getOutputFolder() {
-		return outputFolder;
-	}
-
-	@Override
-	public void setOutputFolder(String outputFolder) {
-		this.outputFolder = outputFolder;
-	}
-
-	@Override
-	public String getTemplateStyleFileURI() {
-		return templateStyleFileURI;
-	}
-
-	@Override
-	public void setTemplateStyleFileURI(String templateStyleFileURI) {
-		this.templateStyleFileURI = templateStyleFileURI;
-	}
-
-}
diff --git a/plugins/core/org.eclipse.papyrus.model2doc.core/src/org/eclipse/papyrus/model2doc/core/internal/transcriber/UMLTranscriber.java b/plugins/core/org.eclipse.papyrus.model2doc.core/src/org/eclipse/papyrus/model2doc/core/internal/transcriber/UMLTranscriber.java
deleted file mode 100755
index b416079..0000000
--- a/plugins/core/org.eclipse.papyrus.model2doc.core/src/org/eclipse/papyrus/model2doc/core/internal/transcriber/UMLTranscriber.java
+++ /dev/null
@@ -1,253 +0,0 @@
-/*****************************************************************************
- * Copyright (c) 2019 CEA LIST.
- *
- * 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
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *  Yupanqui Munoz (CEA LIST) yupanqui.munozjulho@cea.fr - Initial API and implementation
- *  Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
- *****************************************************************************/
-package org.eclipse.papyrus.model2doc.core.internal.transcriber;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.stream.Collectors;
-
-import org.eclipse.papyrus.model2doc.core.builtintypes.BasicList;
-import org.eclipse.papyrus.model2doc.core.builtintypes.BasicRow;
-import org.eclipse.papyrus.model2doc.core.builtintypes.BasicTable;
-import org.eclipse.papyrus.model2doc.core.builtintypes.BuiltInTypesFactory;
-import org.eclipse.papyrus.model2doc.core.builtintypes.CellLocation;
-import org.eclipse.papyrus.model2doc.core.builtintypes.ListItem;
-import org.eclipse.papyrus.model2doc.core.builtintypes.TextCell;
-import org.eclipse.papyrus.model2doc.core.builtintypes.TextListItem;
-import org.eclipse.papyrus.model2doc.core.service.DiagramToImageService;
-import org.eclipse.papyrus.model2doc.core.service.DiagramToImageServiceImpl;
-import org.eclipse.papyrus.model2doc.core.transcriber.Transcriber;
-import org.eclipse.papyrus.model2doc.core.transcription.ImageDescription;
-import org.eclipse.papyrus.model2doc.core.transcription.Transcription;
-import org.eclipse.papyrus.uml.internationalization.utils.utils.UMLLabelInternationalization;
-import org.eclipse.uml2.uml.Class;
-import org.eclipse.uml2.uml.Package;
-import org.eclipse.uml2.uml.Property;
-import org.eclipse.uml2.uml.Type;
-
-/**
- * Default Transcriber for UML model.
- *
- */
-public class UMLTranscriber implements Transcriber {
-
-	private Package root = null;
-
-	private Transcription transcription = null;
-
-	private List<Class> classes = new ArrayList<>();
-
-	private UMLLabelInternationalization umlLabelInternationalization = null;
-
-	private String imageOutputFolder = null;
-
-	private DiagramToImageService diagramToImageService = new DiagramToImageServiceImpl();
-
-	/**
-	 *
-	 * Constructor.
-	 *
-	 * @param rootPackage
-	 *            the root package
-	 * @param transcription
-	 *            the object in charge to do the transcription
-	 */
-	public UMLTranscriber(Package rootPackage, Transcription transcription) {
-		root = rootPackage;
-		this.transcription = transcription;
-		umlLabelInternationalization = UMLLabelInternationalization.getInstance();
-		// in this version, we don't have an intermediate model storing images in its dedicated folder, so
-		// we use the project folder
-		imageOutputFolder = transcription.getGeneratorConfig().getDocumentFolder();
-	}
-
-	/**
-	 * Read UML model and transcribe it.
-	 */
-	@Override
-	public String transcribe() {
-		// Transcribe label of root package how document main title
-		transcription.writeDocumentMainTitle(umlLabelInternationalization.getLabel(root));
-
-		transcription.writeTableOfContents("Table Of Contents");
-
-		// Get images generated of diagrams
-		List<ImageDescription> images = diagramToImageService.getImagesOfDiagrams(root, imageOutputFolder);
-
-		// Import images
-		for (ImageDescription image : images) {
-			transcription.importImage(image, image.getSubtitle());
-		}
-
-		// Transcribe classes directly owned by root package
-		transcribeClasses(root);
-
-		// Add table of list of packages and their owned classes
-
-		// 1. create a new table
-		final BasicTable table = BuiltInTypesFactory.eINSTANCE.createBasicTable();
-
-		// 2. create the column headers
-		final BasicRow columnHeaderRow = BuiltInTypesFactory.eINSTANCE.createBasicRow();
-		table.getRows().add(columnHeaderRow);
-		final TextCell cornerCell = BuiltInTypesFactory.eINSTANCE.createTextCell();
-		cornerCell.setText("");// TODO add a default text value to empty string
-		cornerCell.setLocation(CellLocation.CORNER);
-		columnHeaderRow.getCells().add(cornerCell);
-
-		final TextCell columnHeaderPackageCell = BuiltInTypesFactory.eINSTANCE.createTextCell();
-		columnHeaderRow.getCells().add(columnHeaderPackageCell);
-		columnHeaderPackageCell.setText("Packages");// TODO add a default text value to empty string
-		columnHeaderPackageCell.setLocation(CellLocation.COLUMN_HEADER);
-
-		final TextCell columnHeaderClassedCell = BuiltInTypesFactory.eINSTANCE.createTextCell();
-		columnHeaderRow.getCells().add(columnHeaderClassedCell);
-		columnHeaderClassedCell.setText("Classes");
-		columnHeaderClassedCell.setLocation(CellLocation.COLUMN_HEADER);
-
-
-		// 3. create row header and the body
-		final Iterator<Package> packIter = root.getNestedPackages().iterator();
-		int nbRow = 0;
-		while (packIter.hasNext()) {
-			nbRow++;
-			final Package nestedPackage = packIter.next();
-			final BasicRow row = BuiltInTypesFactory.eINSTANCE.createBasicRow();
-			table.getRows().add(row);
-
-
-			final TextCell rowHeaderCell = BuiltInTypesFactory.eINSTANCE.createTextCell();
-			row.getCells().add(rowHeaderCell);
-			rowHeaderCell.setText(Integer.toString(nbRow));
-			rowHeaderCell.setLocation(CellLocation.ROW_HEADER);
-
-			final TextCell packageCellBody = BuiltInTypesFactory.eINSTANCE.createTextCell();
-			row.getCells().add(packageCellBody);
-			packageCellBody.setText(this.umlLabelInternationalization.getLabel(nestedPackage));
-			packageCellBody.setLocation(CellLocation.BODY);
-
-			final TextCell classesCellBody = BuiltInTypesFactory.eINSTANCE.createTextCell();
-			row.getCells().add(classesCellBody);
-			final StringBuilder builder = new StringBuilder();
-			final Iterator<Class> classIterator = nestedPackage.getOwnedTypes().stream().filter(Class.class::isInstance).map(Class.class::cast).collect(Collectors.toList()).iterator();
-			while (classIterator.hasNext()) {
-				final Class current = classIterator.next();
-				builder.append(umlLabelInternationalization.getLabel(current));
-				if (classIterator.hasNext()) {
-					builder.append(", "); //$NON-NLS-1$
-				}
-			}
-			classesCellBody.setText(builder.toString());
-			classesCellBody.setLocation(CellLocation.BODY);
-		}
-
-		transcription.writeTable(table);
-
-		// Transcribe nested packages owned by root package
-		for (Package nestedPackage : root.getNestedPackages()) {
-			transcribeNestedPackages(nestedPackage, 1);
-
-		}
-
-		transcription.refreshTablesOfIndexes();
-
-		// Save transcription
-		return transcription.save(umlLabelInternationalization.getLabel(root));
-	}
-
-	/**
-	 * Get nested packages and transcribe them.
-	 *
-	 * @param owner
-	 *            owner package
-	 * @param level
-	 *            nested package level
-	 */
-	private void transcribeNestedPackages(Package owner, int level) {
-		// Transcribe label of owner package how section title
-		transcription.writeSectionTitle(umlLabelInternationalization.getLabel(owner), level);
-
-		// Get images generated of diagrams
-		List<ImageDescription> images = diagramToImageService.getImagesOfDiagrams(owner, imageOutputFolder);
-
-		// Import images
-		for (ImageDescription image : images) {
-			transcription.importImage(image, image.getSubtitle());
-		}
-
-		// Transcribe classes directly owned by owner package
-		transcribeClasses(owner);
-
-		for (Package nestedPackage : owner.getNestedPackages()) {
-			// Transcribe nested packages owned by owner package
-			transcribeNestedPackages(nestedPackage, level + 1);
-		}
-	}
-
-	/**
-	 * Get classes and transcribe them.
-	 *
-	 * @param owner
-	 *            owner package
-	 */
-	private void transcribeClasses(Package owner) {
-		// Get classes owned by owner package
-		for (Type type : owner.getOwnedTypes()) {
-			if (type instanceof Class) {
-				classes.add((Class) type);
-			}
-		}
-
-		// Transcribe classes
-		for (Class clazz : classes) {
-			// Transcribe label of class how paragraph
-			transcription.writeParagraph(umlLabelInternationalization.getLabel(clazz), false);
-			// Transcribe properties of each class
-			transcribeProperties(clazz);
-
-			// Get images generated of diagrams
-			List<ImageDescription> images = diagramToImageService.getImagesOfDiagrams(clazz, imageOutputFolder);
-
-			// Import images
-			for (ImageDescription image : images) {
-				transcription.importImage(image, image.getSubtitle());
-			}
-		}
-		classes.clear();
-	}
-
-	/**
-	 * Get properties and transcribe them.
-	 *
-	 * @param owner
-	 *            owner class
-	 */
-	private void transcribeProperties(Class owner) {
-		final List<ListItem> items = new ArrayList<>();
-		// Get properties owned by owner class
-		for (Property property : owner.getOwnedAttributes()) {
-			final TextListItem item = BuiltInTypesFactory.eINSTANCE.createTextListItem();
-			item.setText(umlLabelInternationalization.getLabel(property));
-			items.add(item);
-		}
-
-		if (items.size() > 0) {
-			final BasicList list = BuiltInTypesFactory.eINSTANCE.createBasicList();
-			list.getItems().addAll(items);
-			transcription.writeList(list, false);
-		}
-	}
-}
diff --git a/plugins/core/org.eclipse.papyrus.model2doc.core/src/org/eclipse/papyrus/model2doc/core/internal/transcription/DefaultCoverPage.java b/plugins/core/org.eclipse.papyrus.model2doc.core/src/org/eclipse/papyrus/model2doc/core/internal/transcription/DefaultCoverPage.java
deleted file mode 100755
index 304458a..0000000
--- a/plugins/core/org.eclipse.papyrus.model2doc.core/src/org/eclipse/papyrus/model2doc/core/internal/transcription/DefaultCoverPage.java
+++ /dev/null
@@ -1,187 +0,0 @@
-/*****************************************************************************
- * Copyright (c) 2019 CEA LIST.
- *
- * 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
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *  Yupanqui Munoz (CEA LIST) yupanqui.munozjulho@cea.fr - Initial API and implementation
- *	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
- *****************************************************************************/
-package org.eclipse.papyrus.model2doc.core.internal.transcription;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.papyrus.model2doc.core.transcription.CoverPage;
-
-/**
- * This class defines cove page content. 
- *
- */
-public class DefaultCoverPage implements CoverPage {
-	
-	private String mainTitle;
-	
-	private String subtitle;
-	
-	private String version;
-	
-	private String creationDate;
-	
-	private String lastRevisionDate;
-	
-	private String project;
-	
-	private List<String> organizations = new ArrayList<String>();
-	
-	private List<String> authors = new ArrayList<String>();
-
-	/**
-	 * Get Main Title.
-	 * 
-	 * @return
-	 */
-	public String getMainTitle() {
-		return mainTitle;
-	}
-
-	/**
-	 * Set Main Title.
-	 * 
-	 * @param mainTitle
-	 */
-	public void setMainTitle(String mainTitle) {
-		this.mainTitle = mainTitle;
-	}
-
-	/**
-	 * Get Subtitle.
-	 * 
-	 * @return
-	 */
-	public String getSubtitle() {
-		return subtitle;
-	}
-
-	/**
-	 * Set Subtitle.
-	 * 
-	 * @param subtitle
-	 */
-	public void setSubTitle(String subtitle) {
-		this.subtitle = subtitle;
-	}
-
-	/**
-	 * Get Version.
-	 * 
-	 * @return
-	 */
-	public String getVersion() {
-		return version;
-	}
-
-	/**
-	 * Set Version.
-	 * 
-	 * @param version
-	 */
-	public void setVersion(String version) {
-		this.version = version;
-	}
-
-	/**
-	 * Get Creation Date.
-	 * 
-	 * @return
-	 */
-	public String getCreationDate() {
-		return creationDate;
-	}
-
-	/**
-	 * Set Creation Date.
-	 *  
-	 * @param creationDate
-	 */
-	public void setCreationDate(String creationDate) {
-		this.creationDate = creationDate;
-	}
-
-	/**
-	 * Get Last Revision Date.
-	 * 
-	 * @return
-	 */
-	public String getLastRevisionDate() {
-		return lastRevisionDate;
-	}
-
-	/**
-	 * Set Last Revision Date.
-	 * 
-	 * @param lastRevisionDate
-	 */
-	public void setLastRevisionDate(String lastRevisionDate) {
-		this.lastRevisionDate = lastRevisionDate;
-	}
-
-	/**
-	 * Get Project.
-	 * @return
-	 */
-	public String getProject() {
-		return project;
-	}
-
-	/**
-	 * Set Project.
-	 * 
-	 * @param project
-	 */
-	public void setProject(String project) {
-		this.project = project;
-	}
-
-	/**
-	 * Get Organizations.
-	 * 
-	 * @return
-	 */
-	public List<String> getOrganizations() {
-		return organizations;
-	}
-
-	/**
-	 * Set Organizations.
-	 * 
-	 * @param organizations
-	 */
-	public void setOrganizations(List<String> organizations) {
-		this.organizations = organizations;
-	}
-
-	/**
-	 * Get Authors.
-	 * 
-	 * @return
-	 */
-	public List<String> getAuthors() {
-		return authors;
-	}
-
-	/**
-	 * Set Authors.
-	 * 
-	 * @param authors
-	 */
-	public void setAuthors(List<String> authors) {
-		this.authors = authors;
-	}
-	
-}
diff --git a/plugins/core/org.eclipse.papyrus.model2doc.core/src/org/eclipse/papyrus/model2doc/core/internal/transcription/DefaultImageDescription.java b/plugins/core/org.eclipse.papyrus.model2doc.core/src/org/eclipse/papyrus/model2doc/core/internal/transcription/DefaultImageDescription.java
deleted file mode 100755
index 0bda624..0000000
--- a/plugins/core/org.eclipse.papyrus.model2doc.core/src/org/eclipse/papyrus/model2doc/core/internal/transcription/DefaultImageDescription.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*****************************************************************************
- * Copyright (c) 2019 CEA LIST.
- *
- * 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
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *  Yupanqui Munoz (CEA LIST) yupanqui.munozjulho@cea.fr - Initial API and implementation
- *	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
- *****************************************************************************/
-package org.eclipse.papyrus.model2doc.core.internal.transcription;
-
-import org.eclipse.papyrus.model2doc.core.transcription.ImageDescription;
-
-public class DefaultImageDescription implements ImageDescription {
-
-	private String path;
-	
-	private String subtitle;
-	
-	/**
-	 * Get Path.
-	 * 
-	 * @return
-	 */
-	public String getPath() {
-		return path;
-	}
-
-	/**
-	 * Set Path.
-	 * 
-	 * @param path
-	 */
-	public void setPath(String path) {
-		this.path = path;
-	}
-
-	/**
-	 * Get Subtitle.
-	 * 
-	 * @return
-	 */
-	public String getSubtitle() {
-		return subtitle;
-	}
-
-	/**
-	 * Set Subtitle.
-	 * 
-	 * @param subtitle
-	 */
-	public void setSubtitle(String subtitle) {
-		this.subtitle = subtitle;
-	}
-}
diff --git a/plugins/core/org.eclipse.papyrus.model2doc.core/src/org/eclipse/papyrus/model2doc/core/internal/util/DiagramToImageUtil.java b/plugins/core/org.eclipse.papyrus.model2doc.core/src/org/eclipse/papyrus/model2doc/core/internal/util/DiagramToImageUtil.java
deleted file mode 100755
index dc108fe..0000000
--- a/plugins/core/org.eclipse.papyrus.model2doc.core/src/org/eclipse/papyrus/model2doc/core/internal/util/DiagramToImageUtil.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*****************************************************************************
- * Copyright (c) 2019 CEA LIST.
- *
- * 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
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *  Yupanqui Munoz (CEA LIST) yupanqui.munozjulho@cea.fr - Initial API and implementation
- *	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
- *****************************************************************************/
-package org.eclipse.papyrus.model2doc.core.internal.util;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.util.EcoreUtil;
-import org.eclipse.gmf.runtime.diagram.core.preferences.PreferencesHint;
-import org.eclipse.gmf.runtime.diagram.ui.image.ImageFileFormat;
-import org.eclipse.gmf.runtime.diagram.ui.render.util.CopyToImageUtil;
-import org.eclipse.gmf.runtime.notation.Diagram;
-import org.eclipse.papyrus.infra.gmfdiag.common.model.NotationUtils;
-import org.eclipse.papyrus.infra.gmfdiag.common.utils.DiagramUtils;
-import org.eclipse.uml2.uml.Element;
-
-import org.eclipse.papyrus.model2doc.core.Activator;
-import org.eclipse.papyrus.model2doc.core.transcription.ImageDescription;
-import org.eclipse.papyrus.model2doc.core.transcription.ImageDescriptionFactory;
-
-/**
- * Utility class to render a diagram to an image file.
- *
- */
-public class DiagramToImageUtil {
-
-	private static final String SPACE = " "; //$NON-NLS-1$
-
-	private static final String UNDERLINE = "_"; //$NON-NLS-1$
-
-	private static final String SVG_EXTENSION = ".svg"; //$NON-NLS-1$
-
-	/**
-	 * Constructor.
-	 *
-	 */
-	private DiagramToImageUtil() {
-		// to avoid instantiation
-	}
-
-	/**
-	 * Get images generated of diagrams directly owned by owner (an UML Element).
-	 * 
-	 * @param owner
-	 *            the UML Element
-	 * @param outputFolder
-	 * @return
-	 */
-	public static List<ImageDescription> getImagesOfDiagrams(Element owner, String outputFolder) {
-		List<ImageDescription> images = new ArrayList<ImageDescription>();
-		String pathRoot = ResourcesPlugin.getWorkspace().getRoot().getLocation().toString();
-		
-		// Retrieve all diagrams directly owned by owner
-		List<Diagram> diagrams = getAllDiagrams(owner);
-
-		if (!diagrams.isEmpty()) {
-			// Generate image for each diagram
-			Iterator<Diagram> iteratorDiagrams = diagrams.iterator();
-			while (iteratorDiagrams.hasNext()) {
-				images.add(generateImageOfDiagram(iteratorDiagrams.next(), pathRoot));
-			}
-		}
-
-		return images;
-	}
-
-	/**
-	 * Get diagrams directly owned by owner (an UML Element).
-	 * 
-	 * @param owner
-	 *            the UML Element
-	 * @return
-	 */
-	public static List<Diagram> getAllDiagrams(Element owner) {
-		List<Diagram> diagrams = new ArrayList<Diagram>();
-		Iterable<EObject> roots = NotationUtils.getAllNotations((owner).eResource().getResourceSet());
-
-		for (EObject root : roots) {
-			if ((root instanceof Diagram) && (EcoreUtil.equals(DiagramUtils.getOwner((Diagram) root), owner))) {
-				diagrams.add((Diagram) root);
-			}
-		}
-		return diagrams;
-	}
-
-	/**
-	 * Generate image of diagram.
-	 * 
-	 * @param diagram
-	 * @param pathRoot
-	 * @return
-	 */
-	public static ImageDescription generateImageOfDiagram(Diagram diagram, String pathRoot) {
-		ImageDescription image = ImageDescriptionFactory.INSTANCE.getDefaultImageDescription();
-		StringBuilder fullPath = new StringBuilder();
-		fullPath.append(pathRoot);
-		fullPath.append(File.separator);
-		fullPath.append(generateImageFileName(diagram));
-		
-		Path imagePath = new Path(fullPath.toString());
-
-		if (!new File(imagePath.toString()).exists()) {
-			CopyToImageUtil copyImageUtil = new CopyToImageUtil();
-
-			try {
-				copyImageUtil.copyToImage(diagram, imagePath, ImageFileFormat.SVG, new NullProgressMonitor(),
-						PreferencesHint.USE_DEFAULTS);
-			} catch (CoreException e) {
-				Activator.log.error(e);
-			}
-		}
-
-		image.setPath(imagePath.toString());
-		image.setSubtitle(diagram.getName());
-
-		return image;
-	}
-
-	/**
-	 * Generate file name of image.
-	 * 
-	 * @param diagram
-	 * @return
-	 */
-	private static String generateImageFileName(Diagram diagram) {
-		StringBuilder imageFileNameBuilder = new StringBuilder();
-		String fileName = diagram.getName().replaceAll(SPACE, UNDERLINE);
-		imageFileNameBuilder.append(fileName);
-		imageFileNameBuilder.append(new Date().getTime());
-		imageFileNameBuilder.append(SVG_EXTENSION);
-
-		return imageFileNameBuilder.toString();
-	}
-}
diff --git a/plugins/core/org.eclipse.papyrus.model2doc.core/src/org/eclipse/papyrus/model2doc/core/internal/util/TemplateResourceUtil.java b/plugins/core/org.eclipse.papyrus.model2doc.core/src/org/eclipse/papyrus/model2doc/core/internal/util/TemplateResourceUtil.java
deleted file mode 100755
index df104d5..0000000
--- a/plugins/core/org.eclipse.papyrus.model2doc.core/src/org/eclipse/papyrus/model2doc/core/internal/util/TemplateResourceUtil.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*****************************************************************************
- * Copyright (c) 2019 CEA LIST.
- *
- * 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
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *  Yupanqui Munoz (CEA LIST) yupanqui.munozjulho@cea.fr - Initial API and implementation
- *	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
- *****************************************************************************/
-package org.eclipse.papyrus.model2doc.core.internal.util;
-
-import java.io.IOException;
-import java.net.URL;
-
-import org.eclipse.core.runtime.FileLocator;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.core.runtime.Platform;
-import org.osgi.framework.Bundle;
-
-import org.eclipse.papyrus.model2doc.core.Activator;
-
-/**
- * Utility class for management of template resource.
- *
- */
-public class TemplateResourceUtil {
-	
-	/**
-	 * Constructor.
-	 *
-	 */
-	private TemplateResourceUtil() {
-		// to avoid instantiation
-	}
-	
-	/**
-	 * Get template URL from bundle.
-	 * 
-	 * @param bundleID
-	 * @param templatePathInBundle
-	 * @return
-	 */
-	public static final String getTemplateURLFromPlugIn(final String bundleID, final String templatePathInBundle) {
-		Bundle bundle = Platform.getBundle(bundleID); // $NON-NLS-1$
-		URL eclipseURL = FileLocator.find(bundle, new Path(templatePathInBundle), null);
-		String templateURL = null;
-		try {
-			URL fileURL = FileLocator.toFileURL(eclipseURL);
-			templateURL = fileURL.toString();
-			templateURL = templateURL.replaceAll("file:/", ""); //$NON-NLS-1$ //$NON-NLS-2$
-		} catch (IOException e) {
-			Activator.log.error(e);
-		}
-		return templateURL;
-	}
-}
diff --git a/plugins/core/org.eclipse.papyrus.model2doc.core/src/org/eclipse/papyrus/model2doc/core/internal/util/WorkspaceResourceUtil.java b/plugins/core/org.eclipse.papyrus.model2doc.core/src/org/eclipse/papyrus/model2doc/core/internal/util/WorkspaceResourceUtil.java
deleted file mode 100755
index 4b84af6..0000000
--- a/plugins/core/org.eclipse.papyrus.model2doc.core/src/org/eclipse/papyrus/model2doc/core/internal/util/WorkspaceResourceUtil.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*****************************************************************************
- * Copyright (c) 2019 CEA LIST.
- *
- * 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
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *  Yupanqui Munoz (CEA LIST) yupanqui.munozjulho@cea.fr - Initial API and implementation
- *	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
- *****************************************************************************/
-package org.eclipse.papyrus.model2doc.core.internal.util;
-
-import java.util.StringTokenizer;
-
-import org.eclipse.core.resources.IContainer;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.emf.ecore.EObject;
-
-import org.eclipse.papyrus.model2doc.core.Activator;
-
-/**
- * Utility class for management of workspace resources.
- *
- */
-public class WorkspaceResourceUtil {
-	
-	/** Default folder for storing Model2Doc configurations. */
-	public static final String MODEL2DOC_CONFIGS_FOLDER = ".model2doc_configs"; //$NON-NLS-1$
-	
-	/**
-	 * Constructor.
-	 *
-	 */
-	private WorkspaceResourceUtil() {
-		// to avoid instantiation
-	}
-
-	/**
-	 * Calculate project folder from selected UML element in the model.
-	 * 
-	 * @param element
-	 * 			UML element
-	 * @return the project (default) folder to use to save the generated file. it is
-	 *         a path relative to the current workspace
-	 */
-	public static String calculateProjectFolder(EObject element) {
-		String output = element.eResource().getURI().toPlatformString(true);
-		final IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(output));
-		final IContainer parent = file.getParent();
-		output = parent.getFullPath().toString();
-		return output;
-	}
-	
-	/**
-	 * Refresh the workspace in order to make appears the created file.
-	 * 
-	 * @param outputFolder
-	 */
-	public static void refreshWorkspace(String outputFolder) {
-		IContainer container;
-
-		int nbToken = new StringTokenizer(outputFolder, "/").countTokens(); //$NON-NLS-1$
-		if (nbToken == 1) {// it is a project
-			container = ResourcesPlugin.getWorkspace().getRoot().getProject(outputFolder); // only one /
-		} else {// it is a folder in a project
-			container = ResourcesPlugin.getWorkspace().getRoot().getFolder(new Path(outputFolder));
-		}
-
-		try {
-			container.refreshLocal(2, new NullProgressMonitor());
-		} catch (CoreException e) {
-			Activator.log.error(e);
-		}
-	}
-
-}
diff --git a/plugins/core/org.eclipse.papyrus.model2doc.core/src/org/eclipse/papyrus/model2doc/core/service/DiagramToImageService.java b/plugins/core/org.eclipse.papyrus.model2doc.core/src/org/eclipse/papyrus/model2doc/core/service/DiagramToImageService.java
deleted file mode 100755
index 10c19cf..0000000
--- a/plugins/core/org.eclipse.papyrus.model2doc.core/src/org/eclipse/papyrus/model2doc/core/service/DiagramToImageService.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*****************************************************************************
- * Copyright (c) 2019 CEA LIST.
- *
- * 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
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *  Yupanqui Munoz (CEA LIST) yupanqui.munozjulho@cea.fr - Initial API and implementation
- *	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
- *****************************************************************************/
-package org.eclipse.papyrus.model2doc.core.service;
-
-import java.util.List;
-
-import org.eclipse.gmf.runtime.notation.Diagram;
-import org.eclipse.uml2.uml.Element;
-
-import org.eclipse.papyrus.model2doc.core.transcription.ImageDescription;
-
-/**
- * Service interface for rendering a diagram to an image file.
- * 
- * @since 3.0
- */
-public interface DiagramToImageService {
-
-	/**
-	 * Get images generated of diagrams directly owned by owner (an UML Element).
-	 * 
-	 * @param owner
-	 *            the UML Element
-	 * @param outputFolder
-	 * @return
-	 */
-	public List<ImageDescription> getImagesOfDiagrams(Element owner, String outputFolder);
-
-	/**
-	 * Get diagrams directly owned by owner (an UML Element).
-	 * 
-	 * @param owner
-	 *            the UML Element
-	 * @return
-	 */
-	public List<Diagram> getAllDiagrams(Element owner);
-
-	/**
-	 * Generate image of diagram.
-	 * 
-	 * @param diagram
-	 * @param foldersPath
-	 * @return
-	 */
-	public ImageDescription generateImageOfDiagram(Diagram diagram, String foldersPath);
-
-}
diff --git a/plugins/core/org.eclipse.papyrus.model2doc.core/src/org/eclipse/papyrus/model2doc/core/service/DiagramToImageServiceImpl.java b/plugins/core/org.eclipse.papyrus.model2doc.core/src/org/eclipse/papyrus/model2doc/core/service/DiagramToImageServiceImpl.java
deleted file mode 100755
index 0feed41..0000000
--- a/plugins/core/org.eclipse.papyrus.model2doc.core/src/org/eclipse/papyrus/model2doc/core/service/DiagramToImageServiceImpl.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*****************************************************************************
- * Copyright (c) 2019 CEA LIST.
- *
- * 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
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *  Yupanqui Munoz (CEA LIST) yupanqui.munozjulho@cea.fr - Initial API and implementation
- *	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
- *****************************************************************************/
-package org.eclipse.papyrus.model2doc.core.service;
-
-import java.util.List;
-
-import org.eclipse.gmf.runtime.notation.Diagram;
-import org.eclipse.uml2.uml.Element;
-
-import org.eclipse.papyrus.model2doc.core.internal.util.DiagramToImageUtil;
-import org.eclipse.papyrus.model2doc.core.transcription.ImageDescription;
-
-/**
- * Implemented service class for rendering a diagram to an image file.
- * 
- * @since 3.0
- *
- */
-public class DiagramToImageServiceImpl implements DiagramToImageService {
-
-	@Override
-	public List<ImageDescription> getImagesOfDiagrams(Element owner, String outputFolder) {
-		return DiagramToImageUtil.getImagesOfDiagrams(owner, outputFolder);
-	}
-
-	@Override
-	public List<Diagram> getAllDiagrams(Element owner) {
-		return DiagramToImageUtil.getAllDiagrams(owner);
-	}
-
-	@Override
-	public ImageDescription generateImageOfDiagram(Diagram diagram, String foldersPath) {
-		return DiagramToImageUtil.generateImageOfDiagram(diagram, foldersPath);
-	}
-
-}
diff --git a/plugins/core/org.eclipse.papyrus.model2doc.core/src/org/eclipse/papyrus/model2doc/core/service/TemplateResourceService.java b/plugins/core/org.eclipse.papyrus.model2doc.core/src/org/eclipse/papyrus/model2doc/core/service/TemplateResourceService.java
deleted file mode 100755
index 81bca61..0000000
--- a/plugins/core/org.eclipse.papyrus.model2doc.core/src/org/eclipse/papyrus/model2doc/core/service/TemplateResourceService.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*****************************************************************************
- * Copyright (c) 2019 CEA LIST.
- *
- * 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
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *  Yupanqui Munoz (CEA LIST) yupanqui.munozjulho@cea.fr - Initial API and implementation
- *	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
- *****************************************************************************/
-package org.eclipse.papyrus.model2doc.core.service;
-
-/**
- * Service interface for management of template resource.
- *
- */
-public interface TemplateResourceService {
-	
-	/**
-	 * Get template URL from bundle.
-	 * 
-	 * @return
-	 */
-	public String getTemplateURLFromPlugIn();
-	
-	/**
-	 * Get plug-in ID who contains the template.
-	 * 
-	 * @return
-	 */
-	public String getTemplatePlugInID();
-	
-	/**
-	 * Get template path in plug-in. 
-	 * 
-	 * @return
-	 */
-	public String getTemplatePathInPlugIn();
-
-	/**
-	 * Get template file extensions.
-	 * @return
-	 */
-	public String[] getTemplateFileExtensions();
-	
-
-}
diff --git a/plugins/core/org.eclipse.papyrus.model2doc.core/src/org/eclipse/papyrus/model2doc/core/service/TemplateResourceServiceImpl.java b/plugins/core/org.eclipse.papyrus.model2doc.core/src/org/eclipse/papyrus/model2doc/core/service/TemplateResourceServiceImpl.java
deleted file mode 100755
index 01ddf61..0000000
--- a/plugins/core/org.eclipse.papyrus.model2doc.core/src/org/eclipse/papyrus/model2doc/core/service/TemplateResourceServiceImpl.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*****************************************************************************
- * Copyright (c) 2019 CEA LIST.
- *
- * 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
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *  Yupanqui Munoz (CEA LIST) yupanqui.munozjulho@cea.fr - Initial API and implementation
- *	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
- *****************************************************************************/
-package org.eclipse.papyrus.model2doc.core.service;
-
-import org.eclipse.papyrus.model2doc.core.internal.util.TemplateResourceUtil;
-
-/**
- * Abstract implement class of service for management of template resource.
- *
- */
-public abstract class TemplateResourceServiceImpl implements TemplateResourceService {
-
-	@Override
-	public String getTemplateURLFromPlugIn() {
-		return TemplateResourceUtil.getTemplateURLFromPlugIn(getTemplatePlugInID(), getTemplatePathInPlugIn());
-	}
-
-}
diff --git a/plugins/core/org.eclipse.papyrus.model2doc.core/src/org/eclipse/papyrus/model2doc/core/service/WorkspaceResourceService.java b/plugins/core/org.eclipse.papyrus.model2doc.core/src/org/eclipse/papyrus/model2doc/core/service/WorkspaceResourceService.java
deleted file mode 100755
index 8fb6255..0000000
--- a/plugins/core/org.eclipse.papyrus.model2doc.core/src/org/eclipse/papyrus/model2doc/core/service/WorkspaceResourceService.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*****************************************************************************
- * Copyright (c) 2019 CEA LIST.
- *
- * 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
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *  Yupanqui Munoz (CEA LIST) yupanqui.munozjulho@cea.fr - Initial API and implementation
- *	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
- *****************************************************************************/
-package org.eclipse.papyrus.model2doc.core.service;
-
-import org.eclipse.emf.ecore.EObject;
-
-/**
- * Service interface for management of workspace resources.
- *
- */
-public interface WorkspaceResourceService {
-
-	/**
-	 * Calculate project folder from selected UML element in the model.
-	 * 
-	 * @since 2.0
-	 * 
-	 * @param eObject
-	 * 			the EObject
-	 * @return the project (default) folder to use to save the generated file. it is
-	 *         a path relative to the current workspace
-	 */
-	public String calculateProjectFolder(EObject eObject);
-	
-	/**
-	 * Refresh the workspace in order to make appears the created file.
-	 * 
-	 * @param outputFolder
-	 */
-	public void refreshWorkspace(String outputFolder);
-	
-	/**
-	 * Get default folder for storing Model2Doc configurations.
-	 * 
-	 * @return
-	 */
-	public String getModel2ConfigForder();
-}
diff --git a/plugins/core/org.eclipse.papyrus.model2doc.core/src/org/eclipse/papyrus/model2doc/core/service/WorkspaceResourceServiceImpl.java b/plugins/core/org.eclipse.papyrus.model2doc.core/src/org/eclipse/papyrus/model2doc/core/service/WorkspaceResourceServiceImpl.java
deleted file mode 100755
index 49992cf..0000000
--- a/plugins/core/org.eclipse.papyrus.model2doc.core/src/org/eclipse/papyrus/model2doc/core/service/WorkspaceResourceServiceImpl.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*****************************************************************************
- * Copyright (c) 2019 CEA LIST.
- *
- * 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
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *  Yupanqui Munoz (CEA LIST) yupanqui.munozjulho@cea.fr - Initial API and implementation
- *	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
- *****************************************************************************/
-package org.eclipse.papyrus.model2doc.core.service;
-
-import org.eclipse.emf.ecore.EObject;
-
-import org.eclipse.papyrus.model2doc.core.internal.util.WorkspaceResourceUtil;
-
-/**
- * Implement of service for management of workspace resources.
- *
- */
-public class WorkspaceResourceServiceImpl implements WorkspaceResourceService {
-	
-	/**
-	 * @since 2.0
-	 */
-	@Override
-	public String calculateProjectFolder(EObject eObject) {
-		return WorkspaceResourceUtil.calculateProjectFolder(eObject);
-	}
-	
-	@Override
-	public void refreshWorkspace(String outputFolder) {
-		WorkspaceResourceUtil.refreshWorkspace(outputFolder);
-	}
-
-	@Override
-	public String getModel2ConfigForder() {
-		return WorkspaceResourceUtil.MODEL2DOC_CONFIGS_FOLDER;
-	}
-
-}
diff --git a/plugins/core/org.eclipse.papyrus.model2doc.core/src/org/eclipse/papyrus/model2doc/core/transcriber/TranscriberFactory.java b/plugins/core/org.eclipse.papyrus.model2doc.core/src/org/eclipse/papyrus/model2doc/core/transcriber/TranscriberFactory.java
deleted file mode 100755
index e14a553..0000000
--- a/plugins/core/org.eclipse.papyrus.model2doc.core/src/org/eclipse/papyrus/model2doc/core/transcriber/TranscriberFactory.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*****************************************************************************
- * Copyright (c) 2019 CEA LIST.
- *
- * 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
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *  Yupanqui Munoz (CEA LIST) yupanqui.munozjulho@cea.fr - Initial API and implementation
- *	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
- *****************************************************************************/
-package org.eclipse.papyrus.model2doc.core.transcriber;
-
-import org.eclipse.uml2.uml.Package;
-
-import org.eclipse.papyrus.model2doc.core.internal.transcriber.UMLTranscriber;
-import org.eclipse.papyrus.model2doc.core.transcription.Transcription;
-
-/**
- * Transcriber Factory.
- * 
- */
-public class TranscriberFactory {
-	
-	public static final TranscriberFactory INSTANCE = new TranscriberFactory();
-	
-	/**
-	 * Constructor.
-	 *
-	 */
-	private TranscriberFactory() {
-		// to avoid instantiation
-	};
-
-	/**
-	 * Create UMLTranscriber.
-	 * 
-	 * @param rootPackage
-	 *            the root package
-	 * @param transcription
-	 *            the object in charge to do the transcription
-	 * @return
-	 * 		UMLTranscriber
-	 */
-	public Transcriber createUMLTranscriber(Package rootPackage, Transcription transcription) {
-		return new UMLTranscriber(rootPackage, transcription);
-	}
-}
diff --git a/plugins/core/org.eclipse.papyrus.model2doc.core/src/org/eclipse/papyrus/model2doc/core/transcription/CoverPageFactory.java b/plugins/core/org.eclipse.papyrus.model2doc.core/src/org/eclipse/papyrus/model2doc/core/transcription/CoverPageFactory.java
deleted file mode 100755
index f7bf8d4..0000000
--- a/plugins/core/org.eclipse.papyrus.model2doc.core/src/org/eclipse/papyrus/model2doc/core/transcription/CoverPageFactory.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*****************************************************************************
- * Copyright (c) 2019 CEA LIST.
- *
- * 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
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *  Yupanqui Munoz (CEA LIST) yupanqui.munozjulho@cea.fr - Initial API and implementation
- *	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
- *****************************************************************************/
-package org.eclipse.papyrus.model2doc.core.transcription;
-
-import org.eclipse.papyrus.model2doc.core.internal.transcription.DefaultCoverPage;
-
-/**
- * Cover Page Factory.
- *
- */
-public class CoverPageFactory {
-
-	public static final CoverPageFactory INSTANCE = new CoverPageFactory();
-	
-	/**
-	 * Constructor.
-	 *
-	 */
-	private CoverPageFactory() {
-		// to avoid instantiation
-	}
-	
-	/**
-	 * Get default cover page.
-	 * 
-	 * @return
-	 */
-	public CoverPage getDefaultCoverPage() {
-		return new DefaultCoverPage();
-	}
-
-}
diff --git a/plugins/core/org.eclipse.papyrus.model2doc.core/src/org/eclipse/papyrus/model2doc/core/transcription/ImageDescriptionFactory.java b/plugins/core/org.eclipse.papyrus.model2doc.core/src/org/eclipse/papyrus/model2doc/core/transcription/ImageDescriptionFactory.java
deleted file mode 100755
index 8716699..0000000
--- a/plugins/core/org.eclipse.papyrus.model2doc.core/src/org/eclipse/papyrus/model2doc/core/transcription/ImageDescriptionFactory.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*****************************************************************************
- * Copyright (c) 2019 CEA LIST.
- *
- * 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
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *  Yupanqui Munoz (CEA LIST) yupanqui.munozjulho@cea.fr - Initial API and implementation
- *	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
- *****************************************************************************/
-package org.eclipse.papyrus.model2doc.core.transcription;
-
-import org.eclipse.papyrus.model2doc.core.internal.transcription.DefaultImageDescription;
-
-/**
- * Image Description Factory.
- *
- */
-public class ImageDescriptionFactory {
-	
-	public static final ImageDescriptionFactory INSTANCE = new ImageDescriptionFactory();
-	
-	/**
-	 * Constructor.
-	 *
-	 */
-	private ImageDescriptionFactory() {
-		// to avoid instantiation
-	}
-	
-	
-	/**
-	 * Get default image description.
-	 * 
-	 * @return
-	 */
-	public ImageDescription getDefaultImageDescription() {
-		return new DefaultImageDescription();
-	}
-}
diff --git a/plugins/odt/org.eclipse.papyrus.model2doc.odt/src/org/eclipse/papyrus/model2doc/odt/service/ODTTemplateResourceService.java b/plugins/odt/org.eclipse.papyrus.model2doc.odt/src/org/eclipse/papyrus/model2doc/odt/service/ODTTemplateResourceService.java
deleted file mode 100755
index 939b3e3..0000000
--- a/plugins/odt/org.eclipse.papyrus.model2doc.odt/src/org/eclipse/papyrus/model2doc/odt/service/ODTTemplateResourceService.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*****************************************************************************
- * Copyright (c) 2019 CEA LIST.
- *
- * 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
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *  Yupanqui Munoz (CEA LIST) yupanqui.munozjulho@cea.fr - Initial API and implementation
- *	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
- *****************************************************************************/
-package org.eclipse.papyrus.model2doc.odt.service;
-
-import org.eclipse.papyrus.model2doc.core.service.TemplateResourceServiceImpl;
-import org.eclipse.papyrus.model2doc.odt.Activator;
-
-/**
- * Implement of service for management of Writer (LibreOffice) template resource.
- *
- */
-public class ODTTemplateResourceService extends TemplateResourceServiceImpl {
-	@Override
-	public String[] getTemplateFileExtensions() {
-		return new String [] {"odt", "ott"}; //$NON-NLS-1$ //$NON-NLS-2$
-	}
-
-	@Override
-	public String getTemplatePlugInID() {
-		return Activator.PLUGIN_ID;
-	}
-
-	@Override
-	public String getTemplatePathInPlugIn() {
-		return "/template/PapyrusTemplate.ott"; //$NON-NLS-1$
-	}
-
-}
