본문 바로가기
Eclipse RCP

Eclipse Framework 환경설정 페이지 생성

by jayden jayden-lee 2019. 4. 25.

Eclipse Framework 환경설정

Eclipse Framework를 이용해서 RCP, Plugin 애플리케이션을 개발할 때, 환경설정 기능이 필요한 경우가 있다. Eclipse IDE를 사용하는 개발자는 자신이 원하는 폰트 크기, Java 버전 등을 설정해서 사용한다. 이처럼 환경설정은 애플리케이션에 필요한 기능입니다. 이러한 환경설정 값들은 int, boolean, String와 같이 단순한 형태의 값으로 이루어져 있으며, 보통 플러그인 식별자를 접두어로 하는 문자열을 키로 식별한다.

 

Eclipse IDE 환경설정 > 색상 및 폰트

 

환경설정을 저장하고 로드하기 위해서는 AbstractUIPlugin를 구현한 클래스로부터 IPreferenceStore 인스턴스를 가져온다. 예제 플러그인에서는 Activator(AbstractUIPlugin의 하위 클래스)로부터 IPreferenceStore 인스턴스를 가져온다.

 

getPreferenceStore() 메서드는 키/값 쌍을 저장할 수 있는 저장소를 반환환다. IPreferenceStore 인터페이스에는 기본형 속성에 대해 getInt(), getBoolean() 등과 같은 get/set 메서드와 setValue() 메서드도 제공한다.

public abstract class AbstractUIPlugin extends Plugin {
    // 생략

    public IPreferenceStore getPreferenceStore() {
        // 환경설정 저장소가 필요할 때 객체를 생성하도록 한다.
        if (preferenceStore == null) {
            preferenceStore = new ScopedPreferenceStore(InstanceScope.INSTANCE, getBundle().getSymbolicName());

        }
        return preferenceStore;
    }

}

 

AbstractUIPlugin의 하위 클래스가 없다면 아래 코드를 사용해서 IPreferenceStore 인스턴스를 가져온다. 보통 ID는 번들의 식별자이며, 환경설정 항목 식별자의 접두어로 사용한다.

IPreferenceStore preferenceStore = new ScopedPreferenceStore(InstanceScope.INSTANCE, ID);

환경설정 페이지 생성

위에 글에서 Eclipse Framework에서 환경설정 저장소인 IPreferenceStore에 대해 살펴봤다. 이번에는 사용자에게 UI를 통해 환경설정 값을 설정할 수 있도록 환경설정 페이지를 만들어보자. 환경설정 페이지는 IPreferencePage 인터페이스를 구현해서 만들며, 쉽게 만들려면 추상클래스인 FieldEditorPreferencePage를 상위클래스로 사용한다.

 

  1. plugin.xml 파일에 가서 "org.eclipse.ui.preferencePages" 확장점을 이용해서 새로운 환경설정 페이지를 선언한다.

preferencePages 확장점 추가

 

preferencePages 확장점 페이지 설정

 

  1. FieldEditorPreferencePage를 확장하고 IWorkbenchPreferecePage를 구현한 SamplePreferencePage 클래스를 생성한다.
/**
* 환경설정 페이지 클래스
* 
* @author jayden-lee
*/
public class SamplePreferencePage extends
    FieldEditorPreferencePage implements
    IWorkbenchPreferencePage {

    @Override
    public void init(IWorkbench workbench) {
        // SamplePreferencePage를 플러그인의 PreferenceStore에 연결한다.
        setPreferenceStore(Activator.getDefault().getPreferenceStore());
    }

    @Override
    protected void createFieldEditors() {
        // 프로그램 실행 횟수
        addField(new IntegerFieldEditor("launchCount", "launched Count", getFieldEditorParent()));
    }

}

 

  1. 프로그램을 실행해서 환경설정(Preferences)으로 이동해서 "Sample Preference Page"를 클릭한다.

환경설정 페이지 SamplePreferencePage 클래스에서 추가한 IntegerFieldEditor 항목이 있는 것을 확인할 수 있다. 프로그램 실행한 횟수에 대한 옵션 필드 값은 현재 4를 나타내는데, 만약 사용자가 숫자가 아닌 문자열을 입력할 수 있다.

 

이럴 경우에는 사용자에게 경고 또는 오류메시지를 표시해야 한다. 이때 사용하는 것이 유효성 검사이다. 유효성 검사는 FieldEditor 클래스의 isValid() 메서드를 오버라이드해서 로직에 맞게 구현하면 된다.

 

Sample Preference Page 옵션 페이지

 

FieldEditor 클래스의 유효성 검사 메서드

환경설정 페이지 스타일

환경설정 필드 편집기는 FLAT 스타일의 렌더러를 사용한다. FLAT 스타일은 수직 RowLayout와 같이 필드를 배치한다. 일반적으로 많이 사용하는 그리드 스타일로 변경하려면, 환경설정 페이지 클래스의 생성자 위치에 GRID 스타일의 렌더러를 지정한다. GRID 스타일은 레이블과 필드의 길이를 계산해서 각 요소를 적절히 분리하고 배치한다.

 

레이아웃, 위젯을 커스텀하게 변경해야 한다면 PreferencePage의 하위 클래스를 생성하고 createContents() 메서드에 UI 로직을 추가하면 된다.

 

환경설정 페이지 스타일

public class SamplePreferencePage extends
        FieldEditorPreferencePage implements
        IWorkbenchPreferencePage {

    public SamplePreferencePage() {
        // GRID 렌더러 지정
        super(GRID);
    }

}

환경설정 파일 위치

환경설정 값은 데이터 유형에 맞게 텍스트 형태로 저장된다. 저장된 값을 확인하려면 프로그램 실행한 이클립스 워크스페이스의 환경에 따라 다를 수 있다. 이클립스 워크스페이스 환경에서 ".metadata.plugins\org.eclipse.core.runtime.settings" 경로로 이동하면 환경설정 파일을 확인할 수 있다. 환경설정 파일의 이름은 프로젝트 이름과 동일하다.

댓글0