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    @Override
036    public HtmlPreviewAdapter getAdapter(DocumentModel doc) {
037        ConverterBasedHtmlPreviewAdapter adapter = new ConverterBasedHtmlPreviewAdapter();
038        adapter.setAdaptedDocument(doc);
039        BlobHolder bh = doc.getAdapter(BlobHolder.class);
040        if (bh == null) {
041            if (doc.hasSchema("file")) {
042                adapter.setDefaultPreviewFieldXPath("file:content");
043            } else {
044                // Has "files" schema, set xpath to first blob as default
045                try {
046                    doc.getProperty(FIRST_FILE_IN_FILES_PROPERTY);
047                    adapter.setDefaultPreviewFieldXPath(FIRST_FILE_IN_FILES_PROPERTY);
048                } catch (PropertyException e) {
049                    // the property does not exist for this document, then return null
050                    return null;
051                }
052            }
053        }
054        return adapter;
055    }
056
057}