/**
* <p>Copyright: Copyright (c) 2013</p>
* <p>Company: �������ӹɷ�����˾</p>
*/
package com.hundsun.ares.studio.jres.basicdata.database;
import java.util.ArrayList;
import java.util.List;
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.Status;
import org.eclipse.core.runtime.jobs.Job;
import com.hundsun.ares.studio.core.ARESCore;
import com.hundsun.ares.studio.core.IARESResource;
import com.hundsun.ares.studio.jres.basicdata.constant.IBasicDataRestypes;
import com.hundsun.ares.studio.jres.basicdata.logic.epackage.BasicDataEpackageFactory;
import com.hundsun.ares.studio.jres.database.constant.IDatabaseRefType;
import com.hundsun.ares.studio.jres.database.constant.IDatabaseResType;
import com.hundsun.ares.studio.model.reference.RelationInfo;
import com.hundsun.ares.studio.reference.ReferenceManager;
/**
* @author wangxh
* �����ݿ�����¶�Ӧ�Ļ�������ģ��
*/
public class BasicdataUpdator implements IResourceChangeListener,
IResourceDeltaVisitor {
List<IARESResource> basicDataResources = new ArrayList<IARESResource>();
@Override
public boolean visit(IResourceDelta delta) throws CoreException {
IResource resource = delta.getResource();
if (resource instanceof IContainer) {// �ļ���
return true;
}
String type = resource.getFileExtension();
if(resource instanceof IFile && StringUtils.equals(type, IDatabaseResType.Table)){
//�ų��ƶ�ʱ��ɾ��
if((IResourceDelta.MOVED_TO & delta.getFlags()) == 0) {
String name = resource.getName().substring(0, resource.getName().lastIndexOf("."));
List<RelationInfo> infos = ReferenceManager.getInstance().getRelationInfoByTarget(IDatabaseRefType.Table, name, ARESCore.create(resource.getProject()));
for(RelationInfo info : infos){
IARESResource host = info.getHostResource();
if (StringUtils.equals(IBasicDataRestypes.singleTable,host.getType())
|| StringUtils.equals(IBasicDataRestypes.MasterSlaveTable,host.getType())
|| StringUtils.equals(IBasicDataRestypes.MasterSlaveLinkTable,host.getType())){
basicDataResources.add(info.getHostResource());
}
}
}
}
return false;
}
@Override
public void resourceChanged(IResourceChangeEvent event) {
IResourceDelta delta = event.getDelta();
try {
basicDataResources.clear();
delta.accept(this);
//����Դ
Job saveJob = new UpdateJob();
saveJob.setSystem(true);
saveJob.schedule();
} catch (Exception e) {
}
}
class UpdateJob extends Job{
public UpdateJob() {
super("���»�������ģ��");
}
@Override
protected IStatus run(IProgressMonitor monitor) {
for(IARESResource res : basicDataResources){
BasicDataEpackageFactory.eINSTANCE.clearEPackage(res);
}
return Status.OK_STATUS;
}
}
}