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.service.impl;
016    
017    import com.liferay.portal.kernel.exception.PortalException;
018    import com.liferay.portal.kernel.exception.SystemException;
019    import com.liferay.portal.service.ServiceContext;
020    import com.liferay.portal.util.PortalUtil;
021    import com.liferay.portlet.documentlibrary.model.DLFileEntryMetadata;
022    import com.liferay.portlet.documentlibrary.model.DLFileEntryType;
023    import com.liferay.portlet.documentlibrary.service.base.DLFileEntryMetadataLocalServiceBaseImpl;
024    import com.liferay.portlet.dynamicdatamapping.StorageException;
025    import com.liferay.portlet.dynamicdatamapping.model.DDMStructure;
026    import com.liferay.portlet.dynamicdatamapping.storage.Fields;
027    import com.liferay.portlet.dynamicdatamapping.storage.StorageEngineUtil;
028    
029    import java.util.List;
030    import java.util.Map;
031    
032    /**
033     * @author Alexander Chow
034     */
035    public class DLFileEntryMetadataLocalServiceImpl
036            extends DLFileEntryMetadataLocalServiceBaseImpl {
037    
038            @Override
039            public void deleteFileEntryMetadata(long fileEntryId)
040                    throws PortalException, SystemException {
041    
042                    List<DLFileEntryMetadata> fileEntryMetadatas =
043                            dlFileEntryMetadataPersistence.findByFileEntryId(fileEntryId);
044    
045                    for (DLFileEntryMetadata fileEntryMetadata : fileEntryMetadatas) {
046                            deleteFileEntryMetadata(fileEntryMetadata);
047                    }
048            }
049    
050            @Override
051            public void deleteFileVersionFileEntryMetadata(long fileVersionId)
052                    throws PortalException, SystemException {
053    
054                    List<DLFileEntryMetadata> fileEntryMetadatas =
055                            dlFileEntryMetadataPersistence.findByFileVersionId(fileVersionId);
056    
057                    for (DLFileEntryMetadata fileEntryMetadata : fileEntryMetadatas) {
058                            deleteFileEntryMetadata(fileEntryMetadata);
059                    }
060            }
061    
062            @Override
063            public DLFileEntryMetadata fetchFileEntryMetadata(long fileEntryMetadataId)
064                    throws SystemException {
065    
066                    return dlFileEntryMetadataPersistence.fetchByPrimaryKey(
067                            fileEntryMetadataId);
068            }
069    
070            @Override
071            public DLFileEntryMetadata fetchFileEntryMetadata(
072                            long ddmStructureId, long fileVersionId)
073                    throws SystemException {
074    
075                    return dlFileEntryMetadataPersistence.fetchByD_F(
076                            ddmStructureId, fileVersionId);
077            }
078    
079            @Override
080            public DLFileEntryMetadata getFileEntryMetadata(long fileEntryMetadataId)
081                    throws PortalException, SystemException {
082    
083                    return dlFileEntryMetadataPersistence.findByPrimaryKey(
084                            fileEntryMetadataId);
085            }
086    
087            @Override
088            public DLFileEntryMetadata getFileEntryMetadata(
089                            long ddmStructureId, long fileVersionId)
090                    throws PortalException, SystemException {
091    
092                    return dlFileEntryMetadataPersistence.findByD_F(
093                            ddmStructureId, fileVersionId);
094            }
095    
096            /**
097             * @deprecated As of 6.2.0, replaced by {@link
098             *             #getFileVersionFileEntryMetadatasCount(long)}
099             */
100            @Override
101            public long getFileEntryMetadataCount(long fileEntryId, long fileVersionId)
102                    throws SystemException {
103    
104                    return getFileVersionFileEntryMetadatasCount(fileVersionId);
105            }
106    
107            @Override
108            public List<DLFileEntryMetadata> getFileVersionFileEntryMetadatas(
109                            long fileVersionId)
110                    throws SystemException {
111    
112                    return dlFileEntryMetadataPersistence.findByFileVersionId(
113                            fileVersionId);
114            }
115    
116            @Override
117            public long getFileVersionFileEntryMetadatasCount(long fileVersionId)
118                    throws SystemException {
119    
120                    return dlFileEntryMetadataPersistence.countByFileVersionId(
121                            fileVersionId);
122            }
123    
124            @Override
125            public void updateFileEntryMetadata(
126                            long companyId, List<DDMStructure> ddmStructures,
127                            long fileEntryTypeId, long fileEntryId, long fileVersionId,
128                            Map<String, Fields> fieldsMap, ServiceContext serviceContext)
129                    throws PortalException, SystemException {
130    
131                    for (DDMStructure ddmStructure : ddmStructures) {
132                            Fields fields = fieldsMap.get(ddmStructure.getStructureKey());
133    
134                            if (fields != null) {
135                                    updateFileEntryMetadata(
136                                            companyId, ddmStructure, fileEntryTypeId, fileEntryId,
137                                            fileVersionId, fields, serviceContext);
138                            }
139                    }
140            }
141    
142            @Override
143            public void updateFileEntryMetadata(
144                            long fileEntryTypeId, long fileEntryId, long fileVersionId,
145                            Map<String, Fields> fieldsMap, ServiceContext serviceContext)
146                    throws PortalException, SystemException {
147    
148                    DLFileEntryType fileEntryType =
149                            dlFileEntryTypeLocalService.getFileEntryType(fileEntryTypeId);
150    
151                    List<DDMStructure> ddmStructures = fileEntryType.getDDMStructures();
152    
153                    updateFileEntryMetadata(
154                            fileEntryType.getCompanyId(), ddmStructures, fileEntryTypeId,
155                            fileEntryId, fileVersionId, fieldsMap, serviceContext);
156            }
157    
158            protected void deleteFileEntryMetadata(
159                            DLFileEntryMetadata fileEntryMetadata)
160                    throws PortalException, SystemException {
161    
162                    // FileEntry metadata
163    
164                    dlFileEntryMetadataPersistence.remove(fileEntryMetadata);
165    
166                    // Dynamic data mapping storage
167    
168                    StorageEngineUtil.deleteByClass(fileEntryMetadata.getDDMStorageId());
169    
170                    // Dynamic data mapping structure link
171    
172                    ddmStructureLinkLocalService.deleteClassStructureLink(
173                            fileEntryMetadata.getFileEntryMetadataId());
174            }
175    
176            protected void updateFileEntryMetadata(
177                            long companyId, DDMStructure ddmStructure, long fileEntryTypeId,
178                            long fileEntryId, long fileVersionId, Fields fields,
179                            ServiceContext serviceContext)
180                    throws StorageException, SystemException {
181    
182                    DLFileEntryMetadata fileEntryMetadata =
183                            dlFileEntryMetadataPersistence.fetchByD_F(
184                                    ddmStructure.getStructureId(), fileVersionId);
185    
186                    if (fileEntryMetadata != null) {
187                            StorageEngineUtil.update(
188                                    fileEntryMetadata.getDDMStorageId(), fields, true,
189                                    serviceContext);
190                    }
191                    else {
192    
193                            // File entry metadata
194    
195                            long fileEntryMetadataId = counterLocalService.increment();
196    
197                            fileEntryMetadata = dlFileEntryMetadataPersistence.create(
198                                    fileEntryMetadataId);
199    
200                            long ddmStorageId = StorageEngineUtil.create(
201                                    companyId, ddmStructure.getStructureId(), fields,
202                                    serviceContext);
203    
204                            fileEntryMetadata.setDDMStorageId(ddmStorageId);
205    
206                            fileEntryMetadata.setDDMStructureId(ddmStructure.getStructureId());
207                            fileEntryMetadata.setFileEntryTypeId(fileEntryTypeId);
208                            fileEntryMetadata.setFileEntryId(fileEntryId);
209                            fileEntryMetadata.setFileVersionId(fileVersionId);
210    
211                            dlFileEntryMetadataPersistence.update(fileEntryMetadata);
212    
213                            // Dynamic data mapping structure link
214    
215                            long classNameId = PortalUtil.getClassNameId(
216                                    DLFileEntryMetadata.class);
217    
218                            ddmStructureLinkLocalService.addStructureLink(
219                                    classNameId, fileEntryMetadata.getFileEntryMetadataId(),
220                                    ddmStructure.getStructureId(), serviceContext);
221                    }
222            }
223    
224    }