blob: eaea7ad7cb023651c3f400953322197de1b4ebcd [file] [log] [blame]
/*
* Copyright (c) 2004-2018 Eike Stepper (Loehne, Germany) and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Eike Stepper - initial API and implementation
*/
package org.eclipse.emf.cdo.evolution.util;
import org.eclipse.emf.common.util.Diagnostic;
import org.eclipse.emf.ecore.EModelElement;
/**
* @author Eike Stepper
*/
public final class DiagnosticID
{
private final String value;
public DiagnosticID(String value)
{
this.value = value;
}
public String getValue()
{
return value;
}
@Override
public int hashCode()
{
return 31 + (value == null ? 0 : value.hashCode());
}
@Override
public boolean equals(Object obj)
{
if (this == obj)
{
return true;
}
if (obj == null)
{
return false;
}
if (getClass() != obj.getClass())
{
return false;
}
DiagnosticID other = (DiagnosticID)obj;
if (value == null)
{
if (other.value != null)
{
return false;
}
}
else if (!value.equals(other.value))
{
return false;
}
return true;
}
@Override
public String toString()
{
return "DiagnosticID[" + value + "]";
}
public static DiagnosticID get(Diagnostic diagnostic)
{
for (Object data : diagnostic.getData())
{
if (data instanceof DiagnosticID)
{
return (DiagnosticID)data;
}
}
StringBuilder builder = new StringBuilder();
builder.append(diagnostic.getSource());
builder.append("|");
builder.append(diagnostic.getCode());
for (Object data : diagnostic.getData())
{
appendData(builder, data);
}
return new DiagnosticID(builder.toString());
}
private static void appendData(final StringBuilder builder, Object data)
{
if (data instanceof Provider)
{
Provider provider = (Provider)data;
provider.extractDiagnosticData(new Provider.Context()
{
public void add(String data)
{
builder.append("|");
builder.append(data);
}
});
return;
}
if (data instanceof EModelElement)
{
EModelElement modelElement = (EModelElement)data;
String label = ElementHandler.getLabel(modelElement);
if (label != null)
{
builder.append("|");
builder.append(label);
return;
}
}
}
/**
* @author Eike Stepper
*/
public interface Provider
{
public void extractDiagnosticData(Context context);
/**
* @author Eike Stepper
*/
public interface Context
{
public void add(String data);
}
}
}