package org.objectstyle.wolips.eomodeler.actions; import java.util.HashSet; import java.util.Set; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.commands.operations.AbstractOperation; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.objectstyle.wolips.eomodeler.core.model.EOEntity; import org.objectstyle.wolips.eomodeler.core.model.EOModel; import org.objectstyle.wolips.eomodeler.core.model.EOModelException; import org.objectstyle.wolips.eomodeler.core.model.EOModelVerificationFailure; import org.objectstyle.wolips.eomodeler.core.model.InheritanceType; public class SubclassOperation extends AbstractOperation { private EOEntity _parentEntity; private EOModel _destinationModel; private EOEntity _subclassEntity; private InheritanceType _inheritanceType; private String _entityName; private String _restrictingQualifier; public SubclassOperation(EOEntity parentEntity, InheritanceType inheritanceType, EOModel destinationModel, String entityName, String restrictingQualifier) { super("Subclass " + parentEntity.getName()); _parentEntity = parentEntity; _inheritanceType = inheritanceType; _destinationModel = destinationModel; _entityName = entityName; _restrictingQualifier = restrictingQualifier; } @Override public IStatus execute(IProgressMonitor monitor, IAdaptable info) throws ExecutionException { try { _subclassEntity = _parentEntity.subclass(_entityName, _inheritanceType); _subclassEntity.setRestrictingQualifier(_restrictingQualifier); _destinationModel.addEntity(_subclassEntity); return Status.OK_STATUS; } catch (EOModelException e) { throw new ExecutionException("Failed to subclass entity.", e); } } @Override public IStatus redo(IProgressMonitor monitor, IAdaptable info) throws ExecutionException { return execute(monitor, info); } @Override public IStatus undo(IProgressMonitor monitor, IAdaptable info) { Set<EOModelVerificationFailure> failures = new HashSet<EOModelVerificationFailure>(); _subclassEntity._removeFromModelParent(failures); return Status.OK_STATUS; } }