/* * ModeShape (http://www.modeshape.org) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.modeshape.jcr.mimetype; import org.modeshape.common.logging.Logger; import org.modeshape.jcr.Environment; import org.modeshape.jcr.RepositoryConfiguration; import org.modeshape.jcr.mimetype.tika.TikaContentDetector; import org.modeshape.jcr.mimetype.tika.TikaNameOnlyDetector; /** * Class which decides which {@link MimeTypeDetector} implementation to use at runtime * * @author Horia Chiorean (hchiorea@redhat.com) */ public final class MimeTypeDetectors { private static final Logger LOGGER = Logger.getLogger(MimeTypeDetector.class); private static final boolean TIKA_AVAILABLE; static { boolean tikaAvailable = true; ClassLoader classLoader = MimeTypeDetector.class.getClassLoader(); try { Class.forName("org.apache.tika.detect.DefaultDetector", true, classLoader); Class.forName("org.apache.tika.metadata.Metadata", true, classLoader); } catch (Throwable t) { tikaAvailable = false; } TIKA_AVAILABLE = tikaAvailable; if (LOGGER.isDebugEnabled()) { if (TIKA_AVAILABLE) { LOGGER.debug("Tika is available in the CP; will be used for mimetype detection"); } else { LOGGER.debug("Tika is not available in the CP; ModeShape will use a DefaultMimetypeDetector"); } } } private MimeTypeDetectors() { } /** * Returns a new mime type detector implementation based on * the repository {@link org.modeshape.jcr.RepositoryConfiguration.FieldName#MIMETYPE_DETECTION} configuration * * @param mimeTypeDetectionConfig a {@code String}, may not be null * @param environment an {@link Environment} instance specific to a repository * @return a {@link MimeTypeDetector} instance */ public static MimeTypeDetector createDetectorFor(String mimeTypeDetectionConfig, Environment environment) { switch (mimeTypeDetectionConfig.toLowerCase()) { case RepositoryConfiguration.FieldValue.MIMETYPE_DETECTION_CONTENT: { return TIKA_AVAILABLE ? new TikaContentDetector(environment) : new DefaultMimeTypeDetector(); } case RepositoryConfiguration.FieldValue.MIMETYPE_DETECTION_NAME: { return TIKA_AVAILABLE ? new TikaNameOnlyDetector(environment) : new DefaultMimeTypeDetector(); } case RepositoryConfiguration.FieldValue.MIMETYPE_DETECTION_NONE: { return NullMimeTypeDetector.INSTANCE; } default: { throw new IllegalArgumentException("Unknown mime-type detector setting: " + mimeTypeDetectionConfig); } } } }