
[英]how to capture subscribe event in my webSocket server with Spring 4
[英]How to subscribe to an OpenProject event in Eclipse?
我正在开发一个Eclipse插件。
我一直在阅读如何在项目即将关闭时使用接口IResourceChangeListener订阅获取通知,以及使用PRE_CLOSE
事件类型。 以下文本取自Eclipse帮助 :
通知侦听器项目即将关闭。 此事件可用于在项目关闭之前从项目的内存中表示(例如,会话属性)中提取和保存必要信息。 (当项目关闭时,将处理内存中的表示)。 在此事件期间,工作空间已锁定(无资源可更新)。 该事件包含正在关闭的项目。
我没有找到如何在项目即将开启时收到通知。
您可以创建自己的IResourceChangeListener
并通过IResourceDelta.OPEN
过滤delta类型,它只影响IProjects,并且在打开和关闭项目时都会触发它:
public void resourceChanged(IResourceChangeEvent event) {
if (event == null || event.getDelta() == null)
return;
event.getDelta().accept(new IResourceDeltaVisitor() {
public boolean visit(IResourceDelta delta) throws CoreException {
if (delta.getKind() == IResourceDelta.OPEN)
final IResource resource = delta.getResource();
if (!(resource instanceof IProject))
return;
//do your stuff and check the project is opened or closed
}
}
有用的链接: http : //www.eclipse.org/articles/Article-Resource-deltas/resource-deltas.html
我知道这个问题已经得到了很好的回答,但是我想用一个有效的代码片段来更新它,以防任何人需要它。 我在Eclipse Luna,Indigo和Kepler上进行了测试。
public void resourceChanged(final IResourceChangeEvent event) {
if (event == null || event.getDelta() == null) {
return;
}
try {
event.getDelta().accept(new IResourceDeltaVisitor() {
public boolean visit(final IResourceDelta delta) throws CoreException {
IResource resource = delta.getResource();
if (((resource.getType() & IResource.PROJECT) != 0)
&& resource.getProject().isOpen()
&& delta.getKind() == IResourceDelta.CHANGED
&& ((delta.getFlags() & IResourceDelta.OPEN) != 0)) {
IProject project = (IProject)resource;
projectOpened(project);
}
return true;
}
});
} catch (CoreException e) {
e.printStackTrace();
}
}
IResourceChangeEvent
是POST_CHANGE
,相关的IResourceDelta
类型是IResourceDelta.CHANGED
,标志包括IResourceDelta.OPEN
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.