1

JDTパッケージエクスプローラーにアクションを提供したいEclipseプラグインを書いています。アクションを実行するには、2 つの異なるファイルを選択する必要があります。したがって、そのアクションのコマンド ハンドラーで JDT パッケージ エクスプローラーのアクティブな選択を取得します。それが私の問題です。

現在、選択したファイルを抽出するコードにIStructuredSelectionは、約 30 行のコードで、複数の if ステートメントと複数の return を持つ複数のローカル変数が含まれています。そしてもちろん、このコードは少なくとも少し醜く見えます。

このコードをよりクリーンにするために、どの概念やパターンを使用する必要がありますか?

Eclipse プラットフォームでは、アダプター パターンを使用することをお勧めします。そこで、次のような pojo を作成することを考えました。

public class FooCommandArgs {

    private IFile xmlFile;
    private IFile csvFile;

    //getters and setters here ...

}

から必要なアダプタを作成しIStructuredSelectionます。ただし、これを行うと、醜いコードが他の場所に移動するだけです。

4

1 に答える 1

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 ...

}

ValidatorBean 検証 APIのインターフェースは、<T> Set<ConstraintViolation<T>> validateValue(Class<T> beanType, String propertyName, Object value, Class<?>... groups)そのために使用できるメソッドを提供します。IStructuredSelectionJava Bean のプロパティをイントロスペクトし、アイテムと pojo プロパティのすべての組み合わせに対してそのメソッドを呼び出すだけで済みます。その結果、制約違反なしですべての項目を Bean プロパティに割り当てることができた場合は、実際のコマンドの処理を続行できます。あいまいさも同様に処理される可能性があります。

編集:
私はこの提案を実装しましたが、うまくいきました。この手法を使用すると、特定のコマンドが有効になっていない、または実行できない理由をプログラムでユーザーに説明することも非常に簡単です。

この時点で、このアイデアのインスピレーションとなったJCommanderについて言及することを忘れないでください。

于 2013-01-17T08:35:17.980 に答える