From 9f0ab3d1275d72a84275a742958372e0885e3ac6 Mon Sep 17 00:00:00 2001 From: Andrew Hind Date: Wed, 6 Jul 2011 09:34:20 +0000 Subject: [PATCH] ALF-8990: RSOLR 032: Model track and build from SOLR - sort out SOLR per core analyzer properties - required DD refactoring for loading these particular properties and not using I18NUtils as SOLR needs to over-ride the class loader used .... - dictionary DAO now supports over-riding the default datatype behaviour (much easier to change the analyser properties file used) - property added in repositoy.properties - lucene.defaultAnalyserResourceBundleName=alfresco/model/dataTypeAnalyzers - models can define per property, class(type and aspects) and model analysis behaviour by specifying an analyser bundle - see the data type model for model level config - the same notation is used elsewhere - SOLR and Repository config for this has to be kept in sync by hand - consider syncing these later git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@28826 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- config/alfresco/core-services-context.xml | 4 ++- config/alfresco/repository.properties | 3 +++ .../CMISBasePropertyDefinition.java | 2 +- .../alfresco/cmis/mapping/DirectProperty.java | 3 +-- .../org/alfresco/cmis/search/QueryTest.java | 9 +++---- .../dictionary/RepoDictionaryDAOTest.java | 2 +- .../node/MockClassAttributeDefinition.java | 26 +++++++++++++++++++ .../impl/lucene/ADMLuceneIndexerImpl.java | 2 +- .../impl/lucene/ADMLuceneSearcherImpl.java | 2 +- .../search/impl/lucene/ADMLuceneTest.java | 2 +- .../impl/lucene/AVMLuceneIndexerImpl.java | 3 +-- 11 files changed, 43 insertions(+), 15 deletions(-) diff --git a/config/alfresco/core-services-context.xml b/config/alfresco/core-services-context.xml index b87b22a880..53b7a6de92 100644 --- a/config/alfresco/core-services-context.xml +++ b/config/alfresco/core-services-context.xml @@ -1120,6 +1120,9 @@ + + alfresco/model/dataTypeAnalyzers + @@ -1188,7 +1191,6 @@ - alfresco/model/dataTypeAnalyzers alfresco/messages/system-model alfresco/messages/dictionary-model alfresco/messages/content-model diff --git a/config/alfresco/repository.properties b/config/alfresco/repository.properties index d3240213d6..9f8a7d3a42 100644 --- a/config/alfresco/repository.properties +++ b/config/alfresco/repository.properties @@ -281,6 +281,9 @@ lucene.write.lock.timeout=10000 lucene.commit.lock.timeout=100000 lucene.lock.poll.interval=100 +lucene.defaultAnalyserResourceBundleName=alfresco/model/dataTypeAnalyzers + + # When transforming archive files (.zip etc) into text representations (such as # for full text indexing), should the files within the archive be processed too? # If enabled, transformation takes longer, but searches of the files find more. diff --git a/source/java/org/alfresco/cmis/dictionary/CMISBasePropertyDefinition.java b/source/java/org/alfresco/cmis/dictionary/CMISBasePropertyDefinition.java index 9fd8ba2ae5..1c7227d607 100644 --- a/source/java/org/alfresco/cmis/dictionary/CMISBasePropertyDefinition.java +++ b/source/java/org/alfresco/cmis/dictionary/CMISBasePropertyDefinition.java @@ -171,7 +171,7 @@ public class CMISBasePropertyDefinition implements CMISPropertyDefinition, Seria break; case TRUE: default: - String analyserClassName = propDef.getDataType().getAnalyserClassName(); + String analyserClassName = propDef.resolveAnalyserClassName(); if(propDef.getDataType().getName().equals(DataTypeDefinition.BOOLEAN)) { orderable = true; diff --git a/source/java/org/alfresco/cmis/mapping/DirectProperty.java b/source/java/org/alfresco/cmis/mapping/DirectProperty.java index ebebf6b531..754924079c 100644 --- a/source/java/org/alfresco/cmis/mapping/DirectProperty.java +++ b/source/java/org/alfresco/cmis/mapping/DirectProperty.java @@ -129,8 +129,7 @@ public class DirectProperty extends AbstractSimpleProperty } else if (propertyDef.getDataType().getName().equals(DataTypeDefinition.DATETIME)) { - DataTypeDefinition dataType = propertyDef.getDataType(); - String analyserClassName = dataType.getAnalyserClassName(); + String analyserClassName = propertyDef.resolveAnalyserClassName(); if (analyserClassName.equals(DateTimeAnalyser.class.getCanonicalName())) { field = field + ".sort"; diff --git a/source/java/org/alfresco/cmis/search/QueryTest.java b/source/java/org/alfresco/cmis/search/QueryTest.java index aa34f6e767..7a639eda12 100644 --- a/source/java/org/alfresco/cmis/search/QueryTest.java +++ b/source/java/org/alfresco/cmis/search/QueryTest.java @@ -41,12 +41,12 @@ import org.alfresco.cmis.CMISDictionaryModel; import org.alfresco.cmis.CMISPropertyDefinition; import org.alfresco.cmis.CMISQueryException; import org.alfresco.cmis.CMISQueryOptions; +import org.alfresco.cmis.CMISQueryOptions.CMISQueryMode; import org.alfresco.cmis.CMISResultSet; import org.alfresco.cmis.CMISResultSetColumn; import org.alfresco.cmis.CMISResultSetMetaData; import org.alfresco.cmis.CMISResultSetRow; import org.alfresco.cmis.CMISTypeDefinition; -import org.alfresco.cmis.CMISQueryOptions.CMISQueryMode; import org.alfresco.cmis.dictionary.CMISAbstractDictionaryService; import org.alfresco.cmis.mapping.BaseCMISTest; import org.alfresco.cmis.mapping.BaseTypeIdProperty; @@ -81,7 +81,6 @@ import org.alfresco.repo.search.impl.querymodel.Order; import org.alfresco.repo.search.impl.querymodel.QueryModelException; import org.alfresco.repo.search.impl.querymodel.QueryOptions.Connective; import org.alfresco.service.cmr.dictionary.DataTypeDefinition; -import org.alfresco.service.cmr.dictionary.PropertyDefinition; import org.alfresco.service.cmr.repository.ContentData; import org.alfresco.service.cmr.repository.ContentWriter; import org.alfresco.service.cmr.repository.MLText; @@ -90,14 +89,14 @@ import org.alfresco.service.cmr.repository.datatype.DefaultTypeConverter; import org.alfresco.service.cmr.repository.datatype.Duration; import org.alfresco.service.cmr.security.PermissionService; import org.alfresco.service.namespace.QName; +import org.alfresco.util.CachingDateFormat; +import org.alfresco.util.ISO9075; import org.antlr.runtime.ANTLRStringStream; import org.antlr.runtime.CharStream; import org.antlr.runtime.CommonTokenStream; import org.antlr.runtime.RecognitionException; import org.antlr.runtime.tree.CommonTree; import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException; -import org.alfresco.util.CachingDateFormat; -import org.alfresco.util.ISO9075; import org.springframework.extensions.surf.util.I18NUtil; /** @@ -235,7 +234,7 @@ public class QueryTest extends BaseCMISTest super.setUp(); DataTypeDefinition dataType = dictionaryService.getDataType(DataTypeDefinition.DATETIME); - String analyserClassName = dataType.getAnalyserClassName(); + String analyserClassName = dataType.resolveAnalyserClassName(); usesDateTimeAnalyser = analyserClassName.equals(DateTimeAnalyser.class.getCanonicalName()); f0 = nodeService.createNode(rootNodeRef, ContentModel.ASSOC_CHILDREN, QName.createQName("cm", "Folder 0", namespaceService), ContentModel.TYPE_FOLDER).getChildRef(); diff --git a/source/java/org/alfresco/repo/dictionary/RepoDictionaryDAOTest.java b/source/java/org/alfresco/repo/dictionary/RepoDictionaryDAOTest.java index 94339e3193..2a39c42707 100644 --- a/source/java/org/alfresco/repo/dictionary/RepoDictionaryDAOTest.java +++ b/source/java/org/alfresco/repo/dictionary/RepoDictionaryDAOTest.java @@ -190,7 +190,7 @@ public class RepoDictionaryDAOTest extends TestCase assertEquals("Assoc1 Description", assocDef.getDescription()); QName datatype = QName.createQName(TEST_URL, "datatype"); DataTypeDefinition datatypeDef = service.getDataType(datatype); - assertEquals("Datatype Analyser", datatypeDef.getAnalyserClassName()); + assertEquals("alfresco/model/dataTypeAnalyzers", datatypeDef.getAnalyserResourceBundleName()); } public void testConstraints() diff --git a/source/java/org/alfresco/repo/forms/processor/node/MockClassAttributeDefinition.java b/source/java/org/alfresco/repo/forms/processor/node/MockClassAttributeDefinition.java index 7a5e463a4d..f4e3200217 100644 --- a/source/java/org/alfresco/repo/forms/processor/node/MockClassAttributeDefinition.java +++ b/source/java/org/alfresco/repo/forms/processor/node/MockClassAttributeDefinition.java @@ -23,6 +23,7 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.util.List; +import java.util.Locale; import org.alfresco.repo.dictionary.IndexTokenisationMode; import org.alfresco.service.cmr.dictionary.AssociationDefinition; @@ -293,4 +294,29 @@ public class MockClassAttributeDefinition implements PropertyDefinition, Associa { return targetMany; } + + /* (non-Javadoc) + * @see org.alfresco.service.cmr.dictionary.PropertyDefinition#getAnalyserResourceBundleName() + */ + @Override + public String getAnalyserResourceBundleName() + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see org.alfresco.service.cmr.dictionary.PropertyDefinition#resolveAnalyserClassName(java.lang.String, java.util.Locale, java.lang.ClassLoader) + */ + @Override + public String resolveAnalyserClassName(Locale locale) + { + return null; + } + + @Override + public String resolveAnalyserClassName() + { + return null; + } } diff --git a/source/java/org/alfresco/repo/search/impl/lucene/ADMLuceneIndexerImpl.java b/source/java/org/alfresco/repo/search/impl/lucene/ADMLuceneIndexerImpl.java index 808fb02729..b50ecaf741 100644 --- a/source/java/org/alfresco/repo/search/impl/lucene/ADMLuceneIndexerImpl.java +++ b/source/java/org/alfresco/repo/search/impl/lucene/ADMLuceneIndexerImpl.java @@ -838,7 +838,7 @@ public class ADMLuceneIndexerImpl extends AbstractLuceneIndexerImpl imp if (propertyDef.getDataType().getName().equals(DataTypeDefinition.DATETIME)) { DataTypeDefinition dataType = propertyDef.getDataType(); - String analyserClassName = dataType.getAnalyserClassName(); + String analyserClassName = propertyDef.resolveAnalyserClassName(); isDateTime = analyserClassName.equals(DateTimeAnalyser.class.getCanonicalName()); } } diff --git a/source/java/org/alfresco/repo/search/impl/lucene/ADMLuceneSearcherImpl.java b/source/java/org/alfresco/repo/search/impl/lucene/ADMLuceneSearcherImpl.java index ee90276ce3..1d448d4bad 100644 --- a/source/java/org/alfresco/repo/search/impl/lucene/ADMLuceneSearcherImpl.java +++ b/source/java/org/alfresco/repo/search/impl/lucene/ADMLuceneSearcherImpl.java @@ -383,7 +383,7 @@ public class ADMLuceneSearcherImpl extends AbstractLuceneBase implements LuceneS else if (propertyDef.getDataType().getName().equals(DataTypeDefinition.DATETIME)) { DataTypeDefinition dataType = propertyDef.getDataType(); - String analyserClassName = dataType.getAnalyserClassName(); + String analyserClassName = propertyDef.resolveAnalyserClassName(); if (analyserClassName.equals(DateTimeAnalyser.class.getCanonicalName())) { field = field + ".sort"; diff --git a/source/java/org/alfresco/repo/search/impl/lucene/ADMLuceneTest.java b/source/java/org/alfresco/repo/search/impl/lucene/ADMLuceneTest.java index 2c2b244148..8a3dc8cf64 100644 --- a/source/java/org/alfresco/repo/search/impl/lucene/ADMLuceneTest.java +++ b/source/java/org/alfresco/repo/search/impl/lucene/ADMLuceneTest.java @@ -4607,7 +4607,7 @@ public class ADMLuceneTest extends TestCase implements DictionaryListener PropertyDefinition propertyDef = dictionaryService.getProperty(QName.createQName(TEST_NAMESPACE, "datetime-ista")); DataTypeDefinition dataType = propertyDef.getDataType(); - String analyserClassName = dataType.getAnalyserClassName(); + String analyserClassName = propertyDef.resolveAnalyserClassName(); boolean usesDateTimeAnalyser = analyserClassName.equals(DateTimeAnalyser.class.getCanonicalName()); Date date = new Date(); diff --git a/source/java/org/alfresco/repo/search/impl/lucene/AVMLuceneIndexerImpl.java b/source/java/org/alfresco/repo/search/impl/lucene/AVMLuceneIndexerImpl.java index fdf49cce56..17b85e55b9 100644 --- a/source/java/org/alfresco/repo/search/impl/lucene/AVMLuceneIndexerImpl.java +++ b/source/java/org/alfresco/repo/search/impl/lucene/AVMLuceneIndexerImpl.java @@ -748,8 +748,7 @@ public class AVMLuceneIndexerImpl extends AbstractLuceneIndexerImpl impl isText = propertyDef.getDataType().getName().equals(DataTypeDefinition.TEXT); if (propertyDef.getDataType().getName().equals(DataTypeDefinition.DATETIME)) { - DataTypeDefinition dataType = propertyDef.getDataType(); - String analyserClassName = dataType.getAnalyserClassName(); + String analyserClassName = propertyDef.resolveAnalyserClassName(); isDateTime = analyserClassName.equals(DateTimeAnalyser.class.getCanonicalName()); } }