Package aQute.lib.manifest
Class ManifestUtil
java.lang.Object
aQute.lib.manifest.ManifestUtil
Unfortunately we have to write our own manifest :-( because of a stupid bug
in the manifest code. It tries to handle UTF-8 but the way it does it it
makes the bytes platform dependent. So the following code outputs the
manifest. A Manifest consists of
'Manifest-Version: 1.0\r\n' main-attributes * \r\n name-section main-attributes ::= attributes attributes ::= key ': ' value '\r\n' name-section ::= 'Name: ' name '\r\n' attributesLines in the manifest should not exceed 72 bytes (! this is where the manifest screwed up as well when 16 bit unicodes were used).
As a bonus, we can now sort the manifest!
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate static final byte[]
private static final int
private static final Attributes.Name
private static final Comparator<Attributes.Name>
private static final byte[]
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate static Map<Attributes.Name,
String> coerce
(Attributes attributes) Coerce Attributes to Map<Name,String>.private static Stream<Map.Entry<Attributes.Name,
String>> sortedAttributes
(Attributes attributes) Sort the attributes by key.private static int
write
(OutputStream out, int width, byte[] bytes) Write the bytes but ensure that the line length does not exceed 72 characters.private static int
write
(OutputStream out, int width, String s) Convert a string to bytes with UTF-8 and then output in max 72 bytesstatic void
write
(Manifest manifest, OutputStream out) private static void
writeAttributes
(OutputStream out, Stream<Map.Entry<Attributes.Name, String>> attributes) Output an Attributes map.private static void
writeEntry
(OutputStream out, Attributes.Name name, String value) Write out an entry, handling proper unicode and line length constraints
-
Field Details
-
nameComparator
-
NAME
-
EOL
private static final byte[] EOL -
SEPARATOR
private static final byte[] SEPARATOR -
MAX_LENGTH
private static final int MAX_LENGTH
-
-
Constructor Details
-
ManifestUtil
private ManifestUtil()
-
-
Method Details
-
write
- Throws:
IOException
-
writeEntry
private static void writeEntry(OutputStream out, Attributes.Name name, String value) throws IOException Write out an entry, handling proper unicode and line length constraints- Throws:
IOException
-
write
Convert a string to bytes with UTF-8 and then output in max 72 bytes- Parameters:
out
- the output stringwidth
- the current widths
- the string to output- Returns:
- the new width
- Throws:
IOException
- when something fails
-
write
Write the bytes but ensure that the line length does not exceed 72 characters. If it is more than 70 characters, we just put a cr/lf + space.- Parameters:
out
- The output streamwidth
- The number of characters output in a line before this method startedbytes
- the bytes to output- Returns:
- the number of characters in the last line
- Throws:
IOException
- if something fails
-
writeAttributes
private static void writeAttributes(OutputStream out, Stream<Map.Entry<Attributes.Name, String>> attributes) throws IOExceptionOutput an Attributes map. We sort the map keys.- Parameters:
value
- the attributesout
- the output stream- Throws:
IOException
- when something fails
-
sortedAttributes
Sort the attributes by key.- Parameters:
attributes
- the attributes- Throws:
A
- sorted stream of the attributes
-
coerce
Coerce Attributes to Map<Name,String>.- Parameters:
attribute
- the attribute- Returns:
- A map.
-