001    /**
002     * Copyright (c) 2000-2013 Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
014    
015    package com.liferay.portal.editor.fckeditor.receiver.impl;
016    
017    import com.liferay.portal.editor.fckeditor.command.CommandArgument;
018    import com.liferay.portal.kernel.language.LanguageUtil;
019    import com.liferay.portal.kernel.repository.model.FileEntry;
020    import com.liferay.portal.kernel.repository.model.FileVersion;
021    import com.liferay.portal.kernel.repository.model.Folder;
022    import com.liferay.portal.kernel.xuggler.XugglerUtil;
023    import com.liferay.portlet.documentlibrary.service.DLAppServiceUtil;
024    
025    import java.io.InputStream;
026    
027    import java.util.ArrayList;
028    import java.util.List;
029    
030    import org.w3c.dom.Document;
031    import org.w3c.dom.Element;
032    
033    /**
034     * @author Juan Gonzalez
035     * @author Roberto D??az
036     * @author Brian Wing Shun Chan
037     */
038    public abstract class BaseFileEntryCommandReceiver
039            extends DocumentCommandReceiver {
040    
041            @Override
042            protected String fileUpload(
043                    CommandArgument commandArgument, String fileName,
044                    InputStream inputStream, String contentType, long size) {
045    
046                    if (!XugglerUtil.isEnabled()) {
047                            return String.valueOf(getXugglerDisabledFileUploadReturnValue());
048                    }
049    
050                    return super.fileUpload(
051                            commandArgument, fileName, inputStream, contentType, size);
052            }
053    
054            @Override
055            protected Element getFileElement(
056                            CommandArgument commandArgument, Element fileElement,
057                            FileEntry fileEntry)
058                    throws Exception {
059    
060                    fileElement = super.getFileElement(
061                            commandArgument, fileElement, fileEntry);
062    
063                    if (!hasFileEntryPreview(fileEntry.getFileVersion())) {
064                            fileElement.setAttribute(
065                                    "errorMessage",
066                                    LanguageUtil.get(
067                                            commandArgument.getLocale(),
068                                            getUnavaiablePreviewErrorMessage()));
069                    }
070    
071                    return fileElement;
072            }
073    
074            @Override
075            protected List<Element> getFileElements(
076                            CommandArgument commandArgument, Document document, Folder folder)
077                    throws Exception {
078    
079                    List<Element> fileElements = new ArrayList<Element>();
080    
081                    List<FileEntry> fileEntries = null;
082    
083                    String[] fileEntryMimeTypes = getFileEntryMimeTypes();
084    
085                    if (fileEntryMimeTypes != null) {
086                            fileEntries = DLAppServiceUtil.getFileEntries(
087                                    folder.getRepositoryId(), folder.getFolderId(),
088                                    fileEntryMimeTypes);
089                    }
090                    else {
091                            fileEntries = DLAppServiceUtil.getFileEntries(
092                                    folder.getRepositoryId(), folder.getFolderId());
093                    }
094    
095                    for (FileEntry fileEntry : fileEntries) {
096                            Element fileElement = document.createElement("File");
097    
098                            fileElement = getFileElement(
099                                    commandArgument, fileElement, fileEntry);
100    
101                            fileElements.add(fileElement);
102                    }
103    
104                    return fileElements;
105            }
106    
107            protected abstract String[] getFileEntryMimeTypes();
108    
109            protected abstract String getUnavaiablePreviewErrorMessage();
110    
111            protected abstract int getXugglerDisabledFileUploadReturnValue();
112    
113            protected abstract boolean hasFileEntryPreview(FileVersion fileVersion);
114    
115    }