@Override protected void execute(IModelChangedEvent event, boolean undo) { Object[] elements = event.getChangedObjects(); int type = event.getChangeType(); String propertyName = event.getChangedProperty(); IModelChangeProvider model = event.getChangeProvider(); switch (type) { case IModelChangedEvent.INSERT: if (undo) executeRemove(model, elements); else executeAdd(model, elements); break; case IModelChangedEvent.REMOVE: if (undo) executeAdd(model, elements); else executeRemove(model, elements); break; case IModelChangedEvent.CHANGE: if (event instanceof AttributeChangedEvent) { executeAttributeChange((AttributeChangedEvent) event, undo); } else { if (undo) executeChange(elements[0], propertyName, event.getNewValue(), event.getOldValue()); else executeChange(elements[0], propertyName, event.getOldValue(), event.getNewValue()); } } }