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:
Tuna Aksoy
2014-08-18 16:08:56 +00:00
parent 133f4507de
commit e32569bd22
4 changed files with 65 additions and 26 deletions

View File

@@ -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>

View File

@@ -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>

View File

@@ -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
* *

View File

@@ -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;
} }