사이트 인터페이스

부분의 생성자에 포함된 인수를 종속성이라고 합니다. 부분 종속성은 다양한 어댑터와 get 메소드를 대체합니다. 예를 들어 사이트의 IActionBars에 액세스하기 위해 컴포넌트 기반 부분은 생성자에 IActionBars 인스턴스를 사용합니다.

새 스타일 사이트는 개방형 인터페이스 설정을 제공합니다. 플러그인은 org.eclipse.core.component.types 확장점을 사용하여 사이트 인터페이스 설정을 확장할 수 있습니다. 사이트 인터페이스 설정은 확장될 수 있지만 모든 사이트는 동일한 설정을 지원하므로 모든 부분은 모든 사이트에 연결될 수 있습니다. PDE 플러그인 레지스트리 보기를 사용하여 사이트 인터페이스의 전체 설정을 볼 수 있습니다.

Workbench는 다음과 같은 사이트 인터페이스를 제공합니다.

인터페이스
설명
IErrorContext
IStatus 메시지를 구성하고 플러그인 로그에 기록합니다.
Bundle
부분의 구현이 포함된 플러그인 번들입니다. IErrorContext의 구현과 같은 다른 컴포넌트에 자동으로 컴포넌트의 플러그인에 대해 알립니다.
IContainer
사이트의 컨테이너입니다. 이 오브젝트는 다른 사이트 인터페이스에 대해 조회될 수 있으며, 이는 부분이 자신의 사이트에서 하위로 모든 것을 경로 재지정하거나 다중화하려는 경우 유용할 수 있습니다.
INameable
부분이 이름, 아이콘, 도구 팁 및 컨텐츠 설명을 설정하도록 합니다. IWorkbenchPart의 다양한 get 메소드 및 리스너를 대체합니다.
Composite
부분의 상위 컴포지트입니다. 이 컴포지트는 다른 부분과 공유되지 않고 부분으로 동시에 삭제됩니다. 해당 부분은 레이아웃을 설정하고 이 컴포지트에 리스너를 첨부하도록 허용됩니다.
ISecondaryId
다중 인스턴스 보기로 사용될 경우 부분의 보조 ID를 리턴하는 인터페이스입니다.
ResourceManager
안전하게 이미지, 글꼴, 색상 및 기타 SWT 자원을 할당 및 제거합니다. 부분 간 동일한 자원을 공유하도록 하고 부분이 처리완료될 때 누출이 정리되도록 합니다.
IDirtyHandler
부분이 사용 중 상태를 설정하거나 지울 수 있도록 합니다.
IMessageDialogs
사용자에게 오류, 경고 및 정보 대화 상자를 표시합니다.
IActionBars
getViewSite()와 같은 목적으로 사용됩니다. getActionBars()는 Eclipse 3.0 API에는 제공되지 않습니다.
IMultiplexer
다중화된 컴포넌트에 멀티플렉서와 공유 인터페이스에 대한 액세스를 제공합니다.
.
ISavedState
이전에 지속된 부분의 상태를 보유합니다.
IPartFactory
부분이 중첩된 보기 및 편집기를 작성할 수 있도록 합니다.
IPartDescriptor
ID, 제목, 기본 이미지 등과 같은 부분에 대한 메타 정보를 보유합니다.
IEditorInput
편집기에 대한 편집기 입력을 보유합니다. 보기에 대해 빈 편집기 입력을 가리킵니다.
ISelectionHandler
선택 변경사항을 처리합니다. 부분은 이 오브젝트를 사용하여 Workbench에 제공한 선택을 변경할 수 있습니다.

부분의 포함 컨텍스트에 따라 부분이 각 인터페이스의 고유한 인스턴스 또는 여러 부분 간 공유된 오브젝트를 가져오기 여부가 결정됩니다. 부분의 생성자는 널(null) 인수를 받지 않습니다.

 

기존 부분이 있는 새 사이트 인터페이스 사용

생성자 주입은 편리하지만 새 사이트 인터페이스를 사용하기 위해 생성자 주입을 사용하는 모든 기존 편집기 및 보기를 다시 작성한다는 점에서 비실용적입니다. 이러한 이유로 모든 새 인터페이스는 IWorkbenchPartSite의 어댑터로 기존 보기에도 사용할 수 있습니다.

다음은 메시지 대화 상자를 여는 단일 단추가 포함된 보기입니다.

DependenciesViewOld 이미지

다음 예제에서는 새 IMessageDialogs 인터페이스를 사용하여 대화 상자를 여는 새 스타일 보기의 소스를 표시합니다.

/**
 * Demonstrates how to use component dependencies in a new-style part.
 *
 * @since 3.1
 */
public class DependenciesViewNew {
    // Dependencies
    private IMessageDialogs dialogs;
   
    /**
     * Component constructor. Do not invoke directly.
     */
    public DependenciesViewNew(Composite parent, IMessageDialogs dialogs) {
        this.dialogs = dialogs;
       
        Button testButton = new Button(parent, SWT.PUSH);
        testButton.setText("Open a dialog");
        testButton.addSelectionListener(new SelectionAdapter() {
        /* (non-Javadoc)
         * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
         */
        public void widgetSelected(SelectionEvent e) {
            openADialog();
        }
        });
    }
   
    private void openADialog() {
        dialogs.open(IStatus.INFO, "This is a message");
    }
}

다음 예제에서는 IMessageDialogs를 사용하여 대화 상자를 여는 기존의 보기를 표시하고 기존 Workbench 부분을 사용해도 가능하다는 것을 보여 줍니다. 빨간색 글꼴의 행은 IMessageDialogs 인터페이스가 각 경우에 초기화되고 사용되는 방법을 표시합니다.

/**
 * Demonstrates how to use component dependencies in an old-style view
 *
 * @since 3.1
 */
public class DependenciesViewOld extends ViewPart {
    // Dependencies
    private IMessageDialogs dialogs;
    
    // Main widget
    private Composite parent;
    
    /* (non-Javadoc)
     * @see org.eclipse.ui.IWorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
     */
    public void createPartControl(Composite parent) {
        this.parent = parent;
        this.dialogs = (IMessageDialogs)getSite().getAdapter(IMessageDialogs.class);
        
        Button testButton = new Button(parent, SWT.PUSH);
        testButton.setText("Open a dialog");
        testButton.addSelectionListener(new SelectionAdapter() {
        /* (non-Javadoc)
         * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
         */
        public void widgetSelected(SelectionEvent e) {
            openADialog();
        }
        });
    }
    
    private void openADialog() {
        if (dialogs != null) {
            dialogs.open(IStatus.INFO, "This is a message");
        }
    }

    /* (non-Javadoc)
     * @see org.eclipse.ui.IWorkbenchPart#setFocus()
     */
    public void setFocus() {
        parent.setFocus();
    }
}