Frontier prepareMessage(ConstraintSet constraintSet, InGroupablesStack inGroupablesStack) { final Arrow graphic = createArrow(); final double arrowYStartLevel = graphic.getArrowYStartLevel(getStringBounder()); final double arrowYEndLevel = graphic.getArrowYEndLevel(getStringBounder()); for (LifeEvent lifeEvent : getMessage().getLiveEvents()) { beforeMessage(lifeEvent, arrowYStartLevel); } final double length = graphic.getArrowOnlyWidth(getStringBounder()); incFreeY(graphic.getPreferredHeight(getStringBounder())); double marginActivateAndDeactive = 0; if (getMessage().isActivateAndDeactive()) { marginActivateAndDeactive = 30; incFreeY(marginActivateAndDeactive); } getDrawingSet().addEvent(getMessage(), graphic); final LivingParticipantBox livingParticipantBox = getLivingParticipantBox(); if (messageArrow.getType().isRightBorder()) { constraintSet .getConstraint(livingParticipantBox.getParticipantBox(), constraintSet.getLastborder()) .ensureValue(length); } else { constraintSet .getConstraint(constraintSet.getFirstBorder(), livingParticipantBox.getParticipantBox()) .ensureValue(length); } for (LifeEvent lifeEvent : getMessage().getLiveEvents()) { afterMessage(getStringBounder(), lifeEvent, arrowYEndLevel + marginActivateAndDeactive); } assert graphic instanceof InGroupable; if (graphic instanceof InGroupable) { inGroupablesStack.addElement((InGroupable) graphic); inGroupablesStack.addElement(livingParticipantBox); } return getFreeY(); }