/** * Դ�������ƣ�MatadataItemRenameProcessor.java * �������Ȩ���������ӹɷ����޹�˾ ��Ȩ���� * ϵͳ���ƣ�JRES Studio * ģ�����ƣ�com.hundsun.ares.studio.jres.metadata.ui * ����˵����$desc * ����ĵ��� * ���ߣ� */ package com.hundsun.ares.studio.jres.metadata.ui.refactor; import java.util.List; import java.util.regex.Pattern; import org.apache.commons.lang.StringUtils; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.OperationCanceledException; import org.eclipse.emf.edit.domain.EditingDomain; import org.eclipse.ltk.core.refactoring.Change; import org.eclipse.ltk.core.refactoring.RefactoringStatus; import org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext; import org.eclipse.ltk.core.refactoring.participants.ParticipantManager; import org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant; import org.eclipse.ltk.core.refactoring.participants.RenameArguments; import org.eclipse.ltk.core.refactoring.participants.SharableParticipants; import com.hundsun.ares.studio.core.IARESElement; import com.hundsun.ares.studio.core.IARESProject; import com.hundsun.ares.studio.core.IARESResource; import com.hundsun.ares.studio.core.ResourceTypeMapping; import com.hundsun.ares.studio.core.context.INamespaceHelper; import com.hundsun.ares.studio.core.context.statistic.IResourceTable; import com.hundsun.ares.studio.internal.core.ARESResource; import com.hundsun.ares.studio.internal.ui.refactoring.ARESRenameProcessor; import com.hundsun.ares.studio.jres.model.metadata.MetadataItem; import com.hundsun.ares.studio.jres.model.metadata.impl.ErrorNoListImpl; import com.hundsun.ares.studio.model.reference.ReferenceInfo; import com.hundsun.ares.studio.reference.ReferenceManager; /** * @author qinyuan * */ public class MatadataItemRenameProcessor extends ARESRenameProcessor{ private MetadataItem item; private EditingDomain editingDomain; /** * @param editingDomain * @param element */ public MatadataItemRenameProcessor(MetadataItem item,IARESResource aresResource, EditingDomain editingDomain) { super(aresResource); this.item = item; this.editingDomain = editingDomain; if(null != item) this.newElementName = item.getName(); } /* (non-Javadoc) * @see com.hundsun.ares.studio.internal.ui.refactoring.ARESRenameProcessor#getElements() */ @Override public Object[] getElements() { return new Object[] {item}; } /* (non-Javadoc) * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#getIdentifier() */ @Override public String getIdentifier() { return "com.hundsun.ares.studio.jres.metadata.ui.refactor.metadataitem.rename"; } /* (non-Javadoc) * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#getProcessorName() */ @Override public String getProcessorName() { return "������Ԫ�����ֶ�"; } /* (non-Javadoc) * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#isApplicable() */ @Override public boolean isApplicable() throws CoreException { return true; } /* (non-Javadoc) * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#checkInitialConditions(org.eclipse.core.runtime.IProgressMonitor) */ @Override public RefactoringStatus checkInitialConditions(IProgressMonitor pm) throws CoreException, OperationCanceledException { return new RefactoringStatus(); } /* (non-Javadoc) * @see com.hundsun.ares.studio.internal.ui.refactoring.ARESRenameProcessor#checkFinalConditions(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext) */ @Override public RefactoringStatus checkFinalConditions(IProgressMonitor pm, CheckConditionsContext context) throws CoreException, OperationCanceledException { renameArguments = new RenameArguments(newElementName, getUpdateReferences()); return new RefactoringStatus(); } /* (non-Javadoc) * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#createChange(org.eclipse.core.runtime.IProgressMonitor) */ @Override public Change createChange(IProgressMonitor pm) throws CoreException, OperationCanceledException { String oldName = item.getName(); String newName = getNewElementName(); return new MetadataItemResourceChange(oldName,newName,item,(IARESResource)element,editingDomain); } /* (non-Javadoc) * @see com.hundsun.ares.studio.internal.ui.refactoring.ARESRenameProcessor#getCurrentElementName() */ @Override public String getCurrentElementName() { return item.getName(); } /* (non-Javadoc) * @see com.hundsun.ares.studio.internal.ui.refactoring.ARESRenameProcessor#checkNewElementName(java.lang.String) */ @Override public RefactoringStatus checkNewElementName(String name) { RefactoringStatus status = new RefactoringStatus(); if(item.eContainer() instanceof ErrorNoListImpl) { Pattern pattern = Pattern.compile("[A-Z_0-9]{1,30}"); boolean match = pattern.matcher(name).matches(); if (!match) status.addFatalError("���ֲ��Ϸ�( " + pattern.toString() + " )"); }else { Pattern pattern = Pattern.compile("[A-Za-z_0-9]{1,30}"); boolean match = pattern.matcher(name).matches(); if (!match) status.addFatalError("���ֲ��Ϸ�( " + pattern.toString() + " )"); } if (!status.hasFatalError()) { String namespace = INamespaceHelper.INSTANCE.getResourceNamespace((IARESResource)element); String restype = ResourceTypeMapping.getInstance().getReferenceType(((IARESResource)element).getType()); if(isResouceExist(((IARESResource)element).getARESProject(),getNewElementName(), namespace, restype)) { status.merge(RefactoringStatus.createFatalErrorStatus("��Դ" + getNewElementName() + "�Ѿ�����!")); } } return status; } /* (non-Javadoc) * @see com.hundsun.ares.studio.internal.ui.refactoring.ARESRenameProcessor#loadParticipants(org.eclipse.ltk.core.refactoring.RefactoringStatus, org.eclipse.ltk.core.refactoring.participants.SharableParticipants) */ @Override public RefactoringParticipant[] loadParticipants(RefactoringStatus status, SharableParticipants sharedParticipants) throws CoreException { if (item != null && element != null) { MetadataItemAndAresResourceModel m = new MetadataItemAndAresResourceModel(item,(ARESResource)element); IResource resource = element.getResource(); String[] natures = resource.getProject().getDescription().getNatureIds(); return ParticipantManager.loadRenameParticipants(status, this, m, renameArguments, natures, sharedParticipants); } return null; } // 2012-03-22 sundl ��ӽӿ��Ժ�����޸ģ���ʵ�֣�ĿǰԪ���ݵ����������������������� /* (non-Javadoc) * @see com.hundsun.ares.studio.internal.ui.refactoring.INameUpdating#getNewElement() */ @Override public IARESElement getNewElement() { return null; } private boolean isResouceExist(IARESProject project,String name,String namespace, String restype ){ ReferenceInfo referenceInfo = null; if (StringUtils.equals(namespace, IResourceTable.Scope_IGNORE_NAMESPACE)) { referenceInfo = ReferenceManager.getInstance().getFirstReferenceInfo(project, restype, name, true); } else { referenceInfo = ReferenceManager.getInstance().getFirstReferenceInfo(project, restype, name, namespace, true); } return referenceInfo!=null; } }