package org.projectusus.ui.dependencygraph.sourcefolder;
import static org.eclipse.jdt.core.IJavaElement.JAVA_MODEL;
import static org.eclipse.jdt.core.IJavaElement.JAVA_PROJECT;
import static org.eclipse.jdt.core.IJavaElement.PACKAGE_FRAGMENT_ROOT;
import static org.projectusus.core.project2.UsusProjectSupport.asUsusProject;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IJavaElementDelta;
import org.eclipse.jdt.core.IJavaProject;
public class SourceFolderChangeDetector {
public static boolean detectSourceFolderChange( IJavaElementDelta delta ) {
return new SourceFolderChangeDetector().analyze( delta );
}
public boolean analyze( IJavaElementDelta delta ) {
int elementType = delta.getElement().getElementType();
if( elementType == JAVA_MODEL ) {
return checkModel( delta );
}
if( elementType == JAVA_PROJECT ) {
return checkProject( delta );
}
if( elementType == PACKAGE_FRAGMENT_ROOT ) {
return true;
}
return false;
}
private boolean isCoveredProject( IJavaElement javaElement ) {
return asUsusProject( ((IJavaProject)javaElement).getProject() ).isUsusProject();
}
private boolean checkModel( IJavaElementDelta delta ) {
return checkAll( delta.getChangedChildren() );
}
private boolean checkProject( IJavaElementDelta delta ) {
if( isCoveredProject( delta.getElement() ) ) {
return checkAll( delta.getAddedChildren() ) || checkAll( delta.getRemovedChildren() );
}
return false;
}
private boolean checkAll( IJavaElementDelta[] deltas ) {
for( IJavaElementDelta delta : deltas ) {
if( analyze( delta ) ) {
return true;
}
}
return false;
}
}