diff --git a/dotCMS/src/main/java/com/dotcms/publisher/pusher/PushPublisherConfig.java b/dotCMS/src/main/java/com/dotcms/publisher/pusher/PushPublisherConfig.java index 61d63a12e72f..edaa9c77a7cc 100755 --- a/dotCMS/src/main/java/com/dotcms/publisher/pusher/PushPublisherConfig.java +++ b/dotCMS/src/main/java/com/dotcms/publisher/pusher/PushPublisherConfig.java @@ -302,7 +302,7 @@ public boolean contains(final T asset, final PusheableAsset pusheableAsset) return bundleAssets.isAdded(key, pusheableAsset); } - public boolean exclude(final T asset, final PusheableAsset pusheableAsset, String evaluateReason, final String excludeReason) { + public boolean exclude(final T asset, final PusheableAsset pusheableAsset, final String evaluateReason, final String excludeReason) { final String key = DependencyManager.getBundleKey(asset); if(!excludes.contains(key)) { @@ -325,7 +325,7 @@ public void writeIncludeManifestItem(final T asset, final String evaluateRea } } - private void writeExcludeManifestItem(final T asset, String evaluateReason, final String excludeReason) { + private void writeExcludeManifestItem(final T asset, final String evaluateReason, final String excludeReason) { if (ManifestItem.class.isAssignableFrom(asset.getClass())) { if (UtilMethods.isSet(manifestBuilder)) { manifestBuilder.exclude((ManifestItem) asset, evaluateReason, excludeReason); diff --git a/dotCMS/src/main/java/com/dotcms/publishing/manifest/CSVManifestBuilder.java b/dotCMS/src/main/java/com/dotcms/publishing/manifest/CSVManifestBuilder.java index f7b0529cc151..3f73de1341ce 100644 --- a/dotCMS/src/main/java/com/dotcms/publishing/manifest/CSVManifestBuilder.java +++ b/dotCMS/src/main/java/com/dotcms/publishing/manifest/CSVManifestBuilder.java @@ -89,7 +89,7 @@ private String getManifestFileIncludeLine(final ManifestInfo manifestInfo, } private String getManifestFileExcludeLine(final ManifestInfo manifestInfo, - String evaluateReason, final String excludeReason) { + final String evaluateReason, final String excludeReason) { return getManifestFileLine("EXCLUDED", manifestInfo, evaluateReason, excludeReason); } @@ -109,7 +109,7 @@ private String getManifestFileLine( evaluateReason).stream().collect(Collectors.joining(",")); } - public void exclude(final ManifestItem manifestItem, String evaluateReason, final String excludeReason){ + public void exclude(final ManifestItem manifestItem, final String evaluateReason, final String excludeReason){ final ManifestInfo manifestInfo = manifestItem.getManifestInfo(); final String line = getManifestFileExcludeLine(manifestInfo, evaluateReason, excludeReason); diff --git a/dotcms-integration/src/test/java/com/dotcms/enterprise/publishing/remote/bundler/DependencyBundlerTest.java b/dotcms-integration/src/test/java/com/dotcms/enterprise/publishing/remote/bundler/DependencyBundlerTest.java index 79996ba95aca..6e47ba1ba584 100644 --- a/dotcms-integration/src/test/java/com/dotcms/enterprise/publishing/remote/bundler/DependencyBundlerTest.java +++ b/dotcms-integration/src/test/java/com/dotcms/enterprise/publishing/remote/bundler/DependencyBundlerTest.java @@ -1,5 +1,6 @@ package com.dotcms.enterprise.publishing.remote.bundler; +import com.dotcms.LicenseTestUtil; import com.dotcms.contenttype.business.StoryBlockAPI; import com.dotcms.contenttype.model.field.Field; import com.dotcms.contenttype.model.field.ImageField; @@ -126,6 +127,7 @@ public class DependencyBundlerTest { public static void prepare() throws Exception { //Setting web app environment IntegrationTestInitService.getInstance().init(); + LicenseTestUtil.getLicense(); final Map> excludeSystemFolderMap = new HashMap<>(); excludeSystemFolderMap.put(EXCLUDE_SYSTEM_FOLDER_HOST, @@ -765,12 +767,19 @@ systemHostContentType, list(systemWorkflowScheme) new TestData(contentletWithRelationship, contentletWithRelationshipIncludes, excludeSystemFolder, filterDescriptorAllDependencies, "Contentlet with Relationship and filterDescriptorAllDependencies"), - new TestData(contentletWithRelationship, Map.of(contentTypeParent, list(relationship), contentletWithRelationship, list(relationship)), contentletWithRelationshipExcludes, filterDescriptorNotDependencies, "Contentlet with Relationship and filterDescriptorNotDependencies"), + new TestData(contentletWithRelationship, Map.of(contentTypeParent, list(relationship), contentletWithRelationship, list(relationship)), contentletWithRelationshipExcludes, + Map.of(contentTypeChild.getManifestInfo().id(), + list(getDependencyReason(relationship))), + filterDescriptorNotDependencies, + "Contentlet with Relationship and filterDescriptorNotDependencies"), new TestData(contentletWithRelationship, Map.of(contentletWithRelationship, list(host, contentTypeParent, language, relationship), contentTypeParent, list(systemWorkflowScheme, relationship), relationship, list(contentTypeChild)), Map.of(FILTER_EXCLUDE_REASON, list(), EXCLUDE_SYSTEM_FOLDER_HOST, list(systemFolder)), filterDescriptorNotRelationship, "Contentlet with Relationship and filterDescriptorNotRelationship"), new TestData(contentletWithRelationship, Map.of(contentletWithRelationship, list(relationship), contentTypeParent, list(relationship)), contentletWithRelationshipExcludes, - filterDescriptorNotDependenciesRelationship, "Contentlet with Relationship and filterDescriptorNotDependenciesRelationship"), + Map.of(contentTypeChild.getManifestInfo().id(), + list(getDependencyReason(relationship))), + filterDescriptorNotDependenciesRelationship, + "Contentlet with Relationship and filterDescriptorNotDependenciesRelationship"), new TestData(contentWithCategory, contentWithCategoryIncludes, excludeSystemFolder, filterDescriptorAllDependencies, "Contentlet with Category and filterDescriptorAllDependencies"), @@ -817,9 +826,9 @@ private static Collection createRuleTestCase() { new TestData(rule, new HashMap<>(), Map.of(FILTER_EXCLUDE_REASON, list(host)), filterDescriptorNotDependenciesRelationship, "Page with filterDescriptorNotDependenciesRelationship"), new TestData(ruleWithPage, Map.of(ruleWithPage, list(htmlPageAsset)), new HashMap<>(), filterDescriptorAllDependencies, "Rule with page and filterDescriptorAllDependencies"), - new TestData(ruleWithPage, new HashMap<>(), Map.of(FILTER_EXCLUDE_REASON, list(htmlPageAsset)), filterDescriptorNotDependencies, "Rule with page and filterDescriptorAllDependencies"), - new TestData(ruleWithPage, Map.of(ruleWithPage, list(htmlPageAsset)), new HashMap<>(), filterDescriptorNotRelationship, "Rule with page and filterDescriptorAllDependencies"), - new TestData(ruleWithPage, new HashMap<>(), Map.of(FILTER_EXCLUDE_REASON, list(htmlPageAsset)), filterDescriptorNotDependenciesRelationship, "Rule with page and filterDescriptorAllDependencies") + new TestData(ruleWithPage, new HashMap<>(), Map.of(FILTER_EXCLUDE_REASON, list(htmlPageAsset)), filterDescriptorNotDependencies, "Rule with page and filterDescriptorNotDependencies"), + new TestData(ruleWithPage, Map.of(ruleWithPage, list(htmlPageAsset)), new HashMap<>(), filterDescriptorNotRelationship, "Rule with page and filterDescriptorNotRelationship"), + new TestData(ruleWithPage, new HashMap<>(), Map.of(FILTER_EXCLUDE_REASON, list(htmlPageAsset)), filterDescriptorNotDependenciesRelationship, "Rule with page and filterDescriptorNotDependenciesRelationship") ); @@ -1318,13 +1327,23 @@ EXCLUDE_SYSTEM_FOLDER_HOST, list(systemFolder)), filterDescriptorNotDependencies EXCLUDE_SYSTEM_FOLDER_HOST, list(systemFolder)), filterDescriptorNotDependenciesRelationship, "Contentype with Category and filterDescriptorNotDependenciesRelationship"), new TestData(contentTypeParent, contentTypeParentIncludes, excludeSystemFolder, filterDescriptorAllDependencies, "Contentype with Relationship and filterDescriptorAllDependencies"), - new TestData(contentTypeParent, Map.of(contentTypeParent, list(relationship)), Map.of(FILTER_EXCLUDE_REASON, list(host, systemWorkflowScheme, contentTypeChild), - EXCLUDE_SYSTEM_FOLDER_HOST, list(systemFolder)), filterDescriptorNotDependencies, "Contentype with Relationship and filterDescriptorNotDependencies"), + new TestData(contentTypeParent, Map.of(contentTypeParent, list(relationship)), + Map.of(FILTER_EXCLUDE_REASON, list(host, systemWorkflowScheme, contentTypeChild), + EXCLUDE_SYSTEM_FOLDER_HOST, list(systemFolder)), + Map.of(contentTypeChild.getManifestInfo().id(), + list(getDependencyReason(relationship))), + filterDescriptorNotDependencies, + "Contentype with Relationship and filterDescriptorNotDependencies"), new TestData(contentTypeParent, Map.of(contentTypeParent, list(host, systemWorkflowScheme, relationship), relationship, list(contentTypeChild)), Map.of(FILTER_EXCLUDE_REASON, list(), EXCLUDE_SYSTEM_FOLDER_HOST, list(systemFolder)), filterDescriptorNotRelationship, "Contentype with Relationship and filterDescriptorNotRelationship"), - new TestData(contentTypeParent, Map.of(contentTypeParent, list(relationship)), Map.of(FILTER_EXCLUDE_REASON, list(host, systemWorkflowScheme, contentTypeChild), - EXCLUDE_SYSTEM_FOLDER_HOST, list(systemFolder)), filterDescriptorNotDependenciesRelationship, "Contentype with Relationship and filterDescriptorNotDependenciesRelationship") + new TestData(contentTypeParent, Map.of(contentTypeParent, list(relationship)), + Map.of(FILTER_EXCLUDE_REASON, list(host, systemWorkflowScheme, contentTypeChild), + EXCLUDE_SYSTEM_FOLDER_HOST, list(systemFolder)), + Map.of(contentTypeChild.getManifestInfo().id(), + list(getDependencyReason(relationship))), + filterDescriptorNotDependenciesRelationship, + "Contentype with Relationship and filterDescriptorNotDependenciesRelationship") ); } @@ -1436,6 +1455,12 @@ public void addLanguageVariableTestCaseInBundle() } + private static String getDependencyReason(ManifestItem asset) { + return String.format( + "Dependency from: ID: %s Title: %s", asset.getManifestInfo().id(), + asset.getManifestInfo().title()); + } + @DataProvider(format = "%m: %p[0]") public static Object[] configs() throws Exception { return new ModDateTestData[] { @@ -1536,17 +1561,41 @@ contentTypeChild, list(APILocator.getWorkflowAPI().findSystemWorkflowScheme()) } else { final String excludeByOperation = FILTER_EXCLUDE_BY_OPERATION + modDateTestData.operation; - manifestLines.addExcludes(Map.of(excludeByOperation, - list(host, language, contentTypeParent, contentTypeChild, relationship, - APILocator.getWorkflowAPI().findSystemWorkflowScheme()))); + final List parentExcludeList = list( + host, language, contentTypeParent, relationship); + final List childExcludeList = list( + language, contentTypeChild); + manifestLines.addExcludes( + Map.of(excludeByOperation, parentExcludeList), contentParent); + manifestLines.addExcludes( + Map.of(excludeByOperation, childExcludeList), contentletChild); final List generalLangVarDependencies = list( PublisherAPIImplTest.getLanguageVariablesContentType(), APILocator.getWorkflowAPI().findSystemWorkflowScheme()); Stream.concat(PublisherAPIImplTest.getLanguagesVariableDependencies(), - languageVariables, generalLangVarDependencies).forEach(asset -> - manifestLines.addExclude((ManifestItem) asset, excludeByOperation)); + languageVariables, generalLangVarDependencies).forEach(asset -> { + final String dependencyReason = asset instanceof Contentlet && + !languageVariables.isEmpty() && languageVariables.contains((Contentlet) asset) ? + "Added Automatically by dotCMS" : + getDependencyReason(!languageVariables.isEmpty() ? + languageVariables.get(0) : (ManifestItem) asset); + manifestLines.addExclude((ManifestItem) asset, dependencyReason, excludeByOperation); + }); + + if (!languageVariables.isEmpty()) { + manifestLines.addExclude(APILocator.getFolderAPI().findSystemFolder(), + getDependencyReason(languageVariables.get(0)), + EXCLUDE_SYSTEM_FOLDER_HOST); + manifestLines.addExclude(APILocator.getHostAPI().findSystemHost(), + getDependencyReason(languageVariables.get(0).getContentType()), + EXCLUDE_SYSTEM_FOLDER_HOST); + manifestLines.addExclude( + APILocator.getWorkflowAPI().findSystemWorkflowScheme(), + getDependencyReason(languageVariables.get(0).getContentType()), + excludeByOperation); + } } dependencies.add(contentParent); @@ -1559,11 +1608,14 @@ contentTypeChild, list(APILocator.getWorkflowAPI().findSystemWorkflowScheme()) manifestLines.addDependencies(Map.of(contentletChild, list(language, contentTypeChild))); } else if (modDateTestData.operation == Operation.PUBLISH) { - manifestLines.addExclude(contentletChild, "Excluded by mod_date"); + manifestLines.addExclude(contentletChild, + getDependencyReason(relationship),"Excluded by mod_date"); manifestLines.addDependencies(Map.of(contentletChild, list(language, contentTypeChild))); } else { - manifestLines.addExclude(contentletChild, FILTER_EXCLUDE_BY_OPERATION + modDateTestData.operation); + manifestLines.addExclude(contentletChild, + getDependencyReason(relationship), + FILTER_EXCLUDE_BY_OPERATION + modDateTestData.operation); } manifestBuilder.close(); @@ -2358,6 +2410,7 @@ private static class TestData { Map> dependenciesToAssert; FilterDescriptor filterDescriptor; Map> excludes; + Map> evaluateReasons; String message; public TestData( @@ -2373,11 +2426,24 @@ public TestData( final Map> dependenciesToAssert, final Map> excludes, final FilterDescriptor filterDescriptor, - final String message) { + final String message) { + this(assetsToAddInBundle, dependenciesToAssert, excludes, + null, filterDescriptor, message); + } + + public TestData( + final ManifestItem assetsToAddInBundle, + final Map> dependenciesToAssert, + final Map> excludes, + final Map> evaluateReasons, + final FilterDescriptor filterDescriptor, + final String message) { + this.assetsToAddInBundle = assetsToAddInBundle; this.filterDescriptor = filterDescriptor; this.dependenciesToAssert = dependenciesToAssert; this.excludes = excludes; + this.evaluateReasons = evaluateReasons; this.message = message; } @@ -2395,7 +2461,24 @@ public ManifestItemsMapTest manifestLines() { manifestItemsMap.addDependencies(dependenciesToAssert); if (excludes != null) { - manifestItemsMap.addExcludes(excludes); + if (evaluateReasons == null) { + manifestItemsMap.addExcludes(excludes, assetManifestItem); + } else { + for (final Map.Entry> excludeEntry : excludes.entrySet()) { + final String excludeReason = excludeEntry.getKey(); + final List excludeList = excludeEntry.getValue(); + for (final ManifestItem excludeItem : excludeList) { + final String itemId = excludeItem.getManifestInfo().id(); + final List evaluateReasonList = evaluateReasons + .getOrDefault(itemId, + list(getDependencyReason(assetManifestItem))); + for (final String evaluateReason : evaluateReasonList) { + manifestItemsMap.addExclude(excludeItem, + evaluateReason, excludeReason); + } + } + } + } } return manifestItemsMap; diff --git a/dotcms-integration/src/test/java/com/dotcms/publishing/ManifestItemsMapTest.java b/dotcms-integration/src/test/java/com/dotcms/publishing/ManifestItemsMapTest.java index 898c1535d816..ea553ff15c61 100644 --- a/dotcms-integration/src/test/java/com/dotcms/publishing/ManifestItemsMapTest.java +++ b/dotcms-integration/src/test/java/com/dotcms/publishing/ManifestItemsMapTest.java @@ -4,7 +4,8 @@ import com.dotcms.publishing.manifest.ManifestItem; import com.dotcms.publishing.manifest.ManifestItem.ManifestInfo; -import com.dotmarketing.portlets.contentlet.model.Contentlet; +import com.dotmarketing.util.StringUtils; +import com.dotmarketing.util.UtilMethods; import io.vavr.collection.Stream; import java.util.ArrayList; import java.util.Collection; @@ -19,19 +20,21 @@ public class ManifestItemsMapTest { private Map> includes = new HashMap<>(); private Map> excludes = new HashMap<>(); + private Map> evaluateResons = new HashMap<>(); private Set alreadyCheck; - private static String getIncludeLine(final ManifestItem asset, final String reason) { - return getLine("INCLUDED", asset, reason, ""); + private static String getIncludeLine(final ManifestItem asset, final String evaluateReason) { + return getLine("INCLUDED", asset, evaluateReason, ""); } - private static String getExcludeLine(final ManifestItem asset, final String reason) { - return getLine("EXCLUDED", asset, "", reason); + private static String getExcludeLine(final ManifestItem asset, + final String evaluateReason, final String excludeReason) { + return getLine("EXCLUDED", asset, evaluateReason, excludeReason); } private static String getLine(final String includeExclude, final ManifestItem asset, - final String reasonInclude, final String reasonExclude) { + final String reasonEvaluate, final String reasonExclude) { final ManifestInfo manifestInfo = asset.getManifestInfo(); return list( @@ -43,7 +46,7 @@ private static String getLine(final String includeExclude, final ManifestItem as manifestInfo.site(), manifestInfo.folder(), reasonExclude, - reasonInclude + reasonEvaluate ).stream().collect(Collectors.joining(",")); } @@ -61,13 +64,13 @@ public void addDependencies(final Map> de } } - public void add(final ManifestItem assetManifestItem, final List reasons) { - for (final String reason : reasons) { - add(assetManifestItem, reason); + public void add(final ManifestItem assetManifestItem, final List evaluateReasons) { + for (final String evaluateReason : evaluateReasons) { + add(assetManifestItem, evaluateReason); } } - public void add(final ManifestItem assetManifestItem, final String reason) { + public void add(final ManifestItem assetManifestItem, final String evaluateReason) { final String key = assetManifestItem.getManifestInfo().id(); if (excludes.containsKey(key)) { @@ -81,11 +84,22 @@ public void add(final ManifestItem assetManifestItem, final String reason) { includes.put(key, lines); } - lines.add(getIncludeLine(assetManifestItem, reason)); + lines.add(getIncludeLine(assetManifestItem, evaluateReason)); + final List evaluateReasons = evaluateResons + .computeIfAbsent(key, k -> new ArrayList<>()); + if (UtilMethods.isSet(evaluateReason) && !evaluateReasons.contains(evaluateReason)) { + evaluateReasons.add(evaluateReason); + } + + } + + public void addExclude(final ManifestItem assetManifestItem, final String excludeReason) { + addExclude(assetManifestItem, "", excludeReason); } - public void addExclude(final ManifestItem assetManifestItem, final String reason) { + public void addExclude(final ManifestItem assetManifestItem, + final String evaluateReason, final String excludeReason) { final String key = assetManifestItem.getManifestInfo().id(); if (includes.containsKey(key)) { @@ -99,7 +113,19 @@ public void addExclude(final ManifestItem assetManifestItem, final String reason excludes.put(key, lines); } - lines.add(getExcludeLine(assetManifestItem, reason)); + final List evaluateReasons = evaluateResons + .computeIfAbsent(key, k -> new ArrayList<>()); + if (UtilMethods.isSet(evaluateReason) && !evaluateReasons.contains(evaluateReason)) { + evaluateReasons.add(evaluateReason); + } + + if (!UtilMethods.isSet(evaluateReason)) { + lines.add(getExcludeLine(assetManifestItem, "", excludeReason)); + } else { + for (final String reason : evaluateReasons) { + lines.add(getExcludeLine(assetManifestItem, reason, excludeReason)); + } + } } public int size() { @@ -143,12 +169,26 @@ public String toString(){ } public void addExcludes(final Map> excludes) { + addExcludes(excludes, null); + } + + public void addExcludes( + final Map> excludes, + final ManifestItem dependencyFrom) { for (Entry> excludeEntry : excludes.entrySet()) { final List entryDependencies = excludeEntry.getValue(); for (ManifestItem assetExclude : entryDependencies) { - addExclude(assetExclude, excludeEntry.getKey()); + if (dependencyFrom != null) { + final String dependencyReeason = String.format( + "Dependency from: ID: %s Title: %s", + dependencyFrom.getManifestInfo().id(), + dependencyFrom.getManifestInfo().title()); + addExclude(assetExclude, dependencyReeason, excludeEntry.getKey()); + } else { + addExclude(assetExclude, excludeEntry.getKey()); + } } } } diff --git a/dotcms-integration/src/test/java/com/dotcms/publishing/PublisherAPIImplTest.java b/dotcms-integration/src/test/java/com/dotcms/publishing/PublisherAPIImplTest.java index 44263adf1079..c47e6898a466 100644 --- a/dotcms-integration/src/test/java/com/dotcms/publishing/PublisherAPIImplTest.java +++ b/dotcms-integration/src/test/java/com/dotcms/publishing/PublisherAPIImplTest.java @@ -1,5 +1,6 @@ package com.dotcms.publishing; +import com.dotcms.LicenseTestUtil; import com.dotcms.contenttype.model.field.Field; import com.dotcms.contenttype.model.field.TextField; import com.dotcms.contenttype.model.type.ContentType; @@ -131,13 +132,14 @@ public class PublisherAPIImplTest { public static final String DEPENDENCY_FROM_TEMPLATE = "Dependency from: ID: %s Title: %s"; - private static String MANIFEST_HEADERS = "INCLUDED/EXCLUDED,object type, Id, inode, title, site, folder, excluded by, included by"; + private static String MANIFEST_HEADERS = "INCLUDED/EXCLUDED,object type, Id, inode, title, site, folder, excluded by, reason to be evaluated"; private static Contentlet languageVariableCreated; private static List manifestMetadataLines = list("#Bundle ID:", "#Operation", "#Filter:"); public static void prepare() throws Exception { //Setting web app environment IntegrationTestInitService.getInstance().init(); + LicenseTestUtil.getLicense(); } public static void removeLanguageVariable(){ @@ -231,7 +233,8 @@ private static TestAsset getExperimentWithSystemTemplate() throws DotDataExcepti experiment, list(variant, experimentPage, pageNewVersion), experimentPage, list(host, template, pageContentType, language) )), - "/bundlers-test/experiment/experiment.json", true, true); + "/bundlers-test/experiment/experiment.json", + true, true, experimentPage); } private static TestAsset getExperimentVariantDifferentLayout() @@ -714,8 +717,15 @@ public void generateBundle(final TestAsset testAsset) throws DotPublishingExcept final File manifestFile = new File(manifestFilePath); if (testAsset.addExcludeForSystemTemplate()) { - manifestLines.addExcludes(new HashMap<>(Map.of("Excluded System Folder/Host/Container/Template", - list(APILocator.getTemplateAPI().systemTemplate())))); + final ManifestItem dependsFrom = (ManifestItem) testAsset.systemTemplateDependsFrom; + final String evaluateTemplateReason = dependsFrom != null ? + String.format(DEPENDENCY_FROM_TEMPLATE, + dependsFrom.getManifestInfo().id(), + dependsFrom.getManifestInfo().title()) : ""; + + manifestLines.addExclude( + APILocator.getTemplateAPI().systemTemplate(), + evaluateTemplateReason,"Excluded System Folder/Host/Container/Template"); } assertManifestFile(manifestFile, manifestLines); @@ -762,10 +772,16 @@ public static void addLanguageVariableManifestItem( String.format(DEPENDENCY_FROM_TEMPLATE, languageVariablesContentType.id(), languageVariablesContentType.name())); final Host systemHost = APILocator.getHostAPI().findSystemHost(); - manifestLines.addExclude(systemHost, "Excluded System Folder/Host/Container/Template"); + manifestLines.addExclude(systemHost, + String.format(DEPENDENCY_FROM_TEMPLATE, languageVariablesContentType.id(), languageVariablesContentType.name()), + "Excluded System Folder/Host/Container/Template"); - manifestLines.addExclude(APILocator.getFolderAPI().findSystemFolder(), + final Contentlet languageVariable = languageVariablesAddInBundle.get(0); + final Folder systemFolder = APILocator.getFolderAPI().findSystemFolder(); + manifestLines.addExclude(systemFolder, + String.format(DEPENDENCY_FROM_TEMPLATE, languageVariable.getIdentifier(), languageVariable.getTitle()), "Excluded System Folder/Host/Container/Template"); + } } @@ -1206,6 +1222,7 @@ private static class TestAsset { boolean addLanguageVariableDependencies = true; Set otherVersions; private boolean excludeForSystemTemplate; + private ManifestItem systemTemplateDependsFrom; public TestAsset( final Object asset, @@ -1238,9 +1255,10 @@ public TestAsset( final Map> dependencies, final String fileExpectedPath, final boolean addLanguageVariableDependencies, - final boolean excludeForSystemTemplate) { + final boolean excludeForSystemTemplate, + final ManifestItem systemTemplateDependsFrom) { - this(asset, dependencies, null, fileExpectedPath, addLanguageVariableDependencies, excludeForSystemTemplate); + this(asset, dependencies, null, fileExpectedPath, addLanguageVariableDependencies, excludeForSystemTemplate, systemTemplateDependsFrom); } public TestAsset( @@ -1249,7 +1267,7 @@ public TestAsset( final Set otherVersions, final String fileExpectedPath, final boolean addLanguageVariableDependencies) { - this(asset, dependencies, otherVersions, fileExpectedPath, addLanguageVariableDependencies, false); + this(asset, dependencies, otherVersions, fileExpectedPath, addLanguageVariableDependencies, false, null); } public TestAsset( @@ -1258,7 +1276,8 @@ public TestAsset( final Set otherVersions, final String fileExpectedPath, final boolean addLanguageVariableDependencies, - final boolean excludeForSystemTemplate) { + final boolean excludeForSystemTemplate, + final ManifestItem systemTemplateDependsFrom) { this.asset = asset; this.dependencies = dependencies; @@ -1266,6 +1285,7 @@ public TestAsset( this.addLanguageVariableDependencies = addLanguageVariableDependencies; this.otherVersions = otherVersions != null ? otherVersions : Collections.EMPTY_SET; this.excludeForSystemTemplate = excludeForSystemTemplate; + this.systemTemplateDependsFrom = systemTemplateDependsFrom; } public ManifestItemsMapTest manifestLines() { @@ -1288,6 +1308,10 @@ public Collection getDependencies() { public boolean addExcludeForSystemTemplate() { return excludeForSystemTemplate; } + + public ManifestItem getSystemTemplateDependsFrom() { + return systemTemplateDependsFrom; + } } @NotNull