/**
  * Returns a pseudo component identifier representing the most abstract realizing toolkit
  * component for an abstract component with default mapping or <code>null</code> if none can be
  * found
  *
  * @param toolkitID the toolkit id
  * @param cc the concrete component
  * @return the component identifier
  */
 public static IComponentIdentifier getIdentifierOfMostAbstractRealizingComponentInToolkit(
     String toolkitID, ConcreteComponent cc) {
   ConcreteComponent concreteComponent = getMostAbstractRealizingComponentInToolkit(toolkitID, cc);
   IComponentIdentifier technicalName = new ComponentIdentifier();
   technicalName.setComponentClassName(concreteComponent.getComponentClass().getName());
   return technicalName;
 }
  /**
   * Returns the most abstract realizing toolkit component for an abstract component with default
   * mapping or <code>null</code> if none can be found
   *
   * @param toolkitID the toolkit id
   * @param cc the concrete component
   * @return the component
   */
  public static ConcreteComponent getMostAbstractRealizingComponentInToolkit(
      String toolkitID, ConcreteComponent cc) {
    String toolkitIdToSearchIn = toolkitID;
    Set realizers = cc.getAllRealizers();
    ToolkitDescriptor tpd = null;
    while (!StringUtils.isEmpty(toolkitIdToSearchIn)) {

      for (Iterator iterator = realizers.iterator(); iterator.hasNext(); ) {
        ConcreteComponent concreteComponent = (ConcreteComponent) iterator.next();
        if (toolkitIdToSearchIn.equals(concreteComponent.getToolkitDesriptor().getToolkitID())
            && concreteComponent.getComponentClass() != null) {
          return concreteComponent;
        }
      }
      try {
        tpd = getToolkitDescriptor(toolkitIdToSearchIn);
        toolkitIdToSearchIn = tpd.getIncludes();
      } catch (ToolkitPluginException e) {
        log.error("No possible technical name found", e); // $NON-NLS-1$
        return null;
      }
    }
    return null;
  }