How do I get a preference value?

ps:这篇博文的完成过程异常痛苦,对我来说, 这 块的知识是基本弄明白了。但估计写在这里,能明了的人不是很多,应该是还没有理解得更透彻的原因。不过,如果你真正懂插件,或许能看懂的。

1.针对有UI的插件(激活器继承自AbstractUIPlugin),可以通过下面的代码来做:

String key = Activator.IS_FALT;
Activator.getDefault().getPreferenceStore().getBoolean(key);
2.从RootPreference去索引查找
//限定符,当然限定符是可以任意定义的,并不一定必须为插件的ID
String qualifier =  Activator.getDescriptor().getUniqueIdentifier();
String key =  Activator.IS_FALT ;//键
boolean defaultValue = false;//默认值
//从Root开始导航索引(如下是从InstanceScope范围去查找)
Preferences node = Platform.getPreferencesService().getRootNode().node(InstanceScope.SCOPE).node(qualifier);
return node.getBoolean(key, defaultValue);


3.从特定的Scope去查找
如果你本身清楚Preferences所在的范围,则可以通过下面方式来做。
String qualifier =  Activator.getDescriptor().getUniqueIdentifier();//限定符
String key =  Activator.IS_FALT ;//键
boolean defaultValue = false;//默认值
//从Root去导航索引
Preferences node = new InstanceScope().getNode(qualifier);//new InstanceScope
if (node != null)
  return node.getBoolean(key, defaultValue); 

4.在指定的Scope集合中去顺序查找
IPreferencesService service = Platform.getPreferencesService();//获取IPreferencesService实例
String qualifier = ResourcesPlugin.getDescriptor().getUniqueIdentifier();//qualifier
String key = ResourcesPlugin.PREF_AUTO_BUILDING;//键
String defaultValue = "false";//默认值
Preferences root = service.getRootNode();//Root
Preferences instanceNode = root.node(InstanceScope.SCOPE).node(qualifier);
Preferences userNode = root.node(UserScope.SCOPE).node(qualifier);
Preferences[] nodes = new Preferences[] {instanceNode, userNode};
//只在指定的nodes所代表的Scope去取值,先在instanceNode去取,找到了就返回,否则继续到userNode去取。
return service.get(key, defaultValue, nodes);

5.改变平台默认的查找顺序(范围)
平台默认的lookup顺序如下:
private static final String[] DEFAULT_DEFAULT_LOOKUP_ORDER = new String[] {"project", InstanceScope.SCOPE, ConfigurationScope.SCOPE,DefaultScope.SCOPE};
IPreferencesService service = Platform.getPreferencesService();
String qualifier = ResourcesPlugin.getDescriptor().getUniqueIdentifier();
String key = ResourcesPlugin.PREF_AUTO_BUILDING;
boolean defaultValue = false;
String[] lookupOrder = new String[] {ProjectScope.SCOPE, InstanceScope.SCOPE};
//这里设置了lookup的顺序,不然按照默认的顺序进行查找,还是以找到的第一值为准,没有,就继续查找
service.setDefaultLookupOrder(qualifier, key, lookupOrder);
IScopeContext contexts = new IScopeContext[] {new ProjectScope("MyProject")};
//注意和第4个相比一下,是getXXX,不是get。最后传进去的contexts一般要是loolupOrder的子集,不然,这样用,没有多大的意义
return service.getBoolean(qualifier, key, defaultValue, contexts); 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值