@SuppressWarnings("rawtypes")
  private IDisplayContainerFactoryBuilder getDisplayContainerFactoryBuilder(final Display display) {
    if (displayContainerFactoryBuilder == null) {
      displayContainerFactoryBuilder = IDisplayContainerFactoryBuilder.Utils.factoryBuilder();
      Plugins.useClasses(
          DISPLAYER_ID,
          new PlugInSysErrAdapter<IDisplayer<?, ?>>() {
            @Override
            public void process(IDisplayer<?, ?> t, IConfigurationElement element) {
              String key = element.getAttribute(DisplayCoreConstants.key);
              String clazz = element.getAttribute(DisplayCoreConstants.clazz);
              if (key == null || clazz == null)
                throw new NullPointerException(
                    MessageFormat.format(DisplayCoreConstants.attributeMissing, key, clazz));
              System.out.println("Registering Displayer " + key + ", " + t);
              displayContainerFactoryBuilder.registerDisplayer(key, t);
            }
          });
      Plugins.useClasses(
          LINE_EDITOR_ID,
          new IPlugInCreationCallback<ILineEditor>() {
            @Override
            public void process(ILineEditor t, IConfigurationElement element) throws CoreException {
              ILineEditor editor = (ILineEditor) element.createExecutableExtension("class");
              String name = element.getAttribute("name");
              displayContainerFactoryBuilder.registerLineEditor(name, editor);
            }

            @Override
            public void onException(Throwable throwable, IConfigurationElement element) {
              throwable.printStackTrace();
            }
          });
    }
    return displayContainerFactoryBuilder;
  }
  private void addRespositoryStatusPropogators(final ISoftwareFmRepository repository2) {
    Plugins.useClasses(
        REPOSITORY_PROPOGATOR_ID,
        new IPlugInCreationCallback<RepositoryStatusListenerPropogator>() {

          @Override
          public void process(RepositoryStatusListenerPropogator t, IConfigurationElement element) {
            t.setRepositoryAndUrlGeneratorMapGetter(SoftwareFmActivator.this);
            repository2.addStatusListener(t);
          }

          @Override
          public void onException(Throwable throwable, IConfigurationElement element) {
            throwable.printStackTrace();
          }
        });
  }
  @Override
  public IUrlGeneratorMap getUrlGeneratorMap() {
    if (generatorMap == null) {
      final Map<String, IUrlGenerator> map = Maps.newMap();
      Plugins.useClasses(
          URL_GENERATOR_ID,
          new IPlugInCreationCallback<IUrlGenerator>() {

            @Override
            public void process(IUrlGenerator t, IConfigurationElement element) {
              String name = element.getAttribute(CorePlugInConstants.urlGeneratorName);
              map.put(name, t);
            }

            @Override
            public void onException(Throwable throwable, IConfigurationElement element) {
              throwable.printStackTrace();
            }
          });
      generatorMap = IUrlGeneratorMap.Utils.urlGeneratorMap(map);
    }
    return generatorMap;
  }