Argumentumok átadása egy résznek

Egy szülő az utódjai számára a ContainerContext használatával ad át argumentumokat. A környezet egy rész konstruktorának adhat át argumentumokat vagy egy gyárat határozhat meg az argumentumok összeállítására. Például egy adott ContainerContext az alábbiakhoz hasonló szabályokat adhat meg:
Ha a környezet nem biztosít egy adott függőséget, akkor az utód az alapértelmezett megvalósítást fogja használni az org.eclipse.core.component.types kiterjesztési pontból. Mivel a környezet újradefiniálhatja bármely argumentumot, amelyet a rész a konstruktorában kap meg, ezért a szülő újradefiniálhatja bármely felületet, amelyet a rész normális esetben a helyétől szerez meg. Például a szülő kényszeríthetné az utódját az IActionBars egy másik megvalósításának használatára egy IActionBars környezetben biztosításával.

A szülőnek számos lehetősége van a környezet összeállítására:

Az alábbi DefaultContextView, RedirectContextView és OverrideInstanceView példák bemutatják az egyes lehetőségeket.

Alapértelmezett környezet

Az alábbi példa egy nézet forrását mutatja be, amely két beágyazott utódot hoz létre az alapértelmezett környezetben. Az, hogy az utódok az alapértelmezett környezetben kerülnek létrehozásra, azt jelenti, hogy a szülőt nem érdekli az utód neve, eszköztára, kijelölése, stb. és nincs felkészülve a kezelésére. Ha a szülő szeretne valamit tenni például az egyik utódjának aktuális kijelölésével, akkor egy ISelectionHandler felületet kell küldenie az adott utódhoz. A végeredmény az alábbi példában látható.

/**
 * Nézet, amely két beágyazott utód létrehozásának módját mutatja be
 * az alapértelmezett környezettel.
 */
public class DefaultContextView {
    public DefaultContextView(Composite parent, IPartFactory factory) throws CoreException {
        // Erőforrás-navigátor létrehozása
        ContainerContext viewContext1 = new ContainerContext();  
        ISite view1 = factory.createView(
                IPageLayout.ID_RES_NAV, parent, viewContext1, null);
   
        // Tulajdonságnézet létrehozása
        ContainerContext viewContext2 = new ContainerContext();
        ISite view2 = factory.createView(IPageLayout.ID_PROP_SHEET, parent, viewContext2, null);
   
        parent.setLayout(new FillLayout());       
    }
}

DefaultContextView képernyőképe

Függőségek átirányítása szülőtől egy utódhoz

Ez a példa azt mutatja be, hogy egy helyfelület hogyan irányítható át a szülőtől egy utódhoz. Ez az összetételnézet egy erőforrás-navigátort és egy tulajdonságnézetet tartalmaz. Átirányítja a kijelöléskezelőjét az erőforrás-navigárhoz és átirányítja a műveletsorait a tulajdonságnézethez. Aaz eredmény egy nézet, amely egy erőforrás-kijelölést biztosít és tartalmazza a tulajdonságok nézetből származó eszköztárat és menüt az alább látható módon.

public class RedirectContextView {
    /**
     * A komponens konstruktora. Ne hívja meg közvetlenül.
     */
    public RedirectContextView(Composite parent, IPartFactory factory, ISelectionHandler selection, IActionBars actionBars) throws CoreException {
        // Erőforrás-navigátor létrehozása. A navigátor kijelölésének átirányítása közvetlenül a szülőhöz.
        ContainerContext viewContext1 = new ContainerContext()
            .addInstance(ISelectionHandler.class, selection);
        ISite view1 = factory.createView(
                IPageLayout.ID_RES_NAV,
                parent, viewContext1, null);
   
        // Tulajdonságnézet létrehozása. A műveletsorok közvetlen módon használatának engedélyezése a tulajdonságnézet számára.
        ContainerContext viewContext2 = new ContainerContext()
            .addInstance(IActionBars.class, actionBars);
        ISite view2 = factory.createView(IPageLayout.ID_PROP_SHEET, parent, viewContext2, null);
   
        parent.setLayout(new FillLayout());       
    }
}


RedirectContextView képernyőképe

Függőségek biztosítása közvetlen módon

Ez a példa azt mutatja be, hogy hogyan biztosítható egy utód közvetlenül a függőségeinek egyikével. Ebben a példában egy összetételnézetet hozunk létre, amely egy problémanézetet és egy tulajdonságnézetet tartalmaz. A problémanézetet egy ISelectionHandler felülettel biztosítjuk a tartalomleírásban kiválasztott problémák számának megjelenítése érdekében. A végeredmény alább látható.

public class OverrideInstanceView {
   
    /**
     * A komponens konstruktora. Ne hívja meg közvetlenül.
     */
    public OverrideInstanceView(Composite parent, IPartFactory factory, final INameable name) throws CoreException {
        ContainerContext viewContext1 = new ContainerContext();
       
        // Egy ISelectionHandler hozzáadása a nézet környezetéhez. Minden esetben, amikor a nézet módosítja a kiválasztást,
        // megjelenítjük a tartalomleírásban kiválasztott elemek számát.
        viewContext1.addInstance(ISelectionHandler.class, new ISelectionHandler() {
            /* (nem Javadoc)
             * @lásd: org.eclipse.ui.part.services.ISelectionHandler#setSelection(org.eclipse.jface.viewers.ISelection)
             */
            public void setSelection(ISelection newSelection) {
                if (newSelection instanceof IStructuredSelection) {
                    IStructuredSelection sel = (IStructuredSelection)newSelection;
                    int selectionSize = sel.size();
                   
                    name.setContentDescription(MessageFormat.format("{0} kiválasztott probléma",
                            new String[] {Integer.toString(selectionSize)}));
                }
            }
        });

        // Problémanézet létrehozása
        ISite view1 = factory.createView(
                IPageLayout.ID_PROBLEM_VIEW, parent, viewContext1, null);
   
        // Tulajdonságnézet létrehozása
        ContainerContext viewContext2 = new ContainerContext();
        ISite view2 = factory.createView(IPageLayout.ID_PROP_SHEET, parent, viewContext2, null);
   
        parent.setLayout(new FillLayout());
    }
}



OverrideInstanceView képernyőképe