diff --git a/config/alfresco/bulk-import-context.xml b/config/alfresco/bulk-import-context.xml
index 397dc1128b..eac63ba616 100644
--- a/config/alfresco/bulk-import-context.xml
+++ b/config/alfresco/bulk-import-context.xml
@@ -67,6 +67,7 @@
+
diff --git a/source/java/org/alfresco/repo/bulkimport/BulkFilesystemImporter.java b/source/java/org/alfresco/repo/bulkimport/BulkFilesystemImporter.java
index 9efee9b317..c373a5ee49 100644
--- a/source/java/org/alfresco/repo/bulkimport/BulkFilesystemImporter.java
+++ b/source/java/org/alfresco/repo/bulkimport/BulkFilesystemImporter.java
@@ -41,8 +41,7 @@ public interface BulkFilesystemImporter
* @param source The source directory on the local filesystem to read content from (must not be null and must be a valid, readable directory on the local filesystem).
* @param replaceExisting A flag indicating whether to replace (true) or skip (false) files that are already in the repository.
*/
-// void bulkImport(NodeRef target, NodeImporter importStrategy, boolean replaceExisting);
- public void bulkImport(BulkImportParameters bulkImportParameters, NodeImporter nodeImporter);
+ void bulkImport(BulkImportParameters bulkImportParameters, NodeImporter nodeImporter);
/**
* Initiates a bulk filesystem import asynchronously i.e. in a background thread.
@@ -52,8 +51,7 @@ public interface BulkFilesystemImporter
* @param source The source directory on the local filesystem to read content from (must not be null and must be a valid, readable directory on the local filesystem).
* @param replaceExisting A flag indicating whether to replace (true) or skip (false) files that are already in the repository.
*/
-// void asyncBulkImport(NodeRef target, NodeImporter nodeImporter, boolean replaceExisting);
- public void asyncBulkImport(BulkImportParameters bulkImportParameters, NodeImporter nodeImporter);
+ void asyncBulkImport(BulkImportParameters bulkImportParameters, NodeImporter nodeImporter);
/**
* @return A status object that describes the current state of the bulk filesystem importer.
diff --git a/source/java/org/alfresco/repo/bulkimport/BulkImportParameters.java b/source/java/org/alfresco/repo/bulkimport/BulkImportParameters.java
index 0db5b19961..1770ea0baf 100644
--- a/source/java/org/alfresco/repo/bulkimport/BulkImportParameters.java
+++ b/source/java/org/alfresco/repo/bulkimport/BulkImportParameters.java
@@ -5,11 +5,20 @@ import org.alfresco.service.cmr.repository.NodeRef;
public class BulkImportParameters
{
private NodeRef target;
- private boolean replaceExisting;
+ private boolean replaceExisting = false;
private Integer batchSize;
private Integer numThreads;
private Integer loggingInterval;
+ private boolean disableRulesService = false;
+ public boolean isDisableRulesService()
+ {
+ return disableRulesService;
+ }
+ public void setDisableRulesService(boolean disableRulesService)
+ {
+ this.disableRulesService = disableRulesService;
+ }
public Integer getLoggingInterval()
{
return loggingInterval;
diff --git a/source/java/org/alfresco/repo/bulkimport/impl/AbstractBulkFilesystemImporter.java b/source/java/org/alfresco/repo/bulkimport/impl/AbstractBulkFilesystemImporter.java
index d3d6f29dca..1da4c9bb23 100644
--- a/source/java/org/alfresco/repo/bulkimport/impl/AbstractBulkFilesystemImporter.java
+++ b/source/java/org/alfresco/repo/bulkimport/impl/AbstractBulkFilesystemImporter.java
@@ -47,6 +47,7 @@ import org.alfresco.service.cmr.model.FileFolderService;
import org.alfresco.service.cmr.model.FileInfo;
import org.alfresco.service.cmr.model.FileNotFoundException;
import org.alfresco.service.cmr.repository.NodeRef;
+import org.alfresco.service.cmr.rule.RuleService;
import org.alfresco.service.cmr.security.AccessStatus;
import org.alfresco.service.cmr.security.PermissionService;
import org.alfresco.service.namespace.NamespaceService;
@@ -76,6 +77,7 @@ public abstract class AbstractBulkFilesystemImporter implements BulkFilesystemIm
protected TransactionService transactionService;
protected PermissionService permissionService;
protected RetryingTransactionHelper transactionHelper;
+ protected RuleService ruleService;
protected BulkImportStatusImpl importStatus;
protected DirectoryAnalyser directoryAnalyser = null;
@@ -84,6 +86,11 @@ public abstract class AbstractBulkFilesystemImporter implements BulkFilesystemIm
protected BehaviourFilter behaviourFilter;
+ public void setRuleService(RuleService ruleService)
+ {
+ this.ruleService = ruleService;
+ }
+
public void setBehaviourFilter(BehaviourFilter behaviourFilter)
{
this.behaviourFilter = behaviourFilter;
diff --git a/source/java/org/alfresco/repo/bulkimport/impl/MultiThreadedBulkFilesystemImporter.java b/source/java/org/alfresco/repo/bulkimport/impl/MultiThreadedBulkFilesystemImporter.java
index 97bd0fc772..928b8e24b0 100644
--- a/source/java/org/alfresco/repo/bulkimport/impl/MultiThreadedBulkFilesystemImporter.java
+++ b/source/java/org/alfresco/repo/bulkimport/impl/MultiThreadedBulkFilesystemImporter.java
@@ -32,6 +32,7 @@ import org.alfresco.repo.bulkimport.BulkImportParameters;
import org.alfresco.repo.bulkimport.FilesystemTracker;
import org.alfresco.repo.bulkimport.ImportableItem;
import org.alfresco.repo.bulkimport.NodeImporter;
+import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback;
import org.alfresco.service.cmr.repository.NodeRef;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -64,11 +65,17 @@ public abstract class MultiThreadedBulkFilesystemImporter extends AbstractBulkFi
{
return bulkImportParameters.getNumThreads() != null ? bulkImportParameters.getNumThreads() : defaultNumThreads;
}
+
+ protected void handleRuleService(final BulkImportParameters bulkImportParameters)
+ {
+
+ }
protected BatchProcessor.BatchProcessWorker getWorker(final BulkImportParameters bulkImportParameters, final String lockToken,
final NodeImporter nodeImporter, final FilesystemTracker filesystemTracker)
{
final int batchSize = bulkImportParameters.getBatchSize() != null ? bulkImportParameters.getBatchSize() : defaultBatchSize;
+ final boolean rulesEnabled = ruleService.isEnabled();
BatchProcessor.BatchProcessWorker worker = new BatchProcessor.BatchProcessWorker()
{
@@ -80,30 +87,47 @@ public abstract class MultiThreadedBulkFilesystemImporter extends AbstractBulkFi
public void beforeProcess() throws Throwable
{
refreshLock(lockToken, batchSize * 250L);
- // TODO this throws exception txn not started??
+ if(bulkImportParameters.isDisableRulesService() && rulesEnabled)
+ {
+ ruleService.disableRules();
+ }
+
// Disable the auditable aspect's behaviours for this transaction only, to allow creation & modification dates to be set
- //behaviourFilter.disableBehaviour(ContentModel.ASPECT_AUDITABLE);
+ transactionHelper.doInTransaction(new RetryingTransactionCallback()
+ {
+ @Override
+ public Void execute() throws Throwable
+ {
+ behaviourFilter.disableBehaviour(ContentModel.ASPECT_AUDITABLE);
+ return null;
+ }
+ });
}
public void afterProcess() throws Throwable
{
+ if(bulkImportParameters.isDisableRulesService() && rulesEnabled)
+ {
+ ruleService.enableRules();
+ }
+
importStatus.incrementNumberOfBatchesCompleted();
- //behaviourFilter.enableBehaviour(ContentModel.ASPECT_AUDITABLE);
+
+ transactionHelper.doInTransaction(new RetryingTransactionCallback()
+ {
+ @Override
+ public Void execute() throws Throwable
+ {
+ behaviourFilter.enableBehaviour(ContentModel.ASPECT_AUDITABLE);
+ return null;
+ }
+ });
}
-
+
public void process(final ImportableItem importableItem) throws Throwable
{
- try
- {
- behaviourFilter.disableBehaviour(ContentModel.ASPECT_AUDITABLE);
- NodeRef nodeRef = nodeImporter.importImportableItem(importableItem, bulkImportParameters.isReplaceExisting());
- filesystemTracker.itemImported(nodeRef, importableItem);
-// importableItem.setNodeRef(nodeRef);
- }
- finally
- {
- behaviourFilter.enableBehaviour(ContentModel.ASPECT_AUDITABLE);
- }
+ NodeRef nodeRef = nodeImporter.importImportableItem(importableItem, bulkImportParameters.isReplaceExisting());
+ filesystemTracker.itemImported(nodeRef, importableItem);
}
};