From b27d1c0dec0b174ef4316ccf16c51c31e35dc389 Mon Sep 17 00:00:00 2001 From: Alan Davis Date: Thu, 18 Sep 2014 17:17:02 +0000 Subject: [PATCH] Merged HEAD-BUG-FIX (5.0/Cloud) to HEAD (5.0/Cloud) 83910: Reverse Merge HEAD-BUG-FIX (5.0/Cloud) <> 83891: Merged V4.2-BUG-FIX (4.2.4) to HEAD-BUG-FIX (5.0/Cloud) 81657: Merged DEV to V4.2-BUG-FIX (4.2.4) 78463 : MNT-11871 : Adding tag with name containing new lines (\n) breaks the tagging service. - Tags containing \n chars should not be created 80398 : MNT-11871 : Adding tag with name containing new lines (\n) breaks the tagging service. - Tags containing \n and | chars should not be created 80403 : MNT-11871 : Adding tag with name containing new lines (\n) breaks the tagging service. - Replace bad \n and | characters to _ char patch 83538: MNT-12288 : Reverse Merge V4.2-BUG-FIX (4.2.4) << Caused upgrade failure as the patch relies on search >> 81657 : Merged DEV to V4.2-BUG-FIX (4.2.4) 78463 : MNT-11871 : Adding tag with name containing new lines (\n) breaks the tagging service. - Tags containing \n chars should not be created 80398 : MNT-11871 : Adding tag with name containing new lines (\n) breaks the tagging service. - Tags containing \n and | chars should not be created 80403 : MNT-11871 : Adding tag with name containing new lines (\n) breaks the tagging service. - Replace bad \n and | characters to _ char patch 83539: Merged DEV to V4.2-BUG-FIX (4.2.4) 78463 : MNT-11871 : Adding tag with name containing new lines (\n) breaks the tagging service. - Tags containing \n chars should not be created 80398 : MNT-11871 : Adding tag with name containing new lines (\n) breaks the tagging service. - Tags containing \n and | chars should not be created git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@84596 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../messages/patch-service.properties | 3 - .../alfresco/patch/patch-services-context.xml | 22 ---- config/alfresco/version.properties | 2 +- ...ReplaceForbiddenTagCharSequencesPatch.java | 112 ------------------ .../repo/tagging/TaggingServiceImpl.java | 18 +-- .../repo/tagging/TaggingServiceImplTest.java | 54 --------- 6 files changed, 2 insertions(+), 209 deletions(-) delete mode 100644 source/java/org/alfresco/repo/admin/patch/impl/ReplaceForbiddenTagCharSequencesPatch.java diff --git a/config/alfresco/messages/patch-service.properties b/config/alfresco/messages/patch-service.properties index d126e056c6..62fc9112d0 100644 --- a/config/alfresco/messages/patch-service.properties +++ b/config/alfresco/messages/patch-service.properties @@ -466,6 +466,3 @@ patch.db-V5.0-upgrade-to-activiti-5.16.2.result=Activiti tables updated patch.solrFacets.root.description=Creates the solr facets root folder in the Data Dictionary -patch.replaceForbiddenTagCharSequencesPatch.description=This patches Alfresco tags to remove broken char sequences from tag names. See MNT-11871 -patch.replaceForbiddenTagCharSequencesPatch.result=Tags have been patched successfully - diff --git a/config/alfresco/patch/patch-services-context.xml b/config/alfresco/patch/patch-services-context.xml index d4f94d82ca..3c3f12a793 100644 --- a/config/alfresco/patch/patch-services-context.xml +++ b/config/alfresco/patch/patch-services-context.xml @@ -3391,26 +3391,4 @@ - - - patch.replaceForbiddenTagCharSequencesPatch - - - patch.replaceForbiddenTagCharSequencesPatch.description - - - 0 - - - 8005 - - - 8006 - - - - - diff --git a/config/alfresco/version.properties b/config/alfresco/version.properties index 612754dee5..7e363998c7 100644 --- a/config/alfresco/version.properties +++ b/config/alfresco/version.properties @@ -23,4 +23,4 @@ version.build=r@scm-revision@-b@build-number@ # Schema number -version.schema=8006 +version.schema=8005 diff --git a/source/java/org/alfresco/repo/admin/patch/impl/ReplaceForbiddenTagCharSequencesPatch.java b/source/java/org/alfresco/repo/admin/patch/impl/ReplaceForbiddenTagCharSequencesPatch.java deleted file mode 100644 index aaa4835d9c..0000000000 --- a/source/java/org/alfresco/repo/admin/patch/impl/ReplaceForbiddenTagCharSequencesPatch.java +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright (C) 2005-2014 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.repo.admin.patch.impl; - -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import org.alfresco.repo.admin.patch.AbstractPatch; -import org.alfresco.service.cmr.repository.NodeRef; -import org.alfresco.service.cmr.repository.StoreRef; -import org.alfresco.service.cmr.tagging.TagScope; -import org.alfresco.service.cmr.tagging.TaggingService; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.springframework.extensions.surf.util.I18NUtil; - -/** - * This patches Alfresco tags to remove broken char sequences from tag names - * - * @see MNT-11871 - * @author sergey.shcherbovich - */ -public class ReplaceForbiddenTagCharSequencesPatch extends AbstractPatch -{ - private String REPLACER = "_"; - private String[] BAD_TAG_SEQUENCES = new String[] {"\n", "|"}; - - private static Log logger = LogFactory.getLog(ReplaceForbiddenTagCharSequencesPatch.class); - - private static String SUCCESS_MESSAGE = "patch.replaceForbiddenTagCharSequencesPatch.result"; - - private TaggingService taggingService; - - @Override - protected String applyInternal() throws Exception - { - Set tagScopesToRefresh = new HashSet<>(); - - for (StoreRef storeRef : nodeService.getStores()) - { - for (String bad : BAD_TAG_SEQUENCES) - { - List brokenTags = taggingService.getTags(storeRef, bad); - - for (String tag : brokenTags) - { - List taggetNodes = taggingService.findTaggedNodes(storeRef, tag); - - String newTag = findName(storeRef, bad, tag); - - if (logger.isDebugEnabled()) - { - logger.debug("Broken tag in " + storeRef + " is " + tag + ", rename to " + newTag); - } - - taggingService.changeTag(storeRef, tag, newTag); - - for (NodeRef nodeRef : taggetNodes) - { - tagScopesToRefresh.addAll(taggingService.findAllTagScopes(nodeRef)); - } - } - } - } - - if (logger.isDebugEnabled()) - { - logger.debug("Scopes to refresh : " + tagScopesToRefresh.size()); - } - - for (TagScope tagScope : tagScopesToRefresh) - { - taggingService.refreshTagScope(tagScope.getNodeRef(), false); - } - - return I18NUtil.getMessage(SUCCESS_MESSAGE); - } - - private String findName(StoreRef storeRef, String badSequence, String tag) - { - String newTag = tag.replace(badSequence, REPLACER); - - if (taggingService.getTagNodeRef(storeRef, newTag) != null) - { - return findName(storeRef, badSequence, tag.replace(badSequence, badSequence + REPLACER)); - } - - return newTag; - } - - public void setTaggingService(TaggingService taggingService) - { - this.taggingService = taggingService; - } -} diff --git a/source/java/org/alfresco/repo/tagging/TaggingServiceImpl.java b/source/java/org/alfresco/repo/tagging/TaggingServiceImpl.java index fe910eb224..43d2cd9bc5 100644 --- a/source/java/org/alfresco/repo/tagging/TaggingServiceImpl.java +++ b/source/java/org/alfresco/repo/tagging/TaggingServiceImpl.java @@ -25,16 +25,13 @@ import java.io.InputStreamReader; import java.io.Serializable; import java.text.Collator; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; -import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; -import java.util.Set; import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.model.ContentModel; @@ -76,7 +73,6 @@ import org.alfresco.service.namespace.QName; import org.alfresco.util.ISO9075; import org.alfresco.util.Pair; import org.alfresco.util.ParameterCheck; -import org.apache.commons.lang.StringEscapeUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -113,10 +109,6 @@ public class TaggingServiceImpl implements TaggingService, /** Tag Details Delimiter */ private static final String TAG_DETAILS_DELIMITER = "|"; - /** Next tag delimiter */ - private static final String NEXT_TAG_DELIMITER = "\n"; - - private static Set FORBIDDEN_TAGS_SEQUENCES = new HashSet(Arrays.asList(new String[] {NEXT_TAG_DELIMITER, TAG_DETAILS_DELIMITER})); /** Policy behaviour */ private JavaBehaviour updateTagBehaviour; @@ -728,14 +720,6 @@ public class TaggingServiceImpl implements TaggingService, */ private NodeRef getTagNodeRef(StoreRef storeRef, String tag, boolean create) { - for (String forbiddenSequence : FORBIDDEN_TAGS_SEQUENCES) - { - if (create && tag.contains(forbiddenSequence)) - { - throw new IllegalArgumentException("Tag name must not contain " + StringEscapeUtils.escapeJava(forbiddenSequence) + " char sequence"); - } - } - NodeRef tagNodeRef = null; Collection results = this.categoryService.getRootCategories(storeRef, ContentModel.ASPECT_TAGGABLE, tag, create); if (!results.isEmpty()) @@ -1330,7 +1314,7 @@ public class TaggingServiceImpl implements TaggingService, { if (bFirst == false) { - result.append(NEXT_TAG_DELIMITER); + result.append("\n"); } else { diff --git a/source/test-java/org/alfresco/repo/tagging/TaggingServiceImplTest.java b/source/test-java/org/alfresco/repo/tagging/TaggingServiceImplTest.java index 2d5f5379e3..af063d7394 100644 --- a/source/test-java/org/alfresco/repo/tagging/TaggingServiceImplTest.java +++ b/source/test-java/org/alfresco/repo/tagging/TaggingServiceImplTest.java @@ -124,9 +124,6 @@ public class TaggingServiceImplTest extends TestCase private static final String TAG_5 = "tag five"; private static final String TAG_I18N = "àâæçéèêëîïôœùûüÿñ"; - private static final String BAD_TAG = "bad \n tag"; - private static final String BAD_TAG2 = "Broken|2"; - private static final String UPPER_TAG = "House"; private static final String LOWER_TAG = "house"; @@ -2162,55 +2159,4 @@ public class TaggingServiceImplTest extends TestCase assertEquals(tags.get(1).getCount(), 20); assertEquals(tags.get(2).getCount(), 1); } - - /* Test adding tags containing \n and | chars. Test all ways to create tag (e.g. createTag, addTag, setTags) */ - public void testBadTags() - { - testTag(BAD_TAG); - testTag(BAD_TAG2); - } - - private void testTag(final String tag) - { - this.transactionService.getRetryingTransactionHelper().doInTransaction(new RetryingTransactionCallback(){ - @Override - public Void execute() throws Throwable - { - try - { - taggingService.createTag(storeRef, tag); - fail(); - } - catch(IllegalArgumentException iae) - { - // - } - - try - { - taggingService.addTag(document, tag); - fail(); - } - catch(IllegalArgumentException iae) - { - // - } - - try - { - List setTags = new ArrayList(2); - setTags.add(tag); - taggingService.setTags(document, setTags); - - fail(); - } - catch(IllegalArgumentException iae) - { - // - } - - return null; - } - }); - } }