001/* 002 * Copyright (c) 2006-2011 Nuxeo SA (http://nuxeo.com/) and others. 003 * 004 * All rights reserved. This program and the accompanying materials 005 * are made available under the terms of the Eclipse Public License v1.0 006 * which accompanies this distribution, and is available at 007 * http://www.eclipse.org/legal/epl-v10.html 008 * 009 * Contributors: 010 * bstefanescu 011 * 012 * $Id$ 013 */ 014 015package org.nuxeo.ecm.platform.rendering.fm.adapters; 016 017import java.io.IOException; 018import java.util.ArrayList; 019import java.util.List; 020 021import org.nuxeo.ecm.core.api.Blob; 022 023import freemarker.template.AdapterTemplateModel; 024import freemarker.template.SimpleNumber; 025import freemarker.template.SimpleScalar; 026import freemarker.template.TemplateCollectionModel; 027import freemarker.template.TemplateHashModelEx; 028import freemarker.template.TemplateModel; 029import freemarker.template.TemplateModelException; 030 031/** 032 * @author <a href="mailto:bs@nuxeo.com">Bogdan Stefanescu</a> 033 */ 034public class BlobTemplate extends PropertyWrapper implements TemplateHashModelEx, AdapterTemplateModel { 035 036 protected static final String[] keys = { "filename", "data", "length", "mimeType", "encoding", "digest" }; 037 038 protected final Blob blob; 039 040 public BlobTemplate(DocumentObjectWrapper wrapper, Blob blob) { 041 super(wrapper); 042 this.blob = blob; 043 } 044 045 @SuppressWarnings("rawtypes") 046 @Override 047 public Object getAdaptedObject(Class hint) { 048 return blob; 049 } 050 051 @Override 052 public TemplateCollectionModel keys() throws TemplateModelException { 053 return (TemplateCollectionModel) wrapper.wrap(keys); 054 } 055 056 @Override 057 public int size() throws TemplateModelException { 058 return keys.length; 059 } 060 061 @Override 062 public TemplateCollectionModel values() throws TemplateModelException { 063 try { 064 List<Object> list = new ArrayList<Object>(keys.length); 065 if (blob != null) { 066 list.add(blob.getFilename()); 067 list.add(blob.getString()); 068 list.add(blob.getLength()); 069 list.add(blob.getMimeType()); 070 list.add(blob.getEncoding()); 071 list.add(blob.getDigest()); 072 } else { 073 list.add(""); 074 list.add(""); 075 list.add(""); 076 list.add(""); 077 list.add(""); 078 list.add(""); 079 } 080 return (TemplateCollectionModel) wrapper.wrap(list); 081 } catch (IOException e) { 082 throw new TemplateModelException("Failed to adapt complex property values", e); 083 } 084 } 085 086 @Override 087 public TemplateModel get(String name) throws TemplateModelException { 088 try { 089 if (blob != null) { 090 if (keys[0].equals(name)) { 091 return new SimpleScalar(blob.getFilename()); 092 } else if (keys[1].equals(name)) { 093 return new SimpleScalar(blob.getString()); 094 } else if (keys[2].equals(name)) { 095 return new SimpleNumber(blob.getLength()); 096 } else if (keys[3].equals(name)) { 097 return new SimpleScalar(blob.getMimeType()); 098 } else if (keys[4].equals(name)) { 099 return new SimpleScalar(blob.getEncoding()); 100 } else if (keys[5].equals(name)) { 101 return new SimpleScalar(blob.getDigest()); 102 } 103 } 104 return NOTHING; 105 } catch (IOException e) { 106 throw new TemplateModelException(e); 107 } 108 } 109 110 @Override 111 public boolean isEmpty() throws TemplateModelException { 112 return false; 113 } 114 115}