001/* 002 * (C) Copyright 2006-2007 Nuxeo SAS (http://nuxeo.com/) and contributors. 003 * 004 * All rights reserved. This program and the accompanying materials 005 * are made available under the terms of the GNU Lesser General Public License 006 * (LGPL) version 2.1 which accompanies this distribution, and is available at 007 * http://www.gnu.org/licenses/lgpl.html 008 * 009 * This library is distributed in the hope that it will be useful, 010 * but WITHOUT ANY WARRANTY; without even the implied warranty of 011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 012 * Lesser General Public License for more details. 013 * 014 * Contributors: 015 * Nuxeo - initial API and implementation 016 * 017 * $Id: JOOoConvertPluginImpl.java 18651 2007-05-13 20:28:53Z sfermigier $ 018 */ 019 020package org.nuxeo.ecm.platform.picture.api.adapters; 021 022import static org.nuxeo.ecm.platform.picture.api.ImagingDocumentConstants.PICTURE_VIEWS_PROPERTY; 023 024import java.io.Serializable; 025import java.util.ArrayList; 026import java.util.Collection; 027import java.util.HashMap; 028import java.util.List; 029import java.util.Map; 030 031import org.nuxeo.ecm.core.api.Blob; 032import org.nuxeo.ecm.core.api.DocumentModel; 033import org.nuxeo.ecm.platform.picture.api.ImageInfo; 034import org.nuxeo.ecm.platform.picture.api.PictureView; 035import org.nuxeo.ecm.platform.picture.api.PictureViewImpl; 036 037public class MultiviewPictureAdapter implements MultiviewPicture { 038 039 public static final String FIELD_HEADLINE = "headline"; 040 041 public static final String FIELD_SUBHEADLINE = "subheadline"; 042 043 public static final String FIELD_BYLINE = "byline"; 044 045 public static final String FIELD_DATELINE = "dateline"; 046 047 public static final String FIELD_SLUGLINE = "slugline"; 048 049 public static final String FIELD_CREDIT = "credit"; 050 051 public static final String FIELD_LANGUAGE = "language"; 052 053 public static final String FIELD_SOURCE = "source"; 054 055 public static final String FIELD_ORIGIN = "origin"; 056 057 public static final String FIELD_GENRE = "genre"; 058 059 public static final String FIELD_CAPTION = "caption"; 060 061 public static final String FIELD_TYPAGE = "typage"; 062 063 public static final String FIELD_INFO = "info"; 064 065 public static final String SCHEMA_NAME = "picture"; 066 067 final DocumentModel docModel; 068 069 final Map<String, PictureView> views = new HashMap<String, PictureView>(); 070 071 public static Map<String, Object> viewToMap(PictureView view) { 072 Map<String, Object> map = new HashMap<String, Object>(); 073 map.put(PictureView.FIELD_TITLE, view.getTitle()); 074 map.put(PictureView.FIELD_DESCRIPTION, view.getDescription()); 075 map.put(PictureView.FIELD_TAG, view.getTag()); 076 map.put(PictureView.FIELD_HEIGHT, view.getHeight()); 077 map.put(PictureView.FIELD_WIDTH, view.getWidth()); 078 map.put(PictureView.FIELD_FILENAME, view.getFilename()); 079 Blob blob = view.getBlob(); 080 if (blob != null) { 081 map.put(PictureView.FIELD_CONTENT, blob); 082 } 083 map.put(FIELD_INFO, view.getImageInfo().toMap()); 084 return map; 085 } 086 087 public static PictureView mapToView(Map<String, Object> map) { 088 PictureView view = new PictureViewImpl(); 089 view.setTitle((String) map.get(PictureView.FIELD_TITLE)); 090 view.setDescription((String) map.get(PictureView.FIELD_DESCRIPTION)); 091 view.setTag((String) map.get(PictureView.FIELD_TAG)); 092 Object o = map.get(PictureView.FIELD_WIDTH); 093 if (o != null) { 094 view.setWidth(((Number) o).intValue()); 095 } 096 o = map.get(PictureView.FIELD_HEIGHT); 097 if (o != null) { 098 view.setHeight(((Number) o).intValue()); 099 } 100 view.setFilename((String) map.get(PictureView.FIELD_FILENAME)); 101 Blob blob = (Blob) map.get(PictureView.FIELD_CONTENT); 102 view.setBlob(blob); 103 view.setImageInfo(ImageInfo.fromMap((Map<String, Serializable>) map.get(FIELD_INFO))); 104 return view; 105 } 106 107 @SuppressWarnings("unchecked") 108 public MultiviewPictureAdapter(DocumentModel docModel) { 109 this.docModel = docModel; 110 111 List<Map<String, Object>> list = (List<Map<String, Object>>) docModel.getPropertyValue(PICTURE_VIEWS_PROPERTY); 112 if (list != null) { 113 for (Map<String, Object> map : list) { 114 PictureView view = mapToView(map); 115 views.put(view.getTitle(), view); 116 } 117 } 118 } 119 120 @Override 121 public PictureView[] getViews() { 122 Collection<PictureView> collection = views.values(); 123 return collection.toArray(new PictureView[collection.size()]); 124 } 125 126 @Override 127 public PictureView getView(String title) { 128 return views.get(title); 129 } 130 131 @Override 132 public void removeView(String name) { 133 views.remove(name); 134 List<Map<String, Object>> v = new ArrayList<Map<String, Object>>(); 135 for (PictureView view : views.values()) { 136 v.add(viewToMap(view)); 137 } 138 docModel.setPropertyValue(PICTURE_VIEWS_PROPERTY, v.toArray()); 139 } 140 141 @Override 142 public void addView(PictureView view) { 143 views.put(view.getTitle(), view); 144 List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); 145 for (PictureView pv : views.values()) { 146 list.add(viewToMap(pv)); 147 } 148 docModel.setPropertyValue(PICTURE_VIEWS_PROPERTY, (Serializable) list); 149 } 150 151 @Override 152 public void removeAllView() { 153 docModel.setPropertyValue(PICTURE_VIEWS_PROPERTY, null); 154 views.clear(); 155 } 156 157 @Override 158 public String getHeadline() { 159 return (String) docModel.getProperty(SCHEMA_NAME, FIELD_HEADLINE); 160 } 161 162 @Override 163 public void setHeadline(String headline) { 164 docModel.setProperty(SCHEMA_NAME, FIELD_HEADLINE, headline); 165 } 166 167 @Override 168 public String getSubheadline() { 169 return (String) docModel.getProperty(SCHEMA_NAME, FIELD_SUBHEADLINE); 170 } 171 172 @Override 173 public void setSubheadline(String subheadline) { 174 docModel.setProperty(SCHEMA_NAME, FIELD_SUBHEADLINE, subheadline); 175 } 176 177 @Override 178 public String getByline() { 179 return (String) docModel.getProperty(SCHEMA_NAME, FIELD_BYLINE); 180 } 181 182 @Override 183 public void setByline(String byline) { 184 docModel.setProperty(SCHEMA_NAME, FIELD_BYLINE, byline); 185 } 186 187 @Override 188 public String getDateline() { 189 return (String) docModel.getProperty(SCHEMA_NAME, FIELD_DATELINE); 190 } 191 192 @Override 193 public void setDateline(String dateline) { 194 docModel.setProperty(SCHEMA_NAME, FIELD_DATELINE, dateline); 195 } 196 197 @Override 198 public String getSlugline() { 199 return (String) docModel.getProperty(SCHEMA_NAME, FIELD_SLUGLINE); 200 } 201 202 @Override 203 public void setSlugline(String slugline) { 204 docModel.setProperty(SCHEMA_NAME, FIELD_SLUGLINE, slugline); 205 } 206 207 @Override 208 public String getCredit() { 209 return (String) docModel.getProperty(SCHEMA_NAME, FIELD_CREDIT); 210 } 211 212 @Override 213 public void setCredit(String credit) { 214 docModel.setProperty(SCHEMA_NAME, FIELD_CREDIT, credit); 215 } 216 217 @Override 218 public String getLanguage() { 219 return (String) docModel.getProperty(SCHEMA_NAME, FIELD_LANGUAGE); 220 } 221 222 @Override 223 public void setLanguage(String language) { 224 docModel.setProperty(SCHEMA_NAME, FIELD_LANGUAGE, language); 225 } 226 227 @Override 228 public String getSource() { 229 return (String) docModel.getProperty(SCHEMA_NAME, FIELD_SOURCE); 230 } 231 232 @Override 233 public void setSource(String source) { 234 docModel.setProperty(SCHEMA_NAME, FIELD_SOURCE, source); 235 } 236 237 @Override 238 public String getOrigin() { 239 return (String) docModel.getProperty(SCHEMA_NAME, FIELD_ORIGIN); 240 } 241 242 @Override 243 public void setOrigin(String origin) { 244 docModel.setProperty(SCHEMA_NAME, FIELD_ORIGIN, origin); 245 } 246 247 @Override 248 public String getGenre() { 249 return (String) docModel.getProperty(SCHEMA_NAME, FIELD_GENRE); 250 } 251 252 @Override 253 public void setGenre(String genre) { 254 docModel.setProperty(SCHEMA_NAME, FIELD_GENRE, genre); 255 } 256 257 @Override 258 public String getCaption() { 259 return (String) docModel.getProperty(SCHEMA_NAME, FIELD_CAPTION); 260 } 261 262 @Override 263 public void setCaption(String caption) { 264 docModel.setProperty(SCHEMA_NAME, FIELD_CAPTION, caption); 265 } 266 267 @Override 268 public String getTypage() { 269 return (String) docModel.getProperty(SCHEMA_NAME, FIELD_TYPAGE); 270 } 271 272 @Override 273 public void setTypage(String typage) { 274 docModel.setProperty(SCHEMA_NAME, FIELD_TYPAGE, typage); 275 } 276 277}