package org.alfresco.repo.content.metadata; import java.util.ArrayList; import java.util.HashSet; import org.alfresco.api.AlfrescoPublicApi; import org.alfresco.error.AlfrescoRuntimeException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.tika.mime.MediaType; import org.apache.tika.parser.ParseContext; import org.apache.tika.parser.Parser; /** * A Metadata Extractor which makes use of Apache Tika, * and allows the selection of the Tika parser to be * sprung-in to extract the metadata from your document. * This is typically used with custom Tika Parsers. *
 *   author:                 --      cm:author
 *   title:                  --      cm:title
 *   subject:                --      cm:description
 *   created:                --      cm:created
 *   comments:
 *   

geo:lat: -- cm:latitude *

geo:long: -- cm:longitude *

* * @since 3.4 * @author Nick Burch */ @AlfrescoPublicApi public class TikaSpringConfiguredMetadataExtracter extends TikaPoweredMetadataExtracter { protected static Log logger = LogFactory.getLog(TikaSpringConfiguredMetadataExtracter.class); private Parser tikaParser; private String tikaParserClassName; private Class tikaParserClass; /** * Injects the name of the Tika parser to use * @param className */ @SuppressWarnings("unchecked") public void setTikaParserName(String className) { tikaParserClassName = className; // Load the class try { tikaParserClass = (Class)Class.forName(tikaParserClassName); setTikaParser(getParser()); } catch(ClassNotFoundException e) { throw new AlfrescoRuntimeException("Specified Tika Parser '" + tikaParserClassName + "' not found"); } } /** * Injects the Tika parser to use * @param tikaParser */ public void setTikaParser(Parser tikaParser) { this.tikaParser = tikaParser; // Build the mime types, updating the copy our parent // holds for us as we go along ArrayList mimetypes = new ArrayList(); for(MediaType mt : tikaParser.getSupportedTypes(new ParseContext())) { mimetypes.add( mt.toString() ); } super.setSupportedMimetypes(mimetypes); } public TikaSpringConfiguredMetadataExtracter() { super(new HashSet()); } /** * Returns the Tika parser */ protected Parser getParser() { // If we were given a whole parser, return it if(tikaParser != null) return tikaParser; // Otherwise create a new one try { return tikaParserClass.newInstance(); } catch (InstantiationException e) { throw new AlfrescoRuntimeException("Unable to create specified Parser", e); } catch (IllegalAccessException e) { throw new AlfrescoRuntimeException("Unable to create specified Parser", e); } } }