提交 a6ee6425 编写于 作者: S Serge Rider

Update resoure cache in project metadata


Former-commit-id: 000402cf
上级 d19358d1
......@@ -390,7 +390,11 @@ public class DBNResource extends DBNNode// implements IContributorResourceAdapte
if (newHandler != handler) {
handler = newHandler;
}
handler.updateNavigatorNode(this, resource);
if (handler != null) {
handler.updateNavigatorNode(this, resource);
} else {
log.error("Can't find handler for resource " + resource.getFullPath());
}
getModel().fireNodeEvent(new DBNEvent(source, DBNEvent.Action.UPDATE, this));
}
......
......@@ -544,15 +544,33 @@ public abstract class BaseWorkspaceImpl implements DBPWorkspace, DBPExternalFile
activeProject = null;
fireActiveProjectChange(projectMetadata, null);
}
} else {
// Some changes within project - reflect them in metadata cache
ProjectMetadata projectMetadata = projects.get(project);
if (projectMetadata != null) {
handleResourceChange(projectMetadata, childDelta);
}
}
}
} else {
// Some resource has been changed.
// Update project metadata
}
}
}
}
}
private void handleResourceChange(ProjectMetadata projectMetadata, IResourceDelta delta)
{
if (delta.getKind() == IResourceDelta.REMOVED) {
projectMetadata.removeResourceFromCache(delta.getProjectRelativePath());
} else if (delta.getKind() == IResourceDelta.MOVED_TO) {
IPath oldPath = delta.getMovedFromPath().makeRelativeTo(projectMetadata.getEclipseProject().getFullPath());
IPath newPath = delta.getMovedFromPath().makeRelativeTo(projectMetadata.getEclipseProject().getFullPath());
projectMetadata.updateResourceCache(oldPath, newPath);
} else {
for (IResourceDelta childDelta : delta.getAffectedChildren(IResourceDelta.ALL_WITH_PHANTOMS, IContainer.INCLUDE_HIDDEN)) {
handleResourceChange(projectMetadata, childDelta);
}
}
}
}
......@@ -391,6 +391,21 @@ public class ProjectMetadata implements DBPProject {
}
}
void removeResourceFromCache(IPath path) {
synchronized (metadataSync) {
resourceProperties.remove(path.toString());
}
}
void updateResourceCache(IPath oldPath, IPath newPath) {
synchronized (metadataSync) {
Map<String, Object> props = resourceProperties.remove(oldPath.toString());
if (props != null) {
resourceProperties.put(newPath.toString(), props);
}
}
}
@Override
public String toString() {
return getName();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册