プラグイン(10) 保存してみる

つまり、こういうことかな。とりあえず保存と復帰だけは確認。

手作業で保存するのが面倒なので、各状態の情報をBeanかなんかに保存しておいて、JSONとかYAMLとかなんかでsave/restoreしないと保守が死にそう。

public class SamplePropertyPage extends PropertyPage implements
        IWorkbenchPropertyPage {
    ...

    @Override
    protected IPreferenceStore doGetPreferenceStore() {
        IResource resource = getResource();
        if (resource != null) {
            ScopedPreferenceStore store = new ScopedPreferenceStore(
                    new ProjectScope(resource.getProject()),
                    "org.ashikunep.irenka.studio.properties");
            return store;
        }
        else {
            return null;
        }
    }
    
    private void save() {
        IPreferenceStore store = getPreferenceStore();
        if (store != null) {
            String buttonId = getElementId("button");
            if (buttonId != null) {
                store.putValue(buttonId, String.valueOf(button.getSelection()));
            }
        }
    }
    
    private void restore() {
        IPreferenceStore store = getPreferenceStore();
        if (store != null) {
            String buttonId = getElementId("button");
            if (buttonId != null) {
                boolean value = store.getBoolean(buttonId);
                button.setSelection(value);
            }
        }
    }
    
    private IResource getResource() {
        IAdaptable elem = getElement();
        IResource resource = (IResource) elem.getAdapter(IResource.class);
        return resource;
    }
    
    private String getElementId(String suffix) {
        IResource resource = getResource();
        if (resource != null) {
            IPath location = resource.getProjectRelativePath();
            return location.toPortableString() + "." + suffix;
        }
        else {
            return null;
        }
    }
}

あとデフォルトのときに保存しない設定とか、リソース移動/削除時に追跡しとかないとゴミが…。これくらいならリソースに対する永続プロパティ使ってもいいのかな。どこに保存されるか未調査だけど。