/**
* Դ�������ƣ�MatadataRenameAction.java
* �������Ȩ���������ӹɷ�����˾ ��Ȩ����
* ϵͳ���ƣ�JRES Studio
* ģ�����ƣ�com.hundsun.ares.studio.jres.metadata.ui
* ����˵����$desc
* ����ĵ���
* ���ߣ�
*/
package com.hundsun.ares.studio.jres.metadata.ui.refactor;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.emf.edit.domain.EditingDomain;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ColumnViewer;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ltk.core.refactoring.participants.RenameRefactoring;
import org.eclipse.ltk.ui.refactoring.RefactoringWizardOpenOperation;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import com.hundsun.ares.studio.core.ARESModelException;
import com.hundsun.ares.studio.core.IARESResource;
import com.hundsun.ares.studio.internal.ui.refactoring.ARESRenameProcessor;
import com.hundsun.ares.studio.internal.ui.refactoring.RefactoringSaveHelper;
import com.hundsun.ares.studio.internal.ui.refactoring.RenameARESResourceWizard;
import com.hundsun.ares.studio.jres.metadata.ui.MetadataUI;
import com.hundsun.ares.studio.jres.model.metadata.MetadataItem;
import com.hundsun.ares.studio.jres.model.metadata.MetadataResourceData;
/**
* @author qinyuan
*
*/
public class MatadataRenameAction extends Action {
private ColumnViewer viewer;
private IEditorPart part;
private IARESResource iaresResource;
private EditingDomain editingDomain;
/**
* @param editingDomain
* @param iaresResource
*
*/
public MatadataRenameAction(EditingDomain editingDomain,String name, IEditorPart part,ColumnViewer viewer, IARESResource iaresResource) {
super("������" + name);
this.part = part;
this.viewer = viewer;
this.iaresResource = iaresResource;
this.editingDomain = editingDomain;
setImageDescriptor(AbstractUIPlugin.imageDescriptorFromPlugin(MetadataUI.PLUGIN_ID, "icons/full/obj16/rename.png"));
}
/* (non-Javadoc)
* @see org.eclipse.jface.action.Action#run()
*/
@Override
public void run() {
if (part.isDirty()) {
// �ع�����Ҫ��༭���Ѿ�����
if (MessageDialog.openQuestion(part.getSite().getShell(), "����", "������֮ǰ��Ҫ���б��棬�Ƿ������")) {
part.doSave(new NullProgressMonitor());
} else {
return;
}
}
Object obj = ((IStructuredSelection)viewer.getSelection()).getFirstElement();
ARESRenameProcessor processor = null;
if(obj instanceof MetadataItem) {
MetadataItem item = (MetadataItem)obj;
processor = new MatadataItemRenameProcessor(item, iaresResource,editingDomain);
RenameRefactoring refactoring = new RenameRefactoring(processor);
RenameARESResourceWizard wizard = new RenameARESResourceWizard(refactoring);
RefactoringWizardOpenOperation op = new RefactoringWizardOpenOperation(wizard);
try {
RefactoringSaveHelper refactoringSaveHelper = new RefactoringSaveHelper();
if(refactoringSaveHelper.saveEditors(part.getSite().getShell())){
if (op.run(part.getSite().getShell(), "������") == IDialogConstants.OK_ID) {
part.doSave(new NullProgressMonitor());
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
/* (non-Javadoc)
* @see org.eclipse.jface.action.Action#isEnabled()
*/
@Override
public boolean isEnabled() {
if (iaresResource.getLib() != null) {
return false;
}
Object obj = ((IStructuredSelection)viewer.getSelection()).getFirstElement();
try {
if (editingDomain.isReadOnly(iaresResource.getInfo(MetadataResourceData.class).eResource())) {
return false;
}
} catch (ARESModelException e) {
e.printStackTrace();
}
if(obj instanceof MetadataItem ) {
return true;
}
return false;
}
}