Composing Switches [message #479291] |
Mon, 10 August 2009 11:08  |
Eclipse User |
|
|
|
Good day EMF NG,
A quick suggestion: wouldn't it be useful for the EMF-generated switch
classes to be more readily composable? Something like:
public interface org.eclipse.emf.ecore.util.Switch<T> {
EPackage getEPackage();
<T> doSwitch(EObject theEObject);
}
public class XxxSwitch<T> implements Switch<T> {
// Note: XxxSwitchImpl.getEPackage() { return XxxPackage.eINSTANCE; }
...
}
public class YyySwitch<T> implements Switch<T> {
// Note: YyySwitchImpl.getEPackage() { return YyyPackage.eINSTANCE; }
...
}
/**
* Example implementation; others possible.
*/
public class ComposedSwitch<T> implements Switch<T> {
private final Map<EPackage, Switch<T>> delegates = new HashMap<EPackage,
Switch<T>>();
public ComposedSwitch<T>(Switch<T>... delegates) {
for (Switch<T> delegate : delegates)
this.delegates.put(delegate.getEPackage(), delegate);
}
public T doSwitch(EObject theEObject) {
return
delegates.get(theEObject.eClass().getEPackage()).doSwitch(th eEObject);
}
}
Thanks,
Adrian Price
Senior Architect | TIBCO Software, Inc.
|
|
|