package com.hundsun.ares.studio.jres.metadata.ui.refactor; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; 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 org.eclipse.ltk.core.refactoring.RefactoringStatus; import org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext; import org.eclipse.ltk.core.refactoring.participants.RenameParticipant; import com.hundsun.ares.studio.core.IARESResource; import com.hundsun.ares.studio.core.registry.ARESResRegistry; import com.hundsun.ares.studio.core.registry.IResDescriptor; import com.hundsun.ares.studio.internal.core.ARESResource; import com.hundsun.ares.studio.jres.metadata.ui.utils.MetadataHelper; import com.hundsun.ares.studio.jres.model.metadata.MetadataItem; import com.hundsun.ares.studio.model.reference.RelationInfo; import com.hundsun.ares.studio.reference.ReferenceManager; public class MetadataItemRenameParticipant extends RenameParticipant { private MetadataItem item; //��������item private MetadataItemAndAresResourceModel model; private ARESResource resource; //��������item���ڵ���Դ public MetadataItemRenameParticipant() { } @Override protected boolean initialize(Object element) { if(element instanceof MetadataItemAndAresResourceModel) { model = (MetadataItemAndAresResourceModel)element; item = model.getItem(); resource = model.getRes(); return true; } return false; } @Override public String getName() { return item.getName(); } @Override public RefactoringStatus checkConditions(IProgressMonitor pm, CheckConditionsContext context) throws OperationCanceledException { return new RefactoringStatus(); } @Override public Change createChange(IProgressMonitor pm) throws CoreException, OperationCanceledException { IResDescriptor desc = ARESResRegistry.getInstance().getResDescriptor(resource); CompositeChange result = new CompositeChange(desc.getName()); result.addAll(createReferenceChange().toArray(new Change[0])); return result; } /** * ����������ϵȡ�����������Դ����SET����ȥ�ظ� * * @return */ private Set<IARESResource> getARESResource() { Set<IARESResource> reses = new HashSet<IARESResource>(); List<RelationInfo> relationInfos = ReferenceManager .getInstance() .getRelationInfoByTarget( MetadataHelper.getRefTypeByResource(resource.getType()), getName(), resource.getARESProject()); for (RelationInfo relation : relationInfos) { IARESResource res = relation.getHostResource(); if (!res.isReadOnly()) { reses.add(relation.getHostResource()); } } return reses; } /** * ��������������Դ��change���� * * @return */ private List<Change> createReferenceChange(){ List<Change> changes = new ArrayList<Change>(); String newName = getArguments().getNewName(); for (IARESResource res : getARESResource()) { IResDescriptor desc = ARESResRegistry.getInstance().getResDescriptor(res); CompositeChange result = new CompositeChange(desc.getName() + ":"+res.getFullyQualifiedName()); result.add(new MetadataItemRefResourceChange(item.getName(),newName,resource , res)); changes.add(result); } return changes; } }