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