package org.eclipse.uml2.diagram.common.parser.slot;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.gmf.runtime.common.core.util.StringStatics;
import org.eclipse.gmf.runtime.emf.type.core.IElementType;
import org.eclipse.uml2.diagram.parser.lookup.Lookup;
import org.eclipse.uml2.diagram.parser.lookup.LookupSuiteImpl;
import org.eclipse.uml2.uml.Classifier;
import org.eclipse.uml2.uml.InstanceSpecification;
import org.eclipse.uml2.uml.Property;
import org.eclipse.uml2.uml.Slot;
import org.eclipse.uml2.uml.StructuralFeature;
public class SlotLookupSuite extends LookupSuiteImpl {
public SlotLookupSuite() {
addLookup(StructuralFeature.class, new StructuralFeatureLookup());
}
private static class StructuralFeatureLookup implements Lookup<StructuralFeature> {
public List<IElementType> getResolutionElementTypes() {
return Collections.<IElementType> emptyList();
}
public StructuralFeature lookup(String name, EObject context) {
if (name == null || StringStatics.BLANK.equals(name)) {
return null;
}
InstanceSpecification is = ((Slot) context).getOwningInstance();
for (Classifier c : is.getClassifiers()) {
for (Property attr : c.getAllAttributes()) {
if (name.equals(attr.getName())) {
return attr;
}
}
}
return null;
}
public List<StructuralFeature> computeScope(EObject context) {
List<StructuralFeature> result = new LinkedList<StructuralFeature>();
InstanceSpecification is = ((Slot) context).getOwningInstance();
for (Classifier c : is.getClassifiers()) {
for (Property attr : c.getAllAttributes()) {
result.add(attr);
}
}
return result;
}
}
}