/******************************************************************************* * Copyright (c) 2008, 2012 * 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 * * Contributors: * Javier Canovas (javier.canovas@inria.fr) *******************************************************************************/ package fr.inria.atlanmod.collaboro.ui.commands; import java.util.List; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.commands.IHandler; import org.eclipse.core.commands.IHandlerListener; import org.eclipse.jface.dialogs.MessageDialog; import fr.inria.atlanmod.collaboro.history.Add; import fr.inria.atlanmod.collaboro.history.ConcreteSyntaxElement; import fr.inria.atlanmod.collaboro.history.Delete; import fr.inria.atlanmod.collaboro.history.ExistingAbstractSyntaxElement; import fr.inria.atlanmod.collaboro.history.ModelChange; import fr.inria.atlanmod.collaboro.history.NewAbstractSyntaxElement; import fr.inria.atlanmod.collaboro.history.SyntaxElement; import fr.inria.atlanmod.collaboro.history.Update; import fr.inria.atlanmod.collaboro.ui.Controller; public class ApplyChangesCommand implements IHandler { @Override public void addHandlerListener(IHandlerListener handlerListener) { } @Override public void dispose() { } private String digestSyntaxElement(SyntaxElement element) { String result = ""; if (element instanceof NewAbstractSyntaxElement) { NewAbstractSyntaxElement newAbstract = (NewAbstractSyntaxElement) element; return newAbstract.getElement().eClass().getName(); } else if (element instanceof ExistingAbstractSyntaxElement) { ExistingAbstractSyntaxElement existingAbstract = (ExistingAbstractSyntaxElement) element; return existingAbstract.getElement().eClass().getName(); } else if (element instanceof ConcreteSyntaxElement) { ConcreteSyntaxElement concrete = (ConcreteSyntaxElement) element; return concrete.getElement().getClass().getName(); } return result; } @Override public Object execute(ExecutionEvent event) throws ExecutionException { List<ModelChange> changes = Controller.INSTANCE.applyChanges(); int addNumber = 0; int updateNumber = 0; int deleteNumber = 0; String result = "Changes applied: \n"; for(ModelChange change : changes) { if (change instanceof Add) { Add add = (Add) change; addNumber++; } else if (change instanceof Delete) { Delete delete = (Delete) change; deleteNumber++; } else if (change instanceof Update) { Update delete = (Update) change; updateNumber++; } } result += " - " + addNumber + " ADDs applied\n"; result += " - " + updateNumber + " UPDATEs applied\n"; result += " - " + deleteNumber + " DELETEs applied\n"; MessageDialog.openInformation(null, "Changes applied", result); return null; } @Override public boolean isEnabled() { return true; } @Override public boolean isHandled() { return true; } @Override public void removeHandlerListener(IHandlerListener handlerListener) { } }