package org.eclipse.gmf.tooling.runtime.parsers; | |
import java.util.ArrayList; | |
import java.util.Collection; | |
import java.util.List; | |
import org.eclipse.core.runtime.IAdaptable; | |
import org.eclipse.emf.ecore.EObject; | |
import org.eclipse.emf.ecore.EStructuralFeature; | |
import org.eclipse.gmf.runtime.common.core.command.ICommand; | |
import org.eclipse.gmf.runtime.common.ui.services.parser.IParserEditStatus; | |
import org.eclipse.gmf.runtime.common.ui.services.parser.ParserEditStatus; | |
import org.eclipse.gmf.tooling.runtime.GMFToolingRuntimePlugin; | |
import org.eclipse.gmf.tooling.runtime.directedit.ComboDirectEditManager; | |
public abstract class ChoiceParserBase extends AbstractFeatureParser implements ComboDirectEditManager.IChoiceParser { | |
private static final int SINGLE_FEATURE_INDEX = 0; | |
public ChoiceParserBase(EStructuralFeature feature) { | |
super(new EStructuralFeature[] { feature }); | |
} | |
protected final EStructuralFeature getFeature() { | |
return getEditableFeatures()[SINGLE_FEATURE_INDEX]; | |
} | |
public String getEditString(IAdaptable adapter, int flags) { | |
EObject element = (EObject) adapter.getAdapter(EObject.class); | |
return getEditChoice(element, getEditableValues(element)[SINGLE_FEATURE_INDEX]); | |
} | |
public IParserEditStatus isValidEditString(IAdaptable adapter, String editString) { | |
if (getEditChoices(adapter).contains(editString)) { | |
return ParserEditStatus.EDITABLE_STATUS; | |
} | |
return new ParserEditStatus(GMFToolingRuntimePlugin.ID, IParserEditStatus.UNEDITABLE, editString); | |
} | |
public ICommand getParseCommand(IAdaptable adapter, String newString, int flags) { | |
EObject element = (EObject) adapter.getAdapter(EObject.class); | |
return getParseCommand(adapter, new Object[] { findItem(element, newString) }, flags); | |
} | |
public String getPrintString(IAdaptable adapter, int flags) { | |
return getEditString(adapter, flags); | |
} | |
public List<String> getEditChoices(IAdaptable adapter) { | |
EObject element = (EObject) adapter.getAdapter(EObject.class); | |
List<String> result = new ArrayList<String>(); | |
for (Object item : getItems(element)) { | |
result.add(getEditChoice(element, item)); | |
} | |
return result; | |
} | |
private Object findItem(EObject element, String editChoice) { | |
for (Object item : getItems(element)) { | |
if (editChoice.equals(getEditChoice(element, item))) { | |
return item; | |
} | |
} | |
return null; | |
} | |
protected abstract Collection<Object> getItems(EObject element); | |
protected abstract String getEditChoice(EObject element, Object item); | |
} |