/* * Copyright (C) 2012 eXo Platform SAS. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.exoplatform.services.jcr.webdav; import org.exoplatform.commons.utils.MimeTypeResolver; import org.exoplatform.services.jcr.webdav.util.TextUtil; import javax.ws.rs.core.MediaType; /** * Provides means to recognize mime-type information of the content * (including mime-type itself and encoding) * * @author <a href="mailto:dkuleshov@exoplatform.com">Dmitry Kuleshov</a> * @version $Id: MimeTypeRecognizer.java 23.08.2012 dkuleshov $ * */ public class MimeTypeRecognizer { private final MimeTypeResolver mimeTypeResolver; private final MediaType mediaType; private final boolean untrustedAgent; private final String fileName; /** * Constructor * * @param fileName - short name of the resource * @param mimeTypeResolver - provides means to resolve mime-type * @param mediaType - media type instance (stores mime-type and encoding) * @param untrustedAgent - shows if agent to provide resource and it's mime type is listed as trusted * (no mime-type change is allowed for untrusted agents) */ public MimeTypeRecognizer(String fileName, MimeTypeResolver mimeTypeResolver, MediaType mediaType, boolean untrustedAgent) { this.mimeTypeResolver = mimeTypeResolver; this.mediaType = mediaType; this.untrustedAgent = untrustedAgent; this.fileName = fileName; } /** * Shows if mime-type is recognized by {@link MimeTypeResolver}. */ public boolean isMimeTypeRecognized() { return !TextUtil.getExtension(fileName).isEmpty(); } /** * Shows if encoding is set via {@link MediaType}. */ public boolean isEncodingSet() { return !untrustedAgent && mediaType != null && mediaType.getParameters().get("charset") != null; } /** * Returns mime-type of a resource according to {@link MediaType} * or {@link MimeTypeResolver} information. */ public String getMimeType() { if (mediaType == null || untrustedAgent) { return mimeTypeResolver.getMimeType(fileName); } return mediaType.getType() + "/" + mediaType.getSubtype(); } /** * Returns encoding according to {@link MediaType} or <code>null</code> * no encoding set or {@link MediaType} is no available. */ public String getEncoding() { if (mediaType == null || untrustedAgent) { return null; } return mediaType.getParameters().get("charset"); } }