001    /**
002     * Copyright (c) 2000-2011 Liferay, Inc. All rights reserved.
003     *
004     * The contents of this file are subject to the terms of the Liferay Enterprise
005     * Subscription License ("License"). You may not use this file except in
006     * compliance with the License. You can obtain a copy of the License by
007     * contacting Liferay, Inc. See the License for the specific language governing
008     * permissions and limitations under the License, including but not limited to
009     * distribution rights of the Software.
010     *
011     *
012     *
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.NoSuchFileEntryMetadataException;
022    import com.liferay.portlet.documentlibrary.model.DLFileEntryMetadata;
023    import com.liferay.portlet.documentlibrary.model.DLFileEntryType;
024    import com.liferay.portlet.documentlibrary.service.base.DLFileEntryMetadataLocalServiceBaseImpl;
025    import com.liferay.portlet.dynamicdatamapping.StorageException;
026    import com.liferay.portlet.dynamicdatamapping.model.DDMStructure;
027    import com.liferay.portlet.dynamicdatamapping.storage.Fields;
028    import com.liferay.portlet.dynamicdatamapping.storage.StorageEngineUtil;
029    
030    import java.util.List;
031    import java.util.Map;
032    
033    /**
034     * @author Alexander Chow
035     */
036    public class DLFileEntryMetadataLocalServiceImpl
037            extends DLFileEntryMetadataLocalServiceBaseImpl {
038    
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            public DLFileEntryMetadata getFileEntryMetadata(
051                            long fileEntryMetadataId)
052                    throws PortalException, SystemException {
053    
054                    return dlFileEntryMetadataPersistence.findByPrimaryKey(
055                            fileEntryMetadataId);
056            }
057    
058            public DLFileEntryMetadata getFileEntryMetadata(
059                            long ddmStructureId, long fileVersionId)
060                    throws PortalException, SystemException {
061    
062                    return dlFileEntryMetadataPersistence.findByD_F(
063                            ddmStructureId, fileVersionId);
064            }
065    
066            public long getFileEntryMetadataCount(long fileEntryId, long fileVersionId)
067                    throws SystemException {
068    
069                    return dlFileEntryMetadataPersistence.countByF_V(
070                            fileEntryId, fileVersionId);
071            }
072    
073            public void updateFileEntryMetadata(
074                            long companyId, List<DDMStructure> ddmStructures,
075                            long fileEntryTypeId, long fileEntryId, long fileVersionId,
076                            Map<String, Fields> fieldsMap, ServiceContext serviceContext)
077                    throws PortalException, SystemException {
078    
079                    for (DDMStructure ddmStructure : ddmStructures) {
080                            Fields fields = fieldsMap.get(ddmStructure.getStructureKey());
081    
082                            if (fields != null) {
083                                    updateFileEntryMetadata(
084                                            companyId, ddmStructure, fileEntryTypeId, fileEntryId,
085                                            fileVersionId, fields, serviceContext);
086                            }
087                    }
088            }
089    
090            public void updateFileEntryMetadata(
091                            long fileEntryTypeId, long fileEntryId, long fileVersionId,
092                            Map<String, Fields> fieldsMap, ServiceContext serviceContext)
093                    throws PortalException, SystemException {
094    
095                    DLFileEntryType fileEntryType =
096                            dlFileEntryTypeLocalService.getFileEntryType(fileEntryTypeId);
097    
098                    List<DDMStructure> ddmStructures = fileEntryType.getDDMStructures();
099    
100                    updateFileEntryMetadata(
101                            fileEntryType.getCompanyId(), ddmStructures, fileEntryTypeId,
102                            fileEntryId, fileVersionId, fieldsMap, serviceContext);
103            }
104    
105            protected void deleteFileEntryMetadata(
106                            DLFileEntryMetadata fileEntryMetadata)
107                    throws PortalException, SystemException {
108    
109                    // FileEntry metadata
110    
111                    dlFileEntryMetadataPersistence.remove(fileEntryMetadata);
112    
113                    // Dynamic data mapping storage
114    
115                    StorageEngineUtil.deleteByClass(fileEntryMetadata.getDDMStorageId());
116    
117                    // Dynamic data mapping structure link
118    
119                    ddmStructureLinkLocalService.deleteClassStructureLink(
120                            fileEntryMetadata.getFileEntryMetadataId());
121            }
122    
123            protected void updateFileEntryMetadata(
124                            long companyId, DDMStructure ddmStructure, long fileEntryTypeId,
125                            long fileEntryId, long fileVersionId, Fields fields,
126                            ServiceContext serviceContext)
127                    throws StorageException, SystemException {
128    
129                    try {
130                            DLFileEntryMetadata fileEntryMetadata =
131                                    dlFileEntryMetadataPersistence.findByD_F(
132                                            ddmStructure.getStructureId(), fileVersionId);
133    
134                            StorageEngineUtil.update(
135                                    fileEntryMetadata.getDDMStorageId(), fields, serviceContext);
136                    }
137                    catch (NoSuchFileEntryMetadataException nsdmse) {
138    
139                            // File entry metadata
140    
141                            long fileEntryMetadataId = counterLocalService.increment();
142    
143                            DLFileEntryMetadata fileEntryMetadata =
144                                    dlFileEntryMetadataPersistence.create(
145                                            fileEntryMetadataId);
146    
147                            long ddmStorageId = StorageEngineUtil.create(
148                                    companyId, ddmStructure.getStructureId(), fields,
149                                    serviceContext);
150    
151                            fileEntryMetadata.setDDMStorageId(ddmStorageId);
152    
153                            fileEntryMetadata.setDDMStructureId(
154                                    ddmStructure.getStructureId());
155                            fileEntryMetadata.setFileEntryTypeId(fileEntryTypeId);
156                            fileEntryMetadata.setFileEntryId(fileEntryId);
157                            fileEntryMetadata.setFileVersionId(fileVersionId);
158    
159                            dlFileEntryMetadataPersistence.update(
160                                    fileEntryMetadata, false);
161    
162                            // Dynamic data mapping structure link
163    
164                            long classNameId = PortalUtil.getClassNameId(
165                                    DLFileEntryMetadata.class);
166    
167                            ddmStructureLinkLocalService.addStructureLink(
168                                    classNameId, fileEntryMetadata.getFileEntryMetadataId(),
169                                    ddmStructure.getStructureId(), serviceContext);
170                    }
171            }
172    
173    }