From b1d88d737c9f3348110cab12d77bc02ad75ac612 Mon Sep 17 00:00:00 2001 From: Tom Page Date: Fri, 24 Jul 2015 09:36:52 +0000 Subject: [PATCH] RM-2401 Pass classification schedule fields when classifying content. Create a new data transfer object and add all the classification fields to it. Update everywhere we're classifying content with the API to use the data transfer object. Also update the new edit classification API. Break the classifyContent implementation into several smaller methods and update unit tests to target these methods. Don't actually use new fields in this commit, as there was plenty in this commit as it was! +review RM git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/HEAD@108928 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../ClassificationAspectProperties.java | 153 ++++++++++++++++++ .../ContentClassificationService.java | 18 +-- .../ContentClassificationServiceImpl.java | 129 ++++++++------- .../classification/ClassifyContentBase.java | 17 +- .../classification/ClassifyContentPost.java | 7 +- .../classification/ClassifyContentPut.java | 7 +- .../classification/ClassifyTest.java | 36 ++--- ...owseClassificationEnforcementTestBase.java | 23 +++ ...ionEnforcementPreMethodInvocationTest.java | 23 ++- ...ntBrowseClassificationEnforcementTest.java | 11 +- ...ntSearchClassificationEnforcementTest.java | 11 +- ...rdBrowseClassificationEnforcementTest.java | 11 +- ...rdSearchClassificationEnforcementTest.java | 5 +- ...tionshipClassificationEnforcementTest.java | 17 +- ...edSearchClassificationEnforcementTest.java | 7 +- ...archClassificationEnforcementTestBase.java | 23 +++ .../test/integration/issue/RM2260Test.java | 18 ++- .../jscript/JSONConversionComponentTest.java | 31 +++- ...tentClassificationServiceImplUnitTest.java | 38 ++--- .../ClassifyContentPostUnitTest.java | 19 ++- 20 files changed, 444 insertions(+), 160 deletions(-) create mode 100644 rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/ClassificationAspectProperties.java diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/ClassificationAspectProperties.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/ClassificationAspectProperties.java new file mode 100644 index 0000000000..ca9c6863b3 --- /dev/null +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/ClassificationAspectProperties.java @@ -0,0 +1,153 @@ +/* + * Copyright (C) 2005-2015 Alfresco Software Limited. + * + * This file is part of Alfresco + * + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Alfresco is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + */ +package org.alfresco.module.org_alfresco_module_rm.classification; + +import java.util.Date; +import java.util.Set; + +/** + * A data transfer object for properties from the classification aspect. + * + * @author Tom Page + * @since 3.0.a + */ +public class ClassificationAspectProperties +{ + /** The security clearance needed to access the content. */ + private String classificationLevelId; + /** Free-form text identifying who classified the content. */ + private String classifiedBy; + /** The name of the agency responsible for the classification of this content. */ + private String classificationAgency; + /** A non-empty set of ids of reasons for classifying the content in this way. */ + private Set classificationReasonIds; + /** If provided, this is the date of the next downgrade evaluation. */ + private Date downgradeDate; + /** If provided, this is the event at which the next downgrade evaluation will take place. */ + private String downgradeEvent; + /** If a downgrade date or event is given then this must be provided too with the instructions for the evaluation. */ + private String downgradeInstructions; + /** If provided, this is the date of the next declassification evaluation. */ + private Date declassificationDate; + /** If provided, this is the event at which the next declassification evaluation will take place. */ + private String declassificationEvent; + /** This is an optional list of exemption category ids. */ + private Set exemptionCategoryIds; + + /** @return The security clearance needed to access the content. */ + public String getClassificationLevelId() + { + return classificationLevelId; + } + /** @param classificationLevelId The security clearance needed to access the content. */ + public void setClassificationLevelId(String classificationLevelId) + { + this.classificationLevelId = classificationLevelId; + } + /** @return Free-form text identifying who classified the content. */ + public String getClassifiedBy() + { + return classifiedBy; + } + /** @param classifiedBy Free-form text identifying who classified the content. */ + public void setClassifiedBy(String classifiedBy) + { + this.classifiedBy = classifiedBy; + } + /** @return The name of the agency responsible for the classification of this content. */ + public String getClassificationAgency() + { + return classificationAgency; + } + /** @param classificationAgency The name of the agency responsible for the classification of this content. */ + public void setClassificationAgency(String classificationAgency) + { + this.classificationAgency = classificationAgency; + } + /** @return A non-empty set of ids of reasons for classifying the content in this way. */ + public Set getClassificationReasonIds() + { + return classificationReasonIds; + } + /** @param classificationReasonIds A non-empty set of ids of reasons for classifying the content in this way. */ + public void setClassificationReasonIds(Set classificationReasonIds) + { + this.classificationReasonIds = classificationReasonIds; + } + /** @return If provided, this is the date of the next downgrade evaluation. */ + public Date getDowngradeDate() + { + return downgradeDate; + } + /** @param downgradeDate If provided, this is the date of the next downgrade evaluation. */ + public void setDowngradeDate(Date downgradeDate) + { + this.downgradeDate = downgradeDate; + } + /** @return If provided, this is the event at which the next downgrade evaluation will take place. */ + public String getDowngradeEvent() + { + return downgradeEvent; + } + /** @param downgradeEvent If provided, this is the event at which the next downgrade evaluation will take place. */ + public void setDowngradeEvent(String downgradeEvent) + { + this.downgradeEvent = downgradeEvent; + } + /** @return If a downgrade date or event is given then this must be provided too with the instructions for the evaluation. */ + public String getDowngradeInstructions() + { + return downgradeInstructions; + } + /** @param downgradeInstructions If a downgrade date or event is given then this must be provided too with the instructions for the evaluation. */ + public void setDowngradeInstructions(String downgradeInstructions) + { + this.downgradeInstructions = downgradeInstructions; + } + /** @return If provided, this is the date of the next declassification evaluation. */ + public Date getDeclassificationDate() + { + return declassificationDate; + } + /** @param declassificationDate If provided, this is the date of the next declassification evaluation. */ + public void setDeclassificationDate(Date declassificationDate) + { + this.declassificationDate = declassificationDate; + } + /** @return If provided, this is the event at which the next declassification evaluation will take place. */ + public String getDeclassificationEvent() + { + return declassificationEvent; + } + /** @param declassificationEvent If provided, this is the event at which the next declassification evaluation will take place. */ + public void setDeclassificationEvent(String declassificationEvent) + { + this.declassificationEvent = declassificationEvent; + } + /** @return This is an optional list of exemption category ids. */ + public Set getExemptionCategoryIds() + { + return exemptionCategoryIds; + } + /** @param exemptionCategoryIds This is an optional list of exemption category ids. */ + public void setExemptionCategoryIds(Set exemptionCategoryIds) + { + this.exemptionCategoryIds = exemptionCategoryIds; + } +} diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/ContentClassificationService.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/ContentClassificationService.java index 64cdf7109b..ac42e1dc72 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/ContentClassificationService.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/ContentClassificationService.java @@ -18,8 +18,6 @@ */ package org.alfresco.module.org_alfresco_module_rm.classification; -import java.util.Set; - import org.alfresco.module.org_alfresco_module_rm.classification.ClassificationException.InvalidNode; import org.alfresco.module.org_alfresco_module_rm.classification.ClassificationException.LevelIdNotFound; import org.alfresco.module.org_alfresco_module_rm.classification.ClassificationException.ReasonIdNotFound; @@ -45,10 +43,7 @@ public interface ContentClassificationService /** * Classify a piece of content. * - * @param classificationLevelId The security clearance needed to access the content. - * @param classifiedBy Free-form text identifying who classified the content. - * @param classificationAgency The name of the agency responsible for the classification of this content. - * @param classificationReasonIds A non-empty set of ids of reasons for classifying the content in this way. + * @param classificationAspectProperties The properties for the classification aspect. * @param content The node to classify. * @throws LevelIdNotFound If the supplied level id is not found. * @throws IllegalArgumentException If the supplied {@code classifiedBy} is {@code null}, @@ -57,17 +52,13 @@ public interface ContentClassificationService * @throws InvalidNodeRefException If the node could not be found. * @throws InvalidNode If the supplied node is not a content node. */ - void classifyContent(String classificationLevelId, String classifiedBy, String classificationAgency, - Set classificationReasonIds, NodeRef content) + void classifyContent(ClassificationAspectProperties classificationAspectProperties, NodeRef content) throws LevelIdNotFound, ReasonIdNotFound, InvalidNodeRefException, InvalidNode; /** * Edits the classified content. * - * @param classificationLevelId The security clearance needed to access the content. - * @param classifiedBy Free-form text identifying who edited the classified content. - * @param classificationAgency The name of the agency responsible for editing the classified content. - * @param classificationReasonIds A non-empty set of ids of reasons for editing the classified content in this way. + * @param classificationAspectProperties The properties for the classification aspect. * @param content The classified content which will be edited. * @throws LevelIdNotFound If the supplied level id is not found. * @throws IllegalArgumentException If the supplied {@code classifiedBy} is {@code null}, @@ -76,8 +67,7 @@ public interface ContentClassificationService * @throws InvalidNodeRefException If the node could not be found. * @throws InvalidNode If the supplied node is not a content node. */ - void editClassifiedContent(String classificationLevelId, String classifiedBy, String classificationAgency, - Set classificationReasonIds, NodeRef content) + void editClassifiedContent(ClassificationAspectProperties classificationAspectProperties, NodeRef content) throws LevelIdNotFound, ReasonIdNotFound, InvalidNodeRefException, InvalidNode; /** diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/ContentClassificationServiceImpl.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/ContentClassificationServiceImpl.java index 810b952042..ece40db5f1 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/ContentClassificationServiceImpl.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/ContentClassificationServiceImpl.java @@ -26,7 +26,6 @@ import java.io.Serializable; import java.util.HashMap; import java.util.HashSet; import java.util.Map; -import java.util.Set; import org.alfresco.model.ContentModel; import org.alfresco.model.QuickShareModel; @@ -94,52 +93,12 @@ public class ContentClassificationServiceImpl extends ServiceBaseImpl * @see org.alfresco.module.org_alfresco_module_rm.classification.ContentClassificationService#classifyContent(java.lang.String, java.lang.String, java.lang.String, java.util.Set, org.alfresco.service.cmr.repository.NodeRef) */ @Override - public void classifyContent(String classificationLevelId, String classifiedBy, String classificationAgency, - Set classificationReasonIds, final NodeRef content) + public void classifyContent(ClassificationAspectProperties classificationAspectProperties, final NodeRef content) { - checkNotBlank("classificationLevelId", classificationLevelId); - checkNotBlank("classifiedBy", classifiedBy); - // classificationAgency can be blank - mandatory("classificationReasonIds", classificationReasonIds); - mandatory("content", content); + validateProperties(classificationAspectProperties); + validateContent(content); - if (!dictionaryService.isSubClass(nodeService.getType(content), ContentModel.TYPE_CONTENT)) - { - throw new InvalidNode(content, "The supplied node is not a content node."); - } - if (nodeService.hasAspect(content, QuickShareModel.ASPECT_QSHARE)) - { - throw new IllegalStateException("A shared content cannot be classified."); - } - if (!securityClearanceService.isCurrentUserClearedForClassification(classificationLevelId)) - { - throw new LevelIdNotFound(classificationLevelId); - } - - final Map properties = new HashMap<>(); - // Initial classification id - if (nodeService.getProperty(content, PROP_INITIAL_CLASSIFICATION) == null) - { - properties.put(PROP_INITIAL_CLASSIFICATION, classificationLevelId); - } - - // Current classification id - properties.put(PROP_CURRENT_CLASSIFICATION, classificationLevelId); - - // Classification agency - properties.put(PROP_CLASSIFICATION_AGENCY, classificationAgency); - - properties.put(PROP_CLASSIFIED_BY, classifiedBy); - - // Classification reason ids - HashSet classificationReasons = new HashSet<>(); - for (String classificationReasonId : classificationReasonIds) - { - // Check the classification reason id - an exception will be thrown if the id cannot be found - reasonManager.findReasonById(classificationReasonId); - classificationReasons.add(classificationReasonId); - } - properties.put(PROP_CLASSIFICATION_REASONS, classificationReasons); + final Map properties = createPropertiesMap(classificationAspectProperties, content); // Add aspect authenticationUtil.runAs(new RunAsWork() @@ -152,6 +111,75 @@ public class ContentClassificationServiceImpl extends ServiceBaseImpl }, authenticationUtil.getAdminUserName()); } + /** + * Validate the properties contained in the {@link ClassificationAspectProperties}. + * + * @param classificationAspectProperties The DTO containing properties to be stored on the aspect. + */ + protected void validateProperties(ClassificationAspectProperties classificationAspectProperties) + { + String classificationLevelId = classificationAspectProperties.getClassificationLevelId(); + checkNotBlank("classificationLevelId", classificationLevelId); + checkNotBlank("classifiedBy", classificationAspectProperties.getClassifiedBy()); + mandatory("classificationReasonIds", classificationAspectProperties.getClassificationReasonIds()); + + if (!securityClearanceService.isCurrentUserClearedForClassification(classificationLevelId)) + { + throw new LevelIdNotFound(classificationLevelId); + } + + for (String classificationReasonId : classificationAspectProperties.getClassificationReasonIds()) + { + // Check the classification reason id - an exception will be thrown if the id cannot be found + reasonManager.findReasonById(classificationReasonId); + } + } + + /** + * Check the node is suitable for classifying. + * + * @param content The node to be classified. + */ + protected void validateContent(NodeRef content) + { + mandatory("content", content); + + if (!dictionaryService.isSubClass(nodeService.getType(content), ContentModel.TYPE_CONTENT)) + { + throw new InvalidNode(content, "The supplied node is not a content node."); + } + if (nodeService.hasAspect(content, QuickShareModel.ASPECT_QSHARE)) + { + throw new IllegalStateException("A shared content cannot be classified."); + } + } + + /** + * Create a map suitable for storing against the aspect from the data transfer object. + * + * @param propertiesDTO The properties data transfer object. + * @param content The node to be classified. + * @return A map from {@link QName QNames} to values. + */ + protected Map createPropertiesMap( + ClassificationAspectProperties propertiesDTO, NodeRef content) + { + final Map propertiesMap = new HashMap<>(); + + if (nodeService.getProperty(content, PROP_INITIAL_CLASSIFICATION) == null) + { + propertiesMap.put(PROP_INITIAL_CLASSIFICATION, propertiesDTO.getClassificationLevelId()); + } + propertiesMap.put(PROP_CURRENT_CLASSIFICATION, propertiesDTO.getClassificationLevelId()); + propertiesMap.put(PROP_CLASSIFICATION_AGENCY, propertiesDTO.getClassificationAgency()); + propertiesMap.put(PROP_CLASSIFIED_BY, propertiesDTO.getClassifiedBy()); + + HashSet classificationReasons = new HashSet<>(propertiesDTO.getClassificationReasonIds()); + propertiesMap.put(PROP_CLASSIFICATION_REASONS, classificationReasons); + + return propertiesMap; + } + /** * @see org.alfresco.module.org_alfresco_module_rm.classification.ContentClassificationService#hasClearance(org.alfresco.service.cmr.repository.NodeRef) */ @@ -187,16 +215,9 @@ public class ContentClassificationServiceImpl extends ServiceBaseImpl * @see org.alfresco.module.org_alfresco_module_rm.classification.ContentClassificationService#editClassifiedContent(java.lang.String, java.lang.String, java.lang.String, java.util.Set, org.alfresco.service.cmr.repository.NodeRef) */ @Override - public void editClassifiedContent(String classificationLevelId, String classifiedBy, String classificationAgency, - Set classificationReasonIds, NodeRef content) + public void editClassifiedContent(ClassificationAspectProperties classificationAspectProperties, NodeRef content) throws LevelIdNotFound, ReasonIdNotFound, InvalidNodeRefException, InvalidNode { - checkNotBlank("classificationLevelId", classificationLevelId); - checkNotBlank("classifiedBy", classifiedBy); - // classificationAgency can be blank - mandatory("classificationReasonIds", classificationReasonIds); - mandatory("content", content); - - classifyContent(classificationLevelId, classifiedBy, classificationAgency, classificationReasonIds, content); + classifyContent(classificationAspectProperties, content); } } diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/classification/ClassifyContentBase.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/classification/ClassifyContentBase.java index c2c5a9c741..71866d997c 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/classification/ClassifyContentBase.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/classification/ClassifyContentBase.java @@ -28,6 +28,7 @@ import java.util.HashSet; import java.util.Map; import java.util.Set; +import org.alfresco.module.org_alfresco_module_rm.classification.ClassificationAspectProperties; import org.alfresco.module.org_alfresco_module_rm.classification.ContentClassificationService; import org.alfresco.module.org_alfresco_module_rm.script.AbstractRmWebScript; import org.alfresco.service.cmr.repository.NodeRef; @@ -78,13 +79,10 @@ public abstract class ClassifyContentBase extends AbstractRmWebScript * Abstract method which does the action of either * classifying a content or editing a classified content * - * @param classificationLevelId The security clearance needed to access the content. - * @param classifiedBy Free-form text identifying who edited the classified content. - * @param classificationAgency The name of the agency responsible for editing the classified content. - * @param classificationReasonIds A non-empty set of ids of reasons for editing the classified content in this way. + * @param classificationAspectProperties The properties to use when classifying the content. * @param document The classified content which will be edited. */ - protected abstract void doClassifyAction(String classificationLevelId, String classifiedBy, String classificationAgency, Set classificationReasonIds, NodeRef document); + protected abstract void doClassifyAction(ClassificationAspectProperties classificationAspectProperties, NodeRef document); /** * @see org.springframework.extensions.webscripts.DeclarativeWebScript#executeImpl(org.springframework.extensions.webscripts.WebScriptRequest, @@ -99,9 +97,16 @@ public abstract class ClassifyContentBase extends AbstractRmWebScript String classifiedBy = getStringValueFromJSONObject(jsonObject, CLASSIFIED_BY); String classificationAgency = getStringValueFromJSONObject(jsonObject, CLASSIFICATION_AGENCY, false, false); Set classificationReasonIds = getClassificationReasonIds(jsonObject); + + ClassificationAspectProperties propertiesDTO = new ClassificationAspectProperties(); + propertiesDTO.setClassificationLevelId(classificationLevelId); + propertiesDTO.setClassifiedBy(classifiedBy); + propertiesDTO.setClassificationAgency(classificationAgency); + propertiesDTO.setClassificationReasonIds(classificationReasonIds); + NodeRef document = parseRequestForNodeRef(req); - doClassifyAction(classificationLevelId, classifiedBy, classificationAgency, classificationReasonIds, document); + doClassifyAction(propertiesDTO, document); Map model = new HashMap<>(1); model.put(SUCCESS, true); diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/classification/ClassifyContentPost.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/classification/ClassifyContentPost.java index d66fc346b6..adf8855008 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/classification/ClassifyContentPost.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/classification/ClassifyContentPost.java @@ -18,8 +18,7 @@ */ package org.alfresco.module.org_alfresco_module_rm.script.classification; -import java.util.Set; - +import org.alfresco.module.org_alfresco_module_rm.classification.ClassificationAspectProperties; import org.alfresco.service.cmr.repository.NodeRef; /** @@ -34,8 +33,8 @@ public class ClassifyContentPost extends ClassifyContentBase * @see org.alfresco.module.org_alfresco_module_rm.script.classification.ClassifyContentBase#doClassifyAction(java.lang.String, java.lang.String, java.lang.String, java.util.Set, org.alfresco.service.cmr.repository.NodeRef) */ @Override - protected void doClassifyAction(String classificationLevelId, String classifiedBy, String classificationAgency, Set classificationReasonIds, NodeRef document) + protected void doClassifyAction(ClassificationAspectProperties classificationAspectProperties, NodeRef document) { - getContentClassificationService().classifyContent(classificationLevelId, classifiedBy, classificationAgency, classificationReasonIds, document); + getContentClassificationService().classifyContent(classificationAspectProperties, document); } } \ No newline at end of file diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/classification/ClassifyContentPut.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/classification/ClassifyContentPut.java index fe3fc15bda..41a3b5c04e 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/classification/ClassifyContentPut.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/classification/ClassifyContentPut.java @@ -18,8 +18,7 @@ */ package org.alfresco.module.org_alfresco_module_rm.script.classification; -import java.util.Set; - +import org.alfresco.module.org_alfresco_module_rm.classification.ClassificationAspectProperties; import org.alfresco.service.cmr.repository.NodeRef; /** @@ -34,8 +33,8 @@ public class ClassifyContentPut extends ClassifyContentBase * @see org.alfresco.module.org_alfresco_module_rm.script.classification.ClassifyContentBase#doClassifyAction(java.lang.String, java.lang.String, java.lang.String, java.util.Set, org.alfresco.service.cmr.repository.NodeRef) */ @Override - protected void doClassifyAction(String classificationLevelId, String classifiedBy, String classificationAgency, Set classificationReasonIds, NodeRef document) + protected void doClassifyAction(ClassificationAspectProperties classificationAspectProperties, NodeRef document) { - getContentClassificationService().editClassifiedContent(classificationLevelId, classifiedBy, classificationAgency, classificationReasonIds, document); + getContentClassificationService().editClassifiedContent(classificationAspectProperties, document); } } \ No newline at end of file diff --git a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/classification/ClassifyTest.java b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/classification/ClassifyTest.java index 43670eb929..8b2134b35b 100644 --- a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/classification/ClassifyTest.java +++ b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/classification/ClassifyTest.java @@ -20,6 +20,7 @@ package org.alfresco.module.org_alfresco_module_rm.test.integration.classificati import java.util.Collections; +import org.alfresco.module.org_alfresco_module_rm.classification.ClassificationAspectProperties; import org.alfresco.module.org_alfresco_module_rm.classification.ClassificationException.LevelIdNotFound; import org.alfresco.module.org_alfresco_module_rm.classification.model.ClassifiedContentModel; import org.alfresco.module.org_alfresco_module_rm.role.FilePlanRoleService; @@ -28,8 +29,6 @@ import org.alfresco.repo.security.permissions.AccessDeniedException; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.util.GUID; -import com.google.common.collect.Sets; - /** * Classification level integration test * @@ -46,6 +45,19 @@ public class ClassifyTest extends BaseRMTestCase private static final String CLASSIFIED_BY = "classified by text"; private static final String RECORD_NAME = "recordname.txt"; + private ClassificationAspectProperties propertiesDTO; + + @Override + public void setUp() throws Exception + { + super.setUp(); + propertiesDTO = new ClassificationAspectProperties(); + propertiesDTO.setClassificationLevelId(CLASSIFICATION_LEVEL); + propertiesDTO.setClassifiedBy(CLASSIFIED_BY); + propertiesDTO.setClassificationAgency(CLASSIFICATION_AGENCY); + propertiesDTO.setClassificationReasonIds(Collections.singleton(CLASSIFICATION_REASON)); + } + /** * Given that a record is frozen * And unclassified @@ -68,12 +80,7 @@ public class ClassifyTest extends BaseRMTestCase public void when() throws Exception { - contentClassificationService.classifyContent( - CLASSIFICATION_LEVEL, - CLASSIFIED_BY, - CLASSIFICATION_AGENCY, - Collections.singleton(CLASSIFICATION_REASON), - record); + contentClassificationService.classifyContent(propertiesDTO, record); } }); } @@ -97,12 +104,7 @@ public class ClassifyTest extends BaseRMTestCase public void when() throws Exception { - contentClassificationService.classifyContent( - CLASSIFICATION_LEVEL, - CLASSIFIED_BY, - CLASSIFICATION_AGENCY, - Collections.singleton(CLASSIFICATION_REASON), - record); + contentClassificationService.classifyContent(propertiesDTO, record); } public void then() throws Exception @@ -151,8 +153,7 @@ public class ClassifyTest extends BaseRMTestCase @Override public Void run() { - contentClassificationService.classifyContent(CLASSIFICATION_LEVEL, CLASSIFIED_BY, CLASSIFICATION_AGENCY, - Sets.newHashSet(CLASSIFICATION_REASON), record); + contentClassificationService.classifyContent(propertiesDTO, record); return null; } }, myUser); @@ -202,8 +203,7 @@ public class ClassifyTest extends BaseRMTestCase @Override public Void run() { - contentClassificationService.classifyContent(CLASSIFICATION_LEVEL, CLASSIFIED_BY, CLASSIFICATION_AGENCY, - Sets.newHashSet(CLASSIFICATION_REASON), record); + contentClassificationService.classifyContent(propertiesDTO, record); return null; } }, myUser); diff --git a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/classification/interceptor/BrowseClassificationEnforcementTestBase.java b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/classification/interceptor/BrowseClassificationEnforcementTestBase.java index ed85481393..337a91a9bc 100644 --- a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/classification/interceptor/BrowseClassificationEnforcementTestBase.java +++ b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/classification/interceptor/BrowseClassificationEnforcementTestBase.java @@ -19,9 +19,12 @@ package org.alfresco.module.org_alfresco_module_rm.test.integration.classification.interceptor; import static org.alfresco.repo.security.authentication.AuthenticationUtil.getAdminUserName; +import static org.alfresco.util.GUID.generate; +import java.util.Collections; import java.util.List; +import org.alfresco.module.org_alfresco_module_rm.classification.ClassificationAspectProperties; import org.alfresco.module.org_alfresco_module_rm.test.util.BaseRMTestCase; import org.alfresco.service.cmr.repository.ChildAssociationRef; import org.alfresco.service.cmr.repository.NodeRef; @@ -38,6 +41,26 @@ public abstract class BrowseClassificationEnforcementTestBase extends BaseRMTest protected static final String LEVEL1 = "level1"; protected static final String LEVEL2 = "level2"; protected static final String REASON = "Test Reason 1"; + /** Classified properties for classification level 1. */ + protected ClassificationAspectProperties propertiesDTO1; + /** Classified properties for classification level 2. */ + protected ClassificationAspectProperties propertiesDTO2; + + @Override + public void setUp() throws Exception + { + super.setUp(); + propertiesDTO1 = new ClassificationAspectProperties(); + propertiesDTO1.setClassificationLevelId(LEVEL1); + propertiesDTO1.setClassifiedBy(generate()); + propertiesDTO1.setClassificationAgency(generate()); + propertiesDTO1.setClassificationReasonIds(Collections.singleton(REASON)); + propertiesDTO2 = new ClassificationAspectProperties(); + propertiesDTO2.setClassificationLevelId(LEVEL2); + propertiesDTO2.setClassifiedBy(generate()); + propertiesDTO2.setClassificationAgency(generate()); + propertiesDTO2.setClassificationReasonIds(Collections.singleton(REASON)); + } protected List browse(NodeRef folder, String userName) { diff --git a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/classification/interceptor/ClassificationEnforcementPreMethodInvocationTest.java b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/classification/interceptor/ClassificationEnforcementPreMethodInvocationTest.java index b0220b79d9..38aa493450 100644 --- a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/classification/interceptor/ClassificationEnforcementPreMethodInvocationTest.java +++ b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/classification/interceptor/ClassificationEnforcementPreMethodInvocationTest.java @@ -18,14 +18,15 @@ */ package org.alfresco.module.org_alfresco_module_rm.test.integration.classification.interceptor; -import static com.google.common.collect.Sets.newHashSet; import static org.alfresco.repo.site.SiteModel.SITE_MANAGER; import static org.alfresco.util.GUID.generate; import java.io.Serializable; +import java.util.Collections; import java.util.HashMap; import java.util.Map; +import org.alfresco.module.org_alfresco_module_rm.classification.ClassificationAspectProperties; import org.alfresco.module.org_alfresco_module_rm.classification.interceptor.processor.AccessDeniedException; import org.alfresco.module.org_alfresco_module_rm.test.util.BaseRMTestCase; import org.alfresco.service.cmr.repository.NodeRef; @@ -39,6 +40,22 @@ import org.alfresco.service.namespace.QName; */ public class ClassificationEnforcementPreMethodInvocationTest extends BaseRMTestCase { + private static final String LEVEL1 = "level1"; + private static final String REASON = "Test Reason 1"; + + private ClassificationAspectProperties propertiesDTO; + + @Override + public void setUp() throws Exception + { + super.setUp(); + propertiesDTO = new ClassificationAspectProperties(); + propertiesDTO.setClassificationLevelId(LEVEL1); + propertiesDTO.setClassifiedBy(generate()); + propertiesDTO.setClassificationAgency(generate()); + propertiesDTO.setClassificationReasonIds(Collections.singleton(REASON)); + } + /** * @see org.alfresco.module.org_alfresco_module_rm.test.util.BaseRMTestCase#isCollaborationSiteTest() */ @@ -63,8 +80,6 @@ public class ClassificationEnforcementPreMethodInvocationTest extends BaseRMTest doBehaviourDrivenTest(new BehaviourDrivenTest() { private String testUser; - private static final String LEVEL1 = "level1"; - private static final String REASON = "Test Reason 1"; private NodeRef folder1; private NodeRef folder2; private NodeRef doc; @@ -83,7 +98,7 @@ public class ClassificationEnforcementPreMethodInvocationTest extends BaseRMTest folder2 = fileFolderService.create(documentLibrary, generate(), TYPE_FOLDER).getNodeRef(); doc = fileFolderService.create(folder1, generate(), TYPE_CONTENT).getNodeRef(); - contentClassificationService.classifyContent(LEVEL1, generate(), generate(), newHashSet(REASON), doc); + contentClassificationService.classifyContent(propertiesDTO, doc); } /** diff --git a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/classification/interceptor/DocumentBrowseClassificationEnforcementTest.java b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/classification/interceptor/DocumentBrowseClassificationEnforcementTest.java index 08ec71e3d7..aef7e871b3 100644 --- a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/classification/interceptor/DocumentBrowseClassificationEnforcementTest.java +++ b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/classification/interceptor/DocumentBrowseClassificationEnforcementTest.java @@ -19,7 +19,6 @@ package org.alfresco.module.org_alfresco_module_rm.test.integration.classification.interceptor; import static com.google.common.collect.Lists.newArrayList; -import static com.google.common.collect.Sets.newHashSet; import static org.alfresco.repo.site.SiteModel.SITE_MANAGER; import static org.alfresco.util.GUID.generate; @@ -80,7 +79,7 @@ public class DocumentBrowseClassificationEnforcementTest extends BrowseClassific doc1 = fileFolderService.create(folder, generate(), TYPE_CONTENT).getNodeRef(); doc2 = fileFolderService.create(folder, generate(), TYPE_CONTENT).getNodeRef(); - contentClassificationService.classifyContent(LEVEL1, generate(), generate(), newHashSet(REASON), doc1); + contentClassificationService.classifyContent(propertiesDTO1, doc1); } /** @@ -172,8 +171,8 @@ public class DocumentBrowseClassificationEnforcementTest extends BrowseClassific doc2 = fileFolderService.create(folder, generate(), TYPE_CONTENT).getNodeRef(); doc3 = fileFolderService.create(folder, generate(), TYPE_CONTENT).getNodeRef(); - contentClassificationService.classifyContent(LEVEL1, generate(), generate(), newHashSet(REASON), doc1); - contentClassificationService.classifyContent(LEVEL2, generate(), generate(), newHashSet(REASON), doc2); + contentClassificationService.classifyContent(propertiesDTO1, doc1); + contentClassificationService.classifyContent(propertiesDTO2, doc2); } /** @@ -267,8 +266,8 @@ public class DocumentBrowseClassificationEnforcementTest extends BrowseClassific doc2 = fileFolderService.create(folder, generate(), TYPE_CONTENT).getNodeRef(); doc3 = fileFolderService.create(folder, generate(), TYPE_CONTENT).getNodeRef(); - contentClassificationService.classifyContent(LEVEL1, generate(), generate(), newHashSet(REASON), doc1); - contentClassificationService.classifyContent(LEVEL2, generate(), generate(), newHashSet(REASON), doc2); + contentClassificationService.classifyContent(propertiesDTO1, doc1); + contentClassificationService.classifyContent(propertiesDTO2, doc2); } /** diff --git a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/classification/interceptor/DocumentSearchClassificationEnforcementTest.java b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/classification/interceptor/DocumentSearchClassificationEnforcementTest.java index dfb4b8f749..3c4450379d 100644 --- a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/classification/interceptor/DocumentSearchClassificationEnforcementTest.java +++ b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/classification/interceptor/DocumentSearchClassificationEnforcementTest.java @@ -18,7 +18,6 @@ */ package org.alfresco.module.org_alfresco_module_rm.test.integration.classification.interceptor; -import static com.google.common.collect.Sets.newHashSet; import static java.lang.Integer.MAX_VALUE; import static org.alfresco.repo.site.SiteModel.SITE_MANAGER; import static org.alfresco.service.cmr.repository.StoreRef.STORE_REF_WORKSPACE_SPACESSTORE; @@ -83,7 +82,7 @@ public class DocumentSearchClassificationEnforcementTest extends SearchClassific doc1 = fileFolderService.create(folder, searchQuery + generate(), TYPE_CONTENT).getNodeRef(); doc2 = fileFolderService.create(folder, searchQuery + generate(), TYPE_CONTENT).getNodeRef(); - contentClassificationService.classifyContent(LEVEL1, generate(), generate(), newHashSet(REASON), doc1); + contentClassificationService.classifyContent(propertiesDTO1, doc1); } /** @@ -174,8 +173,8 @@ public class DocumentSearchClassificationEnforcementTest extends SearchClassific doc2 = fileFolderService.create(folder, searchQuery + generate(), TYPE_CONTENT).getNodeRef(); doc3 = fileFolderService.create(folder, searchQuery + generate(), TYPE_CONTENT).getNodeRef(); - contentClassificationService.classifyContent(LEVEL1, generate(), generate(), newHashSet(REASON), doc1); - contentClassificationService.classifyContent(LEVEL2, generate(), generate(), newHashSet(REASON), doc2); + contentClassificationService.classifyContent(propertiesDTO1, doc1); + contentClassificationService.classifyContent(propertiesDTO2, doc2); } /** @@ -266,8 +265,8 @@ public class DocumentSearchClassificationEnforcementTest extends SearchClassific doc2 = fileFolderService.create(folder, searchQuery + generate(), TYPE_CONTENT).getNodeRef(); doc3 = fileFolderService.create(folder, searchQuery + generate(), TYPE_CONTENT).getNodeRef(); - contentClassificationService.classifyContent(LEVEL1, generate(), generate(), newHashSet(REASON), doc1); - contentClassificationService.classifyContent(LEVEL2, generate(), generate(), newHashSet(REASON), doc2); + contentClassificationService.classifyContent(propertiesDTO1, doc1); + contentClassificationService.classifyContent(propertiesDTO2, doc2); } /** diff --git a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/classification/interceptor/RecordBrowseClassificationEnforcementTest.java b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/classification/interceptor/RecordBrowseClassificationEnforcementTest.java index e0c87cdaed..be00943855 100644 --- a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/classification/interceptor/RecordBrowseClassificationEnforcementTest.java +++ b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/classification/interceptor/RecordBrowseClassificationEnforcementTest.java @@ -19,7 +19,6 @@ package org.alfresco.module.org_alfresco_module_rm.test.integration.classification.interceptor; import static com.google.common.collect.Lists.newArrayList; -import static com.google.common.collect.Sets.newHashSet; import static org.alfresco.module.org_alfresco_module_rm.role.FilePlanRoleService.ROLE_ADMIN; import static org.alfresco.util.GUID.generate; @@ -74,7 +73,7 @@ public class RecordBrowseClassificationEnforcementTest extends BrowseClassificat record1 = utils.createRecord(folder, generate()); record2 = utils.createRecord(folder, generate()); - contentClassificationService.classifyContent(LEVEL1, generate(), generate(), newHashSet(REASON), record1); + contentClassificationService.classifyContent(propertiesDTO1, record1); } /** @@ -169,8 +168,8 @@ public class RecordBrowseClassificationEnforcementTest extends BrowseClassificat record2 = utils.createRecord(folder, generate()); record3 = utils.createRecord(folder, generate()); - contentClassificationService.classifyContent(LEVEL1, generate(), generate(), newHashSet(REASON), record1); - contentClassificationService.classifyContent(LEVEL2, generate(), generate(), newHashSet(REASON), record2); + contentClassificationService.classifyContent(propertiesDTO1, record1); + contentClassificationService.classifyContent(propertiesDTO2, record2); } /** @@ -267,8 +266,8 @@ public class RecordBrowseClassificationEnforcementTest extends BrowseClassificat record2 = utils.createRecord(folder, generate()); record3 = utils.createRecord(folder, generate()); - contentClassificationService.classifyContent(LEVEL1, generate(), generate(), newHashSet(REASON), record1); - contentClassificationService.classifyContent(LEVEL2, generate(), generate(), newHashSet(REASON), record2); + contentClassificationService.classifyContent(propertiesDTO1, record1); + contentClassificationService.classifyContent(propertiesDTO2, record2); } /** diff --git a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/classification/interceptor/RecordSearchClassificationEnforcementTest.java b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/classification/interceptor/RecordSearchClassificationEnforcementTest.java index 8f943c958d..9028f3d6de 100644 --- a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/classification/interceptor/RecordSearchClassificationEnforcementTest.java +++ b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/classification/interceptor/RecordSearchClassificationEnforcementTest.java @@ -18,7 +18,6 @@ */ package org.alfresco.module.org_alfresco_module_rm.test.integration.classification.interceptor; -import static com.google.common.collect.Sets.newHashSet; import static org.alfresco.module.org_alfresco_module_rm.role.FilePlanRoleService.ROLE_ADMIN; import static org.alfresco.util.GUID.generate; @@ -265,8 +264,8 @@ public class RecordSearchClassificationEnforcementTest extends SearchClassificat record2 = utils.createRecord(folder, searchQuery + generate()); record3 = utils.createRecord(folder, searchQuery + generate()); - contentClassificationService.classifyContent(LEVEL1, generate(), generate(), newHashSet(REASON), record1); - contentClassificationService.classifyContent(LEVEL2, generate(), generate(), newHashSet(REASON), record2); + contentClassificationService.classifyContent(propertiesDTO1, record1); + contentClassificationService.classifyContent(propertiesDTO2, record2); } /** diff --git a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/classification/interceptor/RelationshipClassificationEnforcementTest.java b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/classification/interceptor/RelationshipClassificationEnforcementTest.java index 4d5b09717f..57f10b5e65 100644 --- a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/classification/interceptor/RelationshipClassificationEnforcementTest.java +++ b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/classification/interceptor/RelationshipClassificationEnforcementTest.java @@ -19,13 +19,14 @@ package org.alfresco.module.org_alfresco_module_rm.test.integration.classification.interceptor; import static com.google.common.collect.Lists.newArrayList; -import static com.google.common.collect.Sets.newHashSet; import static org.alfresco.module.org_alfresco_module_rm.role.FilePlanRoleService.ROLE_USER; import static org.alfresco.util.GUID.generate; +import java.util.Collections; import java.util.List; import java.util.Set; +import org.alfresco.module.org_alfresco_module_rm.classification.ClassificationAspectProperties; import org.alfresco.module.org_alfresco_module_rm.relationship.Relationship; import org.alfresco.module.org_alfresco_module_rm.test.util.BaseRMTestCase; import org.alfresco.service.cmr.repository.ChildAssociationRef; @@ -42,6 +43,18 @@ public class RelationshipClassificationEnforcementTest extends BaseRMTestCase private static final String LEVEL1 = "level1"; private static final String LEVEL3 = "level3"; private static final String REASON = "Test Reason 1"; + private ClassificationAspectProperties propertiesDTO; + + @Override + public void setUp() throws Exception + { + super.setUp(); + propertiesDTO = new ClassificationAspectProperties(); + propertiesDTO.setClassificationLevelId(LEVEL1); + propertiesDTO.setClassifiedBy(generate()); + propertiesDTO.setClassificationAgency(generate()); + propertiesDTO.setClassificationReasonIds(Collections.singleton(REASON)); + } public void testRelationshipClassification() { @@ -94,7 +107,7 @@ public class RelationshipClassificationEnforcementTest extends BaseRMTestCase { filePlanPermissionService.setPermission(category, myUser, FILING); securityClearanceService.setUserSecurityClearance(myUser, LEVEL3); - contentClassificationService.classifyContent(LEVEL1, generate(), generate(), newHashSet(REASON), record1); + contentClassificationService.classifyContent(propertiesDTO, record1); relationshipService.addRelationship(CUSTOM_REF_RENDITION.getLocalName(), record1, record2); } diff --git a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/classification/interceptor/SavedSearchClassificationEnforcementTest.java b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/classification/interceptor/SavedSearchClassificationEnforcementTest.java index 3174e376ef..4bce326889 100644 --- a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/classification/interceptor/SavedSearchClassificationEnforcementTest.java +++ b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/classification/interceptor/SavedSearchClassificationEnforcementTest.java @@ -18,7 +18,6 @@ */ package org.alfresco.module.org_alfresco_module_rm.test.integration.classification.interceptor; -import static com.google.common.collect.Sets.newHashSet; import static java.lang.Integer.MAX_VALUE; import static org.alfresco.module.org_alfresco_module_rm.role.FilePlanRoleService.ROLE_ADMIN; import static org.alfresco.module.org_alfresco_module_rm.search.SavedSearchDetails.QUERY; @@ -96,9 +95,9 @@ public class SavedSearchClassificationEnforcementTest extends SearchClassificati searchParameters.setIncludeUndeclaredRecords(true); rmSearchService.saveSearch(siteId, savedSearchName, generate(), searchQuery + "*", searchParameters, true); - contentClassificationService.classifyContent(LEVEL1, generate(), generate(), newHashSet(REASON), record1); - contentClassificationService.classifyContent(LEVEL2, generate(), generate(), newHashSet(REASON), record3); - contentClassificationService.classifyContent(LEVEL1, generate(), generate(), newHashSet(REASON), record5); + contentClassificationService.classifyContent(propertiesDTO1, record1); + contentClassificationService.classifyContent(propertiesDTO2, record3); + contentClassificationService.classifyContent(propertiesDTO1, record5); } /** diff --git a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/classification/interceptor/SearchClassificationEnforcementTestBase.java b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/classification/interceptor/SearchClassificationEnforcementTestBase.java index 482b2d385e..669ebc28d9 100644 --- a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/classification/interceptor/SearchClassificationEnforcementTestBase.java +++ b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/classification/interceptor/SearchClassificationEnforcementTestBase.java @@ -19,9 +19,12 @@ package org.alfresco.module.org_alfresco_module_rm.test.integration.classification.interceptor; import static org.alfresco.repo.security.authentication.AuthenticationUtil.getAdminUserName; +import static org.alfresco.util.GUID.generate; +import java.util.Collections; import java.util.List; +import org.alfresco.module.org_alfresco_module_rm.classification.ClassificationAspectProperties; import org.alfresco.module.org_alfresco_module_rm.test.util.BaseRMTestCase; import org.alfresco.service.cmr.repository.NodeRef; @@ -37,6 +40,26 @@ public abstract class SearchClassificationEnforcementTestBase extends BaseRMTest protected static final String LEVEL1 = "level1"; protected static final String LEVEL2 = "level2"; protected static final String REASON = "Test Reason 1"; + /** Classified properties for classification level 1. */ + protected ClassificationAspectProperties propertiesDTO1; + /** Classified properties for classification level 2. */ + protected ClassificationAspectProperties propertiesDTO2; + + @Override + public void setUp() throws Exception + { + super.setUp(); + propertiesDTO1 = new ClassificationAspectProperties(); + propertiesDTO1.setClassificationLevelId(LEVEL1); + propertiesDTO1.setClassifiedBy(generate()); + propertiesDTO1.setClassificationAgency(generate()); + propertiesDTO1.setClassificationReasonIds(Collections.singleton(REASON)); + propertiesDTO2 = new ClassificationAspectProperties(); + propertiesDTO2.setClassificationLevelId(LEVEL2); + propertiesDTO2.setClassifiedBy(generate()); + propertiesDTO2.setClassificationAgency(generate()); + propertiesDTO2.setClassificationReasonIds(Collections.singleton(REASON)); + } protected abstract List search(String searchQuery); diff --git a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/issue/RM2260Test.java b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/issue/RM2260Test.java index 50b981e5bd..2f37d59916 100644 --- a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/issue/RM2260Test.java +++ b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/issue/RM2260Test.java @@ -18,10 +18,12 @@ */ package org.alfresco.module.org_alfresco_module_rm.test.integration.issue; -import static com.google.common.collect.Sets.newHashSet; import static org.alfresco.module.org_alfresco_module_rm.role.FilePlanRoleService.ROLE_USER; import static org.alfresco.util.GUID.generate; +import java.util.Collections; + +import org.alfresco.module.org_alfresco_module_rm.classification.ClassificationAspectProperties; import org.alfresco.module.org_alfresco_module_rm.test.util.BaseRMTestCase; import org.alfresco.service.cmr.repository.NodeRef; @@ -35,6 +37,18 @@ public class RM2260Test extends BaseRMTestCase { private static final String LEVEL = "level1"; private static final String REASON = "Test Reason 1"; + private ClassificationAspectProperties propertiesDTO; + + @Override + public void setUp() throws Exception + { + super.setUp(); + propertiesDTO = new ClassificationAspectProperties(); + propertiesDTO.setClassificationLevelId(LEVEL); + propertiesDTO.setClassifiedBy(generate()); + propertiesDTO.setClassificationAgency(generate()); + propertiesDTO.setClassificationReasonIds(Collections.singleton(REASON)); + } public void testClassifiyingContentAsNonAdminUser() { @@ -86,7 +100,7 @@ public class RM2260Test extends BaseRMTestCase @Override public Void run() { - contentClassificationService.classifyContent(LEVEL, generate(), generate(), newHashSet(REASON), record); + contentClassificationService.classifyContent(propertiesDTO, record); return null; } }, myUser); diff --git a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/legacy/jscript/JSONConversionComponentTest.java b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/legacy/jscript/JSONConversionComponentTest.java index adb4b3337d..e22ba86800 100644 --- a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/legacy/jscript/JSONConversionComponentTest.java +++ b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/legacy/jscript/JSONConversionComponentTest.java @@ -18,13 +18,14 @@ */ package org.alfresco.module.org_alfresco_module_rm.test.legacy.jscript; -import static com.google.common.collect.Sets.newHashSet; import static org.alfresco.module.org_alfresco_module_rm.classification.ClassificationLevelManager.UNCLASSIFIED_ID; import static org.alfresco.module.org_alfresco_module_rm.jscript.app.JSONConversionComponent.IS_CLASSIFIED; import static org.alfresco.util.GUID.generate; import java.io.Serializable; +import java.util.Collections; +import org.alfresco.module.org_alfresco_module_rm.classification.ClassificationAspectProperties; import org.alfresco.module.org_alfresco_module_rm.classification.ContentClassificationService; import org.alfresco.module.org_alfresco_module_rm.test.util.BaseRMTestCase; import org.alfresco.repo.jscript.app.JSONConversionComponent; @@ -45,6 +46,26 @@ public class JSONConversionComponentTest extends BaseRMTestCase private ContentClassificationService contentClassificationService; private NodeRef record; + /** Classification properties for classification level 1. */ + private ClassificationAspectProperties level1PropertiesDTO; + /** Classification properties for unclassified content. */ + private ClassificationAspectProperties unclassifiedPropertiesDTO; + + @Override + public void setUp() throws Exception + { + super.setUp(); + level1PropertiesDTO = new ClassificationAspectProperties(); + level1PropertiesDTO.setClassificationLevelId(LEVEL1); + level1PropertiesDTO.setClassifiedBy(generate()); + level1PropertiesDTO.setClassificationAgency(generate()); + level1PropertiesDTO.setClassificationReasonIds(Collections.singleton(REASON1)); + unclassifiedPropertiesDTO = new ClassificationAspectProperties(); + unclassifiedPropertiesDTO.setClassificationLevelId(UNCLASSIFIED_ID); + unclassifiedPropertiesDTO.setClassifiedBy(generate()); + unclassifiedPropertiesDTO.setClassificationAgency(generate()); + unclassifiedPropertiesDTO.setClassificationReasonIds(Collections.singleton(REASON1)); + } @Override protected void initServices() @@ -92,7 +113,7 @@ public class JSONConversionComponentTest extends BaseRMTestCase @Override public void when() throws Exception { - contentClassificationService.classifyContent(LEVEL1, generate(), generate(), newHashSet(REASON1), record); + contentClassificationService.classifyContent(level1PropertiesDTO, record); jsonString = converter.toJSON(record, true); } @@ -131,7 +152,7 @@ public class JSONConversionComponentTest extends BaseRMTestCase @Override public void when() throws Exception { - contentClassificationService.classifyContent(UNCLASSIFIED_ID, generate(), generate(), newHashSet(REASON1), record); + contentClassificationService.classifyContent(unclassifiedPropertiesDTO, record); jsonString = converter.toJSON(record, true); } @@ -206,7 +227,7 @@ public class JSONConversionComponentTest extends BaseRMTestCase @Override public void when() throws Exception { - contentClassificationService.classifyContent(LEVEL1, generate(), generate(), newHashSet(REASON1), file); + contentClassificationService.classifyContent(level1PropertiesDTO, file); jsonString = converter.toJSON(file, true); } @@ -243,7 +264,7 @@ public class JSONConversionComponentTest extends BaseRMTestCase @Override public void when() throws Exception { - contentClassificationService.classifyContent(UNCLASSIFIED_ID, generate(), generate(), newHashSet(REASON1), file); + contentClassificationService.classifyContent(unclassifiedPropertiesDTO, file); jsonString = converter.toJSON(file, true); } diff --git a/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/classification/ContentClassificationServiceImplUnitTest.java b/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/classification/ContentClassificationServiceImplUnitTest.java index 1640b05675..fd12fd04f4 100644 --- a/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/classification/ContentClassificationServiceImplUnitTest.java +++ b/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/classification/ContentClassificationServiceImplUnitTest.java @@ -18,7 +18,6 @@ */ package org.alfresco.module.org_alfresco_module_rm.classification; -import static com.google.common.collect.Sets.newHashSet; import static org.alfresco.module.org_alfresco_module_rm.test.util.AlfMock.generateNodeRef; import static org.alfresco.module.org_alfresco_module_rm.test.util.AlfMock.generateText; import static org.junit.Assert.assertEquals; @@ -37,6 +36,8 @@ import java.util.List; import java.util.Map; import java.util.Set; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.Sets; import org.alfresco.model.ContentModel; import org.alfresco.model.QuickShareModel; import org.alfresco.module.org_alfresco_module_rm.classification.ClassificationException.InvalidNode; @@ -57,9 +58,6 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.MockitoAnnotations; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.Sets; - /** * Unit tests for {@link ContentClassificationServiceImpl}. * @@ -78,6 +76,7 @@ public class ContentClassificationServiceImplUnitTest implements ClassifiedConte @Mock DictionaryService mockDictionaryService; @Mock SecurityClearanceService mockSecurityClearanceService; @Mock AuthenticationUtil mockAuthenticationUtil; + @Mock ClassificationAspectProperties mockPropertiesDTO; @Captor ArgumentCaptor> propertiesCaptor; @Before public void setUp() @@ -103,10 +102,14 @@ public class ContentClassificationServiceImplUnitTest implements ClassifiedConte when(mockDictionaryService.isSubClass(mockNodeService.getType(content), ContentModel.TYPE_CONTENT)).thenReturn(true); when(mockNodeService.hasAspect(content, ClassifiedContentModel.ASPECT_CLASSIFIED)).thenReturn(false); when(mockSecurityClearanceService.isCurrentUserClearedForClassification("levelId1")).thenReturn(true); + // Set up the mock DTO. + when(mockPropertiesDTO.getClassificationLevelId()).thenReturn("levelId1"); + when(mockPropertiesDTO.getClassifiedBy()).thenReturn("classifiedBy"); + when(mockPropertiesDTO.getClassificationAgency()).thenReturn("classificationAgency"); + when(mockPropertiesDTO.getClassificationReasonIds()).thenReturn(Sets.newHashSet("reasonId1", "reasonId2")); // Call the method under test - contentClassificationServiceImpl.classifyContent("levelId1", "classifiedBy", "classificationAgency", - Sets.newHashSet("reasonId1", "reasonId2"), content); + contentClassificationServiceImpl.classifyContent(mockPropertiesDTO, content); verify(mockNodeService).addAspect(eq(content), eq(ClassifiedContentModel.ASPECT_CLASSIFIED), propertiesCaptor.capture()); @@ -128,28 +131,26 @@ public class ContentClassificationServiceImplUnitTest implements ClassifiedConte /** Classify a folder using the classifyContent method and check that an exception is raised. */ @Test(expected = InvalidNode.class) - public void classifyContent_notContent() + public void validateContent_notContent() { // Create a folder node. NodeRef notAPieceOfContent = new NodeRef("not://a/piece/of/content/"); when(mockNodeService.getType(notAPieceOfContent)).thenReturn(ContentModel.TYPE_FOLDER); // Call the method under test. - contentClassificationServiceImpl.classifyContent("levelId1", "classifiedBy", "classificationAgency", - Sets.newHashSet("reasonId1", "reasonId2"), notAPieceOfContent); + contentClassificationServiceImpl.validateContent(notAPieceOfContent); } /** Classify a piece of content that has already been shared */ @Test(expected = IllegalStateException.class) - public void classifySharedContent() + public void validateContent_sharedContent() { NodeRef sharedContent = generateNodeRef(mockNodeService); when(mockDictionaryService.isSubClass(mockNodeService.getType(sharedContent), ContentModel.TYPE_CONTENT)).thenReturn(true); when(mockNodeService.hasAspect(sharedContent, QuickShareModel.ASPECT_QSHARE)).thenReturn(true); // Call the method under test. - contentClassificationServiceImpl.classifyContent(generateText(), generateText(), generateText(), - newHashSet(generateText(), generateText()), sharedContent); + contentClassificationServiceImpl.validateContent(sharedContent); } /** @@ -159,15 +160,16 @@ public class ContentClassificationServiceImplUnitTest implements ClassifiedConte @Test(expected = LevelIdNotFound.class) public void classifyContent_notFound() { - // Create a classified piece of content. - NodeRef classifiedContent = new NodeRef("classified://content/"); - when(mockDictionaryService.isSubClass(mockNodeService.getType(classifiedContent), ContentModel.TYPE_CONTENT)).thenReturn(true); - when(mockNodeService.hasAspect(classifiedContent, ClassifiedContentModel.ASPECT_CLASSIFIED)).thenReturn(false); + // The user doesn't have level 1 clearance. when(mockSecurityClearanceService.isCurrentUserClearedForClassification("levelId1")).thenReturn(false); + // Set up the mock DTO. + when(mockPropertiesDTO.getClassificationLevelId()).thenReturn("levelId1"); + when(mockPropertiesDTO.getClassifiedBy()).thenReturn("classifiedBy"); + when(mockPropertiesDTO.getClassificationAgency()).thenReturn("classificationAgency"); + when(mockPropertiesDTO.getClassificationReasonIds()).thenReturn(Sets.newHashSet("reasonId1", "reasonId2")); // Call the method under test. - contentClassificationServiceImpl.classifyContent("levelId1", "classifiedBy","classificationAgency", - Sets.newHashSet("reasonId1", "reasonId2"), classifiedContent); + contentClassificationServiceImpl.validateProperties(mockPropertiesDTO); } /** diff --git a/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/script/classification/ClassifyContentPostUnitTest.java b/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/script/classification/ClassifyContentPostUnitTest.java index a5fe96fa4c..3d1d5ef17e 100644 --- a/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/script/classification/ClassifyContentPostUnitTest.java +++ b/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/script/classification/ClassifyContentPostUnitTest.java @@ -18,7 +18,6 @@ */ package org.alfresco.module.org_alfresco_module_rm.script.classification; -import static com.google.common.collect.Sets.newHashSet; import static org.alfresco.module.org_alfresco_module_rm.script.classification.ClassifyContentPost.CLASSIFICATION_AGENCY; import static org.alfresco.module.org_alfresco_module_rm.script.classification.ClassifyContentPost.CLASSIFICATION_LEVEL_ID; import static org.alfresco.module.org_alfresco_module_rm.script.classification.ClassifyContentPost.CLASSIFICATION_REASONS; @@ -29,11 +28,14 @@ import static org.alfresco.util.WebScriptUtils.putValuetoJSONObject; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; +import static org.mockito.Matchers.eq; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import java.util.Map; +import com.google.common.collect.Sets; +import org.alfresco.module.org_alfresco_module_rm.classification.ClassificationAspectProperties; import org.alfresco.module.org_alfresco_module_rm.classification.ClassificationLevelManager; import org.alfresco.module.org_alfresco_module_rm.classification.ClassificationReasonManager; import org.alfresco.module.org_alfresco_module_rm.classification.ContentClassificationService; @@ -41,6 +43,8 @@ import org.alfresco.module.org_alfresco_module_rm.test.util.BaseWebScriptUnitTes import org.json.JSONArray; import org.json.JSONObject; import org.junit.Test; +import org.mockito.ArgumentCaptor; +import org.mockito.Captor; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Spy; @@ -74,13 +78,13 @@ public class ClassifyContentPostUnitTest extends BaseWebScriptUnitTest /** Mocked content classification service */ private @Mock ContentClassificationService mockedContentClassificationService; - /** Mocked classification level manager */ private @Mock ClassificationLevelManager mockedClassificationLevelManager; - /** Mocked classification reason manager */ private @Mock ClassificationReasonManager mockedClassificationReasonManager; + /** Captor for the classification aspect properties. */ + private @Captor ArgumentCaptor propertiesDTOCaptor; /** * @see org.alfresco.module.org_alfresco_module_rm.test.util.BaseWebScriptUnitTest#getWebScript() */ @@ -120,7 +124,14 @@ public class ClassifyContentPostUnitTest extends BaseWebScriptUnitTest assertEquals(getStringValueFromJSONObject(json, SUCCESS), Boolean.TRUE.toString()); // Verify that the classify content method was called - verify(mockedContentClassificationService, times(1)).classifyContent(LEVEL_ID, BY, AGENCY, newHashSet(REASON1_ID, REASON2_ID), record); + verify(mockedContentClassificationService, times(1)).classifyContent(propertiesDTOCaptor.capture(), eq(record)); + + // Check the values in the DTO. + ClassificationAspectProperties propertiesDTO = propertiesDTOCaptor.getValue(); + assertEquals(LEVEL_ID, propertiesDTO.getClassificationLevelId()); + assertEquals(BY, propertiesDTO.getClassifiedBy()); + assertEquals(AGENCY, propertiesDTO.getClassificationAgency()); + assertEquals(Sets.newHashSet(REASON1_ID, REASON2_ID), propertiesDTO.getClassificationReasonIds()); } @Test public void classifyingWithBlankClassifiedByShouldReturn4xxResponse() throws Exception