/******************************************************************************* * Copyright (c) 2006, 2007 Mountainminds GmbH & Co. KG * This software is provided under the terms of the Eclipse Public License v1.0 * See http://www.eclipse.org/legal/epl-v10.html. * * $Id: ViewSettings.java 871 2010-01-24 20:48:38Z mtnminds $ * * Contributors: * Brock Janiczak - link with selection option (SF #1774547) ******************************************************************************/ package com.mountainminds.eclemma.internal.ui.coverageview; import org.eclipse.ui.IMemento; import com.mountainminds.eclemma.core.analysis.ICounter; import com.mountainminds.eclemma.core.analysis.IJavaElementCoverage; import com.mountainminds.eclemma.internal.ui.UIMessages; /** * All setting for the coverage view that will become persisted in the view's * memento. * * @author Marc R. Hoffmann * @version $Revision: 871 $ */ public class ViewSettings { public static final int ENTRYMODE_PROJECTS = 1; public static final int ENTRYMODE_PACKAGEROOTS = 2; public static final int ENTRYMODE_PACKAGES = 3; public static final int ENTRYMODE_TYPES = 4; private static final String KEY_SORTCOLUMN = "sortcolumn"; //$NON-NLS-1$ private static final String KEY_REVERSESORT = "reversesort"; //$NON-NLS-1$ private static final String KEY_COUNTERMODE = "countermode"; //$NON-NLS-1$ private static final String KEY_HIDEUNUSEDTYPES = "hideunusedtypes"; //$NON-NLS-1$ private static final String KEY_ENTRYMODE = "entrymode"; //$NON-NLS-1$ private static final String KEY_COLUMN0 = "column0"; //$NON-NLS-1$ private static final String KEY_COLUMN1 = "column1"; //$NON-NLS-1$ private static final String KEY_COLUMN2 = "column2"; //$NON-NLS-1$ private static final String KEY_COLUMN3 = "column3"; //$NON-NLS-1$ private static final String KEY_COLUMN4 = "column4"; //$NON-NLS-1$ private static final String KEY_LINKED = "linked"; //$NON-NLS-1$ public interface ICounterMode { public int getIdx(); public String[] getColumnHeaders(); public String getActionLabel(); public ICounter getCounter(IJavaElementCoverage coverage); } public static final ICounterMode[] COUNTERMODES = new ICounterMode[] { new ICounterMode() { public int getIdx() { return 0; } public String getActionLabel() { return UIMessages.CoverageViewCounterModeInstructionsAction_label; } public ICounter getCounter(IJavaElementCoverage coverage) { return coverage.getInstructionCounter(); } public String[] getColumnHeaders() { return new String[] { UIMessages.CoverageViewColumnElement_label, UIMessages.CoverageViewColumnCoverage_label, UIMessages.CoverageViewColumnCoveredInstructions_label, UIMessages.CoverageViewColumnMissedInstructions_label, UIMessages.CoverageViewColumnTotalInstructions_label }; } }, new ICounterMode() { public int getIdx() { return 1; } public String getActionLabel() { return UIMessages.CoverageViewCounterModeBlocksAction_label; } public ICounter getCounter(IJavaElementCoverage coverage) { return coverage.getBlockCounter(); } public String[] getColumnHeaders() { return new String[] { UIMessages.CoverageViewColumnElement_label, UIMessages.CoverageViewColumnCoverage_label, UIMessages.CoverageViewColumnCoveredBlocks_label, UIMessages.CoverageViewColumnMissedBlocks_label, UIMessages.CoverageViewColumnTotalBlocks_label }; } }, new ICounterMode() { public int getIdx() { return 2; } public String getActionLabel() { return UIMessages.CoverageViewCounterModeLinesAction_label; } public ICounter getCounter(IJavaElementCoverage coverage) { return coverage.getLineCounter(); } public String[] getColumnHeaders() { return new String[] { UIMessages.CoverageViewColumnElement_label, UIMessages.CoverageViewColumnCoverage_label, UIMessages.CoverageViewColumnCoveredLines_label, UIMessages.CoverageViewColumnMissedLines_label, UIMessages.CoverageViewColumnTotalLines_label }; } }, new ICounterMode() { public int getIdx() { return 3; } public String getActionLabel() { return UIMessages.CoverageViewCounterModeMethodsAction_label; } public ICounter getCounter(IJavaElementCoverage coverage) { return coverage.getMethodCounter(); } public String[] getColumnHeaders() { return new String[] { UIMessages.CoverageViewColumnElement_label, UIMessages.CoverageViewColumnCoverage_label, UIMessages.CoverageViewColumnCoveredMethods_label, UIMessages.CoverageViewColumnMissedMethods_label, UIMessages.CoverageViewColumnTotalMethods_label }; } }, new ICounterMode() { public int getIdx() { return 4; } public String getActionLabel() { return UIMessages.CoverageViewCounterModeTypesAction_label; } public ICounter getCounter(IJavaElementCoverage coverage) { return coverage.getTypeCounter(); } public String[] getColumnHeaders() { return new String[] { UIMessages.CoverageViewColumnElement_label, UIMessages.CoverageViewColumnCoverage_label, UIMessages.CoverageViewColumnCoveredTypes_label, UIMessages.CoverageViewColumnMissedTypes_label, UIMessages.CoverageViewColumnTotalTypes_label }; } } }; private static final int[] DEFAULT_COLUMNWIDTH = new int[] { 300, 80, 120, 120, 120 }; private int sortcolumn; private boolean reversesort; private int countermode; private int entrymode; private boolean hideunusedtypes; private int[] columnwidths = new int[5]; private boolean linked; public int getSortColumn() { return sortcolumn; } public boolean isReverseSort() { return reversesort; } public void toggleSortColumn(int column) { if (sortcolumn == column) { reversesort = !reversesort; } else { reversesort = false; sortcolumn = column; } } public ICounterMode getCounterMode() { return COUNTERMODES[countermode]; } public void setCounterMode(int idx) { countermode = idx; } public int getEntryMode() { return entrymode; } public void setEntryMode(int mode) { entrymode = mode; } public boolean getHideUnusedTypes() { return hideunusedtypes; } public void setHideUnusedTypes(boolean flag) { hideunusedtypes = flag; } public int[] getColumnWidths() { return columnwidths; } public boolean getLinked() { return linked; } public void setLinked(boolean linked) { this.linked = linked; } public void init(IMemento memento) { sortcolumn = getInt(memento, KEY_SORTCOLUMN, CoverageView.COLUMN_MISSED); reversesort = getBoolean(memento, KEY_REVERSESORT, true); countermode = getInt(memento, KEY_COUNTERMODE, 0); entrymode = getInt(memento, KEY_ENTRYMODE, ENTRYMODE_PROJECTS); hideunusedtypes = getBoolean(memento, KEY_HIDEUNUSEDTYPES, false); columnwidths[0] = getInt(memento, KEY_COLUMN0, DEFAULT_COLUMNWIDTH[0]); columnwidths[1] = getInt(memento, KEY_COLUMN1, DEFAULT_COLUMNWIDTH[1]); columnwidths[2] = getInt(memento, KEY_COLUMN2, DEFAULT_COLUMNWIDTH[2]); columnwidths[3] = getInt(memento, KEY_COLUMN3, DEFAULT_COLUMNWIDTH[3]); columnwidths[4] = getInt(memento, KEY_COLUMN4, DEFAULT_COLUMNWIDTH[4]); linked = getBoolean(memento, KEY_LINKED, false); } public void save(IMemento memento) { memento.putInteger(KEY_SORTCOLUMN, sortcolumn); memento.putInteger(KEY_REVERSESORT, reversesort ? 1 : 0); memento.putInteger(KEY_COUNTERMODE, countermode); memento.putInteger(KEY_ENTRYMODE, entrymode); memento.putInteger(KEY_HIDEUNUSEDTYPES, hideunusedtypes ? 1 : 0); memento.putInteger(KEY_COLUMN0, columnwidths[0]); memento.putInteger(KEY_COLUMN1, columnwidths[1]); memento.putInteger(KEY_COLUMN2, columnwidths[2]); memento.putInteger(KEY_COLUMN3, columnwidths[3]); memento.putInteger(KEY_COLUMN4, columnwidths[4]); memento.putInteger(KEY_LINKED, linked ? 1 : 0); } private int getInt(IMemento memento, String key, int preset) { if (memento == null) { return preset; } else { Integer i = memento.getInteger(key); return i == null ? preset : i.intValue(); } } private boolean getBoolean(IMemento memento, String key, boolean preset) { return getInt(memento, key, preset ? 1 : 0) == 1; } }