blob: 05e26dcca137be33977098abf803fe1f2d0c1a19 [file] [log] [blame]
/*****************************************************************************
* Copyright (c) 2013 CEA LIST.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* RĂ©gis CHEVREL: chevrel.regis <at> gmail.com
* CEA LIST - Initial API and implementation
*
*****************************************************************************/
package org.eclipse.papyrus.sysml.diagram.parametric.edit.part;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.PositionConstants;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.editpolicies.LayoutEditPolicy;
import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
import org.eclipse.gmf.runtime.diagram.ui.figures.IBorderItemLocator;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.papyrus.sysml.blocks.Block;
import org.eclipse.papyrus.sysml.constraints.ConstraintBlock;
import org.eclipse.papyrus.sysml.diagram.common.edit.part.BlockLabelNameEditPart;
import org.eclipse.papyrus.sysml.diagram.common.edit.part.StructureCompartmentEditPart;
import org.eclipse.papyrus.sysml.diagram.parametric.figures.ParametricDiagramFrameFigure;
import org.eclipse.papyrus.uml.diagram.common.edit.part.AbstractElementEditPart;
import org.eclipse.papyrus.uml.diagram.common.edit.part.ConstraintParameterAffixedNodeEditPart;
import org.eclipse.papyrus.uml.diagram.common.editpolicies.AffixedNodeAlignmentEditPolicy;
import org.eclipse.papyrus.uml.diagram.common.editpolicies.ShowHideRelatedContentsEditPolicy;
import org.eclipse.papyrus.uml.diagram.common.locator.FullInsidePortPositionLocator;
import org.eclipse.uml2.uml.Element;
import org.eclipse.uml2.uml.util.UMLUtil;
public class CustomBlockCompositeEditPartTN extends AbstractElementEditPart {
public CustomBlockCompositeEditPartTN(View view) {
super(view);
}
@Override
protected void createDefaultEditPolicies() {
installEditPolicy(ShowHideRelatedContentsEditPolicy.SHOW_HIDE_RELATED_CONTENTS_POLICY, new ShowHideRelatedContentsEditPolicy());
installEditPolicy(AffixedNodeAlignmentEditPolicy.AFFIXED_CHILD_ALIGNMENT_ROLE, new AffixedNodeAlignmentEditPolicy());
super.createDefaultEditPolicies();
}
@Override
protected IFigure createNodeShape() {
return this.primaryShape = new ParametricDiagramFrameFigure();
}
@Override
public ParametricDiagramFrameFigure getPrimaryShape() {
return (ParametricDiagramFrameFigure) primaryShape;
}
@Override
protected boolean addFixedChild(EditPart childEditPart) {
if (childEditPart instanceof BlockLabelNameEditPart) {
((BlockLabelNameEditPart) childEditPart).setLabel(getPrimaryShape().getNameLabel());
return true;
}
if (childEditPart instanceof StructureCompartmentEditPart) {
IFigure pane = getPrimaryShape();
setupContentPane(pane);
pane.add(((StructureCompartmentEditPart) childEditPart).getFigure());
return true;
}
if (childEditPart instanceof ConstraintParameterAffixedNodeEditPart) {
IBorderItemLocator locator = new FullInsidePortPositionLocator(getMainFigure(), PositionConstants.NONE);
getBorderedFigure().getBorderItemContainer().add(((ConstraintParameterAffixedNodeEditPart) childEditPart).getFigure(), locator);
return true;
}
return false;
}
@Override
protected boolean removeFixedChild(EditPart childEditPart) {
if (childEditPart instanceof BlockLabelNameEditPart) {
return true;
}
if (childEditPart instanceof StructureCompartmentEditPart) {
IFigure pane = getPrimaryShape();
setupContentPane(pane);
pane.remove(((StructureCompartmentEditPart) childEditPart).getFigure());
return true;
}
if (childEditPart instanceof ConstraintParameterAffixedNodeEditPart) {
getBorderedFigure().getBorderItemContainer().remove(((ConstraintParameterAffixedNodeEditPart) childEditPart).getFigure());
return true;
}
return false;
}
@Override
protected IFigure getContentPaneFor(IGraphicalEditPart editPart) {
return getContentPane();
}
@Override
public EditPart getPrimaryChildEditPart() {
return null;
}
@Override
protected LayoutEditPolicy createLayoutEditPolicy() {
return null;
}
@Override
protected void refreshVisuals() {
refreshStereotypes();
super.refreshVisuals();
}
protected void refreshStereotypes() {
Element resolveSemanticElement = (Element) this.resolveSemanticElement();
EList<EObject> stereotypeApplications = resolveSemanticElement.getStereotypeApplications();
List<EObject> additionnalStereotypeApplications = new ArrayList<EObject>();
for (EObject currentStereotypeApplication : stereotypeApplications) {
if (!(currentStereotypeApplication instanceof Block) && !(currentStereotypeApplication instanceof ConstraintBlock)) {
additionnalStereotypeApplications.add(currentStereotypeApplication);
}
}
StringBuilder stereotypeLabel = new StringBuilder();
String separator = ", ";
for (EObject eObject : additionnalStereotypeApplications) {
if (eObject != additionnalStereotypeApplications.get(0)) {
stereotypeLabel.append(separator);
}
stereotypeLabel.append(firstLetterToLowerCase(UMLUtil.getStereotype(eObject).getName()));
}
getPrimaryShape().setStereotypeLabel(stereotypeLabel.toString());
}
private String firstLetterToLowerCase(String string) {
String result = "";
if (string != null && string.length() != 0) {
String lowerCaseFirstLetter = string.substring(0, 1).toLowerCase();
result = lowerCaseFirstLetter + string.substring(1);
}
return result;
}
}