*
*/
protected ElementFigure createElementFigure(final Element element,
boolean isLeaf, boolean isExpandable, Figure topFigure) {
ElementFigure elementFigure = null;
Figure decompostionTypeFigure = null;
if (!isLeaf) {
String decompostionType;
if (element instanceof SolutionInstrument)
decompostionType = RefinementType.IsA;
else
decompostionType = RefinementType.AND;
decompostionTypeFigure = new RefinementTypeFigure(decompostionType);
}
Figure globalTopFigure = new Figure();
if (topFigure != null)
globalTopFigure.add(topFigure);
if (element instanceof ConstrainedElement && ((ConstrainedElement)element).getPrecondition() != null && (!((ConstrainedElement)element).getPrecondition().getLogicConditions().isEmpty() || !((ConstrainedElement)element).getPrecondition().getBaseConditions().isEmpty())){
PreconditionFigure preconditionFigure = new PreconditionFigure(PreconditionFinder.formatConditionString(((ConstrainedElement)element).getPrecondition()));
globalTopFigure.add(preconditionFigure);
}
ToolbarLayout globalTopFigureLayout = new ToolbarLayout(false);
globalTopFigureLayout.setMinorAlignment(OrderedLayout.ALIGN_BOTTOMRIGHT);
globalTopFigure.setLayoutManager(globalTopFigureLayout);
globalTopFigure.setOpaque(false);
AbstractDecoratorFigure bodyFigure = null;
if (element instanceof Goal) {
bodyFigure = new SoftGoalFigure(element.getName(), isExpandable);
elementFigure = new ElementFigure(bodyFigure,
decompostionTypeFigure, globalTopFigure);
} else if (element instanceof Flaw) {
bodyFigure = new FlawFigure(element.getName(),
((Flaw) element).getInterpretationRule(), ((Flaw) element).getMetrics(), isExpandable);
elementFigure = new ElementFigure(bodyFigure,
decompostionTypeFigure, globalTopFigure);
} else if (element instanceof Principle) {
bodyFigure = new PrincipleFigure(element.getName(), isExpandable);
elementFigure = new ElementFigure(bodyFigure,
decompostionTypeFigure, globalTopFigure);
} else if (element instanceof Refactoring) {
bodyFigure = new SolutionInstrumentFigure(element.getName(), isExpandable);
elementFigure = new ElementFigure(bodyFigure,
decompostionTypeFigure, globalTopFigure);
} else if (element instanceof Pattern) {
bodyFigure = new SolutionInstrumentFigure(element.getName(), isExpandable);
elementFigure = new ElementFigure(bodyFigure,
decompostionTypeFigure, globalTopFigure);
}
if (bodyFigure != null && element != null) {
final AbstractDecoratorFigure finalBodyFigure = bodyFigure;
ModelElementChangeListener modelChangeListener = new ModelElementChangeListener() {
@Override
public void onRuntimeExceptionInListener(
RuntimeException exception) {
}
@Override
public void onChange(Notification notification) {
finalBodyFigure.setName(element.getName());
}
};
modelChangeListenerMap.put(modelChangeListener, element);
element.addModelElementChangeListener(modelChangeListener);
}
elementFigure.setToolTip(createTooltipFigure(element));
return elementFigure;
}