/** Performs the necessary initialization. */
  protected void init() {
    if (debug) {
      DebugTrace.print(this, "init"); // $NON-NLS-1$
    }

    LibraryPlugin.getDefault()
        .getPreferenceStore()
        .addPropertyChangeListener(preferenceStoreChangeListener);

    // Create the adapter factory.
    List factories = new ArrayList();
    factories.add(new ResourceItemProviderAdapterFactory());
    factories.add(new ReflectiveItemProviderAdapterFactory());
    ComposedAdapterFactory adapterFactory = new ComposedAdapterFactory(factories);

    // Create the command stack.
    BasicCommandStack commandStack = new BasicCommandStack();

    // Create the resource set.
    ILibraryResourceSet resourceSet = createResourceSet();
    resourceSet.addRefreshListener(refreshListener);
    RefreshJob.getInstance().setResourceSet(resourceSet);

    // Initialize the library save options.
    saveOptions = resourceSet.getDefaultSaveOptions();
    saveOptions.put(
        MultiFileXMISaveImpl.DISCARD_UNRESOLVED_REFERENCES,
        LibraryPreferences.getDiscardUnresolvedReferences());

    // Create the editing domain.
    editingDomain = new AdapterFactoryEditingDomain(adapterFactory, commandStack, resourceSet);

    // Register the editing domain.
    registerEditingDomain(editingDomain);
  }