@Override
  public Image getImage(final Object node) {
    if (node instanceof DifferenceReport) {
      return null;
    } else if (node instanceof Mapping) {
      Mapping mapping = (Mapping) node;
      MappingHelper helper = mapping.getHelper();
      if (helper instanceof DifferenceDescriptor) {
        final DifferenceDescriptor desc = (DifferenceDescriptor) helper;
        final DifferenceType type = desc.getType();
        if (type.getValue() == DifferenceType.DELETION) {
          final List<EObject> inputs = mapping.getInputs();
          final EObject input = inputs.isEmpty() ? null : inputs.get(0);
          if (input != null) {
            return lpImageLabelProvider.getImage(input);
          }
        } else {
          final List<EObject> outputs = mapping.getOutputs();
          final EObject output = outputs.isEmpty() ? null : outputs.get(0);
          final List<EObject> inputs = mapping.getInputs();
          final EObject input = inputs.isEmpty() ? null : inputs.get(0);
          if (output != null) {
            return lpImageLabelProvider.getImage(output);
          } else if (input != null) {
            return lpImageLabelProvider.getImage(input);
          }
        }
      }
    } else if (node instanceof EObject) {
      return lpImageLabelProvider.getImage(node);
    }

    if (node instanceof ModelWorkspaceItem) {
      return workbenchProvider.getImage(((ModelWorkspaceItem) node).getResource());
    }
    return null;
  }
  @Override
  public String getText(final Object node) {
    if (node instanceof DifferenceReport) {
      DifferenceReport diffReport = (DifferenceReport) node;
      String result = diffReport.getTitle();

      if (result == null) {
        result = diffReport.getResultUri();
      }

      return result;
    } else if (node instanceof Mapping) {
      Mapping mapping = (Mapping) node;
      MappingHelper helper = mapping.getHelper();
      if (helper instanceof DifferenceDescriptor) {
        final DifferenceDescriptor desc = (DifferenceDescriptor) helper;
        final DifferenceType type = desc.getType();
        int typeValue = type.getValue();
        if (typeValue == DifferenceType.ADDITION) {
          final List<EObject> outputs = mapping.getOutputs();
          final EObject output = outputs.isEmpty() ? null : outputs.get(0);
          if (output != null) {
            return ModelUtilities.getEMFLabelProvider().getText(output);
          }
        } else if (typeValue == DifferenceType.DELETION) {
          final List<EObject> inputs = mapping.getInputs();
          final EObject input = inputs.isEmpty() ? null : inputs.get(0);
          if (input != null) {
            return ModelUtilities.getEMFLabelProvider().getText(input);
          }
        } else if (typeValue == DifferenceType.CHANGE) {
          final List<EObject> outputs = mapping.getOutputs();
          final EObject output = outputs.isEmpty() ? null : outputs.get(0);
          if (output != null) {
            return ModelUtilities.getEMFLabelProvider().getText(output);
          }
        } else if (typeValue == DifferenceType.NO_CHANGE) {
          final List<EObject> outputs = mapping.getOutputs();
          final EObject output = outputs.isEmpty() ? null : outputs.get(0);
          if (output != null) {
            return ModelUtilities.getEMFLabelProvider().getText(output);
          }
        } else if (typeValue == DifferenceType.CHANGE_BELOW) {
          final List<EObject> outputs = mapping.getOutputs();
          final EObject output = outputs.isEmpty() ? null : outputs.get(0);
          final List<EObject> inputs = mapping.getInputs();
          final EObject input = inputs.isEmpty() ? null : inputs.get(0);
          if (output != null) {
            return ModelUtilities.getEMFLabelProvider().getText(output);
          } else if (input != null) {
            return ModelUtilities.getEMFLabelProvider().getText(input);
          }
        }
      }
    } else if (node instanceof EObject) {
      return ModelUtilities.getEMFLabelProvider().getText(node);
    }

    if (node instanceof ModelWorkspaceItem) {
      return workbenchProvider.getText(((ModelWorkspaceItem) node).getResource());
    }
    return "UNKNOWN"; //$NON-NLS-1$
  }