[254647] [ui]Validation should be triggered when changing the setting of the "indicate if grammar is not specified" preference settings
diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/preferences/ui/AbstractValidationSettingsPage.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/preferences/ui/AbstractValidationSettingsPage.java deleted file mode 100644 index 3d7d962..0000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/preferences/ui/AbstractValidationSettingsPage.java +++ /dev/null
@@ -1,424 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008 IBM Corporation 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: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.preferences.ui; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.ProjectScope; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Platform; -import org.eclipse.core.runtime.Status; -import org.eclipse.core.runtime.jobs.Job; -import org.eclipse.core.runtime.preferences.DefaultScope; -import org.eclipse.core.runtime.preferences.IEclipsePreferences; -import org.eclipse.core.runtime.preferences.IPreferencesService; -import org.eclipse.core.runtime.preferences.IScopeContext; -import org.eclipse.jface.dialogs.IDialogSettings; -import org.eclipse.jface.resource.JFaceResources; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.events.SelectionListener; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Combo; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.MessageBox; -import org.eclipse.swt.widgets.Widget; -import org.eclipse.ui.forms.events.ExpansionAdapter; -import org.eclipse.ui.forms.events.ExpansionEvent; -import org.eclipse.ui.forms.widgets.ExpandableComposite; -import org.eclipse.wst.html.ui.internal.HTMLUIMessages; -import org.eclipse.wst.sse.core.internal.validate.ValidationMessage; -import org.eclipse.wst.sse.ui.internal.preferences.ui.ScrolledPageContent; -import org.eclipse.wst.validation.ValidationFramework; -import org.osgi.service.prefs.BackingStoreException; - -/** - * Based on org.eclipse.jdt.internal.ui.preferences.OptionsConfigurationBlock - */ -abstract class AbstractValidationSettingsPage extends AbstractPropertyPreferencePage { - - private List fCombos; - private List fExpandables; - - private SelectionListener fSelectionListener; - - private IPreferencesService fPreferencesService = null; - - private static final String SETTINGS_EXPANDED = "expanded"; //$NON-NLS-1$ - - private ValidationFramework fValidation; - - private class ComboData { - private String fKey; - private int[] fSeverities; - private int fIndex; - int originalSeverity = -2; - - public ComboData(String key, int[] severities, int index) { - fKey = key; - fSeverities = severities; - fIndex = index; - } - - public String getKey() { - return fKey; - } - - public void setIndex(int index) { - fIndex = index; - } - - public int getIndex() { - return fIndex; - } - - /** - * Sets the severity index based on <code>severity</code>. - * If the severity doesn't exist, the index is set to -1. - * - * @param severity the severity level - */ - public void setSeverity(int severity) { - for (int i = 0; fSeverities != null && i < fSeverities.length; i++) { - if (fSeverities[i] == severity) { - setIndex(i); - return; - } - } - - setIndex(-1); - } - - public int getSeverity() { - return (fIndex >= 0 && fSeverities != null && fIndex < fSeverities.length) ? fSeverities[fIndex] : -1; - } - - boolean isChanged() { - return fSeverities[fIndex] != originalSeverity; - } - } - - public AbstractValidationSettingsPage() { - super(); - fCombos = new ArrayList(); - fExpandables = new ArrayList(); - fPreferencesService = Platform.getPreferencesService(); - fValidation = ValidationFramework.getDefault(); - } - - /** - * Creates a Combo widget in the composite <code>parent</code>. The data - * in the Combo is associated with <code>key</code>. The Combo data is - * generated based on the integer <code>values</code> where the index - * of <code>values</code> corresponds to the index of <code>valueLabels</code> - * - * @param parent the composite to create the combo box in - * @param label the label to give the combo box - * @param key the unique key to identify the combo box - * @param values the values represented by the combo options - * @param valueLabels the calues displayed in the combo box - * @param indent how far to indent the combo box label - * - * @return the generated combo box - */ - protected Combo addComboBox(Composite parent, String label, String key, int[] values, String[] valueLabels, int indent) { - GridData gd = new GridData(GridData.FILL, GridData.CENTER, true, false, 2, 1); - gd.horizontalIndent = indent; - - Label labelControl = new Label(parent, SWT.LEFT); - labelControl.setFont(JFaceResources.getDialogFont()); - labelControl.setText(label); - labelControl.setLayoutData(gd); - - Combo comboBox = newComboControl(parent, key, values, valueLabels); - comboBox.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL)); - - return comboBox; - } - - /** - * Creates a combo box and associates the combo data with the - * combo box. - * - * @param composite the composite to create the combo box in - * @param key the unique key to identify the combo box - * @param values the values represented by the combo options - * @param valueLabels the values displayed in the combo box - * - * @return the generated combo box - */ - protected Combo newComboControl(Composite composite, String key, int[] values, String[] valueLabels) { - ComboData data = new ComboData(key, values, -1); - - Combo comboBox = new Combo(composite, SWT.READ_ONLY); - comboBox.setItems(valueLabels); - comboBox.setData(data); - comboBox.addSelectionListener(getSelectionListener()); - comboBox.setFont(JFaceResources.getDialogFont()); - - makeScrollableCompositeAware(comboBox); - - int severity = -1; - if (key != null) - severity = fPreferencesService.getInt(getPreferenceNodeQualifier(), key, ValidationMessage.WARNING, createPreferenceScopes()); - - if (severity == ValidationMessage.ERROR || severity == ValidationMessage.WARNING || severity == ValidationMessage.IGNORE) { - data.setSeverity(severity); - data.originalSeverity = severity; - } - - if (data.getIndex() >= 0) - comboBox.select(data.getIndex()); - - fCombos.add(comboBox); - return comboBox; - } - - protected SelectionListener getSelectionListener() { - if (fSelectionListener == null) { - fSelectionListener = new SelectionListener() { - public void widgetDefaultSelected(SelectionEvent e) {} - - public void widgetSelected(SelectionEvent e) { - controlChanged(e.widget); - } - }; - } - return fSelectionListener; - } - - protected void controlChanged(Widget widget) { - ComboData data = (ComboData) widget.getData(); - if (widget instanceof Combo) { - data.setIndex(((Combo) widget).getSelectionIndex()); - } - else { - return; - } - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.wst.sse.ui.internal.preferences.ui.AbstractSettingsPage#storeValues() - */ - protected void storeValues() { - if (fCombos == null || fCombos.size() == 0) - return; - - Iterator it = fCombos.iterator(); - - IScopeContext[] contexts = createPreferenceScopes(); - - while (it.hasNext()) { - ComboData data = (ComboData) ((Combo) it.next()).getData(); - if (data.getKey() != null) { - contexts[0].getNode(getPreferenceNodeQualifier()).putInt(data.getKey(), data.getSeverity()); - } - } - - for (int i = 0; i < contexts.length; i++) { - try { - contexts[i].getNode(getPreferenceNodeQualifier()).flush(); - } - catch (BackingStoreException e) { - - } - } - } - - protected ExpandableComposite getParentExpandableComposite(Control control) { - Control parent = control.getParent(); - while (!(parent instanceof ExpandableComposite) && parent != null) { - parent = parent.getParent(); - } - if (parent instanceof ExpandableComposite) { - return (ExpandableComposite) parent; - } - return null; - } - - protected ExpandableComposite createStyleSection(Composite parent, String label, int nColumns) { - ExpandableComposite excomposite = new ExpandableComposite(parent, SWT.NONE, ExpandableComposite.TWISTIE | ExpandableComposite.CLIENT_INDENT); - excomposite.setText(label); - excomposite.setExpanded(false); - excomposite.setFont(JFaceResources.getFontRegistry().getBold(JFaceResources.DIALOG_FONT)); - excomposite.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, false, nColumns, 1)); - excomposite.addExpansionListener(new ExpansionAdapter() { - public void expansionStateChanged(ExpansionEvent e) { - expandedStateChanged((ExpandableComposite) e.getSource()); - } - }); - fExpandables.add(excomposite); - makeScrollableCompositeAware(excomposite); - return excomposite; - } - - protected Composite createStyleSectionWithContentComposite(Composite parent, String label, int nColumns) { - ExpandableComposite excomposite = new ExpandableComposite(parent, SWT.NONE, ExpandableComposite.TWISTIE | ExpandableComposite.CLIENT_INDENT); - excomposite.setText(label); - excomposite.setExpanded(false); - excomposite.setFont(JFaceResources.getFontRegistry().getBold(JFaceResources.DIALOG_FONT)); - excomposite.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, false, nColumns, 1)); - excomposite.addExpansionListener(new ExpansionAdapter() { - public void expansionStateChanged(ExpansionEvent e) { - expandedStateChanged((ExpandableComposite) e.getSource()); - } - }); - fExpandables.add(excomposite); - makeScrollableCompositeAware(excomposite); - - Composite inner = new Composite(excomposite, SWT.NONE); - inner.setFont(excomposite.getFont()); - inner.setLayout(new GridLayout(nColumns, false)); - excomposite.setClient(inner); - return inner; - } - - protected final void expandedStateChanged(ExpandableComposite expandable) { - ScrolledPageContent parentScrolledComposite = getParentScrolledComposite(expandable); - if (parentScrolledComposite != null) { - parentScrolledComposite.reflow(true); - } - } - - private void makeScrollableCompositeAware(Control control) { - ScrolledPageContent parentScrolledComposite = getParentScrolledComposite(control); - if (parentScrolledComposite != null) { - parentScrolledComposite.adaptChild(control); - } - } - - protected ScrolledPageContent getParentScrolledComposite(Control control) { - Control parent = control.getParent(); - while (!(parent instanceof ScrolledPageContent) && parent != null) { - parent = parent.getParent(); - } - if (parent instanceof ScrolledPageContent) { - return (ScrolledPageContent) parent; - } - return null; - } - - protected void storeSectionExpansionStates(IDialogSettings section) { - for (int i = 0; i < fExpandables.size(); i++) { - ExpandableComposite comp = (ExpandableComposite) fExpandables.get(i); - section.put(SETTINGS_EXPANDED + String.valueOf(i), comp.isExpanded()); - } - } - - protected void restoreSectionExpansionStates(IDialogSettings settings) { - for (int i= 0; i < fExpandables.size(); i++) { - ExpandableComposite excomposite= (ExpandableComposite) fExpandables.get(i); - if (settings == null) { - excomposite.setExpanded(i == 0); // only expand the first node by default - } else { - excomposite.setExpanded(settings.getBoolean(SETTINGS_EXPANDED + String.valueOf(i))); - } - } - } - - protected void resetSeverities() { - IEclipsePreferences defaultContext = new DefaultScope().getNode(getPreferenceNodeQualifier()); - for (int i = 0; i < fCombos.size(); i++) { - ComboData data = (ComboData) ((Combo) fCombos.get(i)).getData(); - int severity = defaultContext.getInt(data.getKey(), ValidationMessage.WARNING); - data.setSeverity(severity); - ((Combo) fCombos.get(i)).select(data.getIndex()); - } - } - - protected boolean shouldRevalidateOnSettingsChange() { - Iterator it = fCombos.iterator(); - - while (it.hasNext()) { - ComboData data = (ComboData) ((Combo) it.next()).getData(); - if (data.isChanged()) - return true; - } - return false; - } - - public boolean performOk() { - if(super.performOk() && shouldRevalidateOnSettingsChange()) { - MessageBox mb = new MessageBox(this.getShell(), SWT.APPLICATION_MODAL | SWT.YES | SWT.NO | SWT.CANCEL | SWT.ICON_INFORMATION | SWT.RIGHT); - mb.setText(HTMLUIMessages.Validation_Title); - /* Choose which message to use based on if its project or workspace settings */ - String msg = (getProject() == null) ? HTMLUIMessages.Validation_Workspace : HTMLUIMessages.Validation_Project; - mb.setMessage(msg); - switch(mb.open()) { - case SWT.CANCEL: - return false; - case SWT.YES: - storeValues(); - ValidateJob job = new ValidateJob(HTMLUIMessages.Validation_jobName); - job.schedule(); - case SWT.NO: - storeValues(); - default: - return true; - } - } - return true; - } - - /** - * Performs validation after validation preferences have been modified. - */ - private class ValidateJob extends Job { - - public ValidateJob(String name) { - super(name); - } - - protected IStatus run(IProgressMonitor monitor) { - IStatus status = Status.OK_STATUS; - try { - IProject[] projects = null; - /* Changed preferences for a single project, only validate it */ - if (getProject() != null) - projects = new IProject[]{getProject()}; - /* Workspace-wide preferences changed */ - else { - /* Get all of the projects in the workspace */ - projects = ResourcesPlugin.getWorkspace().getRoot().getProjects(); - IEclipsePreferences prefs = null; - List projectList = new ArrayList(); - - /* Filter out projects that use project-specific settings or have been closed */ - for (int i = 0; i < projects.length; i++) { - prefs = new ProjectScope(projects[i]).getNode(getPreferenceNodeQualifier()); - if (projects[i].isAccessible() && !prefs.getBoolean(getProjectSettingsKey(), false)) - projectList.add(projects[i]); - } - projects = (IProject[]) projectList.toArray(new IProject[projectList.size()]); - } - fValidation.validate(projects, true, false, monitor); - } - catch (CoreException ce) { - status = Status.CANCEL_STATUS; - } - - return status; - } - - } - -}
diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/preferences/ui/JSPValidationPreferencePage.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/preferences/ui/JSPValidationPreferencePage.java index f67dae3..39d4fb6 100644 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/preferences/ui/JSPValidationPreferencePage.java +++ b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/preferences/ui/JSPValidationPreferencePage.java
@@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2008, 2010 IBM Corporation and others. + * Copyright (c) 2008, 2011 IBM Corporation 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 @@ -40,6 +40,7 @@ import org.eclipse.ui.dialogs.PreferenceLinkArea; import org.eclipse.ui.preferences.IWorkbenchPreferenceContainer; import org.eclipse.wst.sse.core.internal.validate.ValidationMessage; +import org.eclipse.wst.sse.ui.internal.preferences.ui.AbstractValidationSettingsPage; import org.eclipse.wst.sse.ui.internal.preferences.ui.ScrolledPageContent; public class JSPValidationPreferencePage extends AbstractValidationSettingsPage {
diff --git a/bundles/org.eclipse.wst.html.ui/src/org/eclipse/wst/html/ui/internal/HTMLUIMessages.java b/bundles/org.eclipse.wst.html.ui/src/org/eclipse/wst/html/ui/internal/HTMLUIMessages.java index 8c1b3e4..e1f4b83 100644 --- a/bundles/org.eclipse.wst.html.ui/src/org/eclipse/wst/html/ui/internal/HTMLUIMessages.java +++ b/bundles/org.eclipse.wst.html.ui/src/org/eclipse/wst/html/ui/internal/HTMLUIMessages.java
@@ -204,11 +204,7 @@ public static String HTMLValidationPreferencePage_8; public static String HTMLValidationPreferencePage_9; - // Validation - public static String Validation_Title; - public static String Validation_Workspace; - public static String Validation_Project; - public static String Validation_jobName; + // Hyperlinks public static String Hyperlink_line;
diff --git a/bundles/org.eclipse.wst.html.ui/src/org/eclipse/wst/html/ui/internal/HTMLUIPluginResources.properties b/bundles/org.eclipse.wst.html.ui/src/org/eclipse/wst/html/ui/internal/HTMLUIPluginResources.properties index 13b58c4..d148dd8f9 100644 --- a/bundles/org.eclipse.wst.html.ui/src/org/eclipse/wst/html/ui/internal/HTMLUIPluginResources.properties +++ b/bundles/org.eclipse.wst.html.ui/src/org/eclipse/wst/html/ui/internal/HTMLUIPluginResources.properties
@@ -179,10 +179,5 @@ HTMLValidationPreferencePage_36=Invalid location of text in tag: HTMLValidationPreferencePage_37=Missing attribute equals sign character: -Validation_Title=Validation Settings Changed -Validation_Workspace=The validation settings have changed. A full validation is required for changes to take effect. Validate now? -Validation_Project=The validation settings have changed. A validation of the project is required for changes to take effect. Validate the project now? -Validation_jobName=Validating... - Hyperlink_line={0}={1} : line {2} Open=Open ''{0}''
diff --git a/bundles/org.eclipse.wst.html.ui/src/org/eclipse/wst/html/ui/internal/preferences/ui/HTMLValidationPreferencePage.java b/bundles/org.eclipse.wst.html.ui/src/org/eclipse/wst/html/ui/internal/preferences/ui/HTMLValidationPreferencePage.java index 3c227f7..9186cce 100644 --- a/bundles/org.eclipse.wst.html.ui/src/org/eclipse/wst/html/ui/internal/preferences/ui/HTMLValidationPreferencePage.java +++ b/bundles/org.eclipse.wst.html.ui/src/org/eclipse/wst/html/ui/internal/preferences/ui/HTMLValidationPreferencePage.java
@@ -25,6 +25,7 @@ import org.eclipse.wst.html.ui.internal.HTMLUIMessages; import org.eclipse.wst.html.ui.internal.HTMLUIPlugin; import org.eclipse.wst.sse.core.internal.validate.ValidationMessage; +import org.eclipse.wst.sse.ui.internal.preferences.ui.AbstractValidationSettingsPage; import org.eclipse.wst.sse.ui.internal.preferences.ui.ScrolledPageContent; public class HTMLValidationPreferencePage extends AbstractValidationSettingsPage {
diff --git a/bundles/org.eclipse.wst.html.ui/src/org/eclipse/wst/html/ui/internal/preferences/ui/PropertyPreferencePage.java b/bundles/org.eclipse.wst.html.ui/src/org/eclipse/wst/html/ui/internal/preferences/ui/PropertyPreferencePage.java deleted file mode 100644 index ae95c84..0000000 --- a/bundles/org.eclipse.wst.html.ui/src/org/eclipse/wst/html/ui/internal/preferences/ui/PropertyPreferencePage.java +++ /dev/null
@@ -1,300 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2001, 2008 IBM Corporation 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: - * IBM Corporation - initial API and implementation - * Jens Lukowski/Innoopract - initial renaming/restructuring - * - *******************************************************************************/ -package org.eclipse.wst.html.ui.internal.preferences.ui; - -import java.util.HashMap; -import java.util.Map; - -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.resources.IWorkspace; -import org.eclipse.core.resources.ProjectScope; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.Platform; -import org.eclipse.core.runtime.preferences.DefaultScope; -import org.eclipse.core.runtime.preferences.IScopeContext; -import org.eclipse.core.runtime.preferences.InstanceScope; -import org.eclipse.jface.dialogs.ControlEnableState; -import org.eclipse.jface.viewers.DecoratingLabelProvider; -import org.eclipse.jface.viewers.IStructuredContentProvider; -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.jface.window.Window; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.events.SelectionListener; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Link; -import org.eclipse.ui.IWorkbenchPreferencePage; -import org.eclipse.ui.dialogs.ListDialog; -import org.eclipse.ui.dialogs.PreferencesUtil; -import org.eclipse.ui.dialogs.PropertyPage; -import org.eclipse.ui.model.WorkbenchLabelProvider; -import org.eclipse.ui.views.navigator.ResourceSorter; -import org.eclipse.wst.sse.core.internal.tasks.TaskTagPreferenceKeys; -import org.eclipse.wst.sse.ui.internal.SSEUIMessages; -import org.eclipse.wst.sse.ui.internal.SSEUIPlugin; - -/** - * Based loosely on org.eclipse.jdt.internal.ui.preferences.PropertyAndPreferencePage - */ -abstract class PropertyPreferencePage extends PropertyPage implements IWorkbenchPreferencePage { - private static final boolean _debugPreferences = "true".equalsIgnoreCase(Platform.getDebugOption("org.eclipse.wst.sse.ui/preferences-properties")); //$NON-NLS-1$ //$NON-NLS-2$ - /* - * Disable link data, prevents the display of a "workspace" or "project" - * settings link to prevent recursive dialog launching - */ - private static final Object DISABLE_LINK = "DISABLE_LINK"; //$NON-NLS-1$ - - private Map fData = null; - - private Button fEnableProjectSettings; - - private Link fProjectSettingsLink; - - private Control fCommon; - - private ControlEnableState fEnablements; - - public PropertyPreferencePage() { - super(); - } - - public final void applyData(Object data) { - super.applyData(data); - if (data instanceof Map) { - fData = (Map) data; - updateLinkEnablement(); - } - } - - protected abstract Control createCommonContents(Composite composite); - - public final Control createContents(Composite parent) { - Composite composite = new Composite(parent, SWT.NULL); - - GridLayout layout = new GridLayout(); - composite.setLayout(layout); - GridData data = new GridData(GridData.FILL_BOTH); - composite.setLayoutData(data); - - Composite checkLinkComposite = new Composite(composite, SWT.NONE); - checkLinkComposite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); - checkLinkComposite.setLayout(new GridLayout(2, false)); - - if (getProject() != null) { - fEnableProjectSettings = new Button(checkLinkComposite, SWT.CHECK); - fEnableProjectSettings.setText(SSEUIMessages.EnableProjectSettings); //$NON-NLS-1$//$NON-NLS-2$ - fEnableProjectSettings.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false)); - boolean enabledForProject = createPreferenceScopes()[0].getNode(getPreferenceNodeQualifier()).getBoolean(getProjectSettingsKey(), false); - fEnableProjectSettings.setSelection(enabledForProject); - } - else { - Label spacer = new Label(checkLinkComposite, SWT.CHECK); - spacer.setLayoutData(new GridData()); - } - - fProjectSettingsLink = new Link(checkLinkComposite, SWT.NONE); - fProjectSettingsLink.setLayoutData(new GridData(SWT.END, SWT.BEGINNING, true, false)); - - /* - * "element" should be a project, if null, link to per-project - * properties - */ - if (getProject() != null) { - fProjectSettingsLink.setText("<a>" + SSEUIMessages.ConfigureWorkspaceSettings + "</a>"); //$NON-NLS-1$//$NON-NLS-2$ - } - else { - fProjectSettingsLink.setText("<a>" + SSEUIMessages.ConfigureProjectSettings + "</a>"); //$NON-NLS-1$//$NON-NLS-2$ - } - - updateLinkEnablement(); - - fProjectSettingsLink.addSelectionListener(new SelectionListener() { - public void widgetDefaultSelected(SelectionEvent e) { - widgetSelected(e); - } - - public void widgetSelected(SelectionEvent e) { - if (getProject() == null) { - openProjectSettings(); - } - else { - openWorkspaceSettings(); - } - } - - }); - - if (getProject() != null) { - Label line = new Label(composite, SWT.SEPARATOR | SWT.HORIZONTAL); - line.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL)); - } - -// final Control common = createCommonContents(composite); - fCommon = createCommonContents(composite); - - fCommon.setLayoutData(new GridData(GridData.FILL_BOTH)); - - if (fEnableProjectSettings != null) { - SelectionAdapter selectionAdapter = new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - super.widgetSelected(e); - enablePreferenceContent(fEnableProjectSettings.getSelection()); - } - }; - selectionAdapter.widgetSelected(null); - fEnableProjectSettings.addSelectionListener(selectionAdapter); - } - - applyDialogFont(composite); - return composite; - } - - protected IScopeContext[] createPreferenceScopes() { - IProject project = getProject(); - if (project != null) { - return new IScopeContext[]{new ProjectScope(project), new InstanceScope(), new DefaultScope()}; - } - return new IScopeContext[]{new InstanceScope(), new DefaultScope()}; - } - - protected abstract String getPreferenceNodeQualifier(); - - protected abstract String getPreferencePageID(); - - protected IProject getProject() { - if (getElement() != null) { - if (getElement() instanceof IProject) { - return (IProject) getElement(); - } - Object adapter = getElement().getAdapter(IProject.class); - if (adapter instanceof IProject) { - return (IProject) adapter; - } - adapter = getElement().getAdapter(IResource.class); - if (adapter instanceof IProject) { - return (IProject) adapter; - } - } - return null; - } - - protected abstract String getProjectSettingsKey(); - - protected abstract String getPropertyPageID(); - - protected boolean isElementSettingsEnabled() { - return fEnableProjectSettings != null && fEnableProjectSettings.getSelection(); - } - - void openProjectSettings() { - ListDialog dialog = new ListDialog(getShell()) { - - protected Control createDialogArea(Composite container) { - Control area = super.createDialogArea(container); - getTableViewer().setSorter(new ResourceSorter(ResourceSorter.NAME)); - return area; - } - }; - dialog.setMessage(SSEUIMessages.PropertyPreferencePage_02); - dialog.setContentProvider(new IStructuredContentProvider() { - public void dispose() { - } - - public Object[] getElements(Object inputElement) { - return ((IWorkspace) inputElement).getRoot().getProjects(); - } - - public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { - } - }); - dialog.setLabelProvider(new DecoratingLabelProvider(new WorkbenchLabelProvider(), SSEUIPlugin.getDefault().getWorkbench().getDecoratorManager().getLabelDecorator())); - dialog.setInput(ResourcesPlugin.getWorkspace()); - dialog.setTitle(SSEUIMessages.PropertyPreferencePage_01); - if (dialog.open() == Window.OK) { - Object[] result = dialog.getResult(); - if (result.length > 0) { - IProject project = (IProject) dialog.getResult()[0]; - Map data = new HashMap(); - data.put(DISABLE_LINK, Boolean.TRUE); - PreferencesUtil.createPropertyDialogOn(getShell(), project, getPropertyPageID(), new String[]{getPropertyPageID()}, data).open(); - } - } - } - - void openWorkspaceSettings() { - Map data = new HashMap(); - data.put(DISABLE_LINK, Boolean.TRUE); - PreferencesUtil.createPreferenceDialogOn(getShell(), getPreferencePageID(), new String[]{getPreferencePageID()}, data).open(); - } - - public boolean performOk() { - boolean ok = super.performOk(); - IScopeContext[] preferenceScopes = createPreferenceScopes(); - if (getProject() != null) { - if (isElementSettingsEnabled()) { - if (_debugPreferences) { - System.out.println(getClass().getName() + " setting " + TaskTagPreferenceKeys.TASK_TAG_PER_PROJECT + " (" + true + ") in scope " + preferenceScopes[0].getName() + ":" + preferenceScopes[0].getLocation()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ - } - preferenceScopes[0].getNode(getPreferenceNodeQualifier()).putBoolean(getProjectSettingsKey(), fEnableProjectSettings.getSelection()); - } - else { - if (_debugPreferences) { - System.out.println(getClass().getName() + " removing " + TaskTagPreferenceKeys.TASK_TAG_PER_PROJECT + " from scope " + preferenceScopes[0].getName() + ":" + preferenceScopes[0].getLocation()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ - } - preferenceScopes[0].getNode(getPreferenceNodeQualifier()).remove(getProjectSettingsKey()); - } - } - return ok; - } - - protected void performDefaults() { - if(getProject() != null && fEnableProjectSettings != null) { - fEnableProjectSettings.setSelection(false); - enablePreferenceContent(false); - } - super.performDefaults(); - } - - private void updateLinkEnablement() { - if (fData != null && fProjectSettingsLink != null) { - fProjectSettingsLink.setEnabled(!Boolean.TRUE.equals(fData.get(DISABLE_LINK))); - } - } - - /** - * Controls the enablement of the common content region - * of a property or preference page - * - * @param enable the enabled state of the common content - * area - */ - protected void enablePreferenceContent(boolean enable) { - if(enable) { - if(fEnablements != null) { - fEnablements.restore(); - fEnablements = null; - } - } - else { - if(fEnablements == null) - fEnablements = ControlEnableState.disable(fCommon); - } - } -}
diff --git a/bundles/org.eclipse.wst.sse.ui/src-tasktags/org/eclipse/wst/sse/ui/internal/preferences/ui/PropertyPreferencePage.java b/bundles/org.eclipse.wst.sse.ui/src-tasktags/org/eclipse/wst/sse/ui/internal/preferences/ui/PropertyPreferencePage.java index 11b85ad..3aefbf8 100644 --- a/bundles/org.eclipse.wst.sse.ui/src-tasktags/org/eclipse/wst/sse/ui/internal/preferences/ui/PropertyPreferencePage.java +++ b/bundles/org.eclipse.wst.sse.ui/src-tasktags/org/eclipse/wst/sse/ui/internal/preferences/ui/PropertyPreferencePage.java
@@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2001, 2007 IBM Corporation and others. + * Copyright (c) 2001, 2011 IBM Corporation 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 @@ -67,6 +67,10 @@ private Link fProjectSettingsLink; + private Control fCommon; + + private ControlEnableState fEnablements; + public PropertyPreferencePage() { super(); } @@ -142,24 +146,14 @@ line.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL)); } - final Control common = createCommonContents(composite); - common.setLayoutData(new GridData(GridData.FILL_BOTH)); + fCommon = createCommonContents(composite); + fCommon.setLayoutData(new GridData(GridData.FILL_BOTH)); if (fEnableProjectSettings != null) { SelectionAdapter selectionAdapter = new SelectionAdapter() { - ControlEnableState enablements = null; - public void widgetSelected(SelectionEvent e) { super.widgetSelected(e); - if (fEnableProjectSettings.getSelection()) { - if (enablements != null) { - enablements.restore(); - enablements = null; - } - } - else { - enablements = ControlEnableState.disable(common); - } + enablePreferenceContent(fEnableProjectSettings.getSelection()); } }; selectionAdapter.widgetSelected(null); @@ -275,6 +269,34 @@ return ok; } + protected void performDefaults() { + if(getProject() != null && fEnableProjectSettings != null) { + fEnableProjectSettings.setSelection(false); + enablePreferenceContent(false); + } + super.performDefaults(); + } + + /** + * Controls the enablement of the common content region + * of a property or preference page + * + * @param enable the enabled state of the common content + * area + */ + protected void enablePreferenceContent(boolean enable) { + if(enable) { + if(fEnablements != null) { + fEnablements.restore(); + fEnablements = null; + } + } + else { + if(fEnablements == null) + fEnablements = ControlEnableState.disable(fCommon); + } + } + private void updateLinkEnablement() { if (fData != null && fProjectSettingsLink != null) { fProjectSettingsLink.setEnabled(!Boolean.TRUE.equals(fData.get(DISABLE_LINK)));
diff --git a/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/SSEUIMessages.java b/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/SSEUIMessages.java index 6da6081..114cee3 100644 --- a/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/SSEUIMessages.java +++ b/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/SSEUIMessages.java
@@ -1,5 +1,5 @@ /********************************************************************** - * Copyright (c) 2005, 2010 IBM Corporation and others. All rights reserved. This + * Copyright (c) 2005, 2011 IBM Corporation 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 @@ -465,4 +465,11 @@ public static String CodeAssistAdvancedConfigurationBlock_PagesDown; public static String CodeAssistAdvancedConfigurationBlock_PagesUp; public static String CodeAssistAdvancedConfigurationBlock_separate_table_category_column_title; + + // Validation + public static String Validation_Title; + public static String Validation_Workspace; + public static String Validation_Project; + public static String Validation_jobName; + }
diff --git a/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/SSEUIPluginResources.properties b/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/SSEUIPluginResources.properties index 9d018de..4a51ea9 100644 --- a/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/SSEUIPluginResources.properties +++ b/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/SSEUIPluginResources.properties
@@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2001, 2009 IBM Corporation and others. +# Copyright (c) 2001, 2011 IBM Corporation 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 @@ -443,4 +443,8 @@ CodeAssistAdvancedConfigurationBlock_PagesDown=Do&wn CodeAssistAdvancedConfigurationBlock_PagesUp=U&p CodeAssistAdvancedConfigurationBlock_separate_table_description=Select the &enablement and order of proposal categories that are cycled through when repeatedly invoking content assist: -CodeAssistAdvancedConfigurationBlock_separate_table_category_column_title=Content Assist Pages \ No newline at end of file +CodeAssistAdvancedConfigurationBlock_separate_table_category_column_title=Content Assist Pages +Validation_Title=Validation Settings Changed +Validation_Workspace=The validation settings have changed. A full validation is required for changes to take effect. Validate now? +Validation_Project=The validation settings have changed. A validation of the project is required for changes to take effect. Validate the project now? +Validation_jobName=Validating... \ No newline at end of file
diff --git a/bundles/org.eclipse.wst.html.ui/src/org/eclipse/wst/html/ui/internal/preferences/ui/AbstractValidationSettingsPage.java b/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/preferences/ui/AbstractValidationSettingsPage.java similarity index 88% rename from bundles/org.eclipse.wst.html.ui/src/org/eclipse/wst/html/ui/internal/preferences/ui/AbstractValidationSettingsPage.java rename to bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/preferences/ui/AbstractValidationSettingsPage.java index f2ab08d..32fbb58 100644 --- a/bundles/org.eclipse.wst.html.ui/src/org/eclipse/wst/html/ui/internal/preferences/ui/AbstractValidationSettingsPage.java +++ b/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/preferences/ui/AbstractValidationSettingsPage.java
@@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2008 IBM Corporation and others. + * Copyright (c) 2011 IBM Corporation 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 @@ -8,7 +8,7 @@ * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ -package org.eclipse.wst.html.ui.internal.preferences.ui; +package org.eclipse.wst.sse.ui.internal.preferences.ui; import java.util.ArrayList; import java.util.Iterator; @@ -33,6 +33,7 @@ import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; @@ -42,19 +43,18 @@ import org.eclipse.ui.forms.events.ExpansionAdapter; import org.eclipse.ui.forms.events.ExpansionEvent; import org.eclipse.ui.forms.widgets.ExpandableComposite; -import org.eclipse.wst.html.ui.internal.HTMLUIMessages; import org.eclipse.wst.sse.core.internal.validate.ValidationMessage; -import org.eclipse.wst.sse.ui.internal.preferences.ui.ScrolledPageContent; +import org.eclipse.wst.sse.ui.internal.SSEUIMessages; import org.eclipse.wst.validation.ValidationFramework; import org.osgi.service.prefs.BackingStoreException; /** * Based on org.eclipse.jdt.internal.ui.preferences.OptionsConfigurationBlock */ -abstract class AbstractValidationSettingsPage extends PropertyPreferencePage { +public abstract class AbstractValidationSettingsPage extends PropertyPreferencePage { private List fCombos; - private List fExpandables; + protected List fExpandables; private SelectionListener fSelectionListener; @@ -268,6 +268,27 @@ return excomposite; } + protected Composite createStyleSectionWithContentComposite(Composite parent, String label, int nColumns) { + ExpandableComposite excomposite = new ExpandableComposite(parent, SWT.NONE, ExpandableComposite.TWISTIE | ExpandableComposite.CLIENT_INDENT); + excomposite.setText(label); + excomposite.setExpanded(false); + excomposite.setFont(JFaceResources.getFontRegistry().getBold(JFaceResources.DIALOG_FONT)); + excomposite.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, false, nColumns, 1)); + excomposite.addExpansionListener(new ExpansionAdapter() { + public void expansionStateChanged(ExpansionEvent e) { + expandedStateChanged((ExpandableComposite) e.getSource()); + } + }); + fExpandables.add(excomposite); + makeScrollableCompositeAware(excomposite); + + Composite inner = new Composite(excomposite, SWT.NONE); + inner.setFont(excomposite.getFont()); + inner.setLayout(new GridLayout(nColumns, false)); + excomposite.setClient(inner); + return inner; + } + protected final void expandedStateChanged(ExpandableComposite expandable) { ScrolledPageContent parentScrolledComposite= getParentScrolledComposite(expandable); if (parentScrolledComposite != null) { @@ -275,7 +296,7 @@ } } - private void makeScrollableCompositeAware(Control control) { + protected void makeScrollableCompositeAware(Control control) { ScrolledPageContent parentScrolledComposite= getParentScrolledComposite(control); if (parentScrolledComposite != null) { parentScrolledComposite.adaptChild(control); @@ -335,16 +356,16 @@ public boolean performOk() { if(super.performOk() && shouldRevalidateOnSettingsChange()) { MessageBox mb = new MessageBox(this.getShell(), SWT.APPLICATION_MODAL | SWT.YES | SWT.NO | SWT.CANCEL | SWT.ICON_INFORMATION | SWT.RIGHT); - mb.setText(HTMLUIMessages.Validation_Title); + mb.setText(SSEUIMessages.Validation_Title); /* Choose which message to use based on if its project or workspace settings */ - String msg = (getProject() == null) ? HTMLUIMessages.Validation_Workspace : HTMLUIMessages.Validation_Project; + String msg = (getProject() == null) ? SSEUIMessages.Validation_Workspace : SSEUIMessages.Validation_Project; mb.setMessage(msg); switch(mb.open()) { case SWT.CANCEL: return false; case SWT.YES: storeValues(); - ValidateJob job = new ValidateJob(HTMLUIMessages.Validation_jobName); + ValidateJob job = new ValidateJob(SSEUIMessages.Validation_jobName); job.schedule(); case SWT.NO: storeValues();
diff --git a/bundles/org.eclipse.wst.xml.core/src-validation/org/eclipse/wst/xml/core/internal/validation/core/AbstractNestedValidator.java b/bundles/org.eclipse.wst.xml.core/src-validation/org/eclipse/wst/xml/core/internal/validation/core/AbstractNestedValidator.java index 4183f42..5ff3602 100644 --- a/bundles/org.eclipse.wst.xml.core/src-validation/org/eclipse/wst/xml/core/internal/validation/core/AbstractNestedValidator.java +++ b/bundles/org.eclipse.wst.xml.core/src-validation/org/eclipse/wst/xml/core/internal/validation/core/AbstractNestedValidator.java
@@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2006, 2010 IBM Corporation and others. + * Copyright (c) 2006, 2011 IBM Corporation 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 @@ -78,7 +78,7 @@ setupValidation(nestedcontext); teardownRequired = true; } - + nestedcontext.setProject(file.getProject()); validate(file, null, result, reporter, nestedcontext); if (teardownRequired) @@ -109,6 +109,7 @@ IFile file = (IFile) context.loadModel(GET_FILE, parms); if (file != null && shouldValidate(file)) { + nestedcontext.setProject(file.getProject()); // The helper may not have a file stored in it but may have an InputStream if being // called from a source other than the validation framework such as an editor. if (context.loadModel(GET_INPUTSTREAM) instanceof InputStream)
diff --git a/bundles/org.eclipse.wst.xml.core/src-validation/org/eclipse/wst/xml/core/internal/validation/core/NestedValidatorContext.java b/bundles/org.eclipse.wst.xml.core/src-validation/org/eclipse/wst/xml/core/internal/validation/core/NestedValidatorContext.java index 3c2710a..bb96caf 100644 --- a/bundles/org.eclipse.wst.xml.core/src-validation/org/eclipse/wst/xml/core/internal/validation/core/NestedValidatorContext.java +++ b/bundles/org.eclipse.wst.xml.core/src-validation/org/eclipse/wst/xml/core/internal/validation/core/NestedValidatorContext.java
@@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2006 IBM Corporation and others. + * Copyright (c) 2006, 2011 IBM Corporation 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 @@ -11,6 +11,8 @@ package org.eclipse.wst.xml.core.internal.validation.core; +import org.eclipse.core.resources.IProject; + /** * A context class for validators to be able to determine the context of @@ -19,4 +21,13 @@ */ public class NestedValidatorContext { + private IProject fProject; + + public void setProject(IProject project) { + fProject = project; + } + + public IProject getProject() { + return fProject; + } }
diff --git a/bundles/org.eclipse.wst.xml.core/src-validation/org/eclipse/wst/xml/core/internal/validation/eclipse/Validator.java b/bundles/org.eclipse.wst.xml.core/src-validation/org/eclipse/wst/xml/core/internal/validation/eclipse/Validator.java index 4aae874..1824ab4 100644 --- a/bundles/org.eclipse.wst.xml.core/src-validation/org/eclipse/wst/xml/core/internal/validation/eclipse/Validator.java +++ b/bundles/org.eclipse.wst.xml.core/src-validation/org/eclipse/wst/xml/core/internal/validation/eclipse/Validator.java
@@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2001, 2009 IBM Corporation and others. + * Copyright (c) 2001, 2011 IBM Corporation 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 @@ -14,8 +14,13 @@ import java.io.InputStream; import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.ProjectScope; import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.Preferences; +import org.eclipse.core.runtime.Platform; +import org.eclipse.core.runtime.preferences.DefaultScope; +import org.eclipse.core.runtime.preferences.IPreferencesService; +import org.eclipse.core.runtime.preferences.IScopeContext; +import org.eclipse.core.runtime.preferences.InstanceScope; import org.eclipse.wst.validation.ValidationResult; import org.eclipse.wst.validation.ValidationState; import org.eclipse.wst.validation.internal.provisional.core.IMessage; @@ -33,7 +38,6 @@ { private static final String XML_VALIDATOR_CONTEXT = "org.eclipse.wst.xml.core.validatorContext"; //$NON-NLS-1$ protected int indicateNoGrammar = 0; - /** * Set any preferences for XML validation. * @@ -42,9 +46,19 @@ protected void setupValidation(NestedValidatorContext context) { super.setupValidation(context); - indicateNoGrammar = XMLCorePlugin.getDefault().getPluginPreferences().getInt(XMLCorePreferenceNames.INDICATE_NO_GRAMMAR); + //indicateNoGrammar = XMLCorePlugin.getDefault().getPluginPreferences().getInt(); } + protected IScopeContext[] createPreferenceScopes(NestedValidatorContext context) { + final IProject project = context.getProject(); + if (project != null && project.isAccessible()) { + final ProjectScope projectScope = new ProjectScope(project); + if (projectScope.getNode(XMLCorePlugin.getDefault().getBundle().getSymbolicName()).getBoolean(XMLCorePreferenceNames.USE_PROJECT_SETTINGS, false)) + return new IScopeContext[]{projectScope, new InstanceScope(), new DefaultScope()}; + } + return new IScopeContext[]{new InstanceScope(), new DefaultScope()}; + } + /* (non-Javadoc) * @see org.eclipse.wst.xml.core.internal.validation.core.AbstractNestedValidator#validate(java.lang.String, java.io.InputStream, org.eclipse.wst.xml.core.internal.validation.core.NestedValidatorContext) */ @@ -58,12 +72,16 @@ XMLValidator validator = XMLValidator.getInstance(); XMLValidationConfiguration configuration = new XMLValidationConfiguration(); + final IScopeContext[] preferenceScopes = createPreferenceScopes(context); + final IPreferencesService preferencesService = Platform.getPreferencesService(); + indicateNoGrammar = preferencesService.getInt(XMLCorePlugin.getDefault().getBundle().getSymbolicName(), XMLCorePreferenceNames.INDICATE_NO_GRAMMAR, 0, preferenceScopes); + try { - Preferences pluginPreferences = XMLCorePlugin.getDefault().getPluginPreferences(); + //Preferences pluginPreferences = XMLCorePlugin.getDefault().getPluginPreferences(); configuration.setFeature(XMLValidationConfiguration.INDICATE_NO_GRAMMAR, indicateNoGrammar); - configuration.setFeature(XMLValidationConfiguration.USE_XINCLUDE, pluginPreferences.getBoolean(XMLCorePreferenceNames.USE_XINCLUDE)); - configuration.setFeature(XMLValidationConfiguration.HONOUR_ALL_SCHEMA_LOCATIONS, pluginPreferences.getBoolean(XMLCorePreferenceNames.HONOUR_ALL_SCHEMA_LOCATIONS)); + configuration.setFeature(XMLValidationConfiguration.USE_XINCLUDE, preferencesService.getBoolean(XMLCorePlugin.getDefault().getBundle().getSymbolicName(), XMLCorePreferenceNames.USE_XINCLUDE, false, preferenceScopes)); + configuration.setFeature(XMLValidationConfiguration.HONOUR_ALL_SCHEMA_LOCATIONS, preferencesService.getBoolean(XMLCorePlugin.getDefault().getBundle().getSymbolicName(), XMLCorePreferenceNames.HONOUR_ALL_SCHEMA_LOCATIONS, true, preferenceScopes)); } catch(Exception e) {
diff --git a/bundles/org.eclipse.wst.xml.core/src/org/eclipse/wst/xml/core/internal/preferences/XMLCorePreferenceNames.java b/bundles/org.eclipse.wst.xml.core/src/org/eclipse/wst/xml/core/internal/preferences/XMLCorePreferenceNames.java index 00f597c..edaf2a6 100644 --- a/bundles/org.eclipse.wst.xml.core/src/org/eclipse/wst/xml/core/internal/preferences/XMLCorePreferenceNames.java +++ b/bundles/org.eclipse.wst.xml.core/src/org/eclipse/wst/xml/core/internal/preferences/XMLCorePreferenceNames.java
@@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2005, 2010 IBM Corporation and others. + * Copyright (c) 2005, 2011 IBM Corporation 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 @@ -284,4 +284,5 @@ public static final String NAMESPACE_IN_PI_TARGET = "namespaceInPITarget"; //$NON-NLS-1$ public static final String MISSING_TAG_NAME = "missingTagName"; //$NON-NLS-1$ public static final String WHITESPACE_AT_START = "whitespaceAtStart"; //$NON-NLS-1$ + public static final String USE_PROJECT_SETTINGS = "use-project-settings";//$NON-NLS-1$ }
diff --git a/bundles/org.eclipse.wst.xml.ui/plugin.properties b/bundles/org.eclipse.wst.xml.ui/plugin.properties index b8c51a8..501baf1 100644 --- a/bundles/org.eclipse.wst.xml.ui/plugin.properties +++ b/bundles/org.eclipse.wst.xml.ui/plugin.properties
@@ -24,6 +24,7 @@ XML_Syntax_Coloring=Syntax Coloring XML_Typing=Typing XML_Editor.name=XML Editor +XML_Property_validation=XML Syntax ############################################################################### _UI_WIZARD_NEW_XML=XML File XML_New_File.tooltip=New XML File
diff --git a/bundles/org.eclipse.wst.xml.ui/plugin.xml b/bundles/org.eclipse.wst.xml.ui/plugin.xml index 1e6e62d..d38b647 100644 --- a/bundles/org.eclipse.wst.xml.ui/plugin.xml +++ b/bundles/org.eclipse.wst.xml.ui/plugin.xml
@@ -227,6 +227,20 @@ </page> </extension> + <!-- Web content settings --> + <extension point="org.eclipse.ui.propertyPages"> + <page + name="%XML_Property_validation" + class="org.eclipse.wst.xml.ui.internal.preferences.XMLValidatorPreferencePage" + id="org.eclipse.wst.xml.ui.propertyPage.project.validation" + category="ValidationPropertiesPage"> + <enabledWhen> + <adapt type="org.eclipse.core.resources.IProject"> + + </adapt> + </enabledWhen> + </page> + </extension> <!-- Keywords for preference and properties pages --> <extension point="org.eclipse.ui.keywords"> <keyword
diff --git a/bundles/org.eclipse.wst.xml.ui/src/org/eclipse/wst/xml/ui/internal/preferences/XMLValidatorPreferencePage.java b/bundles/org.eclipse.wst.xml.ui/src/org/eclipse/wst/xml/ui/internal/preferences/XMLValidatorPreferencePage.java index 155bdaa..273a5ef 100644 --- a/bundles/org.eclipse.wst.xml.ui/src/org/eclipse/wst/xml/ui/internal/preferences/XMLValidatorPreferencePage.java +++ b/bundles/org.eclipse.wst.xml.ui/src/org/eclipse/wst/xml/ui/internal/preferences/XMLValidatorPreferencePage.java
@@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2001, 2010 IBM Corporation and others. + * Copyright (c) 2001, 2011 IBM Corporation 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 @@ -13,14 +13,15 @@ package org.eclipse.wst.xml.ui.internal.preferences; - import org.eclipse.core.runtime.Preferences; +import org.eclipse.core.runtime.preferences.DefaultScope; +import org.eclipse.core.runtime.preferences.IEclipsePreferences; +import org.eclipse.core.runtime.preferences.IScopeContext; import org.eclipse.jface.dialogs.ControlEnableState; -import org.eclipse.jface.resource.JFaceResources; +import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; @@ -28,491 +29,295 @@ import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Group; -import org.eclipse.swt.widgets.Label; -import org.eclipse.ui.PlatformUI; -import org.eclipse.wst.sse.ui.internal.preferences.ui.AbstractPreferencePage; +import org.eclipse.ui.IWorkbench; +import org.eclipse.wst.sse.core.internal.validate.ValidationMessage; +import org.eclipse.wst.sse.ui.internal.preferences.ui.AbstractValidationSettingsPage; import org.eclipse.wst.xml.core.internal.XMLCorePlugin; import org.eclipse.wst.xml.core.internal.preferences.XMLCorePreferenceNames; import org.eclipse.wst.xml.ui.internal.XMLUIMessages; -import org.eclipse.wst.xml.ui.internal.editor.IHelpContextIds; +import org.eclipse.wst.xml.ui.internal.XMLUIPlugin; +public class XMLValidatorPreferencePage extends AbstractValidationSettingsPage { + private static final String SETTINGS_SECTION_NAME = "XMLValidationSeverities";//$NON-NLS-1$ -public class XMLValidatorPreferencePage extends AbstractPreferencePage { - private Combo fIndicateNoGrammar; - - private Button fHonourAllSchemaLocations; + boolean fOriginalUseXIncludeButtonSelected; - private Button fUseXinclude; - - private Button fExtendedMarkupValidation; - - private Combo fEmptyElementTag; - - private Combo fEndTagWithAttributes; - - private Combo fInvalidWhitespaceBeforeTagname; - - private Combo fMissingClosingBracket; - - private Combo fMissingClosingQuote; - - private Combo fMissingEndTag; - - private Combo fMissingStartTag; - - private Combo fMissingQuotes; - - private Combo fInvalidNamespaceInPI; - - private Combo fMissingTagName; - - private Combo fInvalidWhitespaceAtStart; + boolean fOriginalUseHonourAllButtonSelected; - private Group fMarkupValidationGroup; - private ControlEnableState fMarkupState; - - private static final String[] SEVERITIES = {XMLUIMessages.Indicate_no_grammar_specified_severities_error, XMLUIMessages.Indicate_no_grammar_specified_severities_warning, XMLUIMessages.Indicate_no_grammar_specified_severities_ignore}; - private static final String[] MARKUP_SEVERITIES = {XMLUIMessages.Severity_error, XMLUIMessages.Severity_warning, XMLUIMessages.Severity_ignore}; + boolean fOriginalUseExtendedMarkupValidation; - protected Control createContents(Composite parent) { - Composite composite = (Composite)super.createContents(parent); - PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, IHelpContextIds.XML_PREFWEBX_VALIDATOR_HELPID); - createContentsForValidatingGroup(composite); - createContentsForMarkupValidationGroup(composite); - setSize(composite); - loadPreferences(); + private Combo fIndicateNoGrammar = null; - return composite; - } + private Button fHonourAllSchemaLocations = null; - protected void createContentsForValidatingGroup(Composite parent) { - Group validatingGroup = createGroup(parent, 2); - ((GridLayout)validatingGroup.getLayout()).makeColumnsEqualWidth = false; - validatingGroup.setText(XMLUIMessages.Validating_files); + private Button fUseXinclude = null; - if (fIndicateNoGrammar == null) { - createLabel(validatingGroup, XMLUIMessages.Indicate_no_grammar_specified); - fIndicateNoGrammar = createCombo(validatingGroup, SEVERITIES); - } - if (fUseXinclude == null) { - fUseXinclude = createCheckBox(validatingGroup, XMLUIMessages.Use_XInclude); - ((GridData)fUseXinclude.getLayoutData()).horizontalSpan = 2; - } - if (fHonourAllSchemaLocations == null) { - fHonourAllSchemaLocations = createCheckBox(validatingGroup, XMLUIMessages.Honour_all_schema_locations); - ((GridData)fHonourAllSchemaLocations.getLayoutData()).horizontalSpan = 2; - } - } - private void handleMarkupSeveritySelection(boolean selection){ - if (selection) { - fMarkupState.restore(); - } - else { - fMarkupState = ControlEnableState.disable(fMarkupValidationGroup); - } - } + private Button fExtendedMarkupValidation; - protected void createContentsForMarkupValidationGroup(Composite parent) { - - if (fExtendedMarkupValidation == null) { - fExtendedMarkupValidation = createCheckBox(parent, XMLUIMessages.MarkupValidation_files); - ((GridData)fExtendedMarkupValidation.getLayoutData()).horizontalSpan = 2; - fExtendedMarkupValidation.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - handleMarkupSeveritySelection(fExtendedMarkupValidation.getSelection()); - } - }); - } - fMarkupValidationGroup = createGroup(parent, 3); - ((GridLayout)fMarkupValidationGroup.getLayout()).makeColumnsEqualWidth = false; - fMarkupValidationGroup.setText(XMLUIMessages.MarkupValidation_files_label); + private Combo fMissingStartTag; - if (fMissingStartTag == null) { - fMissingStartTag = createMarkupCombo(fMarkupValidationGroup, XMLUIMessages.Missing_start_tag, MARKUP_SEVERITIES); - } - if (fMissingEndTag == null) { - fMissingEndTag = createMarkupCombo(fMarkupValidationGroup, XMLUIMessages.Missing_end_tag, MARKUP_SEVERITIES); - } - if (fMissingTagName == null) { - fMissingTagName = createMarkupCombo(fMarkupValidationGroup, XMLUIMessages.Tag_name_missing, MARKUP_SEVERITIES); - } - if (fMissingQuotes == null) { - fMissingQuotes = createMarkupCombo(fMarkupValidationGroup, XMLUIMessages.Missing_quotes, MARKUP_SEVERITIES); - } - if (fMissingClosingBracket == null) { - fMissingClosingBracket = createMarkupCombo(fMarkupValidationGroup, XMLUIMessages.Missing_closing_bracket, MARKUP_SEVERITIES); - } - if (fMissingClosingQuote == null) { - fMissingClosingQuote = createMarkupCombo(fMarkupValidationGroup, XMLUIMessages.Missing_closing_quote, MARKUP_SEVERITIES); - } - if (fEmptyElementTag == null) { - fEmptyElementTag = createMarkupCombo(fMarkupValidationGroup, XMLUIMessages.Empty_element_tag, MARKUP_SEVERITIES); - } - if (fEndTagWithAttributes == null) { - fEndTagWithAttributes = createMarkupCombo(fMarkupValidationGroup, XMLUIMessages.End_tag_with_attributes, MARKUP_SEVERITIES); - } - if (fInvalidWhitespaceBeforeTagname == null) { - fInvalidWhitespaceBeforeTagname = createMarkupCombo(fMarkupValidationGroup, XMLUIMessages.Invalid_whitespace_before_tagname, MARKUP_SEVERITIES); - } - if (fInvalidNamespaceInPI == null) { - fInvalidNamespaceInPI = createMarkupCombo(fMarkupValidationGroup, XMLUIMessages.Namespace_in_pi_target, MARKUP_SEVERITIES); - } - if (fInvalidWhitespaceAtStart == null) { - fInvalidWhitespaceAtStart = createMarkupCombo(fMarkupValidationGroup, XMLUIMessages.Whitespace_at_start, MARKUP_SEVERITIES); - } + private Combo fMissingEndTag; - } + private Combo fMissingTagName; - /** - * @param parent - * @return - */ - private Combo createCombo(Composite parent, String[] items) { - Combo combo = new Combo(parent, SWT.DROP_DOWN | SWT.READ_ONLY); - combo.setItems(items); + private Combo fEmptyElementTag; - //GridData - GridData data = new GridData(SWT.FILL, SWT.CENTER, true, true); - combo.setLayoutData(data); + private Combo fEndTagWithAttributes; - return combo; - } + private Combo fInvalidWhitespaceBeforeTagname; - private Combo createMarkupCombo(Composite parent, String text, String[] items) { - Label label = new Label(parent, SWT.LEFT); - GridData gd = new GridData(GridData.FILL, GridData.CENTER, true, false, 2, 1); - label.setFont(JFaceResources.getDialogFont()); - label.setText(text); - label.setLayoutData(gd); + private Combo fMissingClosingBracket; - Combo combo = new Combo(parent, SWT.DROP_DOWN | SWT.READ_ONLY); - combo.setItems(items); + private Combo fMissingClosingQuote; - //GridData - // GridData data = new GridData(SWT.FILL, SWT.CENTER, false, true); - combo.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL)); + private Combo fMissingQuotes; - return combo; - } - - protected void initializeValues() { - initializeValuesForValidatingGroup(); - initializeValuesForMarkupValidationGroup(); - } + private Combo fInvalidNamespaceInPI; - protected void initializeValuesForValidatingGroup() { - Preferences modelPreferences = getModelPreferences(); - int indicateNoGrammarButtonSelected = modelPreferences.getInt(XMLCorePreferenceNames.INDICATE_NO_GRAMMAR); - boolean useXIncludeButtonSelected = modelPreferences.getBoolean(XMLCorePreferenceNames.USE_XINCLUDE); + private Combo fInvalidWhitespaceAtStart; - if (fIndicateNoGrammar != null) { - fIndicateNoGrammar.select(2 - indicateNoGrammarButtonSelected); - fIndicateNoGrammar.setText(SEVERITIES[2 - indicateNoGrammarButtonSelected]); - } - if (fUseXinclude != null) { - fUseXinclude.setSelection(useXIncludeButtonSelected); - } + private Group fMarkupValidationGroup; + private ControlEnableState fMarkupState; - boolean honourAllSelected = modelPreferences.getBoolean(XMLCorePreferenceNames.HONOUR_ALL_SCHEMA_LOCATIONS); - if (fHonourAllSchemaLocations != null) { - fHonourAllSchemaLocations.setSelection(honourAllSelected); - } - } - - protected void initializeValuesForMarkupValidationGroup() { - Preferences modelPreferences = getModelPreferences(); - boolean useExtendedMarkupValidation = modelPreferences.getBoolean(XMLCorePreferenceNames.MARKUP_VALIDATION); + private static final int[] XML_SEVERITIES = { ValidationMessage.WARNING, ValidationMessage.ERROR, ValidationMessage.IGNORE }; - - if (fExtendedMarkupValidation != null) { - fExtendedMarkupValidation.setSelection(useExtendedMarkupValidation); - } - int emptyElementTag = modelPreferences.getInt(XMLCorePreferenceNames.ATTRIBUTE_HAS_NO_VALUE); - - if (fEmptyElementTag != null) { - fEmptyElementTag.select(2 - emptyElementTag); - fEmptyElementTag.setText(MARKUP_SEVERITIES[2 - emptyElementTag]); - } - - int endTagWithAttributes = modelPreferences.getInt(XMLCorePreferenceNames.END_TAG_WITH_ATTRIBUTES); - - if (fEndTagWithAttributes != null) { - fEndTagWithAttributes.select(2 - endTagWithAttributes); - fEndTagWithAttributes.setText(MARKUP_SEVERITIES[2 - endTagWithAttributes]); - } - - int invalidWhitespaceBeforeTagname = modelPreferences.getInt(XMLCorePreferenceNames.WHITESPACE_BEFORE_TAGNAME); - - if (fInvalidWhitespaceBeforeTagname != null) { - fInvalidWhitespaceBeforeTagname.select(2 - invalidWhitespaceBeforeTagname); - fInvalidWhitespaceBeforeTagname.setText(MARKUP_SEVERITIES[2 - invalidWhitespaceBeforeTagname]); - } - - int missingClosingBracket = modelPreferences.getInt(XMLCorePreferenceNames.MISSING_CLOSING_BRACKET); - - if (fMissingClosingBracket != null) { - fMissingClosingBracket.select(2 - missingClosingBracket); - fMissingClosingBracket.setText(MARKUP_SEVERITIES[2 - missingClosingBracket]); - } - - int missingClosingQuote = modelPreferences.getInt(XMLCorePreferenceNames.MISSING_CLOSING_QUOTE); - - if (fMissingClosingQuote != null) { - fMissingClosingQuote.select(2 - missingClosingQuote); - fMissingClosingQuote.setText(MARKUP_SEVERITIES[2 - missingClosingQuote]); - } - - int missingEndTag = modelPreferences.getInt(XMLCorePreferenceNames.MISSING_END_TAG); - - if (fMissingEndTag != null) { - fMissingEndTag.select(2 - missingEndTag); - fMissingEndTag.setText(MARKUP_SEVERITIES[2 - missingEndTag]); - } - - int missingStartTag = modelPreferences.getInt(XMLCorePreferenceNames.MISSING_START_TAG); - - if (fMissingStartTag != null) { - fMissingStartTag.select(2 - missingStartTag); - fMissingStartTag.setText(MARKUP_SEVERITIES[2 - missingStartTag]); - } - - int missingQuotes = modelPreferences.getInt(XMLCorePreferenceNames.MISSING_QUOTES); - - if (fMissingQuotes != null) { - fMissingQuotes.select(2 - missingQuotes); - fMissingQuotes.setText(MARKUP_SEVERITIES[2 - missingQuotes]); - } - - int invalidNamespaceInPI = modelPreferences.getInt(XMLCorePreferenceNames.NAMESPACE_IN_PI_TARGET); - - if (fInvalidNamespaceInPI != null) { - fInvalidNamespaceInPI.select(2 - invalidNamespaceInPI); - fInvalidNamespaceInPI.setText(MARKUP_SEVERITIES[2 - invalidNamespaceInPI]); - } - - int tagNameMissing = modelPreferences.getInt(XMLCorePreferenceNames.MISSING_TAG_NAME); - - if (fMissingTagName != null) { - fMissingTagName.select(2 - tagNameMissing); - fMissingTagName.setText(MARKUP_SEVERITIES[2 - tagNameMissing]); - } - - int invalidWhitespaceAtStart = modelPreferences.getInt(XMLCorePreferenceNames.WHITESPACE_AT_START); - - if (fInvalidWhitespaceAtStart != null) { - fInvalidWhitespaceAtStart.select(2 - invalidWhitespaceAtStart); - fInvalidWhitespaceAtStart.setText(MARKUP_SEVERITIES[2 - invalidWhitespaceAtStart]); + private static final String[] MARKUP_SEVERITIES = { XMLUIMessages.Severity_error, XMLUIMessages.Severity_warning, XMLUIMessages.Severity_ignore }; + + protected void createContentsForValidatingGroup(Composite validatingGroup) { + + if (fIndicateNoGrammar == null) + fIndicateNoGrammar = addComboBox(validatingGroup, XMLUIMessages.Indicate_no_grammar_specified, XMLCorePreferenceNames.INDICATE_NO_GRAMMAR, XML_SEVERITIES, MARKUP_SEVERITIES, 0); + + if (fUseXinclude == null) { + fUseXinclude = createCheckBox(validatingGroup, XMLUIMessages.Use_XInclude); + ((GridData) fUseXinclude.getLayoutData()).horizontalSpan = 2; } - if (!useExtendedMarkupValidation) - fMarkupState = ControlEnableState.disable(fMarkupValidationGroup); - } + if (fHonourAllSchemaLocations == null) { + fHonourAllSchemaLocations = createCheckBox(validatingGroup, XMLUIMessages.Honour_all_schema_locations); + ((GridData) fHonourAllSchemaLocations.getLayoutData()).horizontalSpan = 2; + } - protected void performDefaultsForValidatingGroup() { - Preferences modelPreferences = getModelPreferences(); - int indicateNoGrammarButtonSelected = modelPreferences.getDefaultInt(XMLCorePreferenceNames.INDICATE_NO_GRAMMAR); - boolean useXIncludeButtonSelected = modelPreferences.getDefaultBoolean(XMLCorePreferenceNames.USE_XINCLUDE); + IScopeContext[] contexts = createPreferenceScopes(); + fOriginalUseXIncludeButtonSelected = contexts[0].getNode(getPreferenceNodeQualifier()).getBoolean(XMLCorePreferenceNames.USE_XINCLUDE, true); - if (fIndicateNoGrammar != null) { - fIndicateNoGrammar.setSelection(new Point(indicateNoGrammarButtonSelected, 2 - indicateNoGrammarButtonSelected)); - fIndicateNoGrammar.setText(SEVERITIES[indicateNoGrammarButtonSelected]); - } - if (fUseXinclude != null) { - fUseXinclude.setSelection(useXIncludeButtonSelected); - } + if (fUseXinclude != null) { + fUseXinclude.setSelection(fOriginalUseXIncludeButtonSelected); + } + fOriginalUseHonourAllButtonSelected = contexts[0].getNode(getPreferenceNodeQualifier()).getBoolean(XMLCorePreferenceNames.HONOUR_ALL_SCHEMA_LOCATIONS, true); + if (fHonourAllSchemaLocations != null) { + fHonourAllSchemaLocations.setSelection(fOriginalUseHonourAllButtonSelected); + } - boolean honourAllButtonSelected = modelPreferences.getDefaultBoolean(XMLCorePreferenceNames.HONOUR_ALL_SCHEMA_LOCATIONS); - if (fHonourAllSchemaLocations != null) { - fHonourAllSchemaLocations.setSelection(honourAllButtonSelected); - } - } - - protected void performDefaultsForMarkupValidationGroup() { - Preferences modelPreferences = getModelPreferences(); - boolean useExtendedMarkupValidation = modelPreferences.getDefaultBoolean(XMLCorePreferenceNames.MARKUP_VALIDATION); - - - if (fExtendedMarkupValidation != null) { - if (fExtendedMarkupValidation.getSelection() != useExtendedMarkupValidation) { - handleMarkupSeveritySelection(useExtendedMarkupValidation); - } - fExtendedMarkupValidation.setSelection(useExtendedMarkupValidation); - - } - int emptyElementTag = modelPreferences.getDefaultInt(XMLCorePreferenceNames.ATTRIBUTE_HAS_NO_VALUE); - - if (fEmptyElementTag != null) { - fEmptyElementTag.setSelection(new Point(emptyElementTag,2 - emptyElementTag)); - fEmptyElementTag.setText(MARKUP_SEVERITIES[2 - emptyElementTag]); - } - - int endTagWithAttributes = modelPreferences.getDefaultInt(XMLCorePreferenceNames.END_TAG_WITH_ATTRIBUTES); - - if (fEndTagWithAttributes != null) { - fEndTagWithAttributes.setSelection(new Point(endTagWithAttributes,2 - endTagWithAttributes)); - fEndTagWithAttributes.setText(MARKUP_SEVERITIES[2 - endTagWithAttributes]); - } - - int invalidWhitespaceBeforeTagname = modelPreferences.getDefaultInt(XMLCorePreferenceNames.WHITESPACE_BEFORE_TAGNAME); - - if (fInvalidWhitespaceBeforeTagname != null) { - fInvalidWhitespaceBeforeTagname.setSelection(new Point(invalidWhitespaceBeforeTagname,2 - invalidWhitespaceBeforeTagname)); - fInvalidWhitespaceBeforeTagname.setText(MARKUP_SEVERITIES[2 - invalidWhitespaceBeforeTagname]); - } - - int missingClosingBracket = modelPreferences.getDefaultInt(XMLCorePreferenceNames.MISSING_CLOSING_BRACKET); - - if (fMissingClosingBracket != null) { - fMissingClosingBracket.setSelection(new Point(missingClosingBracket,2 - missingClosingBracket)); - fMissingClosingBracket.setText(MARKUP_SEVERITIES[2 - missingClosingBracket]); - } - - int missingClosingQuote = modelPreferences.getDefaultInt(XMLCorePreferenceNames.MISSING_CLOSING_QUOTE); - - if (fMissingClosingQuote != null) { - fMissingClosingQuote.setSelection(new Point(missingClosingQuote,2 - missingClosingQuote)); - fMissingClosingQuote.setText(MARKUP_SEVERITIES[2 - missingClosingQuote]); - } - - int missingEndTag = modelPreferences.getDefaultInt(XMLCorePreferenceNames.MISSING_END_TAG); - - if (fMissingEndTag != null) { - fMissingEndTag.setSelection(new Point(missingEndTag,2 - missingEndTag)); - fMissingEndTag.setText(MARKUP_SEVERITIES[2 - missingEndTag]); - } - - int missingStartTag = modelPreferences.getDefaultInt(XMLCorePreferenceNames.MISSING_START_TAG); - - if (fMissingStartTag != null) { - fMissingStartTag.setSelection(new Point(missingStartTag,2 - missingStartTag)); - fMissingStartTag.setText(MARKUP_SEVERITIES[2 - missingStartTag]); - } - - int missingQuotes = modelPreferences.getDefaultInt(XMLCorePreferenceNames.MISSING_QUOTES); - - if (fMissingQuotes != null) { - fMissingQuotes.setSelection(new Point(missingQuotes,2 - missingQuotes)); - fMissingQuotes.setText(MARKUP_SEVERITIES[2 - missingQuotes]); - } - - int invalidNamespaceInPI = modelPreferences.getDefaultInt(XMLCorePreferenceNames.NAMESPACE_IN_PI_TARGET); - - if (fInvalidNamespaceInPI != null) { - fInvalidNamespaceInPI.setSelection(new Point(invalidNamespaceInPI,2 - invalidNamespaceInPI)); - fInvalidNamespaceInPI.setText(MARKUP_SEVERITIES[2 - invalidNamespaceInPI]); - } - - int tagNameMissing = modelPreferences.getDefaultInt(XMLCorePreferenceNames.MISSING_TAG_NAME); - - if (fMissingTagName != null) { - fMissingTagName.setSelection(new Point(tagNameMissing,2 - tagNameMissing)); - fMissingTagName.setText(MARKUP_SEVERITIES[2 - tagNameMissing]); - } - - int invalidWhitespaceAtStart = modelPreferences.getDefaultInt(XMLCorePreferenceNames.WHITESPACE_AT_START); - - if (fInvalidWhitespaceAtStart != null) { - fInvalidWhitespaceAtStart.setSelection(new Point(invalidWhitespaceAtStart,2 - invalidWhitespaceAtStart)); - fInvalidWhitespaceAtStart.setText(MARKUP_SEVERITIES[2 - invalidWhitespaceAtStart]); - } - } - - protected void storeValuesForValidatingGroup() - { - Preferences modelPreferences = getModelPreferences(); - if (fIndicateNoGrammar != null) { - int warnNoGrammarButtonSelected = 2 - fIndicateNoGrammar.getSelectionIndex(); - modelPreferences.setValue(XMLCorePreferenceNames.INDICATE_NO_GRAMMAR, warnNoGrammarButtonSelected); - } - if (fUseXinclude != null) { - boolean useXIncludeButtonSelected = fUseXinclude.getSelection(); - modelPreferences.setValue(XMLCorePreferenceNames.USE_XINCLUDE, useXIncludeButtonSelected); - } - if (fHonourAllSchemaLocations != null) { - boolean honourAllButtonSelected = fHonourAllSchemaLocations.getSelection(); - modelPreferences.setValue(XMLCorePreferenceNames.HONOUR_ALL_SCHEMA_LOCATIONS, honourAllButtonSelected); - } - } - protected void storeValuesForMarkupValidationGroup() - { - Preferences modelPreferences = getModelPreferences(); - if (fExtendedMarkupValidation != null) { - boolean extendedMarkupValidation = fExtendedMarkupValidation.getSelection(); - modelPreferences.setValue(XMLCorePreferenceNames.MARKUP_VALIDATION, extendedMarkupValidation); - } - if (fEmptyElementTag != null) { - int emptyElementTag = 2 - fEmptyElementTag.getSelectionIndex(); - modelPreferences.setValue(XMLCorePreferenceNames.ATTRIBUTE_HAS_NO_VALUE, emptyElementTag); - } - if (fEndTagWithAttributes != null) { - int endTagWithAttributes = 2 - fEndTagWithAttributes.getSelectionIndex(); - modelPreferences.setValue(XMLCorePreferenceNames.END_TAG_WITH_ATTRIBUTES, endTagWithAttributes); - } - if (fInvalidWhitespaceBeforeTagname != null) { - int invalidWhitespaceBeforeTagname = 2 - fInvalidWhitespaceBeforeTagname.getSelectionIndex(); - modelPreferences.setValue(XMLCorePreferenceNames.WHITESPACE_BEFORE_TAGNAME, invalidWhitespaceBeforeTagname); - } - if (fMissingClosingBracket != null) { - int missingClosingBracket = 2 - fMissingClosingBracket.getSelectionIndex(); - modelPreferences.setValue(XMLCorePreferenceNames.MISSING_CLOSING_BRACKET, missingClosingBracket); - } - if (fMissingClosingQuote != null) { - int missingClosingQuote = 2 - fMissingClosingQuote.getSelectionIndex(); - modelPreferences.setValue(XMLCorePreferenceNames.MISSING_CLOSING_BRACKET, missingClosingQuote); - } - if (fMissingEndTag != null) { - int missingEndTag = 2 - fMissingEndTag.getSelectionIndex(); - modelPreferences.setValue(XMLCorePreferenceNames.MISSING_END_TAG, missingEndTag); - modelPreferences.getInt(XMLCorePreferenceNames.MISSING_END_TAG); - } - if (fMissingStartTag != null) { - int missingStartTag = 2 - fMissingStartTag.getSelectionIndex(); - modelPreferences.setValue(XMLCorePreferenceNames.MISSING_START_TAG, missingStartTag); } - if (fMissingQuotes != null) { - int missingQuotes = 2 - fMissingQuotes.getSelectionIndex(); - modelPreferences.setValue(XMLCorePreferenceNames.MISSING_QUOTES, missingQuotes); - } - if (fInvalidNamespaceInPI != null) { - int invalidNamespaceInPI = 2 - fInvalidNamespaceInPI.getSelectionIndex(); - modelPreferences.setValue(XMLCorePreferenceNames.NAMESPACE_IN_PI_TARGET, invalidNamespaceInPI); - } - if (fMissingTagName != null) { - int missingTagName = 2 - fMissingTagName.getSelectionIndex(); - modelPreferences.setValue(XMLCorePreferenceNames.MISSING_TAG_NAME, missingTagName); - } - if (fInvalidWhitespaceAtStart != null) { - int invalidWhitespaceAtStart = 2 - fInvalidWhitespaceAtStart.getSelectionIndex(); - modelPreferences.setValue(XMLCorePreferenceNames.WHITESPACE_AT_START, invalidWhitespaceAtStart); - } - - - } - - protected void storeValues() { - storeValuesForValidatingGroup(); - storeValuesForMarkupValidationGroup(); - } - protected void performDefaults() { - performDefaultsForValidatingGroup(); - performDefaultsForMarkupValidationGroup(); - super.performDefaults(); - } - - protected Preferences getModelPreferences() { - return XMLCorePlugin.getDefault().getPluginPreferences(); - } - - protected void doSavePreferenceStore() { - XMLCorePlugin.getDefault().savePluginPreferences(); // model - } + private void handleMarkupSeveritySelection(boolean selection) { + if (selection) { + if (fMarkupState != null) { + fMarkupState.restore(); + fMarkupState = null; + } + } else { + if (fMarkupState == null) + fMarkupState = ControlEnableState.disable(fMarkupValidationGroup); + } + } - public boolean performOk() { - boolean result = super.performOk(); + protected void createContentsForMarkupValidationGroup(Composite parent) { - doSavePreferenceStore(); + IScopeContext[] contexts = createPreferenceScopes(); - return result; - } + fOriginalUseExtendedMarkupValidation = contexts[0].getNode(getPreferenceNodeQualifier()).getBoolean(XMLCorePreferenceNames.MARKUP_VALIDATION, false); + fExtendedMarkupValidation = createCheckBox(parent, XMLUIMessages.MarkupValidation_files); + + ((GridData) fExtendedMarkupValidation.getLayoutData()).horizontalSpan = 2; + fExtendedMarkupValidation.setSelection(fOriginalUseExtendedMarkupValidation); + + fExtendedMarkupValidation.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent e) { + handleMarkupSeveritySelection(fExtendedMarkupValidation.getSelection()); + } + }); + + fMarkupValidationGroup = createGroup(parent, 3); + ((GridLayout) fMarkupValidationGroup.getLayout()).makeColumnsEqualWidth = false; + fMarkupValidationGroup.setText(XMLUIMessages.MarkupValidation_files_label); + GridLayout layout = new GridLayout(3, false); + fMarkupValidationGroup.setLayout(layout); + + if (fMissingStartTag == null) + fMissingStartTag = addComboBox(fMarkupValidationGroup, XMLUIMessages.Missing_start_tag, XMLCorePreferenceNames.MISSING_START_TAG, XML_SEVERITIES, MARKUP_SEVERITIES, 0); + if (fMissingEndTag == null) + fMissingEndTag = addComboBox(fMarkupValidationGroup, XMLUIMessages.Missing_end_tag, XMLCorePreferenceNames.MISSING_END_TAG, XML_SEVERITIES, MARKUP_SEVERITIES, 0); + if (fMissingTagName == null) + fMissingTagName = addComboBox(fMarkupValidationGroup, XMLUIMessages.Tag_name_missing, XMLCorePreferenceNames.MISSING_TAG_NAME, XML_SEVERITIES, MARKUP_SEVERITIES, 0); + if (fMissingQuotes == null) + fMissingQuotes = addComboBox(fMarkupValidationGroup, XMLUIMessages.Missing_quotes, XMLCorePreferenceNames.MISSING_QUOTES, XML_SEVERITIES, MARKUP_SEVERITIES, 0); + if (fMissingClosingBracket == null) + fMissingClosingBracket = addComboBox(fMarkupValidationGroup, XMLUIMessages.Missing_closing_bracket, XMLCorePreferenceNames.MISSING_CLOSING_BRACKET, XML_SEVERITIES, MARKUP_SEVERITIES, 0); + if (fMissingClosingQuote == null) + fMissingClosingQuote = addComboBox(fMarkupValidationGroup, XMLUIMessages.Missing_closing_quote, XMLCorePreferenceNames.MISSING_CLOSING_QUOTE, XML_SEVERITIES, MARKUP_SEVERITIES, 0); + if (fEmptyElementTag == null) + fEmptyElementTag = addComboBox(fMarkupValidationGroup, XMLUIMessages.Empty_element_tag, XMLCorePreferenceNames.ATTRIBUTE_HAS_NO_VALUE, XML_SEVERITIES, MARKUP_SEVERITIES, 0); + if (fEndTagWithAttributes == null) + fEndTagWithAttributes = addComboBox(fMarkupValidationGroup, XMLUIMessages.End_tag_with_attributes, XMLCorePreferenceNames.END_TAG_WITH_ATTRIBUTES, XML_SEVERITIES, MARKUP_SEVERITIES, 0); + if (fInvalidWhitespaceBeforeTagname == null) + fInvalidWhitespaceBeforeTagname = addComboBox(fMarkupValidationGroup, XMLUIMessages.Invalid_whitespace_before_tagname, XMLCorePreferenceNames.WHITESPACE_BEFORE_TAGNAME, XML_SEVERITIES, MARKUP_SEVERITIES, 0); + if (fInvalidNamespaceInPI == null) + fInvalidNamespaceInPI = addComboBox(fMarkupValidationGroup, XMLUIMessages.Namespace_in_pi_target, XMLCorePreferenceNames.NAMESPACE_IN_PI_TARGET, XML_SEVERITIES, MARKUP_SEVERITIES, 0); + if (fInvalidWhitespaceAtStart == null) + fInvalidWhitespaceAtStart = addComboBox(fMarkupValidationGroup, XMLUIMessages.Whitespace_at_start, XMLCorePreferenceNames.WHITESPACE_AT_START, XML_SEVERITIES, MARKUP_SEVERITIES, 0); + + handleMarkupSeveritySelection(fOriginalUseExtendedMarkupValidation); + + } + + protected void performDefaultsForValidatingGroup() { + IEclipsePreferences modelPreferences = new DefaultScope().getNode(getPreferenceNodeQualifier()); + boolean useXIncludeButtonSelected = modelPreferences.getBoolean(XMLCorePreferenceNames.USE_XINCLUDE, true); + + if (fUseXinclude != null) { + fUseXinclude.setSelection(useXIncludeButtonSelected); + } + boolean useHonourAllButtonSelected = modelPreferences.getBoolean(XMLCorePreferenceNames.HONOUR_ALL_SCHEMA_LOCATIONS, true); + if (fHonourAllSchemaLocations != null) { + fHonourAllSchemaLocations.setSelection(useHonourAllButtonSelected); + } + } + + protected void performDefaultsForMarkupValidationGroup() { + IEclipsePreferences modelPreferences = new DefaultScope().getNode(getPreferenceNodeQualifier()); + boolean useExtendedMarkupValidation = modelPreferences.getBoolean(XMLCorePreferenceNames.MARKUP_VALIDATION, false); + + if (fExtendedMarkupValidation != null) { + if (fExtendedMarkupValidation.getSelection() != useExtendedMarkupValidation) { + handleMarkupSeveritySelection(useExtendedMarkupValidation); + } + fExtendedMarkupValidation.setSelection(useExtendedMarkupValidation); + } + } + + protected void storeValuesForValidatingGroup(IScopeContext[] contexts) { + if (fUseXinclude != null) { + boolean useXIncludeButtonSelected = fUseXinclude.getSelection(); + contexts[0].getNode(getPreferenceNodeQualifier()).putBoolean(XMLCorePreferenceNames.USE_XINCLUDE, useXIncludeButtonSelected); + } + if (fHonourAllSchemaLocations != null) { + boolean honourAllButtonSelected = fHonourAllSchemaLocations.getSelection(); + contexts[0].getNode(getPreferenceNodeQualifier()).putBoolean(XMLCorePreferenceNames.HONOUR_ALL_SCHEMA_LOCATIONS, honourAllButtonSelected); + } + } + + protected void storeValuesForMarkupValidationGroup(IScopeContext[] contexts) { + if (fExtendedMarkupValidation != null) { + boolean extendedMarkupValidation = fExtendedMarkupValidation.getSelection(); + contexts[0].getNode(getPreferenceNodeQualifier()).putBoolean(XMLCorePreferenceNames.MARKUP_VALIDATION, extendedMarkupValidation); + } + } + + protected void performDefaults() { + resetSeverities(); + performDefaultsForValidatingGroup(); + performDefaultsForMarkupValidationGroup(); + super.performDefaults(); + } + + protected Preferences getModelPreferences() { + return XMLCorePlugin.getDefault().getPluginPreferences(); + } + + protected void doSavePreferenceStore() { + XMLCorePlugin.getDefault().savePluginPreferences(); // model + } + + protected void storeValues() { + super.storeValues(); + IScopeContext[] contexts = createPreferenceScopes(); + + storeValuesForValidatingGroup(contexts); + storeValuesForMarkupValidationGroup(contexts); + } + + protected Control createCommonContents(Composite parent) { + final Composite page = new Composite(parent, SWT.NULL); + + GridLayout layout = new GridLayout(); + layout.numColumns = 2; + page.setLayout(layout); + + Group validatingGroup = createGroup(page, 3); + validatingGroup.setText(XMLUIMessages.Validating_files); + createContentsForValidatingGroup(validatingGroup); + + createContentsForMarkupValidationGroup(page); + + return page; + } + + protected String getPreferenceNodeQualifier() { + return XMLCorePlugin.getDefault().getBundle().getSymbolicName(); + } + + protected String getPreferencePageID() { + return "org.eclipse.wst.sse.ui.preferences.xml.validation";//$NON-NLS-1$ + } + + protected String getProjectSettingsKey() { + return XMLCorePreferenceNames.USE_PROJECT_SETTINGS; + } + + protected String getPropertyPageID() { + return "org.eclipse.wst.xml.ui.propertyPage.project.validation";//$NON-NLS-1$ + } + + public void init(IWorkbench workbench) { + } + + private Group createGroup(Composite parent, int numColumns) { + + Group group = new Group(parent, SWT.NULL); + + // GridLayout + GridLayout layout = new GridLayout(); + layout.numColumns = numColumns; + group.setLayout(layout); + + // GridData + GridData data = new GridData(GridData.FILL); + data.horizontalIndent = 0; + data.verticalAlignment = GridData.FILL; + data.horizontalAlignment = GridData.FILL; + data.grabExcessHorizontalSpace = true; + group.setLayoutData(data); + + return group; + } + + private Button createCheckBox(Composite group, String label) { + Button button = new Button(group, SWT.CHECK | SWT.LEFT); + button.setText(label); + + // button.setLayoutData(GridDataFactory.fillDefaults().create()); + + // GridData + GridData data = new GridData(GridData.FILL); + data.verticalAlignment = GridData.CENTER; + data.horizontalAlignment = GridData.FILL; + button.setLayoutData(data); + + return button; + } + + public void dispose() { + storeSectionExpansionStates(getDialogSettings().addNewSection(SETTINGS_SECTION_NAME)); + super.dispose(); + } + + protected IDialogSettings getDialogSettings() { + return XMLUIPlugin.getDefault().getDialogSettings(); + } + + protected boolean shouldRevalidateOnSettingsChange() { + return fOriginalUseExtendedMarkupValidation != fExtendedMarkupValidation.getSelection() || fOriginalUseXIncludeButtonSelected != fUseXinclude.getSelection() || fOriginalUseHonourAllButtonSelected != fHonourAllSchemaLocations.getSelection() || super.shouldRevalidateOnSettingsChange(); + } }