package org.eclipse.cdt.codan.internal.ui.actions; import java.util.ArrayList; import java.util.Iterator; import org.eclipse.cdt.codan.core.model.IProblem; import org.eclipse.cdt.codan.core.model.IProblemProfile; import org.eclipse.cdt.codan.internal.core.model.CodanProblem; import org.eclipse.cdt.codan.internal.core.model.CodanProblemMarker; import org.eclipse.cdt.codan.internal.ui.dialogs.CustomizeProblemDialog; import org.eclipse.core.resources.IMarker; import org.eclipse.core.resources.IResource; import org.eclipse.jface.action.IAction; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.ui.IObjectActionDelegate; import org.eclipse.ui.IWorkbenchPart; public class OpenProblemPreferences implements IObjectActionDelegate { private ISelection selection; private IWorkbenchPart targetPart; public OpenProblemPreferences() { } public void run(IAction action) { if (selection instanceof IStructuredSelection) { IStructuredSelection ss = (IStructuredSelection) selection; ArrayList<IProblem> list = new ArrayList<IProblem>(); IResource resource = null; for (Iterator<?> iterator = ss.iterator(); iterator.hasNext();) { Object el = iterator.next(); if (el instanceof IMarker) { IMarker marker = (IMarker) el; String id = CodanProblemMarker.getProblemId(marker); if (id == null) return; resource = marker.getResource(); IProblemProfile profile = CodanProblemMarker.getProfile(resource); CodanProblem problem = ((CodanProblem) profile.findProblem(id)); list.add(problem); } } new CustomizeProblemDialog(targetPart.getSite().getShell(), list.toArray(new IProblem[list.size()]), resource).open(); } } public void selectionChanged(IAction action, ISelection selection) { this.selection = selection; } public void setActivePart(IAction action, IWorkbenchPart targetPart) { this.targetPart = targetPart; } }