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            /**
094             * @deprecated As of 6.2.0, replaced by {@link #addRepository(long, long,
095             *             long, long, String, String, String, UnicodeProperties,
096             *             boolean, ServiceContext)}
097             */
098            @Deprecated
099            @Override
100            public Repository addRepository(
101                            long userId, long groupId, long classNameId, long parentFolderId,
102                            String name, String description, String portletId,
103                            UnicodeProperties typeSettingsProperties,
104                            ServiceContext serviceContext)
105                    throws PortalException {
106    
107                    return addRepository(
108                            userId, groupId, classNameId, parentFolderId, name, description,
109                            portletId, typeSettingsProperties, false, serviceContext);
110            }
111    
112            @Override
113            public void checkRepository(long repositoryId) {
114                    Group group = groupPersistence.fetchByPrimaryKey(repositoryId);
115    
116                    if (group != null) {
117                            return;
118                    }
119    
120                    try {
121                            repositoryPersistence.findByPrimaryKey(repositoryId);
122                    }
123                    catch (NoSuchRepositoryException nsre) {
124                            throw new InvalidRepositoryIdException(nsre.getMessage());
125                    }
126            }
127    
128            @Override
129            public void deleteRepositories(long groupId) throws PortalException {
130                    List<Repository> repositories = repositoryPersistence.findByGroupId(
131                            groupId);
132    
133                    for (Repository repository : repositories) {
134                            deleteRepository(repository.getRepositoryId());
135                    }
136            }
137    
138            @Override
139            public Repository deleteRepository(long repositoryId)
140                    throws PortalException {
141    
142                    Repository repository = repositoryPersistence.fetchByPrimaryKey(
143                            repositoryId);
144    
145                    if (repository == null) {
146                            return null;
147                    }
148    
149                    LocalRepository localRepository = repositoryProvider.getLocalRepository(
150                            repositoryId);
151    
152                    if (localRepository.isCapabilityProvided(
153                                    RepositoryEventTriggerCapability.class)) {
154    
155                            RepositoryEventTriggerCapability repositoryEventTriggerCapability =
156                                    localRepository.getCapability(
157                                            RepositoryEventTriggerCapability.class);
158    
159                            repositoryEventTriggerCapability.trigger(
160                                    RepositoryEventType.Delete.class, LocalRepository.class,
161                                    localRepository);
162                    }
163    
164                    return repositoryLocalService.deleteRepository(repository);
165            }
166    
167            @Override
168            @SystemEvent(
169                    action = SystemEventConstants.ACTION_SKIP,
170                    type = SystemEventConstants.TYPE_DELETE
171            )
172            public Repository deleteRepository(Repository repository) {
173                    expandoValueLocalService.deleteValues(
174                            Repository.class.getName(), repository.getRepositoryId());
175    
176                    DLFolder dlFolder = dlFolderLocalService.fetchDLFolder(
177                            repository.getDlFolderId());
178    
179                    if (dlFolder != null) {
180                            dlFolderLocalService.deleteDLFolder(dlFolder);
181                    }
182    
183                    repositoryPersistence.remove(repository);
184    
185                    repositoryEntryPersistence.removeByRepositoryId(
186                            repository.getRepositoryId());
187    
188                    return repository;
189            }
190    
191            @Override
192            public Repository fetchRepository(long groupId, String portletId) {
193                    return fetchRepository(groupId, portletId, portletId);
194            }
195    
196            @Override
197            public Repository fetchRepository(
198                    long groupId, String name, String portletId) {
199    
200                    return repositoryPersistence.fetchByG_N_P(groupId, name, portletId);
201            }
202    
203            @Override
204            public List<Repository> getGroupRepositories(long groupId) {
205                    return repositoryPersistence.findByGroupId(groupId);
206            }
207    
208            @Override
209            public Repository getRepository(long groupId, String portletId)
210                    throws PortalException {
211    
212                    return getRepository(groupId, portletId, portletId);
213            }
214    
215            @Override
216            public Repository getRepository(long groupId, String name, String portletId)
217                    throws PortalException {
218    
219                    return repositoryPersistence.findByG_N_P(groupId, name, portletId);
220            }
221    
222            @Override
223            public UnicodeProperties getTypeSettingsProperties(long repositoryId)
224                    throws PortalException {
225    
226                    Repository repository = repositoryPersistence.findByPrimaryKey(
227                            repositoryId);
228    
229                    return repository.getTypeSettingsProperties();
230            }
231    
232            @Override
233            public void updateRepository(
234                            long repositoryId, String name, String description)
235                    throws PortalException {
236    
237                    Repository repository = repositoryPersistence.findByPrimaryKey(
238                            repositoryId);
239    
240                    repository.setName(name);
241                    repository.setDescription(description);
242    
243                    repositoryPersistence.update(repository);
244    
245                    DLFolder dlFolder = dlFolderPersistence.findByPrimaryKey(
246                            repository.getDlFolderId());
247    
248                    dlFolder.setName(name);
249                    dlFolder.setDescription(description);
250    
251                    dlFolderPersistence.update(dlFolder);
252            }
253    
254            @Override
255            public void updateRepository(
256                            long repositoryId, UnicodeProperties typeSettingsProperties)
257                    throws PortalException {
258    
259                    Repository repository = repositoryPersistence.findByPrimaryKey(
260                            repositoryId);
261    
262                    repository.setTypeSettingsProperties(typeSettingsProperties);
263    
264                    repositoryPersistence.update(repository);
265            }
266    
267            protected long getDLFolderId(
268                            User user, long groupId, long repositoryId, long parentFolderId,
269                            String name, String description, boolean hidden,
270                            ServiceContext serviceContext)
271                    throws PortalException {
272    
273                    if (Validator.isNull(name)) {
274                            throw new RepositoryNameException();
275                    }
276    
277                    DLFolder dlFolder = dlFolderLocalService.addFolder(
278                            user.getUserId(), groupId, repositoryId, true, parentFolderId, name,
279                            description, hidden, serviceContext);
280    
281                    return dlFolder.getFolderId();
282            }
283    
284            @BeanReference(type = RepositoryProvider.class)
285            protected RepositoryProvider repositoryProvider;
286    
287            private static final Log _log = LogFactoryUtil.getLog(
288                    RepositoryLocalServiceImpl.class);
289    
290    }