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}