public PropertyEditor getEditor() {
   if (propertyEditorClass == null) {
     return null;
   }
   return ObjectUtilities.loadAndInstantiate(
       propertyEditorClass, DefaultAttributeMetaData.class, PropertyEditor.class);
 }
 /**
  * Executes an weakly referenced external initializer. The initializer will be loaded using
  * reflection and will be executed once. If the initializing fails with any exception, the module
  * will become unavailable.
  *
  * @param classname the classname of the <code>ModuleInitializer</code> implementation
  * @param context the class-loader context from where to load the module's classes.
  * @throws ModuleInitializeException if an error occured or the initializer could not be found.
  */
 protected void performExternalInitialize(final String classname, final Class context)
     throws ModuleInitializeException {
   try {
     final ModuleInitializer mi =
         ObjectUtilities.loadAndInstantiate(classname, context, ModuleInitializer.class);
     if (mi == null) {
       throw new ModuleInitializeException("Failed to load specified initializer class.");
     }
     mi.performInit();
   } catch (ModuleInitializeException mie) {
     throw mie;
   } catch (Exception e) {
     throw new ModuleInitializeException("Failed to load specified initializer class.", e);
   }
 }
  /**
   * Starts parsing.
   *
   * @param attrs the attributes.
   * @throws SAXException if there is a parsing error.
   */
  protected void startParsing(final Attributes attrs) throws SAXException {
    super.startParsing(attrs);
    namespace = attrs.getValue(getUri(), "namespace"); // NON-NLS
    if (namespace == null) {
      throw new ParseException("Attribute 'namespace' is undefined", getLocator());
    }

    namespacePrefix = attrs.getValue(getUri(), "namespace-prefix"); // NON-NLS
    if (namespacePrefix == null) {
      namespacePrefix = ElementTypeRegistry.getInstance().getNamespacePrefix(namespace);
    }
    mandatory = "true".equals(attrs.getValue(getUri(), "mandatory")); // NON-NLS
    computed = "true".equals(attrs.getValue(getUri(), "computed")); // NON-NLS
    transientFlag = "true".equals(attrs.getValue(getUri(), "transient")); // NON-NLS
    bulk = "true".equals(attrs.getValue(getUri(), "prefer-bulk")); // NON-NLS
    designTimeValue = "true".equals(attrs.getValue(getUri(), "design-time-value")); // NON-NLS

    final String valueTypeText = attrs.getValue(getUri(), "value-type"); // NON-NLS
    if (valueTypeText == null) {
      throw new ParseException("Attribute 'value-type' is undefined", getLocator());
    }
    try {
      final ClassLoader classLoader = ObjectUtilities.getClassLoader(getClass());
      valueType = Class.forName(valueTypeText, false, classLoader);
    } catch (Exception e) {
      throw new ParseException("Attribute 'value-type' is not valid", e, getLocator());
    }

    valueRole = attrs.getValue(getUri(), "value-role"); // NON-NLS
    if (valueRole == null) {
      valueRole = "Value"; // NON-NLS
    }

    propertyEditor = attrs.getValue(getUri(), "propertyEditor"); // NON-NLS

    final String metaDataCoreClass = attrs.getValue(getUri(), "impl"); // NON-NLS
    if (metaDataCoreClass != null) {
      attributeCore =
          ObjectUtilities.loadAndInstantiate(
              metaDataCoreClass, AttributeReadHandler.class, AttributeCore.class);
      if (attributeCore == null) {
        throw new ParseException(
            "Attribute 'impl' references a invalid AttributeCore implementation.", getLocator());
      }
    } else {
      attributeCore = new DefaultAttributeCore();
    }
  }
 public void initialize(final DataFactoryContext dataFactoryContext)
     throws ReportDataFactoryException {
   super.initialize(dataFactoryContext);
   if (backend != null) {
     effectiveBackend = backend;
   } else {
     if (useLocalCall) {
       final String className =
           getConfiguration().getConfigProperty(CdaQueryBackend.class.getName());
       effectiveBackend =
           ObjectUtilities.loadAndInstantiate(
               className, CdaQueryBackend.class, CdaQueryBackend.class);
     }
     if (effectiveBackend == null) {
       effectiveBackend = new HttpQueryBackend();
     }
   }
 }