mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-07-31 17:39:05 +00:00
RM-7051 updating patch code
This commit is contained in:
@@ -700,6 +700,11 @@
|
|||||||
<title>Saved search</title>
|
<title>Saved search</title>
|
||||||
</aspect>
|
</aspect>
|
||||||
|
|
||||||
|
<aspect name="rma:dispositionProcessed">
|
||||||
|
<title>disposition processed</title>
|
||||||
|
</aspect>
|
||||||
|
|
||||||
|
|
||||||
<aspect name="rma:vitalRecordDefinition">
|
<aspect name="rma:vitalRecordDefinition">
|
||||||
<title>Vital Record Definition</title>
|
<title>Vital Record Definition</title>
|
||||||
<properties>
|
<properties>
|
||||||
|
@@ -26,6 +26,8 @@
|
|||||||
<property name="nodeService" ref="nodeService" />
|
<property name="nodeService" ref="nodeService" />
|
||||||
<property name="recordsManagementQueryDAO" ref="recordsManagementQueryDAO" />
|
<property name="recordsManagementQueryDAO" ref="recordsManagementQueryDAO" />
|
||||||
<property name="behaviourFilter" ref="policyBehaviourFilter" />
|
<property name="behaviourFilter" ref="policyBehaviourFilter" />
|
||||||
|
<property name="qnameDAO" ref="qnameDAO" />
|
||||||
|
<property name="nodeDAO" ref="nodeDAO" />
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
</beans>
|
</beans>
|
@@ -15,6 +15,14 @@
|
|||||||
<parameter property="end" jdbcType="BIGINT" javaType="java.lang.Long"/>
|
<parameter property="end" jdbcType="BIGINT" javaType="java.lang.Long"/>
|
||||||
</parameterMap>
|
</parameterMap>
|
||||||
|
|
||||||
|
<parameterMap id="parameter_folderPatchPagingExtended" type="map">
|
||||||
|
<parameter property="dispositionQnameId" jdbcType="BIGINT" javaType="java.lang.Long"/>
|
||||||
|
<parameter property="processed" jdbcType="BIGINT" javaType="java.lang.Long"/>
|
||||||
|
<parameter property="folderQnameId" jdbcType="BIGINT" javaType="java.lang.Long"/>
|
||||||
|
<parameter property="start" jdbcType="BIGINT" javaType="java.lang.Long"/>
|
||||||
|
<parameter property="end" jdbcType="BIGINT" javaType="java.lang.Long"/>
|
||||||
|
</parameterMap>
|
||||||
|
|
||||||
<parameterMap id="parameter_folderPatchCount" type="map">
|
<parameterMap id="parameter_folderPatchCount" type="map">
|
||||||
<parameter property="dispositionQnameId" jdbcType="BIGINT" javaType="java.lang.Long"/>
|
<parameter property="dispositionQnameId" jdbcType="BIGINT" javaType="java.lang.Long"/>
|
||||||
<parameter property="folderQnameId" jdbcType="BIGINT" javaType="java.lang.Long"/>
|
<parameter property="folderQnameId" jdbcType="BIGINT" javaType="java.lang.Long"/>
|
||||||
@@ -44,21 +52,40 @@
|
|||||||
<select id="select_RecordFoldersWithSchedules"
|
<select id="select_RecordFoldersWithSchedules"
|
||||||
parameterMap="parameter_folderPatchPaging"
|
parameterMap="parameter_folderPatchPaging"
|
||||||
resultMap="result_NodeRefEntity">
|
resultMap="result_NodeRefEntity">
|
||||||
select * from (
|
select alfn.id , alfs.protocol, alfs.identifier, alfn.uuid
|
||||||
select ROW_NUMBER() over (order by alfn.uuid) as rnum, alfn.id , alfs.protocol, alfs.identifier, alfn.uuid
|
|
||||||
from alf_node alfn,
|
from alf_node alfn,
|
||||||
alf_store alfs
|
alf_store alfs
|
||||||
where alfn.id in (
|
where alfn.id in (
|
||||||
select node_id
|
select node_id
|
||||||
from alf_node_properties
|
from alf_node_properties
|
||||||
where qname_id = ?
|
where qname_id = ?
|
||||||
and boolean_value = true )
|
and boolean_value = true
|
||||||
|
)
|
||||||
and type_qname_id = ?
|
and type_qname_id = ?
|
||||||
and alfn.store_id = alfs.id
|
and alfn.store_id = alfs.id
|
||||||
order by alfn.uuid
|
and alfn.id between ? and ?
|
||||||
) as foo where foo.rnum BETWEEN ? and ?
|
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<select id="select_RecordFoldersWithSchedulesExtended"
|
||||||
|
parameterMap="parameter_folderPatchPagingExtended"
|
||||||
|
resultMap="result_NodeRefEntity">
|
||||||
|
select alfn.id , alfs.protocol, alfs.identifier, alfn.uuid
|
||||||
|
from alf_node alfn,
|
||||||
|
alf_store alfs
|
||||||
|
where alfn.id in (
|
||||||
|
select node_id
|
||||||
|
from alf_node_properties
|
||||||
|
where qname_id = ?
|
||||||
|
and boolean_value = true
|
||||||
|
and node_id not in (
|
||||||
|
select node_id
|
||||||
|
from alf_node_aspects
|
||||||
|
where qname_id = ? ))
|
||||||
|
and type_qname_id = ?
|
||||||
|
and alfn.store_id = alfs.id
|
||||||
|
and alfn.id between ? and ?
|
||||||
|
</select>
|
||||||
|
|
||||||
<select id="select_RecordFoldersWithSchedulesCount"
|
<select id="select_RecordFoldersWithSchedulesCount"
|
||||||
parameterMap="parameter_folderPatchCount"
|
parameterMap="parameter_folderPatchCount"
|
||||||
resultType="java.lang.Integer">
|
resultType="java.lang.Integer">
|
||||||
|
@@ -281,4 +281,5 @@ public interface RecordsManagementModel extends RecordsManagementCustomModel
|
|||||||
QName PROP_COUNT = QName.createQName(RM_URI, "count");
|
QName PROP_COUNT = QName.createQName(RM_URI, "count");
|
||||||
|
|
||||||
QName ASPECT_SAVED_SEARCH = QName.createQName(RM_URI, "savedSearch");
|
QName ASPECT_SAVED_SEARCH = QName.createQName(RM_URI, "savedSearch");
|
||||||
|
QName ASPECT_DISPOSITION_PROCESSED = QName.createQName(RM_URI, "dispositionProcessed");
|
||||||
}
|
}
|
||||||
|
@@ -27,11 +27,13 @@
|
|||||||
|
|
||||||
package org.alfresco.module.org_alfresco_module_rm.patch.v24;
|
package org.alfresco.module.org_alfresco_module_rm.patch.v24;
|
||||||
|
|
||||||
import static org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel.ASPECT_DISPOSITION_LIFECYCLE;
|
import java.io.Serializable;
|
||||||
import static org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel.ASPECT_FROZEN;
|
import java.math.RoundingMode;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionActionDefinition;
|
import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionActionDefinition;
|
||||||
import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionSchedule;
|
import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionSchedule;
|
||||||
@@ -40,13 +42,18 @@ import org.alfresco.module.org_alfresco_module_rm.hold.HoldService;
|
|||||||
import org.alfresco.module.org_alfresco_module_rm.patch.AbstractModulePatch;
|
import org.alfresco.module.org_alfresco_module_rm.patch.AbstractModulePatch;
|
||||||
import org.alfresco.module.org_alfresco_module_rm.query.RecordsManagementQueryDAO;
|
import org.alfresco.module.org_alfresco_module_rm.query.RecordsManagementQueryDAO;
|
||||||
import org.alfresco.module.org_alfresco_module_rm.record.RecordService;
|
import org.alfresco.module.org_alfresco_module_rm.record.RecordService;
|
||||||
|
import org.alfresco.repo.domain.node.NodeDAO;
|
||||||
|
import org.alfresco.repo.domain.qname.QNameDAO;
|
||||||
import org.alfresco.repo.policy.BehaviourFilter;
|
import org.alfresco.repo.policy.BehaviourFilter;
|
||||||
import org.alfresco.repo.transaction.RetryingTransactionHelper;
|
import org.alfresco.repo.transaction.RetryingTransactionHelper;
|
||||||
import org.alfresco.service.cmr.repository.NodeRef;
|
import org.alfresco.service.cmr.repository.NodeRef;
|
||||||
import org.alfresco.service.cmr.repository.NodeService;
|
import org.alfresco.service.cmr.repository.NodeService;
|
||||||
|
import org.alfresco.service.namespace.QName;
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
|
||||||
|
import static org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* RM v2.4 patch that ensures that file plan root containers do not inherited rules, because this is no longer enforced
|
* RM v2.4 patch that ensures that file plan root containers do not inherited rules, because this is no longer enforced
|
||||||
* in the service code anymore.
|
* in the service code anymore.
|
||||||
@@ -60,7 +67,7 @@ public class RMv24DispositionInheritancePatch extends AbstractModulePatch
|
|||||||
{
|
{
|
||||||
private static final Log logger = LogFactory.getLog(RMv24DispositionInheritancePatch.class);
|
private static final Log logger = LogFactory.getLog(RMv24DispositionInheritancePatch.class);
|
||||||
|
|
||||||
private static final long BATCH_SIZE = 5L;
|
private static final long BATCH_SIZE = 1000L;
|
||||||
|
|
||||||
private DispositionService dispositionService;
|
private DispositionService dispositionService;
|
||||||
|
|
||||||
@@ -72,6 +79,10 @@ public class RMv24DispositionInheritancePatch extends AbstractModulePatch
|
|||||||
|
|
||||||
private BehaviourFilter behaviourFilter;
|
private BehaviourFilter behaviourFilter;
|
||||||
|
|
||||||
|
protected QNameDAO qnameDAO;
|
||||||
|
|
||||||
|
private NodeDAO nodeDAO;
|
||||||
|
|
||||||
public void setDispositionService(DispositionService dispositionService)
|
public void setDispositionService(DispositionService dispositionService)
|
||||||
{
|
{
|
||||||
this.dispositionService = dispositionService;
|
this.dispositionService = dispositionService;
|
||||||
@@ -97,6 +108,16 @@ public class RMv24DispositionInheritancePatch extends AbstractModulePatch
|
|||||||
this.behaviourFilter = behaviourFilter;
|
this.behaviourFilter = behaviourFilter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setQnameDAO(QNameDAO qnameDAO)
|
||||||
|
{
|
||||||
|
this.qnameDAO = qnameDAO;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNodeDAO(NodeDAO nodeDAO)
|
||||||
|
{
|
||||||
|
this.nodeDAO = nodeDAO;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see AbstractModulePatch#applyInternal()
|
* @see AbstractModulePatch#applyInternal()
|
||||||
* <p>
|
* <p>
|
||||||
@@ -105,10 +126,21 @@ public class RMv24DispositionInheritancePatch extends AbstractModulePatch
|
|||||||
@Override
|
@Override
|
||||||
public void applyInternal()
|
public void applyInternal()
|
||||||
{
|
{
|
||||||
int totalFolders = recordsManagementQueryDAO.getRecordFoldersWithSchedulesCount();
|
Long maxNodeId = nodeDAO.getMaxNodeId();
|
||||||
logger.info("Folders to update: "+ totalFolders);
|
|
||||||
|
|
||||||
for (Long i = 0L; i < totalFolders; i += BATCH_SIZE)
|
//int totalFolders = recordsManagementQueryDAO.getRecordFoldersWithSchedulesCount();
|
||||||
|
int batchCount = 0;
|
||||||
|
//logger.info("Folders to update: "+ totalFolders);
|
||||||
|
transactionService.getRetryingTransactionHelper()
|
||||||
|
.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<String>()
|
||||||
|
{
|
||||||
|
public String execute() throws Throwable
|
||||||
|
{
|
||||||
|
qnameDAO.getOrCreateQName(ASPECT_DISPOSITION_PROCESSED);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}, false, true);
|
||||||
|
for (Long i = 0L; i < maxNodeId; i += BATCH_SIZE)
|
||||||
{
|
{
|
||||||
final Long finali = i;
|
final Long finali = i;
|
||||||
int updatedRecords = transactionService.getRetryingTransactionHelper()
|
int updatedRecords = transactionService.getRetryingTransactionHelper()
|
||||||
@@ -120,6 +152,7 @@ public class RMv24DispositionInheritancePatch extends AbstractModulePatch
|
|||||||
List<NodeRef> folders = recordsManagementQueryDAO.getRecordFoldersWithSchedules(finali, finali + BATCH_SIZE);
|
List<NodeRef> folders = recordsManagementQueryDAO.getRecordFoldersWithSchedules(finali, finali + BATCH_SIZE);
|
||||||
for (NodeRef folder : folders)
|
for (NodeRef folder : folders)
|
||||||
{
|
{
|
||||||
|
behaviourFilter.disableBehaviour(folder);
|
||||||
if (LOGGER.isDebugEnabled())
|
if (LOGGER.isDebugEnabled())
|
||||||
{
|
{
|
||||||
logger.info("Checking folder: " + folder);
|
logger.info("Checking folder: " + folder);
|
||||||
@@ -127,7 +160,6 @@ public class RMv24DispositionInheritancePatch extends AbstractModulePatch
|
|||||||
DispositionSchedule schedule = dispositionService.getDispositionSchedule(folder);
|
DispositionSchedule schedule = dispositionService.getDispositionSchedule(folder);
|
||||||
if (schedule.isRecordLevelDisposition())
|
if (schedule.isRecordLevelDisposition())
|
||||||
{
|
{
|
||||||
behaviourFilter.disableBehaviour(folder);
|
|
||||||
List<NodeRef> records = recordService.getRecords(folder);
|
List<NodeRef> records = recordService.getRecords(folder);
|
||||||
for (NodeRef record : records)
|
for (NodeRef record : records)
|
||||||
{
|
{
|
||||||
@@ -143,15 +175,16 @@ public class RMv24DispositionInheritancePatch extends AbstractModulePatch
|
|||||||
behaviourFilter.enableBehaviour(record);
|
behaviourFilter.enableBehaviour(record);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
behaviourFilter.enableBehaviour(folder);
|
|
||||||
}
|
}
|
||||||
|
nodeService.addAspect(folder, ASPECT_DISPOSITION_PROCESSED, null);
|
||||||
|
behaviourFilter.enableBehaviour(folder);
|
||||||
}
|
}
|
||||||
return recordCount;
|
return recordCount;
|
||||||
}
|
}
|
||||||
}, false, true);
|
}, false, true);
|
||||||
|
batchCount ++;
|
||||||
logger.info("Records updated: "+ updatedRecords);
|
logger.info("Records updated: "+ updatedRecords);
|
||||||
logger.info("Updating folders: "+ finali + " to: " +(finali + BATCH_SIZE) + " of "+totalFolders);
|
logger.info("Completed batch "+ batchCount+" of "+ (Math.ceil(maxNodeId/BATCH_SIZE)+1));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user