package com.hundsun.ares.studio.jres.obj.ui.refactor;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.ltk.core.refactoring.Change;
import org.eclipse.ltk.core.refactoring.CompositeChange;
import com.hundsun.ares.studio.biz.StandardObjField;
import com.hundsun.ares.studio.biz.constants.IBizRefType;
import com.hundsun.ares.studio.biz.constants.IBizResType;
import com.hundsun.ares.studio.core.IARESProject;
import com.hundsun.ares.studio.internal.ui.refactoring.changes.ReferenceProviderRefChange;
import com.hundsun.ares.studio.jres.metadata.ui.refactor.MetadataItemAndAresResourceModel;
import com.hundsun.ares.studio.jres.model.metadata.MetadataItem;
import com.hundsun.ares.studio.model.reference.RelationInfo;
import com.hundsun.ares.studio.reference.ReferenceManager;
import com.hundsun.ares.studio.ui.refactoring.AresElementRenameParicipant;
public class StdObjRenamePaticipant extends AresElementRenameParicipant {
private MetadataItemAndAresResourceModel model;
private MetadataItem item; //��������item
@Override
protected boolean initialize(Object element) {
if (!getArguments().getUpdateReferences())
return false;
if(element instanceof MetadataItemAndAresResourceModel) {
model = (MetadataItemAndAresResourceModel)element;
this.element = model.getRes();
item = model.getItem();
if (item instanceof StandardObjField) {
return true;
}
}
return false;
}
@Override
public String getName() {
return item.getName();
}
@Override
public Change createChange(IProgressMonitor pm) throws CoreException, OperationCanceledException {
List<Change> changes = new ArrayList<Change>();
String newName = getArguments().getNewName();
IARESProject project = model.getRes().getARESProject();
List<RelationInfo> relations = ReferenceManager.getInstance().getRelationInfoByTarget(IBizRefType.Std_Obj, item.getName(), project);
for (RelationInfo rel : relations) {
if (rel.getHostResource().getType().equals(IBizResType.Object)) {
changes.add(new ReferenceProviderRefChange(rel.getHostResource(), IBizRefType.Std_Obj, item.getName(), newName));
}
}
if (changes.isEmpty())
return null;
return new CompositeChange("������Դ�����õĶ�����ֶθ���", changes.toArray(new Change[0]));
}
}