diff --git a/config/alfresco/core-services-context.xml b/config/alfresco/core-services-context.xml index 747afa79de..df3ecd83be 100644 --- a/config/alfresco/core-services-context.xml +++ b/config/alfresco/core-services-context.xml @@ -1070,6 +1070,24 @@ + + + + false + + + Search + + + noindex + + + + managed + noindex + + + diff --git a/config/alfresco/subsystems/Search/noindex/cmis-api-context.xml b/config/alfresco/subsystems/Search/noindex/cmis-api-context.xml new file mode 100644 index 0000000000..5242455356 --- /dev/null +++ b/config/alfresco/subsystems/Search/noindex/cmis-api-context.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/config/alfresco/subsystems/Search/noindex/common-search.properties b/config/alfresco/subsystems/Search/noindex/common-search.properties new file mode 100644 index 0000000000..00be4a560b --- /dev/null +++ b/config/alfresco/subsystems/Search/noindex/common-search.properties @@ -0,0 +1,2 @@ +search.solrTrackingSupport.enabled=true + diff --git a/config/alfresco/subsystems/Search/noindex/noindex-search-context.xml b/config/alfresco/subsystems/Search/noindex/noindex-search-context.xml new file mode 100644 index 0000000000..66c173e884 --- /dev/null +++ b/config/alfresco/subsystems/Search/noindex/noindex-search-context.xml @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + org.alfresco.repo.search.IndexerAndSearcher + + + + + + + + + + + + + + + + + + + + + + org.alfresco.service.cmr.search.CategoryService + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/config/alfresco/subsystems/Search/noindex/noindex-search.properties b/config/alfresco/subsystems/Search/noindex/noindex-search.properties new file mode 100644 index 0000000000..e69de29bb2 diff --git a/config/alfresco/subsystems/Search/noindex/opencmis-context.xml b/config/alfresco/subsystems/Search/noindex/opencmis-context.xml new file mode 100644 index 0000000000..2cce15b27a --- /dev/null +++ b/config/alfresco/subsystems/Search/noindex/opencmis-context.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/source/java/org/alfresco/repo/search/impl/noindex/NoIndexCMISQueryServiceImpl.java b/source/java/org/alfresco/repo/search/impl/noindex/NoIndexCMISQueryServiceImpl.java new file mode 100644 index 0000000000..bbd249e0bc --- /dev/null +++ b/source/java/org/alfresco/repo/search/impl/noindex/NoIndexCMISQueryServiceImpl.java @@ -0,0 +1,168 @@ +/* + * Copyright (C) 2005-2010 Alfresco Software Limited. + * + * This file is part of Alfresco + * + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Alfresco 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + */ +package org.alfresco.repo.search.impl.noindex; + +import java.util.HashMap; +import java.util.Map; +import java.util.Set; + +import org.alfresco.cmis.CMISDictionaryService; +import org.alfresco.cmis.CMISJoinEnum; +import org.alfresco.cmis.CMISQueryEnum; +import org.alfresco.cmis.CMISQueryOptions; +import org.alfresco.cmis.CMISQueryService; +import org.alfresco.cmis.CMISResultSet; +import org.alfresco.cmis.CMISScope; +import org.alfresco.cmis.CMISServices; +import org.alfresco.cmis.CMISQueryOptions.CMISQueryMode; +import org.alfresco.cmis.search.CMISQueryParser; +import org.alfresco.cmis.search.CMISResultSetImpl; +import org.alfresco.cmis.search.CmisFunctionEvaluationContext; +import org.alfresco.repo.search.EmptyResultSet; +import org.alfresco.repo.search.impl.querymodel.Query; +import org.alfresco.repo.search.impl.querymodel.QueryEngineResults; +import org.alfresco.repo.search.impl.querymodel.impl.lucene.LuceneQueryModelFactory; +import org.alfresco.service.cmr.dictionary.DictionaryService; +import org.alfresco.service.cmr.repository.NodeService; +import org.alfresco.service.cmr.search.LimitBy; +import org.alfresco.service.cmr.search.ResultSet; +import org.alfresco.service.cmr.search.SearchParameters; + +/** + * @author Andy + * + */ +public class NoIndexCMISQueryServiceImpl implements CMISQueryService +{ + private CMISServices cmisService; + + private CMISDictionaryService cmisDictionaryService; + + private NodeService nodeService; + + private DictionaryService alfrescoDictionaryService; + + public void setCmisService(CMISServices cmisService) + { + this.cmisService = cmisService; + } + + public void setCmisDictionaryService(CMISDictionaryService cmisDictionaryService) + { + this.cmisDictionaryService = cmisDictionaryService; + } + + public void setNodeService(NodeService nodeService) + { + this.nodeService = nodeService; + } + + public void setAlfrescoDictionaryService(DictionaryService alfrescoDictionaryService) + { + this.alfrescoDictionaryService = alfrescoDictionaryService; + } + + /* (non-Javadoc) + * @see org.alfresco.cmis.CMISQueryService#query(org.alfresco.cmis.CMISQueryOptions) + */ + @Override + public CMISResultSet query(CMISQueryOptions options) + { + ResultSet rs = new EmptyResultSet(); + + CMISJoinEnum joinSupport = getJoinSupport(); + if(options.getQueryMode() == CMISQueryOptions.CMISQueryMode.CMS_WITH_ALFRESCO_EXTENSIONS) + { + joinSupport = CMISJoinEnum.INNER_JOIN_SUPPORT; + } + + // TODO: Refactor to avoid duplication of valid scopes here and in CMISQueryParser + + CMISScope[] validScopes = (options.getQueryMode() == CMISQueryMode.CMS_STRICT) ? CmisFunctionEvaluationContext.STRICT_SCOPES : CmisFunctionEvaluationContext.ALFRESCO_SCOPES; + CmisFunctionEvaluationContext functionContext = new CmisFunctionEvaluationContext(); + functionContext.setCmisDictionaryService(cmisDictionaryService); + functionContext.setNodeService(nodeService); + functionContext.setValidScopes(validScopes); + + CMISQueryParser parser = new CMISQueryParser(options, cmisDictionaryService, joinSupport); + Query query = parser.parse(new LuceneQueryModelFactory(), functionContext); + + Map wrapped = new HashMap(); + for (Set group : query.getSource().getSelectorGroups(functionContext)) + { + for (String selector : group) + { + wrapped.put(selector, rs); + } + } + LimitBy limitBy = null; + limitBy = rs.getResultSetMetaData().getLimitedBy(); + + CMISResultSet cmis = new CMISResultSetImpl(wrapped, options, limitBy, nodeService, query, cmisDictionaryService, alfrescoDictionaryService); + return cmis; + } + + /* (non-Javadoc) + * @see org.alfresco.cmis.CMISQueryService#query(java.lang.String) + */ + @Override + public CMISResultSet query(String query) + { + CMISQueryOptions options = new CMISQueryOptions(query, cmisService.getDefaultRootStoreRef()); + return query(options); + } + + /* (non-Javadoc) + * @see org.alfresco.cmis.CMISQueryService#getQuerySupport() + */ + @Override + public CMISQueryEnum getQuerySupport() + { + return CMISQueryEnum.BOTH_COMBINED; + } + + /* (non-Javadoc) + * @see org.alfresco.cmis.CMISQueryService#getJoinSupport() + */ + @Override + public CMISJoinEnum getJoinSupport() + { + return CMISJoinEnum.NO_JOIN_SUPPORT; + } + + /* (non-Javadoc) + * @see org.alfresco.cmis.CMISQueryService#getPwcSearchable() + */ + @Override + public boolean getPwcSearchable() + { + return true; + } + + /* (non-Javadoc) + * @see org.alfresco.cmis.CMISQueryService#getAllVersionsSearchable() + */ + @Override + public boolean getAllVersionsSearchable() + { + return false; + } + + +} diff --git a/source/java/org/alfresco/repo/search/impl/noindex/NoIndexCategoryServiceImpl.java b/source/java/org/alfresco/repo/search/impl/noindex/NoIndexCategoryServiceImpl.java new file mode 100644 index 0000000000..a0f25d3f54 --- /dev/null +++ b/source/java/org/alfresco/repo/search/impl/noindex/NoIndexCategoryServiceImpl.java @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2005-2010 Alfresco Software Limited. + * + * This file is part of Alfresco + * + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Alfresco 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + */ +package org.alfresco.repo.search.impl.noindex; + +import java.util.Collections; +import java.util.List; + +import org.alfresco.repo.search.impl.lucene.LuceneCategoryServiceImpl; +import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.cmr.repository.StoreRef; +import org.alfresco.service.namespace.QName; +import org.alfresco.util.Pair; + +/** + * @author Andy + * + */ +public class NoIndexCategoryServiceImpl extends LuceneCategoryServiceImpl +{ + + @Override + public List> getTopCategories(StoreRef storeRef, QName aspectName, int count) + { + return Collections.>emptyList(); + } + +} diff --git a/source/java/org/alfresco/repo/search/impl/noindex/NoIndexIndexRecovery.java b/source/java/org/alfresco/repo/search/impl/noindex/NoIndexIndexRecovery.java new file mode 100644 index 0000000000..984c08f8a8 --- /dev/null +++ b/source/java/org/alfresco/repo/search/impl/noindex/NoIndexIndexRecovery.java @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2005-2010 Alfresco Software Limited. + * + * This file is part of Alfresco + * + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Alfresco 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + */ +package org.alfresco.repo.search.impl.noindex; + +import org.alfresco.repo.node.index.IndexRecovery; + +/** + * @author Andy + * + */ +public class NoIndexIndexRecovery implements IndexRecovery +{ + + /* (non-Javadoc) + * @see org.alfresco.repo.node.index.IndexRecovery#reindex() + */ + @Override + public void reindex() + { + // Nothing to do at the moment + // Should send check and recovery commands etc when we support them .... + } + +} diff --git a/source/java/org/alfresco/repo/search/impl/noindex/NoIndexIndexer.java b/source/java/org/alfresco/repo/search/impl/noindex/NoIndexIndexer.java new file mode 100644 index 0000000000..078f8305b7 --- /dev/null +++ b/source/java/org/alfresco/repo/search/impl/noindex/NoIndexIndexer.java @@ -0,0 +1,153 @@ +/* + * Copyright (C) 2005-2010 Alfresco Software Limited. + * + * This file is part of Alfresco + * + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Alfresco 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + */ +package org.alfresco.repo.search.impl.noindex; + +import org.alfresco.error.StackTraceUtil; +import org.alfresco.repo.search.Indexer; +import org.alfresco.service.cmr.repository.ChildAssociationRef; +import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.cmr.repository.StoreRef; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * A no action indexer - the indexing is done automatically along with + * persistence + * + * TODO: Rename to Adaptor? + * + * @author andyh + * + */ +public class NoIndexIndexer implements Indexer +{ + + private static Log s_logger = LogFactory.getLog(NoIndexIndexer.class); + + + public void setReadThrough(boolean isReadThrough) + { + if(s_logger.isDebugEnabled()) + { + s_logger.debug("setReadThrough = "+isReadThrough); + } + trace(); + return; + } + + private void trace() + { + if(s_logger.isTraceEnabled()) + { + Exception e = new Exception(); + e.fillInStackTrace(); + + StringBuilder sb = new StringBuilder(1024); + StackTraceUtil.buildStackTrace( + "Index trace ...", + e.getStackTrace(), + sb, + -1); + s_logger.trace(sb); + } + } + + public void createNode(ChildAssociationRef relationshipRef) + { + if(s_logger.isDebugEnabled()) + { + s_logger.debug("createNode = "+relationshipRef); + } + trace(); + return; + } + + public void updateNode(NodeRef nodeRef) + { + if(s_logger.isDebugEnabled()) + { + s_logger.debug("updateNode = "+nodeRef); + } + trace(); + return; + } + + public void deleteNode(ChildAssociationRef relationshipRef) + { + if(s_logger.isDebugEnabled()) + { + s_logger.debug("deleteNode = "+relationshipRef); + } + trace(); + return; + } + + public void createChildRelationship(ChildAssociationRef relationshipRef) + { + if(s_logger.isDebugEnabled()) + { + s_logger.debug("createChildRelationship = "+relationshipRef); + } + trace(); + return; + } + + public void updateChildRelationship(ChildAssociationRef relationshipBeforeRef, ChildAssociationRef relationshipAfterRef) + { + if(s_logger.isDebugEnabled()) + { + s_logger.debug("updateChildRelationship = "+relationshipBeforeRef+ " -> "+relationshipAfterRef); + } + trace(); + return; + } + + public void deleteChildRelationship(ChildAssociationRef relationshipRef) + { + if(s_logger.isDebugEnabled()) + { + s_logger.debug("deleteChildRelationship = "+relationshipRef); + } + trace(); + return; + } + + /* (non-Javadoc) + * @see org.alfresco.repo.search.Indexer#deleteIndex(org.alfresco.service.cmr.repository.StoreRef) + */ + public void deleteIndex(StoreRef storeRef) + { + if(s_logger.isDebugEnabled()) + { + s_logger.debug("deleteIndex = "+storeRef); + } + trace(); + return; + } + + public void flushPending() + { + if(s_logger.isDebugEnabled()) + { + s_logger.debug("flushPending"); + } + trace(); + return; + } +} diff --git a/source/java/org/alfresco/repo/search/impl/noindex/NoIndexIndexerAndSearcherFactory.java b/source/java/org/alfresco/repo/search/impl/noindex/NoIndexIndexerAndSearcherFactory.java new file mode 100644 index 0000000000..1aa04e12ee --- /dev/null +++ b/source/java/org/alfresco/repo/search/impl/noindex/NoIndexIndexerAndSearcherFactory.java @@ -0,0 +1,94 @@ +/* + * Copyright (C) 2005-2010 Alfresco Software Limited. + * + * This file is part of Alfresco + * + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Alfresco 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + */ +package org.alfresco.repo.search.impl.noindex; + +import org.alfresco.repo.search.Indexer; +import org.alfresco.repo.search.IndexerException; +import org.alfresco.repo.search.SearcherException; +import org.alfresco.repo.search.impl.lucene.AbstractIndexerAndSearcher; +import org.alfresco.service.cmr.dictionary.DictionaryService; +import org.alfresco.service.cmr.repository.NodeService; +import org.alfresco.service.cmr.repository.StoreRef; +import org.alfresco.service.cmr.search.SearchService; + +/** + * @author Andy + * + */ +public class NoIndexIndexerAndSearcherFactory extends AbstractIndexerAndSearcher +{ + + private DictionaryService dictionaryService; + private NodeService nodeService; + + public DictionaryService getDictionaryService() + { + return dictionaryService; + } + + public void setDictionaryService(DictionaryService dictionaryService) + { + this.dictionaryService = dictionaryService; + } + + + public NodeService getNodeService() + { + return nodeService; + } + + public void setNodeService(NodeService nodeService) + { + this.nodeService = nodeService; + } + + /* (non-Javadoc) + * @see org.alfresco.repo.search.IndexerAndSearcher#getIndexer(org.alfresco.service.cmr.repository.StoreRef) + */ + @Override + public Indexer getIndexer(StoreRef storeRef) throws IndexerException + { + NoIndexIndexer indexer = new NoIndexIndexer(); + return indexer; + } + + /* (non-Javadoc) + * @see org.alfresco.repo.search.IndexerAndSearcher#getSearcher(org.alfresco.service.cmr.repository.StoreRef, boolean) + */ + @Override + public SearchService getSearcher(StoreRef storeRef, boolean searchDelta) throws SearcherException + { + //storeRef = tenantService.getName(storeRef); + + NoIndexSearchService searchService = new NoIndexSearchService(); + searchService.setDictionaryService(dictionaryService); + searchService.setNodeService(nodeService); + return searchService; + } + + /* (non-Javadoc) + * @see org.alfresco.repo.search.IndexerAndSearcher#flush() + */ + @Override + public void flush() + { + // Nothing to do + } + +} diff --git a/source/java/org/alfresco/repo/search/impl/noindex/NoIndexOpenCMISQueryServiceImpl.java b/source/java/org/alfresco/repo/search/impl/noindex/NoIndexOpenCMISQueryServiceImpl.java new file mode 100644 index 0000000000..6e78cb7764 --- /dev/null +++ b/source/java/org/alfresco/repo/search/impl/noindex/NoIndexOpenCMISQueryServiceImpl.java @@ -0,0 +1,141 @@ +/* + * Copyright (C) 2005-2010 Alfresco Software Limited. + * + * This file is part of Alfresco + * + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Alfresco 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + */ +package org.alfresco.repo.search.impl.noindex; + +import java.util.HashMap; +import java.util.Map; +import java.util.Set; + +import org.alfresco.opencmis.dictionary.CMISDictionaryService; +import org.alfresco.opencmis.search.CMISQueryOptions; +import org.alfresco.opencmis.search.CMISQueryOptions.CMISQueryMode; +import org.alfresco.opencmis.search.CMISQueryParser; +import org.alfresco.opencmis.search.CMISQueryService; +import org.alfresco.opencmis.search.CMISResultSet; +import org.alfresco.opencmis.search.CmisFunctionEvaluationContext; +import org.alfresco.repo.search.EmptyResultSet; +import org.alfresco.repo.search.impl.querymodel.Query; +import org.alfresco.repo.search.impl.querymodel.impl.lucene.LuceneQueryModelFactory; +import org.alfresco.service.cmr.dictionary.DictionaryService; +import org.alfresco.service.cmr.repository.NodeService; +import org.alfresco.service.cmr.repository.StoreRef; +import org.alfresco.service.cmr.search.LimitBy; +import org.alfresco.service.cmr.search.ResultSet; +import org.apache.chemistry.opencmis.commons.enums.BaseTypeId; +import org.apache.chemistry.opencmis.commons.enums.CapabilityJoin; +import org.apache.chemistry.opencmis.commons.enums.CapabilityQuery; + +/** + * @author Andy + * + */ +public class NoIndexOpenCMISQueryServiceImpl implements CMISQueryService +{ + private NodeService nodeService; + + private DictionaryService alfrescoDictionaryService; + + private CMISDictionaryService cmisDictionaryService; + + public void setNodeService(NodeService nodeService) + { + this.nodeService = nodeService; + } + + public void setAlfrescoDictionaryService(DictionaryService alfrescoDictionaryService) + { + this.alfrescoDictionaryService = alfrescoDictionaryService; + } + + public void setCmisDictionaryService(CMISDictionaryService cmisDictionaryService) + { + this.cmisDictionaryService = cmisDictionaryService; + } + + /* (non-Javadoc) + * @see org.alfresco.opencmis.search.CMISQueryService#query(org.alfresco.opencmis.search.CMISQueryOptions) + */ + @Override + public CMISResultSet query(CMISQueryOptions options) + { + ResultSet rs = new EmptyResultSet(); + + CapabilityJoin joinSupport = getJoinSupport(); + if(options.getQueryMode() == CMISQueryOptions.CMISQueryMode.CMS_WITH_ALFRESCO_EXTENSIONS) + { + joinSupport = CapabilityJoin.INNERONLY; + } + + // TODO: Refactor to avoid duplication of valid scopes here and in CMISQueryParser + + BaseTypeId[] validScopes = (options.getQueryMode() == CMISQueryMode.CMS_STRICT) ? CmisFunctionEvaluationContext.STRICT_SCOPES : CmisFunctionEvaluationContext.ALFRESCO_SCOPES; + CmisFunctionEvaluationContext functionContext = new CmisFunctionEvaluationContext(); + functionContext.setCmisDictionaryService(cmisDictionaryService); + functionContext.setNodeService(nodeService); + functionContext.setValidScopes(validScopes); + + CMISQueryParser parser = new CMISQueryParser(options, cmisDictionaryService, joinSupport); + Query query = parser.parse(new LuceneQueryModelFactory(), functionContext); + + Map wrapped = new HashMap(); + for (Set group : query.getSource().getSelectorGroups(functionContext)) + { + for (String selector : group) + { + wrapped.put(selector, rs); + } + } + LimitBy limitBy = null; + limitBy = rs.getResultSetMetaData().getLimitedBy(); + + CMISResultSet cmis = new CMISResultSet(wrapped, options, limitBy, nodeService, query, cmisDictionaryService, alfrescoDictionaryService); + return cmis; + } + + /* (non-Javadoc) + * @see org.alfresco.opencmis.search.CMISQueryService#query(java.lang.String, org.alfresco.service.cmr.repository.StoreRef) + */ + @Override + public CMISResultSet query(String query, StoreRef storeRef) + { + CMISQueryOptions options = new CMISQueryOptions(query, storeRef); + return query(options); + } + + public boolean getPwcSearchable() + { + return true; + } + + public boolean getAllVersionsSearchable() + { + return false; + } + + public CapabilityQuery getQuerySupport() + { + return CapabilityQuery.BOTHCOMBINED; + } + + public CapabilityJoin getJoinSupport() + { + return CapabilityJoin.NONE; + } + +} diff --git a/source/java/org/alfresco/repo/search/impl/noindex/NoIndexSearchService.java b/source/java/org/alfresco/repo/search/impl/noindex/NoIndexSearchService.java new file mode 100644 index 0000000000..21b50d9b74 --- /dev/null +++ b/source/java/org/alfresco/repo/search/impl/noindex/NoIndexSearchService.java @@ -0,0 +1,260 @@ +/* + * Copyright (C) 2005-2010 Alfresco Software Limited. + * + * This file is part of Alfresco + * + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Alfresco 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + */ +package org.alfresco.repo.search.impl.noindex; + +import java.io.Serializable; +import java.util.List; + +import org.alfresco.error.StackTraceUtil; +import org.alfresco.repo.search.EmptyResultSet; +import org.alfresco.repo.search.impl.NodeSearcher; +import org.alfresco.service.cmr.dictionary.DictionaryService; +import org.alfresco.service.cmr.repository.InvalidNodeRefException; +import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.cmr.repository.NodeService; +import org.alfresco.service.cmr.repository.StoreRef; +import org.alfresco.service.cmr.repository.XPathException; +import org.alfresco.service.cmr.search.QueryParameter; +import org.alfresco.service.cmr.search.QueryParameterDefinition; +import org.alfresco.service.cmr.search.ResultSet; +import org.alfresco.service.cmr.search.SearchParameters; +import org.alfresco.service.cmr.search.SearchParameters.Operator; +import org.alfresco.service.cmr.search.SearchService; +import org.alfresco.service.namespace.NamespacePrefixResolver; +import org.alfresco.service.namespace.QName; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * @author Andy + * log4j:logger=org.alfresco.repo.search.impl.noindex.NoIndexSearchService + */ +public class NoIndexSearchService implements SearchService +{ + private static Log s_logger = LogFactory.getLog(NoIndexSearchService.class); + + private NodeService nodeService; + + private DictionaryService dictionaryService; + + public NodeService getNodeService() + { + return nodeService; + } + + public void setNodeService(NodeService nodeService) + { + this.nodeService = nodeService; + } + + public DictionaryService getDictionaryService() + { + return dictionaryService; + } + + public void setDictionaryService(DictionaryService dictionaryService) + { + this.dictionaryService = dictionaryService; + } + + /* + * (non-Javadoc) + * @see org.alfresco.service.cmr.search.SearchService#query(org.alfresco.service.cmr.repository.StoreRef, + * java.lang.String, java.lang.String) + */ + @Override + public ResultSet query(StoreRef store, String language, String query) + { + if (s_logger.isDebugEnabled()) + { + s_logger.debug("query store = " + store + " language = " + language + " query = " + query); + } + trace(); + return new EmptyResultSet(); + } + + private void trace() + { + if (s_logger.isTraceEnabled()) + { + Exception e = new Exception(); + e.fillInStackTrace(); + + StringBuilder sb = new StringBuilder(1024); + StackTraceUtil.buildStackTrace("Search trace ...", e.getStackTrace(), sb, -1); + s_logger.trace(sb); + } + } + + /* + * (non-Javadoc) + * @see org.alfresco.service.cmr.search.SearchService#query(org.alfresco.service.cmr.repository.StoreRef, + * java.lang.String, java.lang.String, org.alfresco.service.cmr.search.QueryParameterDefinition[]) + */ + @Override + public ResultSet query(StoreRef store, String language, String query, QueryParameterDefinition[] queryParameterDefinitions) + { + if (s_logger.isDebugEnabled()) + { + s_logger.debug("query store = " + store + " language = " + language + " query = " + query + " queryParameterDefinitions = " + queryParameterDefinitions); + } + trace(); + return new EmptyResultSet(); + } + + /* + * (non-Javadoc) + * @see org.alfresco.service.cmr.search.SearchService#query(org.alfresco.service.cmr.repository.StoreRef, + * org.alfresco.service.namespace.QName, org.alfresco.service.cmr.search.QueryParameter[]) + */ + @Override + public ResultSet query(StoreRef store, QName queryId, QueryParameter[] queryParameters) + { + if (s_logger.isDebugEnabled()) + { + s_logger.debug("query store = " + store + " queryId = " + queryId + " queryParameters = " + queryParameters); + } + trace(); + return new EmptyResultSet(); + } + + /* + * (non-Javadoc) + * @see org.alfresco.service.cmr.search.SearchService#query(org.alfresco.service.cmr.search.SearchParameters) + */ + @Override + public ResultSet query(SearchParameters searchParameters) + { + if (s_logger.isDebugEnabled()) + { + s_logger.debug("query searchParameters = " + searchParameters); + } + trace(); + return new EmptyResultSet(); + } + + /* + * (non-Javadoc) + * @see org.alfresco.service.cmr.search.SearchService#selectNodes(org.alfresco.service.cmr.repository.NodeRef, + * java.lang.String, org.alfresco.service.cmr.search.QueryParameterDefinition[], + * org.alfresco.service.namespace.NamespacePrefixResolver, boolean) + */ + @Override + public List selectNodes(NodeRef contextNodeRef, String xpath, QueryParameterDefinition[] parameters, NamespacePrefixResolver namespacePrefixResolver, + boolean followAllParentLinks) throws InvalidNodeRefException, XPathException + { + return selectNodes(contextNodeRef, xpath, parameters, namespacePrefixResolver, followAllParentLinks, SearchService.LANGUAGE_XPATH); + } + + /* + * (non-Javadoc) + * @see org.alfresco.service.cmr.search.SearchService#selectNodes(org.alfresco.service.cmr.repository.NodeRef, + * java.lang.String, org.alfresco.service.cmr.search.QueryParameterDefinition[], + * org.alfresco.service.namespace.NamespacePrefixResolver, boolean, java.lang.String) + */ + @Override + public List selectNodes(NodeRef contextNodeRef, String xpath, QueryParameterDefinition[] parameters, NamespacePrefixResolver namespacePrefixResolver, + boolean followAllParentLinks, String language) throws InvalidNodeRefException, XPathException + { + NodeSearcher nodeSearcher = new NodeSearcher(nodeService, dictionaryService, this); + return nodeSearcher.selectNodes(contextNodeRef, xpath, parameters, namespacePrefixResolver, followAllParentLinks, language); + + } + + /* + * (non-Javadoc) + * @see org.alfresco.service.cmr.search.SearchService#selectProperties(org.alfresco.service.cmr.repository.NodeRef, + * java.lang.String, org.alfresco.service.cmr.search.QueryParameterDefinition[], + * org.alfresco.service.namespace.NamespacePrefixResolver, boolean) + */ + @Override + public List selectProperties(NodeRef contextNodeRef, String xpath, QueryParameterDefinition[] parameters, NamespacePrefixResolver namespacePrefixResolver, + boolean followAllParentLinks) throws InvalidNodeRefException, XPathException + { + return selectProperties(contextNodeRef, xpath, parameters, namespacePrefixResolver, followAllParentLinks, SearchService.LANGUAGE_XPATH); + + } + + /* + * (non-Javadoc) + * @see org.alfresco.service.cmr.search.SearchService#selectProperties(org.alfresco.service.cmr.repository.NodeRef, + * java.lang.String, org.alfresco.service.cmr.search.QueryParameterDefinition[], + * org.alfresco.service.namespace.NamespacePrefixResolver, boolean, java.lang.String) + */ + @Override + public List selectProperties(NodeRef contextNodeRef, String xpath, QueryParameterDefinition[] parameters, NamespacePrefixResolver namespacePrefixResolver, + boolean followAllParentLinks, String language) throws InvalidNodeRefException, XPathException + { + NodeSearcher nodeSearcher = new NodeSearcher(nodeService, dictionaryService, this); + return nodeSearcher.selectProperties(contextNodeRef, xpath, parameters, namespacePrefixResolver, followAllParentLinks, language); + + } + + /* + * (non-Javadoc) + * @see org.alfresco.service.cmr.search.SearchService#contains(org.alfresco.service.cmr.repository.NodeRef, + * org.alfresco.service.namespace.QName, java.lang.String) + */ + @Override + public boolean contains(NodeRef nodeRef, QName propertyQName, String googleLikePattern) throws InvalidNodeRefException + { + return contains(nodeRef, propertyQName, googleLikePattern, SearchParameters.Operator.OR); + + } + + /* + * (non-Javadoc) + * @see org.alfresco.service.cmr.search.SearchService#contains(org.alfresco.service.cmr.repository.NodeRef, + * org.alfresco.service.namespace.QName, java.lang.String, + * org.alfresco.service.cmr.search.SearchParameters.Operator) + */ + @Override + public boolean contains(NodeRef nodeRef, QName propertyQName, String googleLikePattern, Operator defaultOperator) throws InvalidNodeRefException + { + if (s_logger.isDebugEnabled()) + { + s_logger.debug("contains nodeRef = " + + nodeRef + " propertyQName = " + propertyQName + " googleLikePattern = " + googleLikePattern + " defaultOperator = " + defaultOperator); + } + trace(); + return false; + } + + /* + * (non-Javadoc) + * @see org.alfresco.service.cmr.search.SearchService#like(org.alfresco.service.cmr.repository.NodeRef, + * org.alfresco.service.namespace.QName, java.lang.String, boolean) + */ + @Override + public boolean like(NodeRef nodeRef, QName propertyQName, String sqlLikePattern, boolean includeFTS) throws InvalidNodeRefException + { + // only inlcude FTS depends on the index ... + if (includeFTS) + { + if (s_logger.isDebugEnabled()) + { + s_logger.debug("contains nodeRef = " + + nodeRef + " propertyQName = " + propertyQName + " sqlLikePattern = " + sqlLikePattern + " includeFTS = " + includeFTS); + } + trace(); + } + return false; + } + +}