/**
* Copyright (c) 2013 committers of YAKINDU and others.
* 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:
* committers of YAKINDU - initial API and implementation
*
*/
package org.yakindu.sct.refactoring.handlers.impl;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.gef.commands.Command;
import org.eclipse.gmf.runtime.diagram.ui.commands.CommandProxy;
import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.ui.handlers.HandlerUtil;
import org.yakindu.sct.refactoring.handlers.AbstractViewRefactoringHandler;
import org.yakindu.sct.refactoring.refactor.AbstractRefactoring;
import org.yakindu.sct.refactoring.refactor.impl.InlineSubdiagramRefactoring;
import org.yakindu.sct.ui.editor.editparts.StateEditPart;
import org.yakindu.sct.ui.editor.partitioning.DiagramPartitioningUtil;
import org.yakindu.sct.ui.editor.policies.SetPreferredSizeRequest;
/**
* Handler for {@link InlineSubdiagramRefactoring}.
*
* @author andreas muelder - Initial contribution and API
*
*/
public class InlineSubdiagramHandler extends AbstractViewRefactoringHandler {
@Override
public AbstractRefactoring<View> createRefactoring() {
return new InlineSubdiagramRefactoring();
}
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
if (allEditorsAreClosed(event))
super.execute(event);
setPreferredSize(event);
return null;
}
private Object setPreferredSize(ExecutionEvent event) {
IGraphicalEditPart editPart = (IGraphicalEditPart) getFirstElement(HandlerUtil.getCurrentSelection(event));
Command cmd = editPart.getCommand(new SetPreferredSizeRequest(editPart));
AbstractRefactoring.executeCommand(new CommandProxy(cmd), editPart.resolveSemanticElement().eResource());
return null;
}
private boolean allEditorsAreClosed(ExecutionEvent event) {
StateEditPart firstElement = (StateEditPart) getFirstElement(HandlerUtil.getCurrentSelection(event));
return DiagramPartitioningUtil.closeSubdiagramEditors(firstElement.resolveSemanticElement());
}
}