[ 
https://issues.apache.org/jira/browse/ARIES-1387?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

John Ross resolved ARIES-1387.
------------------------------
    Resolution: Fixed

http://svn.apache.org/r1703631

I committed the pull request with the following modifications.

Reinforce the immutablity and safe publication of the header, clause, and 
parameter hierarchies: (1) no default constructors; (2) all fields are final; 
(3) no subclass methods are called in the constructor; (4) synchronize access 
to mutable fields that are visible to subclasses (for example, the 
Provide-Capability header does its own parameter parsing and modifies the 
clause collection after it has been published).

Pull out more common functionality within the header, clause, and parameter 
hierarchies.

Do not use the original header value as part of the equals and hashCode 
methods; otherwise, it basically amounts to a string equals comparison.

Remove unnecessary implementations of equals and hashCode and rely on 
implementations in the abstract classes as much as possible. Currently, the 
only exception is the filter directive so that the filter comparison is not 
string equals.

Rewrite equals and hashCode in a format more familiar to this committer. There 
may have been nothing wrong with the original implementations.

Support equivalent filter comparisons rather than just string equals:
(1) Cache a simple filter and override equals/hashCode in the filter directive 
rather than rely on a string comparison in the abstract parameter.
(2) Override equals/hashCode in the simple filter rather than rely on an 
identity comparison.
(3) Use sets rather than lists in the simple filter so that equivalent filters 
are equal and have the same hashCode. For example, the following two filters 
are equal: (&(a=b)(y=z)) and (&(y=z)(a=b)).

In the equality test:
(1) Ensure that equivalent versions and clauses are equal.
(2) Include default values for the effective directive.
(3) Use the correct version range attribute name (i.e. "bundle-version" instead 
of "version") for the Require-Bundle header.
(4) Make the subsystem manifest equality check more robust so that default 
values and equivalent orderings are included.
(5) Use valid clause syntax. For example, the path must come first.
(6) Remove unnecessary references to header names. The header name is implied 
based on which header class is instantiated and is ignored as part of 
processing the value.

Add Subsystem-Type to the abstract header hierarchy.

Convert constructors taking a Requirement argument into static valueOf methods 
which translate requirements back into their respective manifest headers. 
Implement unfinished functionality, particularly with regard to extracting 
attributes from filters and creating filters from attributes.

Fix Subsystem-ImportService header and tests. Previously, the osgi.service 
requirement namespace was used for the path, whereas the correct path is the 
value of the namespace attribute.

Fix the filter generation within OsgiExecutionEnvironmentRequirement and tests. 
Previously, the filter would contain unnecessary operators for unary 
attributes. This broke ManifestHeaderProce

Support both "version" and "bundle-version" as version range attribute names.

Add default value for version range attribute to Require-Bundle and convert 
versions into ranges.

Add resolution directive default value to the Import-Package header.

> Make equals and hashCode comparisons within the header, clause, and parameter 
> hierarchies based on equivalency rather than string equals.
> -----------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: ARIES-1387
>                 URL: https://issues.apache.org/jira/browse/ARIES-1387
>             Project: Aries
>          Issue Type: Improvement
>          Components: Subsystem
>            Reporter: Cristiano Gavião
>            Assignee: John Ross
>
> Currently the org.apache.aries.subsystem.core.archive.SubsystemContentHeader 
> class (line 210) and other headers classes uses a HashSet in order to hold 
> its clauses.
> HashSet doesn't ensure the order of its items and then its impossible to have 
> a reproducible build of any manifest file. As the SubsystemManifest class 
> doesn't provide a equals() method, we can't compare a generated manifest file 
> with any template in a test, it will fail.
> The propose it to change the used HashSet for the LinkedHashSet class.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to