On Thu, Feb 28, 2008 at 10:03 AM, Roberto Franchini
<[EMAIL PROTECTED]> wrote:
> On Wed, Feb 27, 2008 at 12:32 AM, Steven Bethard wrote:
>  >  Worked like a charm.  Using the appropriate _impl classes, I was able
>  >  to write exactly the kind of utility functions I was hoping for,
>  >  e.g.::
>  >
>  >   AnalysisEngine relevanceReader = Util.getAnalysisEngine(
>  >       RelevanceReader.class,
>  >       Util.getTypeSystem(Document.class, RelevantDomain.class),
>  >       RelevanceReader.PARAM_ANNOTATIONS_PATH, annotationsPath);
>
>  MAy you post this useful (at least for me) factory method?

It's actually a fair bit of code, but here you go:

public static AnalysisEngine getAnalysisEngine(
    Class<? extends AnalysisComponent> componentClass,
    TypeSystemDescription typeSystem,
    Object ... configurationParameters)
  throws ResourceInitializationException {

  // create the descriptor and set configuration parameters
  AnalysisEngineDescription desc =
      new AnalysisEngineDescription_impl();
  desc.setFrameworkImplementation(Constants.JAVA_FRAMEWORK_NAME);
  desc.setPrimitive(true);
  desc.setAnnotatorImplementationName(componentClass.getName());
  setConfigurationParameters(desc, configurationParameters);

  // set the type system
  if (typeSystem != null) {
    desc.getAnalysisEngineMetaData().setTypeSystem(typeSystem);
  }

  // create the AnalysisEngine, initialize it and return it
  AnalysisEngine engine = new PrimitiveAnalysisEngine_impl();
  engine.initialize(desc, null);
  return engine;

}

public static CollectionReader getCollectionReader(
    Class<? extends CollectionReader> readerClass,
    TypeSystemDescription typeSystem,
    Object ... configurationParameters)
  throws ResourceInitializationException {

  // create the descriptor and set configuration parameters
  CollectionReaderDescription desc =
      new CollectionReaderDescription_impl();
  desc.setFrameworkImplementation(Constants.JAVA_FRAMEWORK_NAME);
  desc.setImplementationName(readerClass.getName());
  setConfigurationParameters(desc, configurationParameters);

  // set the type system
  if (typeSystem != null) {
    desc.getCollectionReaderMetaData().setTypeSystem(typeSystem);
  }

  // create the CollectionReader
  CollectionReader reader;
  try {
    reader = readerClass.newInstance();
  } catch (InstantiationException e) {
    throw new ResourceInitializationException(e);
  } catch (IllegalAccessException e) {
    throw new ResourceInitializationException(e);
  }

  // initialize the CollectionReader and return it
  reader.initialize(desc, null);
  return reader;
}

public static TypeSystemDescription getTypeSystem(
    Class<?> ... annotationClasses) {
  TypeSystemDescription typeSystem =
      new TypeSystemDescription_impl();
  List<Import> imports = new ArrayList<Import>();
  for (Class<?> annotationClass: annotationClasses) {
    Import imp = new Import_impl();
    imp.setName(annotationClass.getName());
    imports.add(imp);
  }
  Import[] importArray = new Import[imports.size()];
  typeSystem.setImports(imports.toArray(importArray));
  return typeSystem;
}

private static void setConfigurationParameters(
    ResourceCreationSpecifier specifier,
    Object ... configurationParameters) {
  if (configurationParameters.length % 2 != 0) {
    String message = "a value must be specified for each parameter";
    throw new IllegalArgumentException(message);
  }
  ResourceMetaData metaData = specifier.getMetaData();
  ConfigurationParameterDeclarations paramDecls =
      metaData.getConfigurationParameterDeclarations();
  ConfigurationParameterSettings paramSettings =
      metaData.getConfigurationParameterSettings();
  for (int i = 0; i < configurationParameters.length; i += 2) {
    String name = (String)configurationParameters[i];
    Object value = configurationParameters[i + 1];
    String javaClassName = value.getClass().getName();
    String uimaType = javaUimaTypeMap.get(javaClassName);
    if (uimaType == null) {
      String message = "invalid parameter type " + javaClassName;
      throw new IllegalArgumentException(message);
    }
    ConfigurationParameter param =
        new ConfigurationParameter_impl();
    param.setName(name);
    param.setType(uimaType);
    paramDecls.addConfigurationParameter(param);
    paramSettings.setParameterValue(name, value);
  }
}

private static final Map<String, String> javaUimaTypeMap =
    new HashMap<String, String>();
static {
  javaUimaTypeMap.put(
      boolean.class.getName(),
      ConfigurationParameter.TYPE_BOOLEAN);
  javaUimaTypeMap.put(
      float.class.getName(),
      ConfigurationParameter.TYPE_FLOAT);
  javaUimaTypeMap.put(
      int.class.getName(),
      ConfigurationParameter.TYPE_INTEGER);
  javaUimaTypeMap.put(
      String.class.getName(),
      ConfigurationParameter.TYPE_STRING);
};

Reply via email to