| /** |
| * <copyright> |
| * Copyright (c) 2010-2014 Henshin developers. All rights reserved. |
| * This program and the accompanying materials are made available |
| * under the terms of the Eclipse Public License v1.0 which |
| * accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * </copyright> |
| */ |
| package org.eclipse.emf.henshin.interpreter; |
| |
| import java.util.List; |
| |
| import org.eclipse.emf.ecore.EAttribute; |
| import org.eclipse.emf.ecore.EObject; |
| import org.eclipse.emf.ecore.EReference; |
| |
| /** |
| * Change model for Henshin. Stores information about changes and provides |
| * functionality to apply these changes to an {@link EGraph}. |
| * |
| * @see Engine#createChange(org.eclipse.emf.henshin.model.Rule, EGraph, Match, Match) |
| * @author Christian Krause |
| */ |
| public interface Change { |
| |
| /** |
| * Change for creating or deleting an object. |
| */ |
| public interface ObjectChange extends Change { |
| |
| EObject getObject(); |
| |
| boolean isCreate(); |
| |
| } |
| |
| /** |
| * Change for modifying an attribute. |
| */ |
| public interface AttributeChange extends Change { |
| |
| EObject getObject(); |
| |
| EAttribute getAttribute(); |
| |
| Object getOldValue(); |
| |
| Object getNewValue(); |
| |
| } |
| |
| /** |
| * Change for creating or deleting a reference (link) between two objects. |
| */ |
| public interface ReferenceChange extends Change { |
| |
| EObject getSource(); |
| |
| EObject getTarget(); |
| |
| EReference getReference(); |
| |
| boolean isCreate(); |
| |
| } |
| |
| /** |
| * Change for modifying the index of a reference (link) between two objects. |
| */ |
| public interface IndexChange extends Change { |
| |
| EObject getSource(); |
| |
| EObject getTarget(); |
| |
| EReference getReference(); |
| |
| int getOldIndex(); |
| |
| int getNewIndex(); |
| |
| } |
| |
| /** |
| * Compound change (an ordered list of {@link Change}s). |
| */ |
| public interface CompoundChange extends Change { |
| |
| List<Change> getChanges(); |
| |
| } |
| |
| /** |
| * Get the {@link EGraph} to be changed. |
| * @return The {@link EGraph}. |
| */ |
| EGraph getEGraph(); |
| |
| /** |
| * Apply this change description and reverse it so that |
| * is can be undone / redone. |
| */ |
| void applyAndReverse(); |
| |
| } |