package com.hundsun.ares.studio.jres.basicdata.ui.refactor; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import org.apache.commons.lang.StringUtils; 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.basicdata.constant.IBasicDataRestypes; import com.hundsun.ares.studio.jres.metadata.constant.IMetadataRefType; 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; /** * * @deprecated �������˷���������ʱ��ʵ�ֱ��� * @author Administrator * */ public class BasicDataSTDFieldRenameParticipant extends RenameParticipant { private MetadataItem item; //��������item private MetadataItemAndAresResourceModel model; private ARESResource resource; //��������item���ڵ���Դ public BasicDataSTDFieldRenameParticipant() { } @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(IMetadataRefType.StdField, getName(), resource.getARESProject()); for (RelationInfo relation : relationInfos) { IARESResource res = relation.getHostResource(); if (!res.isReadOnly() && shouldChange(res.getType())) { reses.add(relation.getHostResource()); } } return reses; } /** * ֻ�޸Ļ��������ļ� * @param restype * @return */ private boolean shouldChange(String restype){ if(StringUtils.equals(IBasicDataRestypes.singleTable, restype) ||StringUtils.equals(IBasicDataRestypes.MasterSlaveTable, restype) ||StringUtils.equals(IBasicDataRestypes.MasterSlaveLinkTable, restype)){ return true; } return false; } /** * ��������������Դ��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 BasicDataSTDFieldChange(res,item.getName(),newName)); changes.add(result); } return changes; } }