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); 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章