22
33import java .util .ArrayList ;
44import java .util .Collections ;
5+ import java .util .LinkedHashMap ;
56import java .util .List ;
67import java .util .Map ;
78import java .util .Optional ;
@@ -34,6 +35,7 @@ private boolean isSecureDescriptor(ExtensionDescriptor extensionDescriptor) {
3435 }
3536
3637 public List <ExtensionDescriptor > build (DeploymentDescriptor deploymentDescriptor , List <ExtensionDescriptor > extensionDescriptors ) throws ContentException {
38+ saveSecureExtensionDescriptor (extensionDescriptors );
3739 Map <String , ExtensionDescriptor > extensionDescriptorsPerParent = getExtensionDescriptorsPerParent (extensionDescriptors );
3840 return build (deploymentDescriptor , extensionDescriptorsPerParent );
3941 }
@@ -42,25 +44,14 @@ private List<ExtensionDescriptor> build(DeploymentDescriptor deploymentDescripto
4244 Map <String , ExtensionDescriptor > extensionDescriptorsPerParent ) {
4345 List <ExtensionDescriptor > chain = new ArrayList <>();
4446 Descriptor currentDescriptor = deploymentDescriptor ;
45- ExtensionDescriptor secureDescriptor = null ;
4647
4748 while (currentDescriptor != null ) {
4849 ExtensionDescriptor nextDescriptor = extensionDescriptorsPerParent .remove (currentDescriptor .getId ());
49-
50- if (nextDescriptor != null && isSecureDescriptor (nextDescriptor )) {
51- secureDescriptor = nextDescriptor ;
52- continue ;
53- }
54-
5550 CollectionUtils .addIgnoreNull (chain , nextDescriptor );
5651 currentDescriptor = nextDescriptor ;
5752 }
5853
59- CollectionUtils .addIgnoreNull (chain , secureDescriptor );
60-
61- if (secureDescriptor == null && this .secureExtensionDescriptor != null ) {
62- CollectionUtils .addIgnoreNull (chain , this .secureExtensionDescriptor );
63- }
54+ CollectionUtils .addIgnoreNull (chain , this .secureExtensionDescriptor );
6455
6556 if (!extensionDescriptorsPerParent .isEmpty () && isStrict ) {
6657 throw new ContentException (Messages .CANNOT_BUILD_EXTENSION_DESCRIPTOR_CHAIN_BECAUSE_DESCRIPTORS_0_HAVE_AN_UNKNOWN_PARENT ,
@@ -77,25 +68,23 @@ private Map<String, ExtensionDescriptor> getExtensionDescriptorsPerParent(List<E
7768 }
7869
7970 private Map <String , ExtensionDescriptor > prune (Map <String , List <ExtensionDescriptor >> extensionDescriptorsPerParent ) {
80- return extensionDescriptorsPerParent .entrySet ()
81- .stream ()
82- .collect (Collectors .toMap (Map .Entry ::getKey , entry -> {
83- List <ExtensionDescriptor > localList = entry .getValue ();
84-
85- for (ExtensionDescriptor extensionDescriptor : localList ) {
86- if (extensionDescriptor .getId ().equals (Constants .SECURE_EXTENSION_DESCRIPTOR_ID )) {
87- this .secureExtensionDescriptor = extensionDescriptor ;
88- }
89- }
90-
91- for (ExtensionDescriptor extensionDescriptor : localList ) {
92- if (!extensionDescriptor .getId ().equals (Constants .SECURE_EXTENSION_DESCRIPTOR_ID )) {
93- return extensionDescriptor ;
94- }
95- }
96-
97- return localList .get (0 );
98- }));
71+ Map <String , ExtensionDescriptor > resultMap = new LinkedHashMap <>();
72+
73+ for (Map .Entry <String , List <ExtensionDescriptor >> entry : extensionDescriptorsPerParent .entrySet ()) {
74+ ExtensionDescriptor firstNonSecureExtensionDescriptor = null ;
75+
76+ for (ExtensionDescriptor currentExtensionDescriptorForParent : entry .getValue ()) {
77+ if (!isSecureDescriptor (currentExtensionDescriptorForParent )) {
78+ firstNonSecureExtensionDescriptor = currentExtensionDescriptorForParent ;
79+ break ;
80+ }
81+ }
82+
83+ if (firstNonSecureExtensionDescriptor != null ) {
84+ resultMap .put (entry .getKey (), firstNonSecureExtensionDescriptor );
85+ }
86+ }
87+ return resultMap ;
9988 }
10089
10190 private void validateSingleExtensionDescriptorPerParent (Map <String , List <ExtensionDescriptor >> extensionDescriptorsPerParent ) {
@@ -109,4 +98,16 @@ private void validateSingleExtensionDescriptorPerParent(Map<String, List<Extensi
10998 }
11099 }
111100
112- }
101+ private void saveSecureExtensionDescriptor (List <ExtensionDescriptor > extensionDescriptors ) {
102+ ExtensionDescriptor lastSecureExtensionDescriptor = null ;
103+
104+ for (ExtensionDescriptor extensionDescriptor : extensionDescriptors ) {
105+ if (isSecureDescriptor (extensionDescriptor )) {
106+ lastSecureExtensionDescriptor = extensionDescriptor ;
107+ }
108+ }
109+
110+ this .secureExtensionDescriptor = lastSecureExtensionDescriptor ;
111+ }
112+
113+ }
0 commit comments