2013-01-17 63 views
1

我正在編寫一個eclipse插件,我想在其中爲JDT包資源管理器提供一個操作。爲了執行該動作,必須選擇兩個不同的文件。因此,我在該操作的命令處理程序中檢索JDT包資源管理器的活動選擇。這是我的問題所在。如何幹淨地處理日食中的結構化選擇?

目前從IStructuredSelection中提取選定文件的代碼涉及多個局部變量,其中包含多個if語句,並且在大約30行代碼中有多個返回值。當然這段代碼看起來至少有點難看。

我應該使用什麼概念和/或模式來使代碼更清潔?

eclipse平臺recommends使用adapter pattern。所以,我想創建這樣一個POJO的:

public class FooCommandArgs { 

    private IFile xmlFile; 
    private IFile csvFile; 

    //getters and setters here ... 

} 

IStructuredSelection爲它創造了必要的適配器。但是,這樣做只會將醜陋的代碼移到其他地方。

回答

0

因此,如字段名稱所示,我想從IStructuredSelection中提取的每個項目都必須滿足一些條件。我的想法是爲此使用bean驗證api。然後,POJO是這樣的:

public class FooCommandArgs { 

    @NotNull 
    @FileExtension("xml") 
    @Content(type=ContentType.XML, value="http://my.schema.location/schema.xsd") 
    private IFile xmlFile; 

    @NotNull 
    @FileExtension("csv") 
    private IFile csvFile; 

    //getters and setters here ... 

} 

Bean驗證API的Validator接口提供的方法<T> Set<ConstraintViolation<T>> validateValue(Class<T> beanType, String propertyName, Object value, Class<?>... groups)我可以用了點。我只需要反思java bean的屬性,然後針對IStructuredSelection item和pojo屬性的每個組合調用該方法。如果結果是每個項目都可以被分配給沒有約束違反的bean屬性,那麼我就可以繼續處理實際的命令。歧義可能也可以處理。

編輯:
我已經實施了這個建議,它工作得很好。使用這種技術,還可以非常容易地以編程方式向用戶解釋爲什麼某個命令未啓用或無法執行。

在這一點上,我不想忘記提及JCommander,這是這個想法的靈感。

相關問題