All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.ctakes.fhir.resource.AnnotationParser Maven / Gradle / Ivy

package org.apache.ctakes.fhir.resource;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.apache.uima.jcas.JCas;
import org.apache.uima.jcas.tcas.Annotation;
import org.hl7.fhir.dstu3.model.Basic;
import org.hl7.fhir.dstu3.model.CodeableConcept;
import org.hl7.fhir.dstu3.model.Coding;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;

import static org.apache.ctakes.fhir.element.FhirElementFactory.CODING_TYPE_SYSTEM;


/**
 * @author SPF , chip-nlp
 * @version %I%
 * @since 1/22/2018
 */
final public class AnnotationParser implements FhirBasicParser {

   static private final Logger LOGGER = LoggerFactory.getLogger( "AnnotationBasicParser" );

   public Annotation parseResource( final JCas jCas, final Basic resource ) {
      String className = "";
      final CodeableConcept codeableConcept = resource.getCode();
      for ( Coding coding : codeableConcept.getCoding() ) {
         final String system = coding.getSystem();
         if ( system.equals( CODING_TYPE_SYSTEM ) ) {
            className = coding.getCode();
         }
      }
      final Annotation annotation = createAnnotation( jCas, className );
      addTextSpan( annotation, resource, LOGGER );
      return annotation;
   }


   static private Annotation createAnnotation( final JCas jCas, final String className ) {
      try {
         final Class clazz = Class.forName( className );
         if ( Annotation.class.isAssignableFrom( clazz ) ) {
            final Constructor constructor = clazz.getConstructor( JCas.class );
            return (Annotation) constructor.newInstance( jCas );
         } else {
            LOGGER.error( "Cannot create a ctakes annotation for class " + className );
         }
      } catch ( ClassNotFoundException | NoSuchMethodException
            | InstantiationException
            | IllegalAccessException
            | InvocationTargetException multE ) {
         LOGGER.error( "Cannot determine ctakes annotation type for class " + className );
      }
      return new Annotation( jCas );
   }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy