1 -- | This module declares functions and data types for
2 -- JAR meta-information classes, such as MANIFEST.MF etc.
4 (module Java.META.Types,
5 module Java.META.Parser,
11 import qualified Data.Map as M
14 import Java.META.Types
15 import Java.META.Parser
19 data Manifest = Manifest {
20 manifestVersion :: String,
23 signatureVersion :: Maybe String,
24 classPath :: [String],
25 mainClass :: Maybe String,
26 manifestEntries :: [ManifestEntry]}
30 data ManifestEntry = ManifestEntry {
33 meContentType :: Maybe String,
37 instance MetaSpec Manifest where
38 loadFirstSection s = Manifest {
39 manifestVersion = s ! "Manifest-Version",
40 createdBy = s ! "Created-By",
41 sealed = case M.lookup "Sealed" s of
43 Just str -> string2bool str,
44 signatureVersion = M.lookup "Signature-Version" s,
45 classPath = case M.lookup "Class-Path" s of
47 Just str -> words str,
48 mainClass = M.lookup "Main-Class" s,
51 loadOtherSection m s = m {manifestEntries = manifestEntries m ++ [entry]}
53 entry = ManifestEntry {
55 meSealed = case M.lookup "Sealed" s of
57 Just str -> string2bool str,
58 meContentType = M.lookup "Content-Type" s,
59 meBean = case M.lookup "Java-Bean" s of
61 Just str -> string2bool str }
63 storeMeta m = first: map store (manifestEntries m)
65 first = M.fromList $ [
66 ("Manifest-Version", manifestVersion m),
67 ("Created-By", createdBy m)] ++
68 lookupList "Signature-Version" (signatureVersion m) ++
69 lookupList "Main-Class" (mainClass m) ++
72 list -> [("Class-Path", unwords list)]
74 store e = M.fromList $ [
76 ("Sealed", bool2string $ meSealed e)] ++
77 lookupList "Content-Type" (meContentType e) ++
79 then [("Java-Bean", "true")]