/******************************************************************************* * Copyright (c) 2008 Red Hat, Inc. * Distributed under license by Red Hat, Inc. All rights reserved. * This program is 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: * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.smooks.configuration.validate; import java.util.List; import org.eclipse.core.resources.IMarker; import org.eclipse.core.runtime.CoreException; import org.eclipse.emf.common.util.Diagnostic; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EValidator; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.util.EcoreUtil; import org.eclipse.emf.edit.ui.util.EditUIMarkerHelper; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.ui.actions.WorkspaceModifyDelegatingOperation; import org.jboss.tools.smooks.configuration.SmooksConfigurationActivator; /** * @author Dart (dpeng@redhat.com) * */ public class SmooksMarkerHelper extends EditUIMarkerHelper { public static final String MARKER_ID = "org.jboss.tools.smooks.ui.problem"; //$NON-NLS-1$ public IRunnableWithProgress getWorkspaceModifyOperation(IRunnableWithProgress runnableWithProgress) { return new WorkspaceModifyDelegatingOperation(runnableWithProgress); } @Override protected String getMarkerID() { return MARKER_ID; } public void createMarkers(Resource resource, Diagnostic diagnostic) { try { createMarkers(getFile(resource), diagnostic, null); } catch (CoreException e) { SmooksConfigurationActivator.getDefault().log(e); } } @Override protected String composeMessage(Diagnostic diagnostic, Diagnostic parentDiagnostic) { String message = diagnostic.getMessage(); if (parentDiagnostic != null) { String parentMessage = parentDiagnostic.getMessage(); if (parentMessage != null) { message = message != null ? parentMessage + ". " + message : parentMessage; //$NON-NLS-1$ } } return message; } @Override protected void adjustMarker(IMarker marker, Diagnostic diagnostic, Diagnostic parentDiagnostic) throws CoreException { List<?> data = diagnostic.getData(); StringBuilder relatedURIs = new StringBuilder(); boolean first = true; for (Object object : data) { if (object instanceof EObject) { EObject eObject = (EObject) object; if (first) { first = false; marker.setAttribute(EValidator.URI_ATTRIBUTE, EcoreUtil.getURI(eObject).toString()); } else { if (relatedURIs.length() != 0) { relatedURIs.append(' '); } relatedURIs.append(URI.encodeFragment(EcoreUtil.getURI(eObject).toString(), false)); } } } if (relatedURIs.length() > 0) { marker.setAttribute(EValidator.RELATED_URIS_ATTRIBUTE, relatedURIs.toString()); } super.adjustMarker(marker, diagnostic, parentDiagnostic); } }