package net.sourceforge.pmd.eclipse.ui.preferences.panelmanagers; import java.util.ArrayList; import java.util.Collections; import java.util.List; import net.sourceforge.pmd.Rule; import net.sourceforge.pmd.eclipse.ui.PMDUiConstants; import net.sourceforge.pmd.eclipse.ui.preferences.br.ValueChangeListener; import net.sourceforge.pmd.eclipse.ui.quickfix.Fix; import net.sourceforge.pmd.eclipse.ui.quickfix.PMDResolutionGenerator; import net.sourceforge.pmd.eclipse.util.ResourceManager; import org.eclipse.swt.SWT; 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; public class QuickFixPanelManager extends AbstractRulePanelManager { private org.eclipse.swt.widgets.List fixerList; private ListManager listManager; public static final String ID = "fixes"; public QuickFixPanelManager(String theTitle, EditorUsageMode theMode, ValueChangeListener theListener) { super(ID, theTitle, theMode, theListener); } protected List<Fix> commonFixes() { // TODO finish this List<Rule> theRules = rules.allRules(); List<Fix> fixes = new ArrayList<Fix>(); Fix[] fixSet = PMDResolutionGenerator.fixesFor(theRules.get(0)); if (fixSet != null) { for (Fix fix : fixSet) fixes.add(fix); } return fixes; } @Override protected void adapt() { fixerList.removeAll(); List<Fix> fixes = commonFixes(); for (Fix fix : fixes) fixerList.add(fix.getLabel()); } protected boolean canManageMultipleRules() { return true; } @Override protected void clearControls() { fixerList.removeAll(); } public void showControls(boolean flag) { fixerList.setVisible(flag); } public static <T> List<T> shift(List<T> items, int[] indices, int shiftAmt) { int[] indexArr = new int[items.size()]; int currentIdx = 0; for (int i=0; i<items.size(); i++) { if (currentIdx < indices.length && i == indices[currentIdx] + shiftAmt) { indexArr[i] = indices[currentIdx++]; } else { indexArr[i] = i - currentIdx; } } List<T> out = new ArrayList<T>(indexArr.length); for (int element : indexArr) { out.add( items.get(element) ); } return out; } public static <T> List<T> shift(List<T> items, int index, int shiftAmt) { int start = Math.min(index, index + shiftAmt); int end = Math.max(index, index + shiftAmt); Collections.rotate(items.subList(start, end), shiftAmt); return items; } public Control setupOn(Composite parent) { GridData gridData; Composite panel = new Composite(parent, 0); GridLayout layout = new GridLayout(2, false); panel.setLayout(layout); fixerList = new org.eclipse.swt.widgets.List(panel, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL); gridData = new GridData(GridData.FILL_BOTH); gridData.grabExcessHorizontalSpace = true; gridData.horizontalSpan = 1; fixerList.setLayoutData(gridData); Composite buttonPanel = new Composite(panel, 0); layout = new GridLayout(1, false); buttonPanel.setLayout(layout); gridData = new GridData(); gridData.horizontalSpan = 1; gridData.grabExcessHorizontalSpace = false; buttonPanel.setLayoutData(gridData); Button shiftUpButton = new Button(buttonPanel, SWT.PUSH); shiftUpButton.setToolTipText("Shift up"); shiftUpButton.setImage(ResourceManager.imageFor(PMDUiConstants.ICON_BUTTON_UPARROW)); Button addButton = new Button(buttonPanel, SWT.PUSH); addButton.setToolTipText("Add"); addButton.setImage(ResourceManager.imageFor(PMDUiConstants.ICON_BUTTON_ADD)); Button removeButton = new Button(buttonPanel, SWT.PUSH); removeButton.setToolTipText("Remove"); removeButton.setImage(ResourceManager.imageFor(PMDUiConstants.ICON_BUTTON_DELETE)); Button shiftDownButton = new Button(buttonPanel, SWT.PUSH); shiftDownButton.setToolTipText("Shift down"); shiftDownButton.setImage(ResourceManager.imageFor(PMDUiConstants.ICON_BUTTON_DOWNARROW)); listManager = new ListManager(fixerList, shiftUpButton, shiftDownButton, removeButton); return panel; } public static void main(String[] args) { List<Integer> numbers = new ArrayList<Integer>(); Collections.addAll(numbers, 0,1,2,3,4,5,6,7,8,9,10); // int[] shiftSet = new int[] { 4, 6 }; List<Integer> newNumbers = shift(numbers, 5, 3); System.out.println(newNumbers); } }