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.portlet.documentlibrary.lar.xstream;
016    
017    import com.liferay.portal.kernel.bean.BeanPropertiesUtil;
018    import com.liferay.portal.kernel.lar.xstream.BaseXStreamConverter;
019    import com.liferay.portal.repository.liferayrepository.model.LiferayFileEntry;
020    import com.liferay.portal.repository.liferayrepository.model.LiferayFileVersion;
021    import com.liferay.portal.repository.proxy.FileEntryProxyBean;
022    import com.liferay.portal.repository.proxy.FileVersionProxyBean;
023    import com.liferay.portlet.documentlibrary.model.DLFileEntry;
024    import com.liferay.portlet.documentlibrary.model.impl.DLFileEntryImpl;
025    
026    import com.thoughtworks.xstream.converters.UnmarshallingContext;
027    import com.thoughtworks.xstream.io.HierarchicalStreamReader;
028    
029    import java.util.LinkedList;
030    import java.util.List;
031    
032    /**
033     * @author Akos Thurzo
034     */
035    public class FileEntryConverter extends BaseXStreamConverter {
036    
037            @Override
038            public boolean canConvert(Class clazz) {
039                    return clazz.equals(FileEntryProxyBean.class);
040            }
041    
042            @Override
043            public Object unmarshal(
044                    HierarchicalStreamReader hierarchicalStreamReader,
045                    UnmarshallingContext unmarshallingContext) {
046    
047                    DLFileEntry dlFileEntry = new DLFileEntryImpl();
048                    boolean escapedModel = false;
049    
050                    LiferayFileVersion liferayFileVersion = null;
051    
052                    while (hierarchicalStreamReader.hasMoreChildren()) {
053                            hierarchicalStreamReader.moveDown();
054    
055                            String nodeName = hierarchicalStreamReader.getNodeName();
056    
057                            Class<?> clazz = BeanPropertiesUtil.getObjectType(
058                                    dlFileEntry, nodeName);
059    
060                            if (nodeName.equals(FieldConstants.FILE_VERSION)) {
061                                    clazz = FileVersionProxyBean.class;
062                            }
063    
064                            Object convertedValue = unmarshallingContext.convertAnother(
065                                    hierarchicalStreamReader.getValue(), clazz);
066    
067                            if (fields.contains(nodeName)) {
068                                    if (nodeName.equals(FieldConstants.ESCAPED_MODEL)) {
069                                            escapedModel = (Boolean)convertedValue;
070                                    }
071                                    else if (nodeName.equals(FieldConstants.FILE_VERSION)) {
072                                            liferayFileVersion = (LiferayFileVersion)convertedValue;
073                                    }
074                                    else {
075                                            BeanPropertiesUtil.setProperty(
076                                                    dlFileEntry, nodeName, convertedValue);
077                                    }
078                            }
079    
080                            hierarchicalStreamReader.moveUp();
081                    }
082    
083                    LiferayFileEntry liferayFileEntry = new LiferayFileEntry(
084                            dlFileEntry, escapedModel);
085    
086                    liferayFileEntry.setCachedFileVersion(liferayFileVersion);
087    
088                    return liferayFileEntry;
089            }
090    
091            @Override
092            protected List<String> getFields() {
093                    return fields;
094            }
095    
096            protected static List<String> fields = new LinkedList<String>();
097    
098            static {
099                    fields.add(FieldConstants.COMPANY_ID);
100                    fields.add(FieldConstants.CREATE_DATE);
101                    fields.add(FieldConstants.DESCRIPTION);
102                    fields.add(FieldConstants.ESCAPED_MODEL);
103                    fields.add(FieldConstants.EXTENSION);
104                    fields.add(FieldConstants.FILE_ENTRY_ID);
105                    fields.add(FieldConstants.FILE_VERSION);
106                    fields.add(FieldConstants.FOLDER_ID);
107                    fields.add(FieldConstants.GROUP_ID);
108                    fields.add(FieldConstants.MANUAL_CHECK_IN_REQUIRED);
109                    fields.add(FieldConstants.MIME_TYPE);
110                    fields.add(FieldConstants.MODIFIED_DATE);
111                    fields.add(FieldConstants.READ_COUNT);
112                    fields.add(FieldConstants.REPOSITORY_ID);
113                    fields.add(FieldConstants.SIZE);
114                    fields.add(FieldConstants.TITLE);
115                    fields.add(FieldConstants.USER_ID);
116                    fields.add(FieldConstants.USER_NAME);
117                    fields.add(FieldConstants.USER_UUID);
118                    fields.add(FieldConstants.UUID);
119                    fields.add(FieldConstants.VERSION);
120            }
121    
122    }