org.eclipse.ui.elementFactories

Il factory degli elementi viene utilizzato per ricreare oggetti modello del workbench dai dati salvati durante la chiusura del workbench.

Prima di analizzare l'estensione factory di un elemento, è necessario rivedere una tecnica generale utilizzata in tutta la piattaforma per aggiungere uno specifico comportamento di plug-in ai comuni oggetti modello della piattaforma.

IAdaptable e adattatori del workbench

Durante l'esplorazione di varie classi, è possibile osservare che molte interfacce del workbench estendono l'interfaccia IAdaptable.

I plug-in aggiungono comportamenti specifici a tipi preesistenti nel sistema mediante adattatori. Ad esempio, il workbench può aggiungere risorse affinché generino un'etichetta e un'immagine per la visualizzazione. Poiché in una buona progettazione i comportamenti specifici di interfaccia utente non vengono aggiunti a oggetti di basso livello, come si può aggiungere questo comportamento ai tipi di risorse?

I plug-in possono registrare adattatori che aggiungono un comportamento a tipi preesistenti. Il codice dell'applicazione può quindi richiedere un oggetto per un particolare adattatore. Se esiste un adattatore registrato, l'applicazione può prelevarlo e utilizzare i nuovi comportamenti in esso definiti.

Utilizzando una funzionalità per interrogare in maniera dinamica un adattatore relativamente ad un oggetto, è possibile migliorare la flessibilità del sistema mentre si evolve. Nuovi adattatori possono essere registrati per tipi di piattaforme da nuovi plug-in senza bisogno di modificare le definizioni dei tipi originali. Il modello che consente di richiedere un oggetto per un particolare è il seguente:

   //dato un oggetto "o", utilizzarlo per un'attività del "workbench".
   if (!(o instanceof IAdaptable)) {
      return null;
   }
   IWorkbenchAdapter adapter = (IWorkbenchAdapter)o.getAdapter(IWorkbenchAdapter.class);
   if (adapter == null)
      return null;
   // adesso "o" può essere considerato un IWorkbenchAdapter
   ...

Se non vi è alcun adattatore registrato per l'oggetto, come adattatore verrà restituito null. I client devono essere preparati a gestire questo caso. Possono verificarsi casi in cui un adattatore previsto non è stato registrato.

Il workbench utilizza adattatori per ottenere informazioni UI dai tipi di piattaforma base, come IResource. Gli adattatori proteggono i tipi base da conoscenze particolari dell'interfaccia utente e consentono al workbench di sviluppare le proprie interfacce senza modificare le definizioni della base.

Senza adattatori, qualsiasi classe messa in circolazione nell'API del workbench dovrebbe implementare le interfacce UI, il che produrrebbe un aumento del numero di definizioni di classe, introdurrebbe una stretta associazione e creerebbe dipendenze circolari tra il nucleo e e le classi di interfaccia utente. Con gli adattatori, invece, ciascuna classe implementa IAdaptable e utilizza il registro dell'adattatore per consentire ai plug-in di estendere il comportamento dei tipi base.

In tutto il codice del workbench sono riscontrabili casi in cui un tipo principale di piattaforma viene interrogato per un adattatore. L'interrogazione è finalizzata a ottenere un oggetto che sia in grado di fornire informazioni relative all'interfaccia utente per il tipo di piattaforma.

Factory degli elementi

Il workbench, quando viene arrestato dall'utente, deve salvare lo stato corrente degli oggetti IAdaptable visualizzati al suo interno. L'operazione viene effettuata salvando i parametri dati primitivi dell'oggetto in uno speciale formato, IMemento. Viene, inoltre, memorizzato anche l'ID di un factory che può ricreare l'oggetto dal formato IMemento e i dati vengono salvati nel file system.

Al riavvio della piattaforma, il workbench riconosce il factory dell'elemento associato all'ID del factory di IMemento. Il riconoscimento viene effettuato controllando il registro plug-in dei contributi all'estensione org.eclipse.ui.elementFactories.

Il tag è abbastanza semplice. È sufficiente specificare l'id del factory e la corrispondente classe di implementazione.

Il seguente frammento di codice proviene dal workbench plugin.xml.

<extension
         point="org.eclipse.ui.elementFactories">
      <factory
            class="org.eclipse.ui.internal.model.ResourceFactory"
            id="org.eclipse.ui.internal.model.ResourceFactory">
      </factory>
      <factory
            class="org.eclipse.ui.internal.model.WorkspaceFactory"
            id="org.eclipse.ui.internal.model.WorkspaceFactory">
      </factory>
      <factory
            class="org.eclipse.ui.part.FileEditorInputFactory"
            id="org.eclipse.ui.part.FileEditorInputFactory">
      </factory>
      <factory
            class="org.eclipse.ui.internal.dialogs.WelcomeEditorInputFactory"
            id="org.eclipse.ui.internal.dialogs.WelcomeEditorInputFactory">
      </factory>
      <factory
            class="org.eclipse.ui.internal.WorkingSetFactory"
            id="org.eclipse.ui.internal.WorkingSetFactory">
      </factory>
</extension>

Copyright IBM Corporation e altri 2000, 2003.