diff --git a/config/alfresco/script-services-context.xml b/config/alfresco/script-services-context.xml index 92e659f9c3..3b49a31d5f 100644 --- a/config/alfresco/script-services-context.xml +++ b/config/alfresco/script-services-context.xml @@ -103,8 +103,8 @@ search - - ${index.subsystem.name} + + diff --git a/source/java/org/alfresco/repo/jscript/Search.java b/source/java/org/alfresco/repo/jscript/Search.java index 079f83a33b..31e2324b29 100644 --- a/source/java/org/alfresco/repo/jscript/Search.java +++ b/source/java/org/alfresco/repo/jscript/Search.java @@ -28,6 +28,7 @@ import java.util.Map; import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.model.ContentModel; +import org.alfresco.repo.management.subsystems.SwitchableApplicationContextFactory; import org.alfresco.repo.model.Repository; import org.alfresco.service.ServiceRegistry; import org.alfresco.service.cmr.repository.ContentReader; @@ -77,7 +78,7 @@ public class Search extends BaseScopableProcessorExtension /** Repository helper */ protected Repository repository; - private String searchSubsystem; + private SwitchableApplicationContextFactory searchSubsystem; /** * Set the default store reference @@ -114,7 +115,7 @@ public class Search extends BaseScopableProcessorExtension this.repository = repository; } - public void setSearchSubsystem(String searchSubsystem) + public void setSearchSubsystemSwitchableApplicationContextFactory(SwitchableApplicationContextFactory searchSubsystem) { this.searchSubsystem = searchSubsystem; } @@ -123,7 +124,7 @@ public class Search extends BaseScopableProcessorExtension public String getSearchSubsystem() { - return searchSubsystem; + return (searchSubsystem == null) ? "" : searchSubsystem.getCurrentSourceBeanName(); } /** diff --git a/source/java/org/alfresco/repo/management/subsystems/SwitchableApplicationContextFactory.java b/source/java/org/alfresco/repo/management/subsystems/SwitchableApplicationContextFactory.java index c790bc4dd7..b15452fa01 100644 --- a/source/java/org/alfresco/repo/management/subsystems/SwitchableApplicationContextFactory.java +++ b/source/java/org/alfresco/repo/management/subsystems/SwitchableApplicationContextFactory.java @@ -50,6 +50,11 @@ public class SwitchableApplicationContextFactory extends AbstractPropertyBackedB this.sourceBeanName = sourceBeanName; } + public String getCurrentSourceBeanName() + { + return getState(false).getProperty(SwitchableApplicationContextFactory.SOURCE_BEAN_PROPERTY); + } + /* * (non-Javadoc) * @see org.alfresco.repo.management.subsystems.ApplicationContextFactory#getApplicationContext() diff --git a/source/java/org/alfresco/repo/node/index/AbstractReindexComponent.java b/source/java/org/alfresco/repo/node/index/AbstractReindexComponent.java index 3dcd619dd2..a43fdf5e67 100644 --- a/source/java/org/alfresco/repo/node/index/AbstractReindexComponent.java +++ b/source/java/org/alfresco/repo/node/index/AbstractReindexComponent.java @@ -19,6 +19,7 @@ package org.alfresco.repo.node.index; import java.io.PrintWriter; +import java.io.Serializable; import java.io.StringWriter; import java.util.ArrayList; import java.util.HashMap; @@ -56,6 +57,7 @@ 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.NodeRef.Status; +import org.alfresco.service.cmr.repository.datatype.DefaultTypeConverter; import org.alfresco.service.cmr.search.ResultSet; import org.alfresco.service.cmr.search.ResultSetRow; import org.alfresco.service.cmr.search.SearchParameters; @@ -450,7 +452,7 @@ public abstract class AbstractReindexComponent implements IndexRecovery // Establish the number of deletes and updates for this storeRef List deletedNodes = new LinkedList(); - int updateCount = 0; + boolean hasUpdates = false; for (NodeRef.Status nodeStatus : storeStatuses) { if (nodeStatus.isDeleted()) @@ -459,7 +461,33 @@ public abstract class AbstractReindexComponent implements IndexRecovery } else { - updateCount++; + if(!hasUpdates) + { + Serializable serIsIndexed = nodeService.getProperty(nodeStatus.getNodeRef(), ContentModel.PROP_IS_INDEXED); + if(serIsIndexed == null) + { + hasUpdates = true; + } + else + { + Boolean isIndexed = DefaultTypeConverter.INSTANCE.convert(Boolean.class, serIsIndexed); + if(isIndexed == null) + { + hasUpdates = true; + } + else + { + if(isIndexed.booleanValue()) + { + hasUpdates = true; + } + else + { + // Still do not know if there is anything to check .... + } + } + } + } } } @@ -472,7 +500,7 @@ public abstract class AbstractReindexComponent implements IndexRecovery result = InIndex.NO; break; } - if (updateCount > 0) + if (hasUpdates) { // Check the index if (isTxnIdPresentInIndex(storeRef, txn))