/* * (C) Copyright 2006-2008 Nuxeo SA (http://nuxeo.com/) and others. * * 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. * * Contributors: * Alexandre Russel * * $Id$ */ package org.nuxeo.ecm.platform.pictures.tiles.service; import java.io.StringWriter; import java.util.ArrayList; import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuxeo.ecm.core.api.Blob; import org.nuxeo.ecm.core.api.Blobs; import org.nuxeo.ecm.core.api.DocumentModel; import org.nuxeo.ecm.platform.picture.api.ImageInfo; import org.nuxeo.ecm.platform.picture.api.ImagingService; import org.nuxeo.ecm.platform.pictures.tiles.gwt.client.TilingPreviewConstant; import org.nuxeo.ecm.platform.preview.adapter.AbstractPreviewer; import org.nuxeo.ecm.platform.preview.adapter.ImagePreviewer; import org.nuxeo.ecm.platform.preview.adapter.MimeTypePreviewer; import org.nuxeo.ecm.platform.preview.api.PreviewException; import org.nuxeo.ecm.platform.web.common.vh.VirtualHostHelper; import org.nuxeo.runtime.api.Framework; /** * @author Alexandre Russel */ public class TiledImagePreviewer extends AbstractPreviewer implements MimeTypePreviewer { private static final Log log = LogFactory.getLog(TiledImagePreviewer.class); protected static final String ORIGINAL_JPEG_VIEW_NAME = "OriginalJpeg"; /** * @deprecated since 7.2. The Original view does not exist anymore. See NXP-16070. */ @Deprecated protected static final String ORIGINAL_VIEW_NAME = "Original"; public List<Blob> getPreview(Blob blob, DocumentModel dm) throws PreviewException { if (useTiling(blob)) { List<Blob> blobResults = new ArrayList<Blob>(); String htmlFile = getString().replace("$repoId$", dm.getRepositoryName()); htmlFile = htmlFile.replace("$docId$", dm.getId()); htmlFile = htmlFile.replace("$tileWidth$", "" + 200); htmlFile = htmlFile.replace("$tileHeight$", "" + 200); htmlFile = htmlFile.replace("$maxTiles$", "" + 2); Blob mainBlob = Blobs.createBlob(htmlFile, "text/html", null, "index.html"); blob.setFilename("image"); blobResults.add(mainBlob); blobResults.add(blob); return blobResults; } return new ImagePreviewer().getPreview(blob, dm); } protected boolean useTiling(Blob blob) { ImagingService imagingService = Framework.getLocalService(ImagingService.class); if (imagingService != null) { ImageInfo info = imagingService.getImageInfo(blob); if (info != null) { int width = info.getWidth(); int height = info.getHeight(); Integer widthThreshold = Integer.valueOf(PictureTilingComponent.getEnvValue("WidthThreshold", "1200")); Integer heightThreshold = Integer.valueOf(PictureTilingComponent.getEnvValue("HeightThreshold", "1200")); return width > widthThreshold || height > heightThreshold; } } return false; } /** * @deprecated since 5.9.2. Use {@link #useTiling(org.nuxeo.ecm.core.api.Blob)}. */ @Deprecated protected boolean useTiling(Blob blob, DocumentModel dm) { return useTiling(blob); } private String getString() { StringWriter writer = new StringWriter(); writer.write("<html><head></head><body>"); writer.write("<script type=\"text/javascript\">"); writer.write("var serverSetting = {"); writer.write("repoId : '$repoId$' ,"); writer.write("docId : '$docId$' ,"); writer.write("contextPath : '" + VirtualHostHelper.getContextPathProperty() + "'"); writer.write("};"); writer.write("</script>"); writer.write("<script type=\"text/javascript\""); writer.write("src=\"" + VirtualHostHelper.getContextPathProperty() + "/org.nuxeo.ecm.platform.pictures.tiles.gwt.TilingPreview/org.nuxeo.ecm.platform.pictures.tiles.gwt.TilingPreview.nocache.js\">"); writer.write("</script>"); appendPreviewSettings(writer); writer.write("<div id=\"display\"></div>"); writer.write("</body></html>"); return writer.toString(); } private static void appendPreviewSettings(StringWriter sb) { sb.append("<script type=\"text/javascript\">"); sb.append("var previewSettings = { "); sb.append("imageOnly: \"true\", "); sb.append("multiImageAnnotation: \"true\", "); sb.append("xPointerFilterPath: \"" + TilingPreviewConstant.ORG_NUXEO_ECM_PLATFORM_PICTURES_TILES_GWT_CLIENT_XPOINTER_FILTER + "\", "); sb.append("pointerAdapter: \"" + TilingPreviewConstant.ORG_NUXEO_ECM_PLATFORM_PICTURES_TILES_GWT_CLIENT_POINTER_ADAPTER + "\", "); sb.append("annotationDecoratorFunction: \"" + TilingPreviewConstant.ORG_NUXEO_ECM_PLATFORM_PICTURES_TILES_GWT_CLIENT_UPDATE_ANNOTATED_DOCUMENT + "\""); sb.append("}"); sb.append("</script>"); } }