From a81c2eb8d878959db862e8db0dc29b0feb267e51 Mon Sep 17 00:00:00 2001 From: alfresco-build Date: Mon, 10 Jul 2017 14:21:16 +0100 Subject: [PATCH 1/3] [maven-release-plugin] prepare release V2.5.2 --- pom.xml | 4 ++-- rm-automation/pom.xml | 2 +- rm-community/pom.xml | 2 +- rm-community/rm-community-repo/pom.xml | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pom.xml b/pom.xml index 57e6bdd1d7..dc2b869115 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ org.alfresco alfresco-rm pom - 2.5.2-SNAPSHOT + 2.5.2 Alfresco Records Management @@ -24,7 +24,7 @@ scm:git:https://git.alfresco.com/records-management/records-management.git scm:git:https://git.alfresco.com/records-management/records-management.git https://git.alfresco.com/records-management/records-management - HEAD + V2.5.2 diff --git a/rm-automation/pom.xml b/rm-automation/pom.xml index 1e82d8ca5a..7a1de7b6d5 100644 --- a/rm-automation/pom.xml +++ b/rm-automation/pom.xml @@ -8,7 +8,7 @@ org.alfresco alfresco-rm - 2.5.2-SNAPSHOT + 2.5.2 diff --git a/rm-community/pom.xml b/rm-community/pom.xml index 08dc021dd4..d791df8c19 100644 --- a/rm-community/pom.xml +++ b/rm-community/pom.xml @@ -8,7 +8,7 @@ org.alfresco alfresco-rm - 2.5.2-SNAPSHOT + 2.5.2 diff --git a/rm-community/rm-community-repo/pom.xml b/rm-community/rm-community-repo/pom.xml index 3d1fa7be44..b0099d65ba 100644 --- a/rm-community/rm-community-repo/pom.xml +++ b/rm-community/rm-community-repo/pom.xml @@ -9,7 +9,7 @@ org.alfresco alfresco-rm-community - 2.5.2-SNAPSHOT + 2.5.2 From e46b3eae0fefafddaa5f9c34848c0ad044096ee2 Mon Sep 17 00:00:00 2001 From: alfresco-build Date: Mon, 10 Jul 2017 14:21:19 +0100 Subject: [PATCH 2/3] [maven-release-plugin] prepare for next development iteration --- pom.xml | 4 ++-- rm-automation/pom.xml | 2 +- rm-community/pom.xml | 2 +- rm-community/rm-community-repo/pom.xml | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pom.xml b/pom.xml index dc2b869115..980997b1b8 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ org.alfresco alfresco-rm pom - 2.5.2 + 2.5.3-SNAPSHOT Alfresco Records Management @@ -24,7 +24,7 @@ scm:git:https://git.alfresco.com/records-management/records-management.git scm:git:https://git.alfresco.com/records-management/records-management.git https://git.alfresco.com/records-management/records-management - V2.5.2 + HEAD diff --git a/rm-automation/pom.xml b/rm-automation/pom.xml index 7a1de7b6d5..8b6b5481f5 100644 --- a/rm-automation/pom.xml +++ b/rm-automation/pom.xml @@ -8,7 +8,7 @@ org.alfresco alfresco-rm - 2.5.2 + 2.5.3-SNAPSHOT diff --git a/rm-community/pom.xml b/rm-community/pom.xml index d791df8c19..1e3cc7ce3c 100644 --- a/rm-community/pom.xml +++ b/rm-community/pom.xml @@ -8,7 +8,7 @@ org.alfresco alfresco-rm - 2.5.2 + 2.5.3-SNAPSHOT diff --git a/rm-community/rm-community-repo/pom.xml b/rm-community/rm-community-repo/pom.xml index b0099d65ba..cccf74e302 100644 --- a/rm-community/rm-community-repo/pom.xml +++ b/rm-community/rm-community-repo/pom.xml @@ -9,7 +9,7 @@ org.alfresco alfresco-rm-community - 2.5.2 + 2.5.3-SNAPSHOT From 402ea0ca9a03ce614b25b2a83af7eac36cdfb690 Mon Sep 17 00:00:00 2001 From: Tuna Aksoy Date: Mon, 10 Jul 2017 16:47:44 +0100 Subject: [PATCH 3/3] RM-5345: Fixed review comments (cherry picked from commit f86440b) RM-5346: Null pointers should not be dereferenced (cherry picked from commit 8130305) --- .../RecordsManagementAuditServiceImpl.java | 48 +++++++---------- .../capability/RMAfterInvocationProvider.java | 52 +++++++++++-------- .../script/ApplyDodCertModelFixesGet.java | 40 ++++++-------- .../script/ApplyFixMob1573Get.java | 4 ++ .../script/TransferReportGet.java | 16 ++---- .../script/TransferReportPost.java | 16 ++---- 6 files changed, 76 insertions(+), 100 deletions(-) diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/audit/RecordsManagementAuditServiceImpl.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/audit/RecordsManagementAuditServiceImpl.java index d7041ea2d9..1123c53fca 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/audit/RecordsManagementAuditServiceImpl.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/audit/RecordsManagementAuditServiceImpl.java @@ -274,8 +274,8 @@ public class RecordsManagementAuditServiceImpl extends AbstractLifecycleBean */ public void setFilePlanService(FilePlanService filePlanService) { - this.filePlanService = filePlanService; - } + this.filePlanService = filePlanService; + } /** * @param namespaceService namespace service @@ -377,8 +377,8 @@ public class RecordsManagementAuditServiceImpl extends AbstractLifecycleBean @Override public boolean isAuditLogEnabled(NodeRef filePlan) { - ParameterCheck.mandatory("filePlan", filePlan); - // TODO use file plan to scope audit log + ParameterCheck.mandatory("filePlan", filePlan); + // TODO use file plan to scope audit log return auditService.isAuditEnabled( RM_AUDIT_APPLICATION_NAME, @@ -391,8 +391,8 @@ public class RecordsManagementAuditServiceImpl extends AbstractLifecycleBean @Override public void startAuditLog(NodeRef filePlan) { - ParameterCheck.mandatory("filePlan", filePlan); - // TODO use file plan to scope audit log + ParameterCheck.mandatory("filePlan", filePlan); + // TODO use file plan to scope audit log auditService.enableAudit( RM_AUDIT_APPLICATION_NAME, @@ -412,8 +412,8 @@ public class RecordsManagementAuditServiceImpl extends AbstractLifecycleBean @Override public void stopAuditLog(NodeRef filePlan) { - ParameterCheck.mandatory("filePlan", filePlan); - // TODO use file plan to scope audit log + ParameterCheck.mandatory("filePlan", filePlan); + // TODO use file plan to scope audit log auditEvent(filePlan, AUDIT_EVENT_STOP, null, null, true); @@ -433,8 +433,8 @@ public class RecordsManagementAuditServiceImpl extends AbstractLifecycleBean @Override public void clearAuditLog(NodeRef filePlan) { - ParameterCheck.mandatory("filePlan", filePlan); - // TODO use file plan to scope audit log + ParameterCheck.mandatory("filePlan", filePlan); + // TODO use file plan to scope audit log auditService.clearAudit(RM_AUDIT_APPLICATION_NAME, null, null); if (logger.isInfoEnabled()) @@ -451,8 +451,8 @@ public class RecordsManagementAuditServiceImpl extends AbstractLifecycleBean @Override public Date getDateAuditLogLastStarted(NodeRef filePlan) { - ParameterCheck.mandatory("filePlan", filePlan); - // TODO use file plan to scope audit log + ParameterCheck.mandatory("filePlan", filePlan); + // TODO use file plan to scope audit log // TODO: return proper date, for now it's today's date return getStartOfDay(new Date()); @@ -464,8 +464,8 @@ public class RecordsManagementAuditServiceImpl extends AbstractLifecycleBean @Override public Date getDateAuditLogLastStopped(NodeRef filePlan) { - ParameterCheck.mandatory("filePlan", filePlan); - // TODO use file plan to scope audit log + ParameterCheck.mandatory("filePlan", filePlan); + // TODO use file plan to scope audit log // TODO: return proper date, for now it's today's date return getEndOfDay(new Date()); @@ -495,7 +495,7 @@ public class RecordsManagementAuditServiceImpl extends AbstractLifecycleBean @Override public void auditEvent(NodeRef nodeRef, String eventName, Map before, Map after, boolean immediate) { - auditEvent(nodeRef, eventName, before, after, immediate, false); + auditEvent(nodeRef, eventName, before, after, immediate, false); } /** @@ -773,12 +773,12 @@ public class RecordsManagementAuditServiceImpl extends AbstractLifecycleBean { ParameterCheck.mandatory("params", params); - Writer fileWriter = null; - try + File auditTrailFile = TempFileProvider.createTempFile(AUDIT_TRAIL_FILE_PREFIX, + format == ReportFormat.HTML ? AUDIT_TRAIL_HTML_FILE_SUFFIX : AUDIT_TRAIL_JSON_FILE_SUFFIX); + + try (FileOutputStream fileOutputStream = new FileOutputStream(auditTrailFile); + Writer fileWriter = new BufferedWriter(new OutputStreamWriter(fileOutputStream,"UTF8"));) { - File auditTrailFile = TempFileProvider.createTempFile(AUDIT_TRAIL_FILE_PREFIX, - format == ReportFormat.HTML ? AUDIT_TRAIL_HTML_FILE_SUFFIX : AUDIT_TRAIL_JSON_FILE_SUFFIX); - fileWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(auditTrailFile),"UTF8")); // Get the results, dumping to file getAuditTrailImpl(params, null, fileWriter, format); // Done @@ -788,14 +788,6 @@ public class RecordsManagementAuditServiceImpl extends AbstractLifecycleBean { throw new AlfrescoRuntimeException(MSG_TRAIL_FILE_FAIL, e); } - finally - { - // close the writer - if (fileWriter != null) - { - try { fileWriter.close(); } catch (IOException closeEx) {} - } - } } /** diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/capability/RMAfterInvocationProvider.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/capability/RMAfterInvocationProvider.java index 784ac9b778..d2892b04c3 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/capability/RMAfterInvocationProvider.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/capability/RMAfterInvocationProvider.java @@ -37,6 +37,7 @@ import java.util.Map; import java.util.Set; import java.util.StringTokenizer; +import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; import org.alfresco.repo.search.SimpleResultSetMetaData; import org.alfresco.repo.search.impl.lucene.PagingLuceneResultSet; @@ -172,7 +173,12 @@ public class RMAfterInvocationProvider extends RMSecurityCommon } else if (StoreRef.class.isAssignableFrom(returnedObject.getClass())) { - return decide(authentication, object, config, nodeService.getRootNode((StoreRef) returnedObject)).getStoreRef(); + NodeRef rootNodeRef = decide(authentication, object, config, nodeService.getRootNode((StoreRef) returnedObject)); + if (rootNodeRef == null) + { + throw new AlfrescoRuntimeException("Root node reference of '" + returnedObject + "' is null."); + } + return rootNodeRef.getStoreRef(); } else if (NodeRef.class.isAssignableFrom(returnedObject.getClass())) { @@ -208,7 +214,7 @@ public class RMAfterInvocationProvider extends RMSecurityCommon } else { - if (logger.isDebugEnabled()) + if (logger.isDebugEnabled() && object != null) { logger.debug("Uncontrolled object - access allowed for " + object.getClass().getName()); } @@ -515,33 +521,33 @@ public class RMAfterInvocationProvider extends RMSecurityCommon if (!nodeService.exists(returnedObject.getNodeRef(i))) { - inclusionMask.set(i, false); + inclusionMask.set(i, false); } else { - int parentCheckRead = checkRead(returnedObject.getChildAssocRef(i).getParentRef()); - int childCheckRead = checkRead(returnedObject.getNodeRef(i)); + int parentCheckRead = checkRead(returnedObject.getChildAssocRef(i).getParentRef()); + int childCheckRead = checkRead(returnedObject.getNodeRef(i)); - for (ConfigAttributeDefintion cad : supportedDefinitions) - { - NodeRef testNodeRef = returnedObject.getNodeRef(i); - int checkRead = childCheckRead; - if (cad.parent) - { - testNodeRef = returnedObject.getChildAssocRef(i).getParentRef(); - checkRead = parentCheckRead; - } + for (ConfigAttributeDefintion cad : supportedDefinitions) + { + NodeRef testNodeRef = returnedObject.getNodeRef(i); + int checkRead = childCheckRead; + if (cad.parent) + { + testNodeRef = returnedObject.getChildAssocRef(i).getParentRef(); + checkRead = parentCheckRead; + } - if (isUnfiltered(testNodeRef)) - { - continue; - } + if (isUnfiltered(testNodeRef)) + { + continue; + } - if (inclusionMask.get(i) && (testNodeRef != null) && (checkRead != AccessDecisionVoter.ACCESS_GRANTED)) - { - inclusionMask.set(i, false); - } - } + if (inclusionMask.get(i) && (testNodeRef != null) && (checkRead != AccessDecisionVoter.ACCESS_GRANTED)) + { + inclusionMask.set(i, false); + } + } } // Bug out if we are limiting by size diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/script/ApplyDodCertModelFixesGet.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/script/ApplyDodCertModelFixesGet.java index b22f92feb1..8523a0c52b 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/script/ApplyDodCertModelFixesGet.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/script/ApplyDodCertModelFixesGet.java @@ -51,8 +51,8 @@ import org.alfresco.service.cmr.repository.ContentService; import org.alfresco.service.cmr.repository.ContentWriter; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.namespace.NamespaceService; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.extensions.webscripts.Cache; import org.springframework.extensions.webscripts.DeclarativeWebScript; import org.springframework.extensions.webscripts.Status; @@ -81,7 +81,7 @@ public class ApplyDodCertModelFixesGet extends DeclarativeWebScript private static final String RMC_CUSTOM_RECORD_PROPERTIES = RecordsManagementCustomModel.RM_CUSTOM_PREFIX + ":customRecordProperties"; /** Logger */ - private static Log logger = LogFactory.getLog(ApplyDodCertModelFixesGet.class); + private static final Logger LOGGER = LoggerFactory.getLogger(ApplyDodCertModelFixesGet.class); private ContentService contentService; private NamespaceService namespaceService; @@ -99,12 +99,15 @@ public class ApplyDodCertModelFixesGet extends DeclarativeWebScript @Override public Map executeImpl(WebScriptRequest req, Status status, Cache cache) { - if (logger.isInfoEnabled()) - { - logger.info("Applying webscript-based patches to RM custom model in the repo."); - } + LOGGER.info("Applying webscript-based patches to RM custom model in the repo."); M2Model customModel = readCustomContentModel(); + if (customModel == null) + { + final String msg = "Custom content model could not be read"; + LOGGER.error(msg); + throw new AlfrescoRuntimeException(msg); + } String customAspectName = ASPECT_CUSTOM_ASSOCIATIONS.toPrefixString(namespaceService); M2Aspect customAssocsAspect = customModel.getAspect(customAspectName); @@ -112,19 +115,12 @@ public class ApplyDodCertModelFixesGet extends DeclarativeWebScript if (customAssocsAspect == null) { final String msg = "Unknown aspect: " + customAspectName; - if (logger.isErrorEnabled()) - { - logger.error(msg); - } + LOGGER.error(msg); throw new AlfrescoRuntimeException(msg); } - // MOB-1573. All custom references should have many-many multiplicity. - if (logger.isInfoEnabled()) - { - logger.info("MOB-1573. All custom references should have many-many multiplicity."); - } + LOGGER.info("MOB-1573. All custom references should have many-many multiplicity."); for (M2ClassAssociation classAssoc : customAssocsAspect.getAssociations()) { @@ -134,10 +130,7 @@ public class ApplyDodCertModelFixesGet extends DeclarativeWebScript } //MOB-1621. Custom fields should be created as untokenized by default. - if (logger.isInfoEnabled()) - { - logger.info("MOB-1621. Custom fields should be created as untokenized by default."); - } + LOGGER.info("MOB-1621. Custom fields should be created as untokenized by default."); List allCustomPropertiesAspects = new ArrayList(4); allCustomPropertiesAspects.add(RMC_CUSTOM_RECORD_SERIES_PROPERTIES); @@ -160,13 +153,10 @@ public class ApplyDodCertModelFixesGet extends DeclarativeWebScript writeCustomContentModel(customModel); - if (logger.isInfoEnabled()) - { - logger.info("Completed application of webscript-based patches to RM custom model in the repo."); - } + LOGGER.info("Completed application of webscript-based patches to RM custom model in the repo."); Map model = new HashMap(1, 1.0f); - model.put("success", true); + model.put("success", true); return model; } diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/script/ApplyFixMob1573Get.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/script/ApplyFixMob1573Get.java index d8dfabbd35..e4e28d66a7 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/script/ApplyFixMob1573Get.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/script/ApplyFixMob1573Get.java @@ -83,6 +83,10 @@ public class ApplyFixMob1573Get extends DeclarativeWebScript public Map executeImpl(WebScriptRequest req, Status status, Cache cache) { M2Model customModel = readCustomContentModel(); + if (customModel == null) + { + throw new AlfrescoRuntimeException("Custom content model could not be read"); + } // Go through every custom reference defined in the custom model and make sure that it // has many-to-many multiplicity diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/script/TransferReportGet.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/script/TransferReportGet.java index f4f456035f..352ef597d3 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/script/TransferReportGet.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/script/TransferReportGet.java @@ -126,8 +126,10 @@ public class TransferReportGet extends BaseTransferWebScript File generateJSONTransferReport(NodeRef transferNode) throws IOException { File report = TempFileProvider.createTempFile(REPORT_FILE_PREFIX, REPORT_FILE_SUFFIX); - Writer writer = null; - try + + // create the writer + try (FileOutputStream fileOutputStream = new FileOutputStream(report); + Writer writer = new OutputStreamWriter(fileOutputStream, Charset.forName("UTF-8"));) { // get all 'transferred' nodes NodeRef[] itemsToTransfer = getTransferNodes(transferNode); @@ -138,9 +140,6 @@ public class TransferReportGet extends BaseTransferWebScript " items into file: " + report.getAbsolutePath()); } - // create the writer - writer = new OutputStreamWriter(new FileOutputStream(report), Charset.forName("UTF-8")); - // use RMService to get disposition authority String dispositionAuthority = null; if (itemsToTransfer.length > 0) @@ -170,13 +169,6 @@ public class TransferReportGet extends BaseTransferWebScript // write the JSON footer writer.write("\n\t\t]\n\t}\n}"); } - finally - { - if (writer != null) - { - try { writer.close(); } catch (IOException ioe) {} - } - } return report; } diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/script/TransferReportPost.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/script/TransferReportPost.java index 673ffb8241..2d762e0d4c 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/script/TransferReportPost.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/script/TransferReportPost.java @@ -234,8 +234,10 @@ public class TransferReportPost extends BaseTransferWebScript File generateHTMLTransferReport(NodeRef transferNode) throws IOException { File report = TempFileProvider.createTempFile(REPORT_FILE_PREFIX, REPORT_FILE_SUFFIX); - Writer writer = null; - try + + // create the writer + try (FileOutputStream fileOutputStream = new FileOutputStream(report) ; + Writer writer = new OutputStreamWriter(fileOutputStream, Charset.forName("UTF-8"));) { // get all 'transferred' nodes NodeRef[] itemsToTransfer = getTransferNodes(transferNode); @@ -246,9 +248,6 @@ public class TransferReportPost extends BaseTransferWebScript " items into file: " + report.getAbsolutePath()); } - // create the writer - writer = new OutputStreamWriter(new FileOutputStream(report), Charset.forName("UTF-8")); - // use RMService to get disposition authority String dispositionAuthority = null; if (itemsToTransfer.length > 0) @@ -322,13 +321,6 @@ public class TransferReportPost extends BaseTransferWebScript // write the HTML footer writer.write(""); } - finally - { - if (writer != null) - { - try { writer.close(); } catch (IOException ioe) {} - } - } return report; }