blob: b7ea4a36ba3807e0a6c77d7e19fb3c9f690edf41 [file] [log] [blame]
/*****************************************************************************
* Copyright (c) 2019, 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
* Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Bug 569249
*
*****************************************************************************/
package org.eclipse.papyrus.model2doc.uml.template2structure.internal.mappers;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.papyrus.model2doc.core.builtintypes.BasicRow;
import org.eclipse.papyrus.model2doc.core.builtintypes.BuiltInTypesFactory;
import org.eclipse.papyrus.model2doc.core.builtintypes.Cell;
import org.eclipse.papyrus.model2doc.core.builtintypes.CellLocation;
import org.eclipse.papyrus.model2doc.core.builtintypes.TextCell;
import org.eclipse.papyrus.model2doc.emf.documentstructure.BodyPart;
import org.eclipse.papyrus.model2doc.emf.documentstructure.EmptyLine;
import org.eclipse.papyrus.model2doc.emf.documentstructure.ExtendedBasicTable;
import org.eclipse.papyrus.model2doc.emf.documentstructure.Title;
import org.eclipse.papyrus.model2doc.emf.documentstructuretemplate.IColumn;
import org.eclipse.papyrus.model2doc.emf.template2structure.mapping.IMappingService;
import org.eclipse.papyrus.model2doc.uml.documentstructuretemplate.StereotypePropertyReferenceTableView;
/**
* This mapper creates a {@link BodyPart} from a {@link StereotypePropertyReferenceTableView}S
*/
public class StereotypePropertyReferenceTableViewMapper extends AbstractUMLTemplateToStructureMapper<StereotypePropertyReferenceTableView> {
/**
*
* Constructor.
*
*/
public StereotypePropertyReferenceTableViewMapper() {
super(TEMPLATE_EPACKAGE.getStereotypePropertyReferenceTableView(), BodyPart.class);
}
/**
* @see org.eclipse.papyrus.model2doc.emf.template2structure.mapping.AbstractTemplateToStructureMapper#doMap(org.eclipse.papyrus.model2doc.emf.template2structure.mapping.IMappingService, org.eclipse.emf.ecore.EObject, org.eclipse.emf.ecore.EObject,
* java.lang.Class)
*
* @param <T>
* @param mappingService
* @param documentTemplateElement
* @param semanticModelElement
* @param expectedReturnedClass
* @return
*/
@Override
protected <T> List<T> doMap(final IMappingService mappingService, final StereotypePropertyReferenceTableView stereotypePropertyReferenceTableView, final EObject semanticModelElement, final Class<T> expectedReturnedClass) {
if (false == stereotypePropertyReferenceTableView.generateBranch(semanticModelElement)) {
return Collections.emptyList();
}
List<T> returnedElements = new ArrayList<>();
final Collection<EObject> rows = stereotypePropertyReferenceTableView.getRows(semanticModelElement);
final Collection<IColumn> columns = stereotypePropertyReferenceTableView.getColumns();
if (rows.isEmpty() || columns.isEmpty()) {
return null;
}
Title title = null;
if (stereotypePropertyReferenceTableView.isGenerate()) {
if (stereotypePropertyReferenceTableView.isGenerateTitle()) {
title = STRUCTURE_EFACTORY.createTitle();
title.setTitle(stereotypePropertyReferenceTableView.buildPartTemplateTitle(null));
returnedElements.add(expectedReturnedClass.cast(title));
}
}
final ExtendedBasicTable table = STRUCTURE_EFACTORY.createExtendedBasicTable();
final EmptyLine emptyLine = STRUCTURE_EFACTORY.createEmptyLine(); // Bug 569249
if (title != null) {
title.getSubBodyParts().add(table);
title.getSubBodyParts().add(emptyLine);
} else {
returnedElements.add(expectedReturnedClass.cast(table));
returnedElements.add(expectedReturnedClass.cast(emptyLine));
}
// column header generation
if (stereotypePropertyReferenceTableView.isGenerateColumnHeader()) {
// we create the row for column header
final BasicRow columnHeader = BuiltInTypesFactory.eINSTANCE.createBasicRow();
table.getRows().add(columnHeader);
if (stereotypePropertyReferenceTableView.isGenerateRowHeader()) {
// we create the corner cell
final Cell cornerCell = BuiltInTypesFactory.eINSTANCE.createTextCell();
cornerCell.setLocation(CellLocation.CORNER);
columnHeader.getCells().add(cornerCell);
}
// we create the column
final Iterator<IColumn> colIter = columns.iterator();
while (colIter.hasNext()) {
final IColumn column = colIter.next();
final TextCell colHeaderCell = BuiltInTypesFactory.eINSTANCE.createTextCell();
colHeaderCell.setLocation(CellLocation.COLUMN_HEADER);
colHeaderCell.setText(column.buildColumnHeaderLabel());
columnHeader.getCells().add(colHeaderCell);
}
}
// row header and body generation
final Iterator<EObject> rowsIterator = rows.iterator();
while (rowsIterator.hasNext()) {
final EObject rowElement = rowsIterator.next();
final BasicRow bodyRow = BuiltInTypesFactory.eINSTANCE.createBasicRow();
table.getRows().add(bodyRow);
// row header creation
if (stereotypePropertyReferenceTableView.isGenerateRowHeader()) {
// we create the corner cell
final TextCell rowHeaderCell = BuiltInTypesFactory.eINSTANCE.createTextCell();
rowHeaderCell.setLocation(CellLocation.ROW_HEADER);
rowHeaderCell.setText(stereotypePropertyReferenceTableView.buildRowHeaderLabel(rowElement));
bodyRow.getCells().add(rowHeaderCell);
}
// body creation
// we create the column
final Iterator<IColumn> colIter = columns.iterator();
while (colIter.hasNext()) {
final IColumn column = colIter.next();
final TextCell bodyCell = BuiltInTypesFactory.eINSTANCE.createTextCell();
bodyCell.setLocation(CellLocation.BODY);
bodyCell.setText(column.buildCellLabel(column.getCellValue(rowElement)));
bodyRow.getCells().add(bodyCell);
}
}
return returnedElements;
}
}