001
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
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 DLFileEntryMetadata getFileEntryMetadata(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
110
111 dlFileEntryMetadataPersistence.remove(fileEntryMetadata);
112
113
114
115 StorageEngineUtil.deleteByClass(fileEntryMetadata.getDDMStorageId());
116
117
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 DLFileEntryMetadata fileEntryMetadata =
130 dlFileEntryMetadataPersistence.fetchByD_F(
131 ddmStructure.getStructureId(), fileVersionId);
132
133 if (fileEntryMetadata != null) {
134 StorageEngineUtil.update(
135 fileEntryMetadata.getDDMStorageId(), fields, serviceContext);
136 }
137 else {
138
139
140
141 long fileEntryMetadataId = counterLocalService.increment();
142
143 fileEntryMetadata = dlFileEntryMetadataPersistence.create(
144 fileEntryMetadataId);
145
146 long ddmStorageId = StorageEngineUtil.create(
147 companyId, ddmStructure.getStructureId(), fields,
148 serviceContext);
149
150 fileEntryMetadata.setDDMStorageId(ddmStorageId);
151
152 fileEntryMetadata.setDDMStructureId(ddmStructure.getStructureId());
153 fileEntryMetadata.setFileEntryTypeId(fileEntryTypeId);
154 fileEntryMetadata.setFileEntryId(fileEntryId);
155 fileEntryMetadata.setFileVersionId(fileVersionId);
156
157 dlFileEntryMetadataPersistence.update(fileEntryMetadata, false);
158
159
160
161 long classNameId = PortalUtil.getClassNameId(
162 DLFileEntryMetadata.class);
163
164 ddmStructureLinkLocalService.addStructureLink(
165 classNameId, fileEntryMetadata.getFileEntryMetadataId(),
166 ddmStructure.getStructureId(), serviceContext);
167 }
168
169 try {
170 String namespace = String.valueOf(ddmStructure.getStructureId());
171
172 for (String fieldName : ddmStructure.getFieldNames()) {
173 String fieldDataType = ddmStructure.getFieldDataType(fieldName);
174
175 if (fieldDataType.equals(FieldConstants.FILE_UPLOAD)) {
176 DDMUtil.uploadFieldFile(
177 fileEntryMetadata.getDDMStructureId(),
178 fileEntryMetadata.getDDMStorageId(), fileEntryMetadata,
179 fieldName, namespace, serviceContext);
180 }
181 }
182 }
183 catch (Exception e) {
184 }
185 }
186
187 }