public void act(XmlAction action) {
        if (action instanceof AddArrowLinkXmlAction) {
            AddArrowLinkXmlAction arrowAction = (AddArrowLinkXmlAction) action;
            MindMapNode source = modeController.getNodeFromID(arrowAction
                    .getNode());
            MindMapNode target = modeController.getNodeFromID(arrowAction
                    .getDestination());
            String proposedId = arrowAction.getNewId();

            if (getLinkRegistry().getLabel(target) == null) {
                // call registry to give new label
                getLinkRegistry().registerLinkTarget(target);
            }
            MindMapArrowLinkModel linkModel = new MindMapArrowLinkModel(source,
                    target, modeController.getFrame());
            linkModel.setDestinationLabel(getLinkRegistry().getLabel(target));
            // give label:
            linkModel.setUniqueId(getLinkRegistry().generateUniqueLinkId(
                    proposedId));
            // check for other attributes:
            if (arrowAction.getColor() != null) {
                linkModel.setColor(Tools.xmlToColor(arrowAction.getColor()));
            }
            if (arrowAction.getEndArrow() != null) {
                linkModel.setEndArrow(arrowAction.getEndArrow());
            }
            if (arrowAction.getEndInclination() != null) {
                linkModel.setEndInclination(Tools.xmlToPoint(arrowAction
                        .getEndInclination()));
            }
            if (arrowAction.getStartArrow() != null) {
                linkModel.setStartArrow(arrowAction.getStartArrow());
            }
            if (arrowAction.getStartInclination() != null) {
                linkModel.setStartInclination(Tools.xmlToPoint(arrowAction
                        .getStartInclination()));
            }
            // register link.
            getLinkRegistry().registerLink(linkModel);
            modeController.nodeChanged(target);
            modeController.nodeChanged(source);

        }
    }