/* * Copyright (C) Yutaka Matsuno 2010-2012 All rights reserved. */ package net.dependableos.dcase.diagram.editor.common.util; import java.util.List; import org.eclipse.core.resources.IFile; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.xmi.XMLResource; import org.eclipse.gef.commands.CompoundCommand; import org.eclipse.gmf.runtime.diagram.ui.commands.ICommandProxy; import org.eclipse.gmf.runtime.notation.View; import net.dependableos.dcase.diagram.common.exception.DcaseSystemException; import net.dependableos.dcase.diagram.common.util.LinkManager; import net.dependableos.dcase.diagram.common.util.MessageTypeImpl; import net.dependableos.dcase.diagram.common.util.ModelUtil; import net.dependableos.dcase.diagram.edit.parts.ArgumentEditPart; import net.dependableos.dcase.diagram.editor.logic.compare.ExpressModelDiffrenceLogic; import net.dependableos.dcase.diagram.editor.message.Messages; import net.dependableos.dcase.diagram.part.DcaseDiagramEditor; import net.dependableos.dcase.impl.ArgumentImpl; /** * A utility class that compares current editing diagram to specified diagram. * */ public final class DcaseFileCompareUtil { /** * A private contractor. */ private DcaseFileCompareUtil() { } /** * Compares current editing diagram to specified diagram. * @param targetDiagramFile the target D-Case diagram file of comparison */ @SuppressWarnings("rawtypes") public static void compare(IFile targetDiagramFile) { // gets the model file. IFile modelFile = ModelUtil .getModelFileFromDiagramFile(targetDiagramFile); if (!modelFile.exists()) { MessageWriter .showErrorMessageBox(Messages.DcaseFileCompareUtil_ModelFileNotExistMessage); return; } EObject obj = ModelUtil.getModel(modelFile); if (obj instanceof ArgumentImpl) { // gets argument of the target. ArgumentImpl targetArgumentImpl = (ArgumentImpl) obj; LinkManager targetLinkManager = new LinkManager(); targetLinkManager .load((XMLResource) targetArgumentImpl.eResource()); // gets argument of the source. ArgumentEditPart argumentEditPart = DcaseEditorUtil .getCurrentArgumentEditPart(); ArgumentImpl sourceArgumentImpl = (ArgumentImpl) ((View) argumentEditPart .getModel()).getElement(); LinkManager sourceLinkManager = new LinkManager(); sourceLinkManager .load((XMLResource) sourceArgumentImpl.eResource()); // compares ExpressModelDiffrenceLogic diffLogic = new ExpressModelDiffrenceLogic( sourceLinkManager, targetLinkManager); diffLogic.compare(); CompoundCommand cc = new CompoundCommand( Messages.DcaseFileCompareUtil_CompareErrorMessage_1); // gets a command to set line color. List cmds = diffLogic.getCommand().getCommands(); for (Object cp : cmds) { if (cp instanceof ICommandProxy) { cc.add((ICommandProxy) cp); } } // executes the command. argumentEditPart.getDiagramEditDomain().getDiagramCommandStack() .execute(cc); // saves the target information. DcaseDiagramEditor currentDcaseEditor = DcaseEditorUtil .getCurrentDcaseEditor(); currentDcaseEditor.setCompareTargetFile(targetDiagramFile); } else { throw new DcaseSystemException( Messages.DcaseFileCompareUtil_CompareErrorMessage_1, null, MessageTypeImpl.COMPARE_MODEL_FILE_FAILED); } } }