mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-07-31 17:39:05 +00:00
Merged BRANCHES/V2.2 to HEAD:
80299: RM-1652 (Classified Records capabilities are never used) 80313: RM-1652 (Classified Records capabilities are never used) 80336: RM-1636 (Disposition steps can be executed for folder with frozen record) git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/HEAD@80344 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -14,12 +14,12 @@
|
|||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
<!-- Assignable Capabilities -->
|
<!-- Assignable Capabilities -->
|
||||||
|
|
||||||
<bean id="rmCreateModifyDestroyClassificationGuidesCapability"
|
<bean id="rmCreateModifyDestroyClassificationGuidesCapability"
|
||||||
parent="declarativeCapability">
|
parent="declarativeCapability">
|
||||||
<property name="name" value="CreateModifyDestroyClassificationGuides"/>
|
<property name="name" value="CreateModifyDestroyClassificationGuides"/>
|
||||||
<property name="permission" value="CreateModifyDestroyClassificationGuides"/>
|
<property name="permission" value="CreateModifyDestroyClassificationGuides"/>
|
||||||
<property name="group"><ref bean="classifiedRecordsGroup"/></property>
|
<!-- <property name="group"><ref bean="classifiedRecordsGroup"/></property> -->
|
||||||
<property name="index" value="10" />
|
<property name="index" value="10" />
|
||||||
<property name="private" value="true" />
|
<property name="private" value="true" />
|
||||||
</bean>
|
</bean>
|
||||||
@@ -28,25 +28,25 @@
|
|||||||
parent="declarativeCapability">
|
parent="declarativeCapability">
|
||||||
<property name="name" value="CreateModifyDestroyTimeframes" />
|
<property name="name" value="CreateModifyDestroyTimeframes" />
|
||||||
<property name="permission" value="CreateModifyDestroyTimeframes" />
|
<property name="permission" value="CreateModifyDestroyTimeframes" />
|
||||||
<property name="group"><ref bean="classifiedRecordsGroup"/></property>
|
<!-- <property name="group"><ref bean="classifiedRecordsGroup"/></property> -->
|
||||||
<property name="index" value="20" />
|
<property name="index" value="20" />
|
||||||
<property name="private" value="true" />
|
<property name="private" value="true" />
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
<bean id="rmMapClassificationGuideMetadataCapability"
|
<bean id="rmMapClassificationGuideMetadataCapability"
|
||||||
parent="declarativeCapability">
|
parent="declarativeCapability">
|
||||||
<property name="name" value="MapClassificationGuideMetadata" />
|
<property name="name" value="MapClassificationGuideMetadata" />
|
||||||
<property name="permission" value="MapClassificationGuideMetadata" />
|
<property name="permission" value="MapClassificationGuideMetadata" />
|
||||||
<property name="group"><ref bean="classifiedRecordsGroup"/></property>
|
<!-- <property name="group"><ref bean="classifiedRecordsGroup"/></property> -->
|
||||||
<property name="index" value="30" />
|
<property name="index" value="30" />
|
||||||
<property name="private" value="true" />
|
<property name="private" value="true" />
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
<bean id="rmUpdateClassificationDatesCapability"
|
<bean id="rmUpdateClassificationDatesCapability"
|
||||||
parent="declarativeCapability">
|
parent="declarativeCapability">
|
||||||
<property name="name" value="UpdateClassificationDates" />
|
<property name="name" value="UpdateClassificationDates" />
|
||||||
<property name="permission" value="UpdateClassificationDates" />
|
<property name="permission" value="UpdateClassificationDates" />
|
||||||
<property name="group"><ref bean="classifiedRecordsGroup"/></property>
|
<!-- <property name="group"><ref bean="classifiedRecordsGroup"/></property> -->
|
||||||
<property name="index" value="40" />
|
<property name="index" value="40" />
|
||||||
<property name="private" value="true" />
|
<property name="private" value="true" />
|
||||||
</bean>
|
</bean>
|
||||||
@@ -55,11 +55,11 @@
|
|||||||
parent="declarativeCapability">
|
parent="declarativeCapability">
|
||||||
<property name="name" value="UpdateExemptionCategories" />
|
<property name="name" value="UpdateExemptionCategories" />
|
||||||
<property name="permission" value="UpdateExemptionCategories" />
|
<property name="permission" value="UpdateExemptionCategories" />
|
||||||
<property name="group"><ref bean="classifiedRecordsGroup"/></property>
|
<!-- <property name="group"><ref bean="classifiedRecordsGroup"/></property> -->
|
||||||
<property name="index" value="50" />
|
<property name="index" value="50" />
|
||||||
<property name="private" value="true" />
|
<property name="private" value="true" />
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
<bean id="rmUpgradeDowngradeAndDeclassifyRecordsCapability"
|
<bean id="rmUpgradeDowngradeAndDeclassifyRecordsCapability"
|
||||||
parent="declarativeCapability">
|
parent="declarativeCapability">
|
||||||
<property name="name" value="UpgradeDowngradeAndDeclassifyRecords"/>
|
<property name="name" value="UpgradeDowngradeAndDeclassifyRecords"/>
|
||||||
@@ -69,7 +69,7 @@
|
|||||||
<entry key="capabilityCondition.frozen" value="false"/>
|
<entry key="capabilityCondition.frozen" value="false"/>
|
||||||
</map>
|
</map>
|
||||||
</property>
|
</property>
|
||||||
<property name="group"><ref bean="classifiedRecordsGroup"/></property>
|
<!-- <property name="group"><ref bean="classifiedRecordsGroup"/></property> -->
|
||||||
<property name="index" value="60" />
|
<property name="index" value="60" />
|
||||||
<property name="private" value="true" />
|
<property name="private" value="true" />
|
||||||
</bean>
|
</bean>
|
||||||
|
@@ -93,6 +93,7 @@
|
|||||||
<property name="filePlanService" ref="FilePlanService" />
|
<property name="filePlanService" ref="FilePlanService" />
|
||||||
<property name="recordFolderService" ref="RecordFolderService"/>
|
<property name="recordFolderService" ref="RecordFolderService"/>
|
||||||
<property name="recordService" ref="RecordService"/>
|
<property name="recordService" ref="RecordService"/>
|
||||||
|
<property name="freezeService" ref="FreezeService"/>
|
||||||
<property name="dispositionSelectionStrategy">
|
<property name="dispositionSelectionStrategy">
|
||||||
<ref local="org_alfresco_module_rm_dispositionSelectionStrategy" />
|
<ref local="org_alfresco_module_rm_dispositionSelectionStrategy" />
|
||||||
</property>
|
</property>
|
||||||
|
@@ -33,6 +33,7 @@ import org.alfresco.module.org_alfresco_module_rm.disposition.property.Dispositi
|
|||||||
import org.alfresco.module.org_alfresco_module_rm.event.RecordsManagementEvent;
|
import org.alfresco.module.org_alfresco_module_rm.event.RecordsManagementEvent;
|
||||||
import org.alfresco.module.org_alfresco_module_rm.fileplan.FilePlanComponentKind;
|
import org.alfresco.module.org_alfresco_module_rm.fileplan.FilePlanComponentKind;
|
||||||
import org.alfresco.module.org_alfresco_module_rm.fileplan.FilePlanService;
|
import org.alfresco.module.org_alfresco_module_rm.fileplan.FilePlanService;
|
||||||
|
import org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService;
|
||||||
import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel;
|
import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel;
|
||||||
import org.alfresco.module.org_alfresco_module_rm.record.RecordService;
|
import org.alfresco.module.org_alfresco_module_rm.record.RecordService;
|
||||||
import org.alfresco.module.org_alfresco_module_rm.recordfolder.RecordFolderService;
|
import org.alfresco.module.org_alfresco_module_rm.recordfolder.RecordFolderService;
|
||||||
@@ -87,6 +88,9 @@ public class DispositionServiceImpl extends ServiceBaseImpl
|
|||||||
/** Record Service */
|
/** Record Service */
|
||||||
private RecordService recordService;
|
private RecordService recordService;
|
||||||
|
|
||||||
|
/** Freeze Service */
|
||||||
|
private FreezeService freezeService;
|
||||||
|
|
||||||
/** Disposition properties */
|
/** Disposition properties */
|
||||||
private Map<QName, DispositionProperty> dispositionProperties = new HashMap<QName, DispositionProperty>(4);
|
private Map<QName, DispositionProperty> dispositionProperties = new HashMap<QName, DispositionProperty>(4);
|
||||||
|
|
||||||
@@ -156,6 +160,14 @@ public class DispositionServiceImpl extends ServiceBaseImpl
|
|||||||
this.recordService = recordService;
|
this.recordService = recordService;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param freezeService freeze service
|
||||||
|
*/
|
||||||
|
public void setFreezeService(FreezeService freezeService)
|
||||||
|
{
|
||||||
|
this.freezeService = freezeService;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the dispositionSelectionStrategy bean.
|
* Set the dispositionSelectionStrategy bean.
|
||||||
*
|
*
|
||||||
@@ -965,7 +977,7 @@ public class DispositionServiceImpl extends ServiceBaseImpl
|
|||||||
if (FilePlanComponentKind.RECORD_FOLDER.equals(filePlanService.getFilePlanComponentKind(nodeRef)) ||
|
if (FilePlanComponentKind.RECORD_FOLDER.equals(filePlanService.getFilePlanComponentKind(nodeRef)) ||
|
||||||
FilePlanComponentKind.RECORD.equals(filePlanService.getFilePlanComponentKind(nodeRef)))
|
FilePlanComponentKind.RECORD.equals(filePlanService.getFilePlanComponentKind(nodeRef)))
|
||||||
{
|
{
|
||||||
if (!isDisposableItemCutoff(nodeRef))
|
if (!isDisposableItemCutoff(nodeRef) && !isFrozenOrHasFrozenChildren(nodeRef))
|
||||||
{
|
{
|
||||||
if (recordFolderService.isRecordFolder(nodeRef))
|
if (recordFolderService.isRecordFolder(nodeRef))
|
||||||
{
|
{
|
||||||
@@ -999,6 +1011,32 @@ public class DispositionServiceImpl extends ServiceBaseImpl
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Helper method to determine if a node is frozen or has frozen children
|
||||||
|
*
|
||||||
|
* @param nodeRef Node to be checked
|
||||||
|
* @return <code>true</code> if the node is frozen or has frozen children, <code>false</code> otherwise
|
||||||
|
*/
|
||||||
|
private boolean isFrozenOrHasFrozenChildren(NodeRef nodeRef)
|
||||||
|
{
|
||||||
|
boolean result = false;
|
||||||
|
|
||||||
|
if (recordFolderService.isRecordFolder(nodeRef))
|
||||||
|
{
|
||||||
|
result = freezeService.isFrozen(nodeRef) || freezeService.hasFrozenChildren(nodeRef);
|
||||||
|
}
|
||||||
|
else if (recordService.isRecord(nodeRef))
|
||||||
|
{
|
||||||
|
result = freezeService.isFrozen(nodeRef);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
throw new AlfrescoRuntimeException("The nodeRef '" + nodeRef + "' is neither a record nor a record folder.");
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Helper method to apply the cut off
|
* Helper method to apply the cut off
|
||||||
*
|
*
|
||||||
|
@@ -109,7 +109,7 @@ public class CapabilityServiceImplTest extends BaseRMTestCase
|
|||||||
public Void run() throws Exception
|
public Void run() throws Exception
|
||||||
{
|
{
|
||||||
int initialSize = capabilityService.getGroups().size();
|
int initialSize = capabilityService.getGroups().size();
|
||||||
|
|
||||||
GroupImpl testGroup = new GroupImpl();
|
GroupImpl testGroup = new GroupImpl();
|
||||||
testGroup.setId("testGroup");
|
testGroup.setId("testGroup");
|
||||||
testGroup.setIndex(140);
|
testGroup.setIndex(140);
|
||||||
@@ -155,30 +155,30 @@ public class CapabilityServiceImplTest extends BaseRMTestCase
|
|||||||
List<Group> groups = capabilityService.getGroups();
|
List<Group> groups = capabilityService.getGroups();
|
||||||
assertNotNull(groups);
|
assertNotNull(groups);
|
||||||
|
|
||||||
Group auditGroup = groups.get(0);
|
Group recordsGroup = groups.get(0);
|
||||||
assertNotNull(auditGroup);
|
assertNotNull(recordsGroup);
|
||||||
|
|
||||||
List<Capability> auditCapabilities = capabilityService.getCapabilitiesByGroup(auditGroup);
|
List<Capability> recordCapabilities = capabilityService.getCapabilitiesByGroup(recordsGroup);
|
||||||
assertNotNull(auditCapabilities);
|
assertNotNull(recordCapabilities);
|
||||||
|
|
||||||
int vitalRecordCapabilitiesSize = auditCapabilities.size();
|
int recordCapabilitiesSize = recordCapabilities.size();
|
||||||
assertTrue(vitalRecordCapabilitiesSize > 1);
|
assertTrue(recordCapabilitiesSize > 1);
|
||||||
|
|
||||||
for (int i = 1; i == vitalRecordCapabilitiesSize; i++)
|
for (int i = 1; i == recordCapabilitiesSize; i++)
|
||||||
{
|
{
|
||||||
Capability capability = auditCapabilities.get(i);
|
Capability capability = recordCapabilities.get(i);
|
||||||
assertNotNull(capability);
|
assertNotNull(capability);
|
||||||
assertEquals(i * 10, capability.getIndex());
|
assertEquals(i * 10, capability.getIndex());
|
||||||
}
|
}
|
||||||
|
|
||||||
Group vitalRecordsGroup = groups.get(groups.size() - 1);
|
Group rulesGroup = groups.get(groups.size() - 2);
|
||||||
assertNotNull(vitalRecordsGroup);
|
assertNotNull(rulesGroup);
|
||||||
|
|
||||||
List<Capability> vitalRecordCapabilities = capabilityService.getCapabilitiesByGroupId(vitalRecordsGroup.getId());
|
List<Capability> ruleCapabilities = capabilityService.getCapabilitiesByGroupId(rulesGroup.getId());
|
||||||
assertNotNull(vitalRecordCapabilities);
|
assertNotNull(ruleCapabilities);
|
||||||
|
|
||||||
vitalRecordCapabilitiesSize = vitalRecordCapabilities.size();
|
int ruleCapabilitiesSize = ruleCapabilities.size();
|
||||||
assertTrue(vitalRecordCapabilitiesSize > 0);
|
assertTrue(ruleCapabilitiesSize > 0);
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user