001    /**
002     * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
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    /**
044     * @author Alexander Chow
045     */
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    }