private void updateLink() {
    if (meControl != null) {
      meControl.dispose();
    }
    if (labelWidget != null) {
      labelWidget.dispose();
    }

    EObject opposite = (EObject) getModelElement().eGet(eReference);
    if (opposite != null) {
      MELinkControlFactory meLinkControlFactory = new MELinkControlFactory();
      meControl =
          meLinkControlFactory.createMELinkControl(
              getItemPropertyDescriptor(), opposite, getModelElement(), getContext());
      meControl.createControl(
          linkArea,
          style,
          getItemPropertyDescriptor(),
          opposite,
          getModelElement(),
          getToolkit(),
          getContext());
    } else {
      labelWidget = getToolkit().createLabel(linkArea, "(Not Set)");
      labelWidget.setBackground(parent.getBackground());
      labelWidget.setForeground(parent.getShell().getDisplay().getSystemColor(SWT.COLOR_DARK_GRAY));
    }
    linkArea.layout(true);
    composite.layout(true);
  }
 /** {@inheritDoc} */
 @Override
 public void dispose() {
   modelElementChangeListener.remove();
   if (meControl != null) {
     meControl.dispose();
   }
 }