@Override
  public SVGGElement initGui(SVGOMDocument svgDocument, IBoundsCalculator boundsCalculator) {
    this.calculator = boundsCalculator;
    this.outerGroupElement =
        (SVGGElement)
            svgDocument.createElementNS(
                SVGDOMImplementation.SVG_NAMESPACE_URI, SVGConstants.SVG_G_TAG);
    SVGGElement buttonGroup = button.initGui(svgDocument);
    outerGroupElement.appendChild(buttonGroup);
    this.displayElement = display.initGui(svgDocument, calculator);
    setAttribute(
        displayElement,
        SVGConstants.SVG_TRANSFORM_ATTRIBUTE,
        "translate(0,"
            + SVGIntValueDisplay.getDiameter(nodeWidth) * 1.15
            + SVGButton.SHADOW_OFFSET
            + ")"); //$NON-NLS-1$ //$NON-NLS-2$
    outerGroupElement.appendChild(displayElement);
    this.rootElement = svgDocument.getRootElement();
    EventListener removeListener = createRemoveListener(buttonGroup);
    buttonGroup.addEventListener(
        SVGConstants.SVG_MOUSEUP_EVENT_TYPE, createDisplayListener(), false);
    buttonGroup.addEventListener(SVGConstants.SVG_MOUSEOUT_EVENT_TYPE, removeListener, false);
    displayElement.addEventListener(SVGConstants.SVG_MOUSEOUT_EVENT_TYPE, removeListener, false);
    setDisplayVisible(false);

    return outerGroupElement;
  }
 @Override
 public String getNodeId() {
   return display.getNodeId();
 }