mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
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
This commit is contained in:
@@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
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<String> 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<String> 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<String> getClassificationReasonIds()
|
||||
{
|
||||
return classificationReasonIds;
|
||||
}
|
||||
/** @param classificationReasonIds A non-empty set of ids of reasons for classifying the content in this way. */
|
||||
public void setClassificationReasonIds(Set<String> 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<String> getExemptionCategoryIds()
|
||||
{
|
||||
return exemptionCategoryIds;
|
||||
}
|
||||
/** @param exemptionCategoryIds This is an optional list of exemption category ids. */
|
||||
public void setExemptionCategoryIds(Set<String> exemptionCategoryIds)
|
||||
{
|
||||
this.exemptionCategoryIds = exemptionCategoryIds;
|
||||
}
|
||||
}
|
@@ -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<String> 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<String> classificationReasonIds, NodeRef content)
|
||||
void editClassifiedContent(ClassificationAspectProperties classificationAspectProperties, NodeRef content)
|
||||
throws LevelIdNotFound, ReasonIdNotFound, InvalidNodeRefException, InvalidNode;
|
||||
|
||||
/**
|
||||
|
@@ -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<String> 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<QName, Serializable> 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<String> 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<QName, Serializable> properties = createPropertiesMap(classificationAspectProperties, content);
|
||||
|
||||
// Add aspect
|
||||
authenticationUtil.runAs(new RunAsWork<Void>()
|
||||
@@ -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<QName, Serializable> createPropertiesMap(
|
||||
ClassificationAspectProperties propertiesDTO, NodeRef content)
|
||||
{
|
||||
final Map<QName, Serializable> 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<String> 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<String> 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);
|
||||
}
|
||||
}
|
||||
|
@@ -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<String> 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<String> 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<String, Object> model = new HashMap<>(1);
|
||||
model.put(SUCCESS, true);
|
||||
|
@@ -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<String> classificationReasonIds, NodeRef document)
|
||||
protected void doClassifyAction(ClassificationAspectProperties classificationAspectProperties, NodeRef document)
|
||||
{
|
||||
getContentClassificationService().classifyContent(classificationLevelId, classifiedBy, classificationAgency, classificationReasonIds, document);
|
||||
getContentClassificationService().classifyContent(classificationAspectProperties, document);
|
||||
}
|
||||
}
|
@@ -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<String> classificationReasonIds, NodeRef document)
|
||||
protected void doClassifyAction(ClassificationAspectProperties classificationAspectProperties, NodeRef document)
|
||||
{
|
||||
getContentClassificationService().editClassifiedContent(classificationLevelId, classifiedBy, classificationAgency, classificationReasonIds, document);
|
||||
getContentClassificationService().editClassifiedContent(classificationAspectProperties, document);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user