/*******************************************************************************
* Copyright (c) 2014, 2015 Cisco Systems, Inc. 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
*
*******************************************************************************/
package com.cisco.yangide.ext.refactoring.actions;
import org.eclipse.core.resources.IFile;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.text.ITextSelection;
import org.eclipse.ltk.ui.refactoring.RefactoringWizardOpenOperation;
import org.eclipse.ui.IFileEditorInput;
import org.eclipse.ui.IWorkbenchSite;
import com.cisco.yangide.core.YangModelException;
import com.cisco.yangide.core.dom.ASTNamedNode;
import com.cisco.yangide.core.dom.ASTNode;
import com.cisco.yangide.core.dom.GroupingDefinition;
import com.cisco.yangide.core.dom.UsesNode;
import com.cisco.yangide.editor.editors.YangEditor;
import com.cisco.yangide.ext.refactoring.code.InlineGroupingRefactoring;
import com.cisco.yangide.ext.refactoring.ui.InlineGroupingRefactoringWizard;
/**
* @author Konstantin Zaitsev
* @date Aug 06, 2014
*/
public class InlineGroupingAction extends SelectionDispatchAction {
private YangEditor editor;
private ASTNode node;
public InlineGroupingAction(IWorkbenchSite site) {
super(site);
this.node = null;
setText("Inline Grouping...");
setToolTipText("Inline grouping element in place of reference");
setDescription("Inline grouping element in place of reference");
}
public InlineGroupingAction(YangEditor editor) {
this(editor.getSite());
this.editor = editor;
}
@Override
public void selectionChanged(ITextSelection selection) {
try {
if (editor.getModule() != null) {
this.node = editor.getModule().getNodeAtPosition(selection.getOffset());
} else {
this.node = null;
}
} catch (YangModelException e) {
this.node = null;
}
setEnabled(node != null && (node instanceof GroupingDefinition || node instanceof UsesNode));
}
@Override
public void run(ITextSelection selection) {
if (node != null && (node instanceof GroupingDefinition || node instanceof UsesNode)) {
IFile file = ((IFileEditorInput) editor.getEditorInput()).getFile();
InlineGroupingRefactoring refactoring = new InlineGroupingRefactoring(file, (ASTNamedNode) node);
InlineGroupingRefactoringWizard wizard = new InlineGroupingRefactoringWizard(refactoring);
RefactoringWizardOpenOperation op = new RefactoringWizardOpenOperation(wizard);
try {
op.run(getShell(), "Inline Grouping");
} catch (InterruptedException e) {
// do nothing
}
} else {
MessageDialog.openInformation(getShell(), "Inline",
"Operation unavailable on the current selection.\nSelect a grouping or uses element.");
}
}
}