Java tutorial
/******************************************************************************* * Copyright (c) 2011 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.jsf.ui.marker; import java.lang.reflect.InvocationTargetException; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IMarker; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.osgi.util.NLS; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IMarkerResolution2; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PlatformUI; import org.eclipse.wst.validation.IMutableValidator; import org.eclipse.wst.validation.MutableProjectSettings; import org.eclipse.wst.validation.MutableWorkspaceSettings; import org.eclipse.wst.validation.ValidationFramework; import org.jboss.tools.jsf.ui.JsfUIMessages; import org.jboss.tools.jsf.ui.JsfUiPlugin; /** * @author Daniel Azarov */ public class DisableFaceletHTMLValidatorMarkerResolution implements IMarkerResolution2 { private static final String MARKER_TYPE = "org.eclipse.jst.jsf.facelet.ui.FaceletValidationMarker"; private IFile file; private String label; public DisableFaceletHTMLValidatorMarkerResolution(IFile file) { this.file = file; label = JsfUIMessages.DISABLE_FACELET_HTML_VALIDATOR_MARKER_RESOLUTION_TITLE; } public String getLabel() { return label; } public static Shell getShell() { IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); if (window == null) { IWorkbenchWindow[] windows = PlatformUI.getWorkbench().getWorkbenchWindows(); if (windows.length > 0) { return windows[0].getShell(); } } else { return window.getShell(); } return null; } public void run(IMarker marker) { MessageDialog dialog = null; dialog = new MessageDialog(getShell(), label, null, NLS.bind(JsfUIMessages.DISABLE_FACELET_HTML_VALIDATOR_MARKER_RESOLUTION_MESSAGE, file.getName()) + NLS.bind(JsfUIMessages.DISABLE_FACELET_HTML_VALIDATOR_MARKER_RESOLUTION_PROJECT_QUESTION, file.getProject().getName()), MessageDialog.QUESTION_WITH_CANCEL, new String[] { "Cancel", "Workspace", file.getProject().getName() }, 0); int result = dialog.open(); if (result == 1) { disableOnWorkspace(); } else if (result == 2) { disableOnProject(); } } private void disableOnWorkspace() { IMutableValidator[] validators; try { MutableWorkspaceSettings workspaceSettings = ValidationFramework.getDefault().getWorkspaceSettings(); validators = workspaceSettings.getValidators(); if (disableValidator(validators, DisableFaceletHTMLValidatorResolutionGenerator.VALIDATOR_ID)) { ValidationFramework.getDefault().applyChanges(workspaceSettings, true); try { file.getProject().getParent().deleteMarkers(MARKER_TYPE, true, IResource.DEPTH_INFINITE); } catch (CoreException e) { JsfUiPlugin.getPluginLog().logError(e); } } } catch (InvocationTargetException e) { JsfUiPlugin.getPluginLog().logError(e); } } private void disableOnProject() { MutableProjectSettings projectSettings = ValidationFramework.getDefault() .getProjectSettings(file.getProject()); projectSettings.setOverride(true); IMutableValidator[] validators = projectSettings.getValidators(); if (!disableValidator(validators, DisableFaceletHTMLValidatorResolutionGenerator.VALIDATOR_ID)) { projectSettings = null; MutableWorkspaceSettings workspaceSettings = null; try { workspaceSettings = ValidationFramework.getDefault().getWorkspaceSettings(); } catch (InvocationTargetException e) { JsfUiPlugin.getPluginLog().logError(e); } if (workspaceSettings != null) { IMutableValidator[] workspaceValidators = workspaceSettings.getValidators(); IMutableValidator faceletHTMLValidator = findValidator(workspaceValidators, DisableFaceletHTMLValidatorResolutionGenerator.VALIDATOR_ID); if (faceletHTMLValidator != null) { faceletHTMLValidator.setBuildValidation(false); faceletHTMLValidator.setManualValidation(false); validators = new IMutableValidator[1]; validators[0] = faceletHTMLValidator; projectSettings = new MutableProjectSettings(file.getProject(), validators); projectSettings.setOverride(true); } } } if (projectSettings != null) { ValidationFramework.getDefault().applyChanges(projectSettings, true); try { file.getProject().deleteMarkers(MARKER_TYPE, true, IResource.DEPTH_INFINITE); } catch (CoreException e) { JsfUiPlugin.getPluginLog().logError(e); } } } public static boolean disableValidator(IMutableValidator[] validators, String id) { IMutableValidator validator = findValidator(validators, id); if (validator != null) { validator.setBuildValidation(false); validator.setManualValidation(false); return true; } return false; } public static IMutableValidator findValidator(IMutableValidator[] validators, String id) { for (IMutableValidator validator : validators) { if (validator.getId().equals(id)) return validator; } return null; } public String getDescription() { return label; } public Image getImage() { return null; } }