从handler中获取全局状态

当运用eclipse扩展点handler来使用command的时候,有时我们需要获取得到上下文信息,其实在org.eclipse.core.commands.IHandler这个接口中定义的execute(ExecutionEvent event)方法里面,我们可以从event这个参数获取得到全局状态(随上下文信息改变)。
我们可以通过继承org.eclipse.core.commands.AbstractHandler来定制我们需要的handler。例如说我想要获取到左侧导航器中选中的IResource的话,我会实现一个类继承自AbstractHandler,并定义方法通过ExecutionEvent来获取上下文信息。

public abstract class AbstractResourceHandler extends AbstractHandler {
/**
* 获取选择的IResource集合
*
* @param applicationContext
* @return
*/
protected List<IResource> getSelectedResources(Object applicationContext) {
if (applicationContext instanceof IEvaluationContext) {
IEvaluationContext evaluationContext = ((IEvaluationContext) applicationContext);
Object obj = evaluationContext.getDefaultVariable();
if (obj instanceof List && !((List) obj).isEmpty()) {
List<IResource> resources = new ArrayList<IResource>();

for (Object var : (List) obj) {
if (var instanceof IResource) {
resources.add((IResource) var);
} else {
return null;
}
}
return resources;
}
}
return null;
}
}


在我们最终使用handler的时候我们可以通过execute方法来调用getSelectedResources方法来获取选择的IResource集合

public class ResourceHandler extends AbstractResourceHandler{

@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
List<IResource> resources = getSelectedResources(event.getApplicationContext());

/**
* do something
*/

return null;
}

}


这只是全局状态的一种运用,当使用handler的时候需要到上下文信息的时候可以先使用类似的方式来获取,也许能解决。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值