/** {@inheritDoc} */
  @Override
  protected Command createDeleteViewCommand(GroupRequest deleteRequest) {
    CompoundCommand deleteViewsCommand = new CompoundCommand();

    /* apex added start */
    // Activation의 source connections들을 parent인 lifeline으로 이동하여 연결
    if (getHost() instanceof ShapeNodeEditPart) {
      LifelineEditPart lifelineEP = SequenceUtil.getParentLifelinePart(getHost());
      IFigure figure = lifelineEP.getNodeFigure();
      Rectangle newBounds = figure.getBounds().getCopy();
      figure.translateToAbsolute(newBounds);

      List connections = ((ShapeNodeEditPart) getHost()).getSourceConnections();
      for (Iterator iter = connections.iterator(); iter.hasNext(); ) {
        ConnectionNodeEditPart connection = (ConnectionNodeEditPart) iter.next();
        Point location = SequenceUtil.getAbsoluteEdgeExtremity(connection, true);

        ReconnectRequest reconnReq = new ReconnectRequest();
        reconnReq.setConnectionEditPart(connection);
        reconnReq.setLocation(location);
        reconnReq.setTargetEditPart(lifelineEP);
        reconnReq.setType(RequestConstants.REQ_RECONNECT_SOURCE);
        reconnReq.getExtendedData().put(SequenceRequestConstant.DO_NOT_MOVE_EDIT_PARTS, true);

        deleteViewsCommand.add(lifelineEP.getCommand(reconnReq));
      }
    }
    /* apex added end */

    Command deleteViewCommand = super.createDeleteViewCommand(deleteRequest);
    deleteViewsCommand.add(deleteViewCommand);
    if (getHost() instanceof ShapeNodeEditPart) {
      TransactionalEditingDomain editingDomain = ((ShapeNodeEditPart) getHost()).getEditingDomain();
      SequenceDeleteHelper.completeDeleteExecutionSpecificationViewCommand(
          deleteViewsCommand, editingDomain, getHost());
    }

    return deleteViewsCommand;
  }
 public static Rectangle fixMessageBounds(
     Rectangle newBounds, Request cvr, LifelineEditPart host) {
   Object oc1 =
       getFirstElement(
           cvr.getExtendedData().get(SequenceRequestConstant.NEAREST_OCCURRENCE_SPECIFICATION));
   Object oc2 =
       getFirstElement(
           cvr.getExtendedData().get(SequenceRequestConstant.NEAREST_OCCURRENCE_SPECIFICATION_2));
   if (oc1 != null
       && oc2 != null
       && (oc1 instanceof MessageOccurrenceSpecification
           || oc2 instanceof MessageOccurrenceSpecification)) {
     Point start = null, end = null;
     Rectangle bounds = null;
     if (oc1 instanceof InteractionFragment) {
       start = SequenceUtil.findLocationOfEvent(host, (InteractionFragment) oc1, true);
     }
     if (oc2 instanceof InteractionFragment) {
       end = SequenceUtil.findLocationOfEvent(host, (InteractionFragment) oc2, true);
     }
     if (start != null && end != null) {
       bounds = (start.y < end.y) ? new Rectangle(start, end) : new Rectangle(end, start);
     }
     if (bounds != null) {
       IFigure parentFigure = host.getFigure();
       Point parentFigDelta = parentFigure.getBounds().getLocation().getCopy().negate();
       parentFigure.translateToRelative(bounds);
       bounds.translate(parentFigDelta);
       if (bounds.y != newBounds.y || newBounds.height != bounds.height) {
         newBounds.y = bounds.y;
         newBounds.height = bounds.height;
       }
     }
   }
   return newBounds;
 }
  protected void showChangeBoundsFeedback(ChangeBoundsRequest request) {
    IFigure feedback = getDragSourceFeedbackFigure();

    PrecisionRectangle rect = new PrecisionRectangle(getInitialFeedbackBounds().getCopy());
    getHostFigure().translateToAbsolute(rect);

    // Only enable horizontal dragging on lifelines(except lifelines that are result of a create
    // message).
    // https://bugs.eclipse.org/bugs/show_bug.cgi?id=364688
    if (this.getHost() instanceof LifelineEditPart) {
      LifelineEditPart lifelineEP = (LifelineEditPart) this.getHost();
      if (!SequenceUtil.isCreateMessageEndLifeline(lifelineEP)) {
        request.getMoveDelta().y = 0;
      }
    }

    rect.translate(request.getMoveDelta());
    rect.resize(request.getSizeDelta());

    IFigure f = getHostFigure();
    Dimension min = f.getMinimumSize().getCopy();
    Dimension max = f.getMaximumSize().getCopy();
    IMapMode mmode = MapModeUtil.getMapMode(f);
    min.height = mmode.LPtoDP(min.height);
    min.width = mmode.LPtoDP(min.width);
    max.height = mmode.LPtoDP(max.height);
    max.width = mmode.LPtoDP(max.width);

    if (min.width > rect.width) rect.width = min.width;
    else if (max.width < rect.width) rect.width = max.width;

    if (min.height > rect.height) rect.height = min.height;
    else if (max.height < rect.height) rect.height = max.height;

    feedback.translateToRelative(rect);
    feedback.setBounds(rect);
  }