Calculation and propagation of model changes based on user-level edit operations: a foundation for version and variant management in model-driven engineering