001
014
015 package com.liferay.portal.service.impl;
016
017 import com.liferay.portal.exception.InvalidRepositoryException;
018 import com.liferay.portal.exception.NoSuchRepositoryException;
019 import com.liferay.portal.kernel.bean.BeanReference;
020 import com.liferay.portal.kernel.exception.PortalException;
021 import com.liferay.portal.kernel.log.Log;
022 import com.liferay.portal.kernel.log.LogFactoryUtil;
023 import com.liferay.portal.kernel.repository.InvalidRepositoryIdException;
024 import com.liferay.portal.kernel.repository.LocalRepository;
025 import com.liferay.portal.kernel.repository.RepositoryFactoryUtil;
026 import com.liferay.portal.kernel.repository.RepositoryProvider;
027 import com.liferay.portal.kernel.repository.capabilities.RepositoryEventTriggerCapability;
028 import com.liferay.portal.kernel.repository.event.RepositoryEventType;
029 import com.liferay.portal.kernel.systemevent.SystemEvent;
030 import com.liferay.portal.kernel.util.UnicodeProperties;
031 import com.liferay.portal.kernel.util.Validator;
032 import com.liferay.portal.model.Group;
033 import com.liferay.portal.model.Repository;
034 import com.liferay.portal.model.SystemEventConstants;
035 import com.liferay.portal.model.User;
036 import com.liferay.portal.service.ServiceContext;
037 import com.liferay.portal.service.base.RepositoryLocalServiceBaseImpl;
038 import com.liferay.portlet.documentlibrary.exception.RepositoryNameException;
039 import com.liferay.portlet.documentlibrary.model.DLFolder;
040
041 import java.util.List;
042
043
046 public class RepositoryLocalServiceImpl extends RepositoryLocalServiceBaseImpl {
047
048 @Override
049 public Repository addRepository(
050 long userId, long groupId, long classNameId, long parentFolderId,
051 String name, String description, String portletId,
052 UnicodeProperties typeSettingsProperties, boolean hidden,
053 ServiceContext serviceContext)
054 throws PortalException {
055
056 User user = userPersistence.findByPrimaryKey(userId);
057
058 long repositoryId = counterLocalService.increment();
059
060 Repository repository = repositoryPersistence.create(repositoryId);
061
062 repository.setUuid(serviceContext.getUuid());
063 repository.setGroupId(groupId);
064 repository.setCompanyId(user.getCompanyId());
065 repository.setUserId(user.getUserId());
066 repository.setUserName(user.getFullName());
067 repository.setClassNameId(classNameId);
068 repository.setName(name);
069 repository.setDescription(description);
070 repository.setPortletId(portletId);
071 repository.setTypeSettingsProperties(typeSettingsProperties);
072 repository.setDlFolderId(
073 getDLFolderId(
074 user, groupId, repositoryId, parentFolderId, name, description,
075 hidden, serviceContext));
076
077 repositoryPersistence.update(repository);
078
079 try {
080 RepositoryFactoryUtil.createRepository(repositoryId);
081 }
082 catch (Exception e) {
083 if (_log.isWarnEnabled()) {
084 _log.warn(e, e);
085 }
086
087 throw new InvalidRepositoryException(e);
088 }
089
090 return repository;
091 }
092
093 @Override
094 public void checkRepository(long repositoryId) {
095 Group group = groupPersistence.fetchByPrimaryKey(repositoryId);
096
097 if (group != null) {
098 return;
099 }
100
101 try {
102 repositoryPersistence.findByPrimaryKey(repositoryId);
103 }
104 catch (NoSuchRepositoryException nsre) {
105 throw new InvalidRepositoryIdException(nsre.getMessage());
106 }
107 }
108
109 @Override
110 public void deleteRepositories(long groupId) throws PortalException {
111 List<Repository> repositories = repositoryPersistence.findByGroupId(
112 groupId);
113
114 for (Repository repository : repositories) {
115 deleteRepository(repository.getRepositoryId());
116 }
117 }
118
119 @Override
120 public Repository deleteRepository(long repositoryId)
121 throws PortalException {
122
123 Repository repository = repositoryPersistence.fetchByPrimaryKey(
124 repositoryId);
125
126 if (repository == null) {
127 return null;
128 }
129
130 LocalRepository localRepository = repositoryProvider.getLocalRepository(
131 repositoryId);
132
133 if (localRepository.isCapabilityProvided(
134 RepositoryEventTriggerCapability.class)) {
135
136 RepositoryEventTriggerCapability repositoryEventTriggerCapability =
137 localRepository.getCapability(
138 RepositoryEventTriggerCapability.class);
139
140 repositoryEventTriggerCapability.trigger(
141 RepositoryEventType.Delete.class, LocalRepository.class,
142 localRepository);
143 }
144
145 return repositoryLocalService.deleteRepository(repository);
146 }
147
148 @Override
149 @SystemEvent(
150 action = SystemEventConstants.ACTION_SKIP,
151 type = SystemEventConstants.TYPE_DELETE
152 )
153 public Repository deleteRepository(Repository repository) {
154 expandoValueLocalService.deleteValues(
155 Repository.class.getName(), repository.getRepositoryId());
156
157 DLFolder dlFolder = dlFolderLocalService.fetchDLFolder(
158 repository.getDlFolderId());
159
160 if (dlFolder != null) {
161 dlFolderLocalService.deleteDLFolder(dlFolder);
162 }
163
164 repositoryPersistence.remove(repository);
165
166 repositoryEntryPersistence.removeByRepositoryId(
167 repository.getRepositoryId());
168
169 return repository;
170 }
171
172 @Override
173 public Repository fetchRepository(long groupId, String portletId) {
174 return fetchRepository(groupId, portletId, portletId);
175 }
176
177 @Override
178 public Repository fetchRepository(
179 long groupId, String name, String portletId) {
180
181 return repositoryPersistence.fetchByG_N_P(groupId, name, portletId);
182 }
183
184 @Override
185 public List<Repository> getGroupRepositories(long groupId) {
186 return repositoryPersistence.findByGroupId(groupId);
187 }
188
189 @Override
190 public Repository getRepository(long groupId, String portletId)
191 throws PortalException {
192
193 return getRepository(groupId, portletId, portletId);
194 }
195
196 @Override
197 public Repository getRepository(long groupId, String name, String portletId)
198 throws PortalException {
199
200 return repositoryPersistence.findByG_N_P(groupId, name, portletId);
201 }
202
203 @Override
204 public UnicodeProperties getTypeSettingsProperties(long repositoryId)
205 throws PortalException {
206
207 Repository repository = repositoryPersistence.findByPrimaryKey(
208 repositoryId);
209
210 return repository.getTypeSettingsProperties();
211 }
212
213 @Override
214 public void updateRepository(
215 long repositoryId, String name, String description)
216 throws PortalException {
217
218 Repository repository = repositoryPersistence.findByPrimaryKey(
219 repositoryId);
220
221 repository.setName(name);
222 repository.setDescription(description);
223
224 repositoryPersistence.update(repository);
225
226 DLFolder dlFolder = dlFolderPersistence.findByPrimaryKey(
227 repository.getDlFolderId());
228
229 dlFolder.setName(name);
230 dlFolder.setDescription(description);
231
232 dlFolderPersistence.update(dlFolder);
233 }
234
235 @Override
236 public void updateRepository(
237 long repositoryId, UnicodeProperties typeSettingsProperties)
238 throws PortalException {
239
240 Repository repository = repositoryPersistence.findByPrimaryKey(
241 repositoryId);
242
243 repository.setTypeSettingsProperties(typeSettingsProperties);
244
245 repositoryPersistence.update(repository);
246 }
247
248 protected long getDLFolderId(
249 User user, long groupId, long repositoryId, long parentFolderId,
250 String name, String description, boolean hidden,
251 ServiceContext serviceContext)
252 throws PortalException {
253
254 if (Validator.isNull(name)) {
255 throw new RepositoryNameException();
256 }
257
258 DLFolder dlFolder = dlFolderLocalService.addFolder(
259 user.getUserId(), groupId, repositoryId, true, parentFolderId, name,
260 description, hidden, serviceContext);
261
262 return dlFolder.getFolderId();
263 }
264
265 @BeanReference(type = RepositoryProvider.class)
266 protected RepositoryProvider repositoryProvider;
267
268 private static final Log _log = LogFactoryUtil.getLog(
269 RepositoryLocalServiceImpl.class);
270
271 }