package org.codemap.commands; import static org.codemap.commands.Command.makeCommandId; import org.codemap.DefaultLabelScheme; import org.codemap.MapPerProject; import org.codemap.mapview.action.CommandAction; import org.codemap.mapview.action.ShowClassNameLabelAction; import org.codemap.mapview.action.ShowNoLabelAction; import org.codemap.resources.MapValues; import org.codemap.util.MapScheme; public class LabelingCommand extends DropDownCommand<AbstractLabelingCommand> implements IConfigureMapValues { private static final String LABELING_KEY = makeCommandId("labeling"); public LabelingCommand(MapPerProject mapPerProject) { super(mapPerProject); add(new ClassNameLabeling(this)); add(new NoLabeling(this)); } @Override protected String getKey() { return LABELING_KEY; } @Override protected Class<?> getDefaultCommandClass() { return ClassNameLabeling.class; } } abstract class AbstractLabelingCommand extends Command { private LabelingCommand labeling; public AbstractLabelingCommand(LabelingCommand labelingCommand) { labeling = labelingCommand; enabled = getLabeling().getEnabled(this); } protected LabelingCommand getLabeling() { return labeling; } @Override protected void applyState() { if (isEnabled()) { getLabeling().setEnabled(this); } getLabeling().applyState(); } @Override protected boolean initEnabled() { return false; } } class NoLabeling extends AbstractLabelingCommand { public NoLabeling(LabelingCommand labelingCommand) { super(labelingCommand); } @Override protected Class<? extends CommandAction> getActionID() { return ShowNoLabelAction.class; } @Override public void configure(MapValues mapValues) { if (!isEnabled()) return; mapValues.labelScheme.setValue(new MapScheme<String>(null)); } } class ClassNameLabeling extends AbstractLabelingCommand { public ClassNameLabeling(LabelingCommand labelingCommand) { super(labelingCommand); } @Override protected Class<? extends CommandAction> getActionID() { return ShowClassNameLabelAction.class; } @Override public void configure(MapValues mapValues) { if (!isEnabled()) return; mapValues.labelScheme.setValue(new DefaultLabelScheme()); } }