본문 바로가기
Eclipse RCP

Eclipse Framework IMemento와 DialogSettings

by jayden-lee 2019. 4. 11.
728x90

환경설정 저장소 IPreferenceStore와 IEclipsePrefereces

이클립스 프레임워크에서는 UI가 있는 컴포넌트와 UI가 없는 컴포넌트에서 환경설정 값을 저장하기 위해서는 IPreferenceStore와 IEclipsePrefereces를 사용한다. 이들 API는 환경설정 저장소에 값을 저장하고 가져오는 동작을 담당한다.

 

  • IPrefereceStore : UI가 있는 플러그인에서 사용 가능
  • IEclipsePreferences : UI가 없는 플러그인에서 사용 가능

모든 값을 환경설정 저장소에서 저장하고 가져 올 필요는 없다. 예를 들어 특정 뷰에서 탭 폴더 순서, 테이블의 오름차순 또는 내림차순와 같은 정보는 전체에 적용되는 옵션 값이 아니다.

IMemento

IMemento는 특정 뷰의 화면과 관련된 데이터를 저장한다. 윈도우를 닫을 때 워크벤치가 저장(saveState())하며 퍼스펙티브(init())를 다시 열 때 가져온다.

 

이 방법의 단점은 워크벤치를 닫을 때 뷰의 상태를 저장한다는 점이다. 만약 뷰를 먼저 닫고 워크벤치를 닫게 되면 뷰의 상태는 저장되지 않는다. 그래서 헛점이 많으며 잘 사용하지 않는 방법이이며, IMemento 대신 환경설정 저장소를 이용하거나 DialogSettings를 사용하는 것이 좋다.

public class SampleView extends ViewPart {

    // The ID of the view as specified by the extension.
    public static final String ID = "com.jayden.views.SampleView";

        // "KEY"에 해당하는 값
    private transient String value;

        // IMemento Key 값
    private static final String KEY = "KEY";

    public SampleView() {
        // TODO Auto-generated constructor stub
    }

        // 뷰를 열 때 memento로부터 값을 가져온다.
    @Override
    public void init(IViewSite site, IMemento memento) throws PartInitException {
        super.init(site, memento);
        if(memento != null) {
            value= memento.getString(KEY);
        }
    }

    @Override
    public void createPartControl(Composite parent) {
      // UI 작성
    }

    @Override
    public void setFocus() {
        // 컨트롤에 포커스
    }

        // 워크벤치가 뷰의 상태를 저장한다.
    @Override
    public void saveState(IMemento memento) {
        super.saveState(memento);
        memento.putString(KEY, value);
    }
}

DialogSettings

DialogSettings는 값을 저장하는 방법으로 대화상자 이외에서도 사용 가능하다. 문자열과 다른 기본 유형의 값을 저장하기 위해서 속성과 같은 인터페이스를 사용한다. 정보를 XML 파일에 저장하고, UI 플러그인에 표준 확장이나 파일 위치를 생성해서 기능을 추가한다.

// UIPlugin 클래스에서 DialogSettings를 가져온다.
final IDialogSettings dialogSettings = Activator.getDefault().getDialogSettings();

// "KEY"에 해당하는 값을 가져오고 저장한다.
String value = dialogSettings.get("KEY");
dialogSettings.put("KEY", value);

IPreferenceStore와 DialogSettings 차이점

IPrefereceStore는 이클립스 인스턴스 간에 환경설정을 가져오기/내보내기 기능이 가능하다는 점이 DialogSettings와 다르다. 그리고 DialogSettings는 값을 잃어버리더라도 뷰에서 작업이 가능하고 값을 다시 생성할 수 있을 때 사용하는 것이 좋다.

댓글