001
014
015 package com.liferay.portal.repository.capabilities;
016
017 import com.liferay.portal.kernel.dao.orm.ActionableDynamicQuery;
018 import com.liferay.portal.kernel.dao.orm.DynamicQuery;
019 import com.liferay.portal.kernel.dao.orm.RestrictionsFactoryUtil;
020 import com.liferay.portal.kernel.exception.PortalException;
021 import com.liferay.portal.kernel.repository.DocumentRepository;
022 import com.liferay.portal.kernel.repository.capabilities.BulkOperationCapability;
023 import com.liferay.portal.kernel.repository.model.FileEntry;
024 import com.liferay.portal.kernel.repository.model.Folder;
025 import com.liferay.portal.kernel.repository.model.RepositoryModelOperation;
026 import com.liferay.portal.repository.capabilities.util.DLFileEntryServiceAdapter;
027 import com.liferay.portal.repository.capabilities.util.DLFolderServiceAdapter;
028 import com.liferay.portal.repository.liferayrepository.model.LiferayFileEntry;
029 import com.liferay.portal.repository.liferayrepository.model.LiferayFolder;
030 import com.liferay.portlet.documentlibrary.model.DLFileEntry;
031 import com.liferay.portlet.documentlibrary.model.DLFolder;
032
033 import java.util.HashMap;
034 import java.util.Map;
035
036
039 public class LiferayBulkOperationCapability implements BulkOperationCapability {
040
041 public LiferayBulkOperationCapability(
042 DocumentRepository documentRepository,
043 DLFileEntryServiceAdapter dlFileEntryServiceAdapter,
044 DLFolderServiceAdapter dlFolderServiceAdapter) {
045
046 _documentRepository = documentRepository;
047 _dlFileEntryServiceAdapter = dlFileEntryServiceAdapter;
048 _dlFolderServiceAdapter = dlFolderServiceAdapter;
049 }
050
051 @Override
052 public void execute(
053 BulkOperationCapability.Filter<?> filter,
054 RepositoryModelOperation repositoryModelOperation)
055 throws PortalException {
056
057 executeOnAllFileEntries(filter, repositoryModelOperation);
058 executeOnAllFolders(filter, repositoryModelOperation);
059 }
060
061 @Override
062 public void execute(RepositoryModelOperation repositoryModelOperation)
063 throws PortalException {
064
065 execute(null, repositoryModelOperation);
066 }
067
068 protected void executeOnAllFileEntries(
069 Filter<?> filter, RepositoryModelOperation repositoryModelOperation)
070 throws PortalException {
071
072 ActionableDynamicQuery actionableDynamicQuery =
073 _dlFileEntryServiceAdapter.getActionableDynamicQuery();
074
075 actionableDynamicQuery.setAddCriteriaMethod(
076 new RepositoryModelAddCriteriaMethod(filter));
077 actionableDynamicQuery.setPerformActionMethod(
078 new FileEntryPerformActionMethod(repositoryModelOperation));
079
080 actionableDynamicQuery.performActions();
081 }
082
083 protected void executeOnAllFolders(
084 Filter<?> filter, RepositoryModelOperation repositoryModelOperation)
085 throws PortalException {
086
087 ActionableDynamicQuery actionableDynamicQuery =
088 _dlFolderServiceAdapter.getActionableDynamicQuery();
089
090 actionableDynamicQuery.setAddCriteriaMethod(
091 new RepositoryModelAddCriteriaMethod(filter));
092 actionableDynamicQuery.setPerformActionMethod(
093 new FolderPerformActionMethod(repositoryModelOperation));
094
095 actionableDynamicQuery.performActions();
096 }
097
098 private static final Map<Class<? extends Field<?>>, String> _fieldNames =
099 new HashMap<>();
100
101 static {
102 _fieldNames.put(Field.CreateDate.class, "createDate");
103 }
104
105 private final DLFileEntryServiceAdapter _dlFileEntryServiceAdapter;
106 private final DLFolderServiceAdapter _dlFolderServiceAdapter;
107 private final DocumentRepository _documentRepository;
108
109 private static class FileEntryPerformActionMethod
110 implements ActionableDynamicQuery.PerformActionMethod<DLFileEntry> {
111
112 public FileEntryPerformActionMethod(
113 RepositoryModelOperation repositoryModelOperation) {
114
115 _repositoryModelOperation = repositoryModelOperation;
116 }
117
118 @Override
119 public void performAction(DLFileEntry dlFileEntry)
120 throws PortalException {
121
122 FileEntry fileEntry = new LiferayFileEntry(dlFileEntry);
123
124 fileEntry.execute(_repositoryModelOperation);
125 }
126
127 private RepositoryModelOperation _repositoryModelOperation;
128
129 }
130
131 private static class FolderPerformActionMethod
132 implements ActionableDynamicQuery.PerformActionMethod<DLFolder> {
133
134 public FolderPerformActionMethod(
135 RepositoryModelOperation repositoryModelOperation) {
136
137 _repositoryModelOperation = repositoryModelOperation;
138 }
139
140 @Override
141 public void performAction(DLFolder dlFolder) throws PortalException {
142 if (dlFolder.isMountPoint()) {
143 return;
144 }
145
146 Folder folder = new LiferayFolder(dlFolder);
147
148 folder.execute(_repositoryModelOperation);
149 }
150
151 private final RepositoryModelOperation _repositoryModelOperation;
152
153 }
154
155 private class RepositoryModelAddCriteriaMethod
156 implements ActionableDynamicQuery.AddCriteriaMethod {
157
158 public RepositoryModelAddCriteriaMethod(Filter<?> filter) {
159 _filter = filter;
160 }
161
162 @Override
163 public void addCriteria(DynamicQuery dynamicQuery) {
164 dynamicQuery.add(
165 RestrictionsFactoryUtil.eq(
166 "repositoryId", _documentRepository.getRepositoryId()));
167
168 if (_filter != null) {
169 addFilterCriteria(dynamicQuery);
170 }
171 }
172
173 protected void addFilterCriteria(DynamicQuery dynamicQuery) {
174 Class<? extends Field<?>> field = _filter.getField();
175
176 String fieldName = _fieldNames.get(field);
177
178 if (fieldName == null) {
179 throw new UnsupportedOperationException(
180 "Unsupported field " + field.getName());
181 }
182
183 Operator operator = _filter.getOperator();
184
185 Object value = _filter.getValue();
186
187 if (operator == Operator.EQ) {
188 dynamicQuery.add(RestrictionsFactoryUtil.eq(fieldName, value));
189 }
190 else if (operator == Operator.LE) {
191 dynamicQuery.add(RestrictionsFactoryUtil.le(fieldName, value));
192 }
193 else if (operator == Operator.LT) {
194 dynamicQuery.add(RestrictionsFactoryUtil.lt(fieldName, value));
195 }
196 else if (operator == Operator.GE) {
197 dynamicQuery.add(RestrictionsFactoryUtil.ge(fieldName, value));
198 }
199 else if (operator == Operator.GT) {
200 dynamicQuery.add(RestrictionsFactoryUtil.gt(fieldName, value));
201 }
202 }
203
204 private final Filter<?> _filter;
205
206 }
207
208 }