/******************************************************************************* * Copyright (c) 2013 aegif. * * This file is part of NemakiWare. * * NemakiWare is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * NemakiWare is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along with NemakiWare. * If not, see <http://www.gnu.org/licenses/>. * * Contributors: * linzhixing(https://github.com/linzhixing) - initial API and implementation ******************************************************************************/ package jp.aegif.nemaki.cmis.service.impl; import java.math.BigInteger; import java.util.List; import jp.aegif.nemaki.businesslogic.ContentService; import jp.aegif.nemaki.cmis.aspect.CompileService; import jp.aegif.nemaki.cmis.aspect.ExceptionService; import jp.aegif.nemaki.cmis.aspect.query.QueryProcessor; import jp.aegif.nemaki.cmis.service.DiscoveryService; import jp.aegif.nemaki.model.Change; import org.apache.chemistry.opencmis.commons.data.ExtensionsData; import org.apache.chemistry.opencmis.commons.data.ObjectList; import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships; import org.apache.chemistry.opencmis.commons.server.CallContext; import org.apache.chemistry.opencmis.commons.spi.Holder; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang.StringUtils; /** * Discovery Service implementation for CouchDB. * */ public class DiscoveryServiceImpl implements DiscoveryService { private QueryProcessor queryProcessor; private ContentService contentService; private ExceptionService exceptionService; private CompileService compileService; public ObjectList query(CallContext context, String repositoryId, String statement, Boolean searchAllVersions, Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter, BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) { // ////////////////// // General Exception // ////////////////// exceptionService.invalidArgumentRequiredString("statement", statement); // ////////////////// // Specific Exception // ////////////////// // TODO implement // ////////////////// // Body of the method return queryProcessor.query(context, repositoryId, statement, searchAllVersions, includeAllowableActions, includeRelationships, renditionFilter, maxItems, skipCount); } /** * Return ChangeLog just for Documents & Folder type, and Not for their * attachments TODO includeAcl,includePolicyIds is not valid */ public ObjectList getContentChanges(CallContext context, String repositoryId, Holder<String> changeLogToken, Boolean includeProperties, String filter, Boolean includePolicyIds, Boolean includeAcl, BigInteger maxItems, ExtensionsData extension) { // ////////////////// // General Exception // ////////////////// // NONE // ////////////////// // Specific Exception // ////////////////// if (changeLogToken == null || changeLogToken == null && StringUtils.isBlank(changeLogToken.getValue())) { // If changelogToken is not specified, return the first in the // repository exceptionService .invalidArgumentChangeEventNotAvailable(repositoryId, changeLogToken); } // ////////////////// // Body of the method // ////////////////// List<Change> changes = contentService.getLatestChanges(repositoryId, context, changeLogToken, includeProperties, filter, includePolicyIds, includeAcl, maxItems, extension); if (!CollectionUtils.isEmpty(changes)) { Change latestInResults = changes.get(changes.size() - 1); changeLogToken.setValue(latestInResults.getId()); } return compileService.compileChangeDataList(context, repositoryId, changes, changeLogToken, includeProperties, filter, includePolicyIds, includeAcl); } public void setQueryProcessor(QueryProcessor queryProcessor) { this.queryProcessor = queryProcessor; } public void setContentService(ContentService contentService) { this.contentService = contentService; } public void setExceptionService(ExceptionService exceptionService) { this.exceptionService = exceptionService; } public void setCompileService(CompileService compileService) { this.compileService = compileService; } }