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