001/*
002 * (C) Copyright 2006-2007 Nuxeo SA (http://nuxeo.com/) and others.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 *     http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 *
016 */
017package org.nuxeo.ecm.platform.preview.adapter.factories;
018
019import org.nuxeo.ecm.core.api.DocumentModel;
020import org.nuxeo.ecm.core.api.PropertyException;
021import org.nuxeo.ecm.core.api.blobholder.BlobHolder;
022import org.nuxeo.ecm.platform.preview.adapter.PreviewAdapterFactory;
023import org.nuxeo.ecm.platform.preview.adapter.base.ConverterBasedHtmlPreviewAdapter;
024import org.nuxeo.ecm.platform.preview.api.HtmlPreviewAdapter;
025
026/**
027 * Preview adapter factory for all documents that have the file schema.
028 *
029 * @author tiry
030 */
031public class FileBasedPreviewAdapterFactory implements PreviewAdapterFactory {
032
033    private static final String FIRST_FILE_IN_FILES_PROPERTY = "files:files/0/file";
034
035    public HtmlPreviewAdapter getAdapter(DocumentModel doc) {
036        ConverterBasedHtmlPreviewAdapter adapter = new ConverterBasedHtmlPreviewAdapter();
037        adapter.setAdaptedDocument(doc);
038        BlobHolder bh = doc.getAdapter(BlobHolder.class);
039        if (bh == null) {
040            if (doc.hasSchema("file")) {
041                adapter.setDefaultPreviewFieldXPath("file:content");
042            } else {
043                // Has "files" schema, set xpath to first blob as default
044                try {
045                    doc.getProperty(FIRST_FILE_IN_FILES_PROPERTY);
046                    adapter.setDefaultPreviewFieldXPath(FIRST_FILE_IN_FILES_PROPERTY);
047                } catch (PropertyException e) {
048                    // the property does not exist for this document, then return null
049                    return null;
050                }
051            }
052        }
053        return adapter;
054    }
055
056}