org.jboss.tools.jsf.ui.marker.DisableFaceletHTMLValidatorMarkerResolution.java Source code

Java tutorial

Introduction

Here is the source code for org.jboss.tools.jsf.ui.marker.DisableFaceletHTMLValidatorMarkerResolution.java

Source

/*******************************************************************************
 * 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;
    }

}