package org.codemap.commands; import static org.codemap.commands.Command.makeCommandId; import org.codemap.ByPackageColorScheme; import org.codemap.CodemapCore; import org.codemap.MapPerProject; import org.codemap.mapview.action.CommandAction; import org.codemap.mapview.action.ShowCoverageAction; import org.codemap.mapview.action.ShowDefaultColorsAction; import org.codemap.mapview.action.ShowHeatMapColorsAction; import org.codemap.mapview.action.ShowPackageColorsAction; import org.codemap.resources.MapValues; public class ColoringCommand extends DropDownCommand<AbstractColoringCommand> implements IConfigureMapValues { private static final String COLORING_KEY = makeCommandId("coloring"); public ColoringCommand(MapPerProject mapPerProject) { super(mapPerProject); add(new DefaultColoring(this)); add(new ByPackageColoring(this, getMyMap())); add(new HeatMapColoring(this)); add(new CoverageColoring(this)); } @Override protected String getKey() { return COLORING_KEY; } @Override protected Class<?> getDefaultCommandClass() { return DefaultColoring.class; } } abstract class AbstractColoringCommand extends Command { private ColoringCommand coloring; public AbstractColoringCommand(ColoringCommand coloringCommand) { coloring = coloringCommand; enabled = getColoring().getEnabled(this); } protected ColoringCommand getColoring() { return coloring; } @Override protected void applyState() { if (isEnabled()) { getColoring().setEnabled(this); } getColoring().applyState(); } @Override protected boolean initEnabled() { return false; } } class DefaultColoring extends AbstractColoringCommand { public DefaultColoring(ColoringCommand coloringCommand) { super(coloringCommand); } @Override public void configure(MapValues mapValues) { if (!isEnabled()) return; mapValues.colorScheme.setValue(CodemapCore.getPlugin().getDefaultColorScheme()); } @Override protected Class<? extends CommandAction> getActionID() { return ShowDefaultColorsAction.class; } } class ByPackageColoring extends AbstractColoringCommand { private MapPerProject map; public ByPackageColoring(ColoringCommand coloringCommand, MapPerProject mapPerProject) { super(coloringCommand); map = mapPerProject; } @Override public void configure(MapValues mapValues) { if (!isEnabled()) return; mapValues.colorScheme.setValue(new ByPackageColorScheme(map)); } @Override protected Class<? extends CommandAction> getActionID() { return ShowPackageColorsAction.class; } } class HeatMapColoring extends AbstractColoringCommand { public HeatMapColoring(ColoringCommand coloringCommand) { super(coloringCommand); } @Override public void configure(MapValues mapValues) { CodemapCore.getPlugin().getController().utils().setHeatmapEnabled(isEnabled()); } @Override protected Class<? extends CommandAction> getActionID() { return ShowHeatMapColorsAction.class; } } class CoverageColoring extends AbstractColoringCommand { public CoverageColoring(ColoringCommand coloringCommand) { super(coloringCommand); } @Override public void configure(MapValues mapValues) { CodemapCore.getPlugin().getController().utils().setCoverageEnabled(isEnabled()); } @Override protected Class<? extends CommandAction> getActionID() { return ShowCoverageAction.class; } }