/******************************************************************************* * 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.common.ui.marker; import java.util.Iterator; import java.util.List; import java.util.Set; import org.eclipse.core.resources.IMarker; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.core.runtime.preferences.IEclipsePreferences; import org.eclipse.debug.internal.ui.DebugUIPlugin; import org.eclipse.jdt.core.JavaCore; import org.eclipse.jdt.internal.ui.JavaPlugin; import org.eclipse.jdt.internal.ui.JavaPluginImages; import org.eclipse.jdt.ui.text.java.IJavaCompletionProposal; import org.eclipse.jface.preference.IPreferenceNode; import org.eclipse.jface.preference.IPreferencePage; import org.eclipse.jface.preference.PreferenceDialog; import org.eclipse.jface.preference.PreferenceManager; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.contentassist.IContextInformation; import org.eclipse.osgi.util.NLS; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Point; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.dialogs.PreferencesUtil; import org.eclipse.ui.internal.dialogs.WorkbenchPreferenceNode; import org.eclipse.ui.progress.UIJob; import org.jboss.tools.common.preferences.SeverityPreferences; import org.jboss.tools.common.quickfix.IBaseMarkerResolution; import org.jboss.tools.common.ui.CommonUIMessages; import org.jboss.tools.common.ui.marker.AddSuppressWarningsMarkerResolution.SP; import org.jboss.tools.common.ui.preferences.SeverityPreferencePage; /** * @author Daniel Azarov */ public class ConfigureProblemSeverityMarkerResolution implements IBaseMarkerResolution, IJavaCompletionProposal { private static final int PREFERENCE_SIZE = 40; private static final String DOTS = "..."; private IProject project; private String preferencePageId; private String propertyPageId; private String preferenceKey; private String pluginId; private String label; private SP preferences = new SP(); public ConfigureProblemSeverityMarkerResolution(IProject project, String preferencePageId, String propertyPageId, String preferenceKey, String pluginId){ this.project = project; this.preferencePageId = preferencePageId; this.propertyPageId = propertyPageId; this.preferenceKey = preferenceKey; this.pluginId = pluginId; String preferenceName = getPreferenceLabel(); label = NLS.bind(CommonUIMessages.CONFIGURE_PROBLEM_SEVERITY, preferenceName); } public String getLabel() { return label; } public void run(IMarker marker) { UIJob job = new UIJob(""){ //$NON-NLS-1$ public IStatus runInUIThread(IProgressMonitor monitor) { IEclipsePreferences projectPreferences = preferences.getProjectPreferences(project); String projectValue = null; if(projectPreferences != null){ projectValue = projectPreferences.get(preferenceKey, null); } if(projectValue != null){ PreferencesUtil.createPropertyDialogOn(DebugUIPlugin.getShell(), project, ConfigureProblemSeverityMarkerResolution.this.propertyPageId, new String[]{ConfigureProblemSeverityMarkerResolution.this.preferencePageId}, ConfigureProblemSeverityMarkerResolution.this.preferenceKey).open(); }else{ PreferencesUtil.createPreferenceDialogOn(DebugUIPlugin.getShell(), ConfigureProblemSeverityMarkerResolution.this.preferencePageId, new String[]{ConfigureProblemSeverityMarkerResolution.this.preferencePageId}, ConfigureProblemSeverityMarkerResolution.this.preferenceKey).open(); } return Status.OK_STATUS; } }; job.setSystem(true); job.setPriority(Job.INTERACTIVE); job.schedule(); } public String getDescription() { return label; } public Image getImage() { return JavaPlugin.getImageDescriptorRegistry().get(JavaPluginImages.DESC_ELCL_CONFIGURE_PROBLEM_SEVERITIES); } private WorkbenchPreferenceNode findPageNode() { final PreferenceManager preferenceManager = PlatformUI.getWorkbench() .getPreferenceManager(); List nodes = preferenceManager.getElements(PreferenceManager.POST_ORDER); for (Iterator i = nodes.iterator(); i.hasNext();) { IPreferenceNode node = (IPreferenceNode) i.next(); if (node.getId().equals(preferencePageId)) { return (WorkbenchPreferenceNode)node; } } return null; } private String getPreferenceLabel() { String label = ""; WorkbenchPreferenceNode pageNode = findPageNode(); if(pageNode != null){ IPreferencePage page = pageNode.getPage(); if(page == null){ pageNode.createPage(); page = pageNode.getPage(); label = getLabel(page); pageNode.setPage(null); page.dispose(); }else{ label = getLabel(page); } } return label; } private String getLabel(IPreferencePage page){ if(page instanceof SeverityPreferencePage){ return cut(((SeverityPreferencePage)page).getLabel(preferenceKey)); } return ""; } private String cut(String label){ if(label.length() > PREFERENCE_SIZE){ return label.substring(0, PREFERENCE_SIZE-1)+DOTS; }else{ if(label.endsWith(":")){ return label.substring(0, label.length()-1); } return label; } } @Override public void apply(IDocument document) { run(null); } @Override public Point getSelection(IDocument document) { return null; } @Override public String getAdditionalProposalInfo() { return label; } @Override public String getDisplayString() { return label; } @Override public IContextInformation getContextInformation() { return null; } @Override public int getRelevance() { return 0; } class SP extends SeverityPreferences{ @Override protected Set<String> getSeverityOptionNames() { return null; } @Override protected String createSeverityOption(String shortName) { return null; } @Override protected String getPluginId() { return pluginId; } } }