/** * Դ�������ƣ�MetadataItemResourceChange.java * �������Ȩ���������ӹɷ����޹�˾ ��Ȩ���� * ϵͳ���ƣ�JRES Studio * ģ�����ƣ�com.hundsun.ares.studio.jres.metadata.ui * ����˵����$desc * ����ĵ��� * ���ߣ� */ package com.hundsun.ares.studio.jres.metadata.ui.refactor; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.emf.common.command.Command; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.edit.command.ChangeCommand; import org.eclipse.emf.edit.command.SetCommand; import org.eclipse.emf.edit.domain.EditingDomain; import org.eclipse.ltk.core.refactoring.Change; import org.eclipse.ltk.core.refactoring.resource.ResourceChange; import com.hundsun.ares.studio.core.IARESResource; import com.hundsun.ares.studio.core.ResourceTypeMapping; import com.hundsun.ares.studio.core.model.Reference; import com.hundsun.ares.studio.jres.model.metadata.MetadataItem; import com.hundsun.ares.studio.jres.model.metadata.MetadataPackage; import com.hundsun.ares.studio.jres.model.metadata.MetadataResourceData; /** * @author qinyuan * */ public class MetadataItemResourceChange extends ResourceChange { private String oldName; private String newName; private MetadataItem item; private IARESResource resource; private EditingDomain editingDomain; /** * @param oldName * @param newName * @param item * @param editingDomain */ public MetadataItemResourceChange(String oldName, String newName, MetadataItem item,IARESResource resource, EditingDomain editingDomain) { this.oldName = oldName; this.newName = newName; this.item = item; this.resource = resource; this.editingDomain = editingDomain; } /* (non-Javadoc) * @see org.eclipse.ltk.core.refactoring.resource.ResourceChange#getModifiedResource() */ @Override protected IResource getModifiedResource() { return resource.getResource(); } /* (non-Javadoc) * @see org.eclipse.ltk.core.refactoring.Change#getName() */ @Override public String getName() { return item.getName() + " ������Ϊ: " + this.newName; } /* (non-Javadoc) * @see org.eclipse.ltk.core.refactoring.Change#perform(org.eclipse.core.runtime.IProgressMonitor) */ @Override public Change perform(IProgressMonitor pm) throws CoreException { //������Դ���� Command command = new ChangeCommand(item.eResource()) { @Override protected void doExecute() { EObject container = item.eContainer(); @SuppressWarnings("unchecked") String type = ResourceTypeMapping.getInstance().getReferenceType(resource.getType()); if(container instanceof MetadataResourceData){ MetadataResourceData<? extends MetadataItem> resourceData = (MetadataResourceData<? extends MetadataItem>) container; for (Reference ref : resourceData.getReferences()) { // BUG #3155::ҵ���������������õı�׼�������ͼ�Ĭ��ֵ��ID��ҵ����������ID��ͬ�� // ��Ҫ�ж��������� if(ref.getType().equals(type) && ref.getValue().equals(oldName)) { ref.setValue(newName); } } } } }; //�������� command = command.chain(SetCommand.create(editingDomain, item, MetadataPackage.Literals.NAMED_ELEMENT__NAME, newName)) ; editingDomain.getCommandStack().execute(command); return new MetadataItemResourceChange(oldName,newName,item,resource,editingDomain); } }