}
int nEntries = buildpathEntries.size();
IBuildpathEntry[] buildpath = new IBuildpathEntry[nEntries];
int i = 0;
for (Iterator iter = buildpathEntries.iterator(); iter.hasNext();) {
BPListElement entry = (BPListElement) iter.next();
buildpath[i] = entry.getBuildpathEntry();
i++;
IResource res = entry.getResource();
// 1 tick
if (res instanceof IFolder && entry.getLinkTarget() == null
&& !res.exists()) {
CoreUtility.createFolder((IFolder) res, true, true,
new SubProgressMonitor(monitor, 1));
} else {
monitor.worked(1);
}
// 3 ticks
if (entry.getEntryKind() == IBuildpathEntry.BPE_SOURCE) {
monitor.worked(1);
IPath path = entry.getPath();
if (projPath.equals(path)) {
monitor.worked(2);
continue;
}
if (projPath.isPrefixOf(path)) {
path = path
.removeFirstSegments(projPath.segmentCount());
}
IFolder folder = project.getFolder(path);
IPath orginalPath = entry.getOrginalPath();
if (orginalPath == null) {
if (!folder.exists()) {
// New source folder needs to be created
if (entry.getLinkTarget() == null) {
CoreUtility.createFolder(folder, true, true,
new SubProgressMonitor(monitor, 2));
} else {
folder.createLink(entry.getLinkTarget(),
IResource.ALLOW_MISSING_LOCAL,
new SubProgressMonitor(monitor, 2));
}
}
} else {
if (projPath.isPrefixOf(orginalPath)) {
orginalPath = orginalPath
.removeFirstSegments(projPath
.segmentCount());
}
IFolder orginalFolder = project.getFolder(orginalPath);
if (entry.getLinkTarget() == null) {
if (!folder.exists()) {
// Source folder was edited, move to new
// location
IPath parentPath = entry.getPath()
.removeLastSegments(1);
if (projPath.isPrefixOf(parentPath)) {
parentPath = parentPath
.removeFirstSegments(projPath
.segmentCount());
}
if (parentPath.segmentCount() > 0) {
IFolder parentFolder = project
.getFolder(parentPath);
if (!parentFolder.exists()) {
CoreUtility.createFolder(parentFolder,
true, true,
new SubProgressMonitor(monitor,
1));
} else {
monitor.worked(1);
}
} else {
monitor.worked(1);
}
orginalFolder.move(entry.getPath(), true, true,
new SubProgressMonitor(monitor, 1));
}
} else {
if (!folder.exists()
|| !entry.getLinkTarget().equals(
entry.getOrginalLinkTarget())) {
orginalFolder.delete(true,
new SubProgressMonitor(monitor, 1));
folder.createLink(entry.getLinkTarget(),
IResource.ALLOW_MISSING_LOCAL,
new SubProgressMonitor(monitor, 1));
}
}
}