/**
   * {@inheritDoc}
   *
   * @see org.eclipse.emf.compare.provider.ReferenceChangeItemProvider#getImage(java.lang.Object)
   */
  @Override
  public Object getImage(Object object) {
    ReferenceChange refChange = (ReferenceChange) object;

    Object image = AdapterFactoryUtil.getImage(getRootAdapterFactory(), refChange.getValue());

    return image;
  }
  /**
   * {@inheritDoc}
   *
   * @see org.eclipse.emf.compare.provider.ReferenceChangeItemProvider#getText(java.lang.Object)
   */
  @Override
  public String getText(Object object) {
    final ReferenceChange refChange = (ReferenceChange) object;

    final String valueText = getValueText(refChange);
    final String referenceText = getReferenceText(refChange);

    String remotely = ""; // $NON-NLS-1$
    if (refChange.getSource() == DifferenceSource.RIGHT) {
      remotely = "remotely "; // $NON-NLS-1$
    }

    String ret = ""; // $NON-NLS-1$
    switch (refChange.getKind()) {
      case ADD:
        ret =
            valueText
                + " has been "
                + remotely
                + "added to "
                + referenceText; //$NON-NLS-1$ //$NON-NLS-2$
        break;
      case DELETE:
        ret =
            valueText
                + " has been "
                + remotely
                + "deleted from "
                + referenceText; //$NON-NLS-1$ //$NON-NLS-2$
        break;
      case CHANGE:
        String changeText = changeText(refChange, refChange.getReference());
        ret =
            referenceText
                + " "
                + valueText
                + " has been "
                + remotely
                + changeText; //$NON-NLS-1$ //$NON-NLS-2$
        break;
      case MOVE:
        ret =
            valueText
                + " has been "
                + remotely
                + "moved in "
                + referenceText; //$NON-NLS-1$ //$NON-NLS-2$
        break;
      default:
        throw new IllegalStateException(
            "Unsupported "
                + DifferenceKind.class.getSimpleName() // $NON-NLS-1$
                + " value: "
                + refChange.getKind()); // $NON-NLS-1$
    }

    return ret;
  }
 /**
  * {@inheritDoc}
  *
  * @see org.eclipse.emf.edit.provider.ItemProviderAdapter#getForeground(java.lang.Object)
  */
 @Override
 public Object getForeground(Object object) {
   ReferenceChange referenceChange = (ReferenceChange) object;
   switch (referenceChange.getState()) {
     case MERGED:
     case DISCARDED:
       return URI.createURI("color://rgb/156/156/156"); // $NON-NLS-1$
     default:
       return super.getForeground(object);
   }
 }
 protected String getValueText(final ReferenceChange refChange) {
   String value = AdapterFactoryUtil.getText(getRootAdapterFactory(), refChange.getValue());
   if (value == null) {
     value = "<null>"; // $NON-NLS-1$
   } else {
     value = org.eclipse.emf.compare.provider.spec.Strings.elide(value, 50, "..."); // $NON-NLS-1$
   }
   return value;
 }
  /**
   * {@inheritDoc}
   *
   * @see org.eclipse.emf.edit.provider.ItemProviderAdapter#getChildren(java.lang.Object)
   */
  @Override
  public Collection<?> getChildren(Object object) {
    Collection<?> superChildren = super.getChildren(object);
    List<? super Object> ret = newArrayList(superChildren);

    ReferenceChange referenceChange = (ReferenceChange) object;
    EReference reference = referenceChange.getReference();

    if (reference.isContainment()) {
      Match matchOfValue =
          referenceChange.getMatch().getComparison().getMatch(referenceChange.getValue());
      if (matchOfValue != null) {
        Collection<?> children = getChildren(matchOfValue);
        children.remove(referenceChange);
        ret.addAll(children);
      }
    }

    return ImmutableList.copyOf(filter(ret, not(MatchItemProviderSpec.REFINED_DIFF)));
  }
 protected String getReferenceText(final ReferenceChange refChange) {
   return refChange.getReference().getName();
 }
  /**
   * Tests the behavior of reference <code>requiredBy</code>'s accessors.
   *
   * @generated
   */
  @Test
  public void testRequiredBy() {
    EStructuralFeature feature =
        org.eclipse.emf.compare.ComparePackage.eINSTANCE.getDiff_RequiredBy();
    ReferenceChange referenceChange = CompareFactory.eINSTANCE.createReferenceChange();
    referenceChange.eAdapters().add(new MockEAdapter());
    org.eclipse.emf.compare.Diff requiredByValue =
        org.eclipse.emf.compare.CompareFactory.eINSTANCE.createDiff();
    List<org.eclipse.emf.compare.Diff> listRequiredBy =
        new ArrayList<org.eclipse.emf.compare.Diff>(1);
    listRequiredBy.add(requiredByValue);

    assertFalse(referenceChange.eIsSet(feature));
    assertTrue(referenceChange.getRequiredBy().isEmpty());

    referenceChange.getRequiredBy().add(requiredByValue);
    assertTrue(notified);
    notified = false;
    assertTrue(referenceChange.getRequiredBy().contains(requiredByValue));
    assertSame(referenceChange.getRequiredBy(), referenceChange.eGet(feature));
    assertSame(referenceChange.getRequiredBy(), referenceChange.eGet(feature, false));
    assertTrue(referenceChange.eIsSet(feature));
    assertTrue(requiredByValue.getRequires().contains(referenceChange));

    referenceChange.eUnset(feature);
    assertTrue(notified);
    notified = false;
    assertTrue(referenceChange.getRequiredBy().isEmpty());
    assertSame(referenceChange.getRequiredBy(), referenceChange.eGet(feature));
    assertSame(referenceChange.getRequiredBy(), referenceChange.eGet(feature, false));
    assertFalse(referenceChange.eIsSet(feature));
    assertFalse(requiredByValue.getRequires().contains(referenceChange));

    referenceChange.eSet(feature, listRequiredBy);
    assertTrue(notified);
    notified = false;
    assertTrue(referenceChange.getRequiredBy().contains(requiredByValue));
    assertSame(referenceChange.getRequiredBy(), referenceChange.eGet(feature));
    assertSame(referenceChange.getRequiredBy(), referenceChange.eGet(feature, false));
    assertTrue(referenceChange.eIsSet(feature));
    assertTrue(requiredByValue.getRequires().contains(referenceChange));
  }
  /**
   * Tests the behavior of attribute <code>kind</code>'s accessors.
   *
   * @generated
   */
  @Test
  public void testKind() {
    EStructuralFeature feature = org.eclipse.emf.compare.ComparePackage.eINSTANCE.getDiff_Kind();
    ReferenceChange referenceChange = CompareFactory.eINSTANCE.createReferenceChange();
    referenceChange.eAdapters().add(new MockEAdapter());
    org.eclipse.emf.compare.DifferenceKind kindValue =
        (org.eclipse.emf.compare.DifferenceKind) feature.getDefaultValue();
    for (org.eclipse.emf.compare.DifferenceKind aDifferenceKind :
        org.eclipse.emf.compare.DifferenceKind.VALUES) {
      if (kindValue.getValue() != aDifferenceKind.getValue()) {
        kindValue = aDifferenceKind;
        break;
      }
    }

    assertFalse(referenceChange.eIsSet(feature));
    assertEquals(feature.getDefaultValue(), referenceChange.getKind());

    referenceChange.setKind(kindValue);
    assertTrue(notified);
    notified = false;
    assertEquals(kindValue, referenceChange.getKind());
    assertEquals(referenceChange.getKind(), referenceChange.eGet(feature));
    assertTrue(referenceChange.eIsSet(feature));

    referenceChange.eUnset(feature);
    assertTrue(notified);
    notified = false;
    assertEquals(feature.getDefaultValue(), referenceChange.getKind());
    assertEquals(referenceChange.getKind(), referenceChange.eGet(feature));
    assertFalse(referenceChange.eIsSet(feature));

    referenceChange.eSet(feature, kindValue);
    assertTrue(notified);
    notified = false;
    assertEquals(kindValue, referenceChange.getKind());
    assertEquals(referenceChange.getKind(), referenceChange.eGet(feature));
    assertTrue(referenceChange.eIsSet(feature));

    referenceChange.setKind(null);
    assertTrue(notified);
    notified = false;
    assertEquals(feature.getDefaultValue(), referenceChange.getKind());
    assertEquals(referenceChange.getKind(), referenceChange.eGet(feature));
    assertFalse(referenceChange.eIsSet(feature));
  }
  /**
   * Tests the behavior of reference <code>value</code>'s accessors.
   *
   * @generated
   */
  @Test
  public void testValue() {
    EStructuralFeature feature =
        org.eclipse.emf.compare.ComparePackage.eINSTANCE.getReferenceChange_Value();
    ReferenceChange referenceChange = CompareFactory.eINSTANCE.createReferenceChange();
    referenceChange.eAdapters().add(new MockEAdapter());
    org.eclipse.emf.ecore.EObject valueValue =
        org.eclipse.emf.ecore.EcoreFactory.eINSTANCE.createEObject();

    assertFalse(referenceChange.eIsSet(feature));
    assertNull(referenceChange.getValue());

    referenceChange.setValue(valueValue);
    assertTrue(notified);
    notified = false;
    assertSame(valueValue, referenceChange.getValue());
    assertSame(referenceChange.getValue(), referenceChange.eGet(feature));
    assertSame(referenceChange.getValue(), referenceChange.eGet(feature, false));
    assertTrue(referenceChange.eIsSet(feature));

    referenceChange.eUnset(feature);
    assertTrue(notified);
    notified = false;
    assertNull(referenceChange.getValue());
    assertSame(referenceChange.getValue(), referenceChange.eGet(feature));
    assertSame(referenceChange.getValue(), referenceChange.eGet(feature, false));
    assertFalse(referenceChange.eIsSet(feature));

    referenceChange.setValue(valueValue);
    assertTrue(notified);
    notified = false;
    assertSame(valueValue, referenceChange.getValue());
    assertSame(referenceChange.getValue(), referenceChange.eGet(feature));
    assertSame(referenceChange.getValue(), referenceChange.eGet(feature, false));
    assertTrue(referenceChange.eIsSet(feature));

    referenceChange.eSet(feature, valueValue);
    assertTrue(notified);
    notified = false;
    assertSame(valueValue, referenceChange.getValue());
    assertSame(referenceChange.getValue(), referenceChange.eGet(feature));
    assertSame(referenceChange.getValue(), referenceChange.eGet(feature, false));
    assertTrue(referenceChange.eIsSet(feature));

    referenceChange.setValue(null);
    assertTrue(notified);
    notified = false;
    assertNull(referenceChange.getValue());
    assertSame(feature.getDefaultValue(), referenceChange.getValue());
    assertSame(referenceChange.getValue(), referenceChange.eGet(feature));
    assertSame(referenceChange.getValue(), referenceChange.eGet(feature, false));
    assertFalse(referenceChange.eIsSet(feature));
  }
  /**
   * Tests the behavior of reference <code>conflict</code>'s accessors.
   *
   * @generated
   */
  @Test
  public void testConflict() {
    EStructuralFeature feature =
        org.eclipse.emf.compare.ComparePackage.eINSTANCE.getDiff_Conflict();
    ReferenceChange referenceChange = CompareFactory.eINSTANCE.createReferenceChange();
    referenceChange.eAdapters().add(new MockEAdapter());
    org.eclipse.emf.compare.Conflict conflictValue =
        org.eclipse.emf.compare.CompareFactory.eINSTANCE.createConflict();

    assertFalse(referenceChange.eIsSet(feature));
    assertNull(referenceChange.getConflict());

    referenceChange.setConflict(conflictValue);
    assertTrue(notified);
    notified = false;
    assertSame(conflictValue, referenceChange.getConflict());
    assertSame(referenceChange.getConflict(), referenceChange.eGet(feature));
    assertSame(referenceChange.getConflict(), referenceChange.eGet(feature, false));
    assertTrue(referenceChange.eIsSet(feature));
    assertTrue(conflictValue.getDifferences().contains(referenceChange));

    referenceChange.eUnset(feature);
    assertTrue(notified);
    notified = false;
    assertNull(referenceChange.getConflict());
    assertSame(referenceChange.getConflict(), referenceChange.eGet(feature));
    assertSame(referenceChange.getConflict(), referenceChange.eGet(feature, false));
    assertFalse(referenceChange.eIsSet(feature));
    assertFalse(conflictValue.getDifferences().contains(referenceChange));

    referenceChange.setConflict(conflictValue);
    assertTrue(notified);
    notified = false;
    assertSame(conflictValue, referenceChange.getConflict());
    assertSame(referenceChange.getConflict(), referenceChange.eGet(feature));
    assertSame(referenceChange.getConflict(), referenceChange.eGet(feature, false));
    assertTrue(referenceChange.eIsSet(feature));
    assertTrue(conflictValue.getDifferences().contains(referenceChange));

    referenceChange.eSet(feature, conflictValue);
    assertTrue(notified);
    notified = false;
    assertSame(conflictValue, referenceChange.getConflict());
    assertSame(referenceChange.getConflict(), referenceChange.eGet(feature));
    assertSame(referenceChange.getConflict(), referenceChange.eGet(feature, false));
    assertTrue(referenceChange.eIsSet(feature));
    assertTrue(conflictValue.getDifferences().contains(referenceChange));

    referenceChange.setConflict(null);
    assertTrue(notified);
    notified = false;
    assertNull(referenceChange.getConflict());
    assertSame(feature.getDefaultValue(), referenceChange.getConflict());
    assertSame(referenceChange.getConflict(), referenceChange.eGet(feature));
    assertSame(referenceChange.getConflict(), referenceChange.eGet(feature, false));
    assertFalse(referenceChange.eIsSet(feature));
    assertFalse(conflictValue.getDifferences().contains(referenceChange));
  }
  /**
   * {@inheritDoc}
   *
   * @see org.eclipse.emf.compare.provider.ReferenceChangeItemProvider#getText(java.lang.Object)
   */
  @Override
  public String getText(Object object) {
    final ReferenceChange refChange = (ReferenceChange) object;

    EObject value = refChange.getValue();
    final String valueName = CompareItemProviderAdapterFactorySpec.getText(adapterFactory, value);

    String change = "";
    if (refChange.getSource() == DifferenceSource.RIGHT) {
      change = "remotely ";
    }
    if (refChange.getKind() == DifferenceKind.ADD) {
      change += "added to";
    } else if (refChange.getKind() == DifferenceKind.DELETE) {
      change += "deleted from";
    } else if (refChange.getKind() == DifferenceKind.CHANGE) {
      change += "changed from";
    } else {
      change += "moved from";
    }
    final String objectName;
    if (refChange.getMatch().getLeft() instanceof ENamedElement) {
      objectName = ((ENamedElement) refChange.getMatch().getLeft()).getName();
    } else if (refChange.getMatch().getRight() instanceof ENamedElement) {
      objectName = ((ENamedElement) refChange.getMatch().getRight()).getName();
    } else if (refChange.getMatch().getOrigin() instanceof ENamedElement) {
      objectName = ((ENamedElement) refChange.getMatch().getOrigin()).getName();
    } else {
      objectName = "";
    }
    return "value "
        + valueName
        + " has been "
        + change
        + " reference "
        + refChange.getReference().getName()
        + " of object "
        + objectName;
  }