/** * <p>Copyright: Copyright (c) 2012</p> * <p>Company: �������ӹɷ����޹�˾</p> */ package com.hundsun.ares.studio.jres.basicdata.manage; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import org.apache.commons.lang.StringUtils; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResourceChangeEvent; import org.eclipse.core.resources.IResourceChangeListener; import org.eclipse.core.resources.IResourceDelta; import org.eclipse.core.resources.IResourceDeltaVisitor; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.Job; import com.hundsun.ares.studio.core.ARESCore; import com.hundsun.ares.studio.core.IARESProject; import com.hundsun.ares.studio.core.IARESResource; import com.hundsun.ares.studio.jres.basicdata.constant.IBasicDataRestypes; import com.hundsun.ares.studio.jres.basicdata.core.basicdata.EpacakgeDefineList; /** * @author lvgao * */ public class BasicdataDefineUpdator implements IResourceChangeListener, IResourceDeltaVisitor { Map<IARESProject, List<BasicdataDefineUpdateEvent>> changeMap = new HashMap<IARESProject, List<BasicdataDefineUpdateEvent>>(); class BasicdataDefineUpdateEvent { public String filePath; public String moveToPath; public int flag; } /* * (non-Javadoc) * * @see * org.eclipse.core.resources.IResourceChangeListener#resourceChanged(org * .eclipse.core.resources.IResourceChangeEvent) */ @Override public void resourceChanged(IResourceChangeEvent event) { IResourceDelta delta = event.getDelta(); try { changeMap.clear(); delta.accept(this); //�޸���Դ Job saveJob = new saveJob(); saveJob.setSystem(true); saveJob.schedule(); } catch (Exception e) { } } private void addFile(IARESProject project,int flag, String filepath,String moveToPath) { if (!changeMap.containsKey(project)) { changeMap.put(project, new ArrayList<BasicdataDefineUpdateEvent>()); } BasicdataDefineUpdateEvent event = new BasicdataDefineUpdateEvent(); event.filePath = filepath; event.flag = flag; event.moveToPath = moveToPath; changeMap.get(project).add(event); } /* * (non-Javadoc) * * @see * org.eclipse.core.resources.IResourceDeltaVisitor#visit(org.eclipse.core * .resources.IResourceDelta) */ @Override public boolean visit(IResourceDelta delta) throws CoreException { IResource resource = delta.getResource(); if (resource instanceof IContainer) {// �ļ��� return true; } if (IResourceDelta.REMOVED == delta.getKind()) { if (resource instanceof IFile) { // �ļ� IFile file = (IFile) resource; if (StringUtils.equals(IBasicDataRestypes.singleTable, file.getFileExtension()) || StringUtils.equals( IBasicDataRestypes.MasterSlaveTable, file.getFileExtension()) || StringUtils.equals( IBasicDataRestypes.MasterSlaveLinkTable, file.getFileExtension())) { IARESProject project = ARESCore.create(file.getProject()); //�ų��ƶ�ʱ��ɾ�� if((IResourceDelta.MOVED_TO & delta.getFlags()) == 0) { addFile(project,delta.getFlags(), file.getProjectRelativePath().toOSString(), ""); } } } return false; } else { return false; } } class saveJob extends Job { /** * @param name */ public saveJob() { super("��������"); } /* * (non-Javadoc) * * @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime. * IProgressMonitor) */ @Override protected IStatus run(IProgressMonitor monitor) { for (Entry<IARESProject, List<BasicdataDefineUpdateEvent>> entry : changeMap.entrySet()) { try { IARESResource defResource = BasicdataDefineManageUtil .getDefineResource(entry.getKey(), false); EpacakgeDefineList defList = defResource .getInfo(EpacakgeDefineList.class); // ����Ѵ��ڴ�·��,ɾ����ض��� boolean fileChanged = false; for(BasicdataDefineUpdateEvent event:entry.getValue()){ for (int i = defList.getItems().size() - 1; i >= 0; i--) { if(StringUtils.equals(event.filePath, defList.getItems().get(i).getUrl())){ defList.getItems().remove(i); fileChanged = true; } } } if (fileChanged) { defResource.save(defList, true, new NullProgressMonitor()); } } catch (Exception e) { } } return Status.OK_STATUS; } } }