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