package com.seventh7.mybatis.refactoring;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiElement;
import com.intellij.refactoring.listeners.RefactoringElementListener;
import com.intellij.refactoring.listeners.RefactoringElementListenerProvider;
import com.seventh7.mybatis.dom.model.Mapper;
import com.seventh7.mybatis.util.MapperUtils;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.io.IOException;
import java.util.Collection;
/**
* @author yanglin
*/
public class MapperRefactoringProvider implements RefactoringElementListenerProvider {
@Nullable @Override
public RefactoringElementListener getListener(final PsiElement element) {
if (!(element instanceof PsiClass)) return null;
return new RefactoringElementListener() {
@Override
public void elementMoved(@NotNull PsiElement newElement) {
}
@Override
public void elementRenamed(@NotNull final PsiElement newElement) {
if (newElement instanceof PsiClass) {
ApplicationManager.getApplication().runWriteAction(new Runnable() {
@Override public void run() {
renameMapperXml((PsiClass) element, (PsiClass) newElement);
}
});
}
}
};
}
private void renameMapperXml(@NotNull final PsiClass oldClazz, @NotNull final PsiClass newClazz) {
Collection<Mapper> mappers = MapperUtils.findMappers(oldClazz.getProject(), oldClazz);
try {
for (Mapper mapper : mappers) {
VirtualFile vf = mapper.getXmlTag().getOriginalElement().getContainingFile().getVirtualFile();
if (null != vf) {
vf.rename(MapperRefactoringProvider.this, newClazz.getName() + "." + vf.getExtension());
}
}
} catch (IOException e) {
}
}
}