/**
* �������Ȩ���������ӹɷ�����˾ ��Ȩ����
* ϵͳ���ƣ�JRES Studio
*/
package com.hundsun.ares.studio.reference.internal;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IResourceDelta;
import org.eclipse.core.resources.IResourceDeltaVisitor;
import org.eclipse.core.runtime.CoreException;
import com.hundsun.ares.studio.core.ARESCore;
import com.hundsun.ares.studio.core.IARESElement;
import com.hundsun.ares.studio.core.IARESProject;
import com.hundsun.ares.studio.core.IARESResource;
/**
* @author gongyf
*
*/
public class ARESElementDeltaVisitor implements IResourceDeltaVisitor {
List<IARESElement> addedElements = new ArrayList<IARESElement>();
List<IARESElement> removedElements = new ArrayList<IARESElement>();
List<IARESElement> changedElements = new ArrayList<IARESElement>();
List<IARESElement> addedOrChangedElements = new ArrayList<IARESElement>();
/* (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();
int type = resource.getType();
switch (type) {
case IResource.PROJECT: {
IARESProject aresProject = ARESCore.create((IProject)resource);
if (delta.getKind() == IResourceDelta.REMOVED
|| (delta.getKind() == IResourceDelta.CHANGED
&& ((delta.getFlags() & IResourceDelta.OPEN) != 0) && ((IProject) resource)
.isOpen())) {
removedElements.add(aresProject);
} else if (delta.getKind() == IResourceDelta.ADDED) {
addedElements.add(aresProject);
addedOrChangedElements.add(aresProject);
} else {
// �Ƿ����ù�ϵ�仯
}
}
case IResource.FOLDER: {
// ֻ����ģ����µ��ļ�
IARESElement element = ARESCore.create(resource);
if (element == null) {
return false;
}
return true;
}
case IResource.FILE: {
IARESElement element = ARESCore.create(resource);
if (element instanceof IARESResource) {
switch (delta.getKind()) {
case IResourceDelta.ADDED:
// ��Ӹ���Դ�������Ŀ�������Ϣ
addedElements.add(element);
addedOrChangedElements.add(element);
break;
case IResourceDelta.REMOVED:
// ɾ������Դ���ṩ�Ŀ�������Ϣ
removedElements.add(element);
break;
case IResourceDelta.CHANGED:
if ((delta.getFlags() & IResourceDelta.CONTENT) != 0) {
// ���¸���Դ������������Ϣ��������ɾ�������ӵķ�ʽ�����߲��öԱȺ�ֻ���±仯�IJ���
changedElements.add(element);
addedOrChangedElements.add(element);
}
default:
break;
}
}
return true;
}
}
return true;
}
/**
* @return the addedElements
*/
public List<IARESElement> getAddedElements() {
return addedElements;
}
/**
* @return the changedElements
*/
public List<IARESElement> getChangedElements() {
return changedElements;
}
/**
* @return the removedElements
*/
public List<IARESElement> getRemovedElements() {
return removedElements;
}
/**
* @return the addedOrChangedElements
*/
public List<IARESElement> getAddedOrChangedElements() {
return addedOrChangedElements;
}
}