/**
* Copyright (c) 2012 committers of YAKINDU 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:
* committers of YAKINDU - initial API and implementation
*
*/
package org.yakindu.sct.model.sgraph.ui.validation;
import org.eclipse.emf.common.util.Diagnostic;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.xtext.EcoreUtil2;
import org.eclipse.xtext.nodemodel.util.NodeModelUtils;
import org.eclipse.xtext.util.IAcceptor;
import org.eclipse.xtext.validation.DiagnosticConverterImpl;
import org.eclipse.xtext.validation.Issue;
import org.yakindu.sct.model.sgraph.SpecificationElement;
import com.google.inject.Inject;
/**
*
* @author andreas muelder - Initial contribution and API
*
*/
public class SCTDiagnosticConverterImpl extends DiagnosticConverterImpl {
@Inject
ISctIssueCreator issueCreator;
@Override
public void convertValidatorDiagnostic(final Diagnostic diagnostic, final IAcceptor<Issue> acceptor) {
super.convertValidatorDiagnostic(diagnostic, new IAcceptor<Issue>() {
public void accept(Issue t) {
boolean notAccepted = true;
if (diagnostic.getData().get(0) instanceof EObject) {
EObject eObject = (EObject) diagnostic.getData().get(0);
if (eObject != null && eObject.eResource() != null) {
if (NodeModelUtils.getNode(eObject) != null) {
eObject = EcoreUtil2.getContainerOfType(eObject, SpecificationElement.class);
}
if (eObject != null && eObject.eResource() != null) {
acceptor.accept(issueCreator.create(t, eObject.eResource().getURIFragment(eObject)));
notAccepted = false;
}
}
}
if (notAccepted) {
acceptor.accept(t);
}
}
});
}
}