]> git.argeo.org Git - gpl/argeo-slc.git/blob - cms/org.argeo.slc.factory/src/org/argeo/slc/rpmfactory/core/RpmSpecFile.java
c9132f93fa85cddd1eb11dc9045ce46498511889
[gpl/argeo-slc.git] / cms / org.argeo.slc.factory / src / org / argeo / slc / rpmfactory / core / RpmSpecFile.java
1 package org.argeo.slc.rpmfactory.core;
2
3 import java.io.IOException;
4 import java.nio.file.Files;
5 import java.nio.file.Path;
6 import java.util.HashMap;
7 import java.util.List;
8 import java.util.Map;
9
10 public class RpmSpecFile {
11 private Path specFile;
12
13 private String name;
14 private String version;
15 private String release;
16 private Map<String, String> sources = new HashMap<String, String>();
17 private Map<String, String> patches = new HashMap<String, String>();
18
19 public RpmSpecFile(Path specFile) {
20 this.specFile = specFile;
21 parseSpecFile();
22 }
23
24 public void init() {
25 parseSpecFile();
26 }
27
28 protected void parseSpecFile() {
29 try {
30 List<String> lines = (List<String>) Files.readAllLines(specFile);
31
32 lines: for (String line : lines) {
33 int indexSemiColon = line.indexOf(':');
34 if (indexSemiColon <= 0)
35 continue lines;
36 String directive = line.substring(0, indexSemiColon).trim();
37 String value = line.substring(indexSemiColon + 1).trim();
38 if ("name".equals(directive.toLowerCase()))
39 name = value;
40 else if ("version".equals(directive.toLowerCase()))
41 version = value;
42 else if ("release".equals(directive.toLowerCase()))
43 release = value;
44 else if (directive.toLowerCase().startsWith("source"))
45 sources.put(directive, interpret(value));
46 else if (directive.toLowerCase().startsWith("patch"))
47 patches.put(directive, interpret(value));
48 }
49
50 } catch (IOException e) {
51 throw new RuntimeException("Cannot parse spec file " + specFile, e);
52 }
53 }
54
55 protected String interpret(String value) {
56 StringBuffer buf = new StringBuffer(value.length());
57 StringBuffer currKey = null;
58 boolean mayBeKey = false;
59 chars: for (char c : value.toCharArray()) {
60 if (c == '%')
61 mayBeKey = true;
62 else if (c == '{') {
63 if (mayBeKey)
64 currKey = new StringBuffer();
65 } else if (c == '}') {
66 if (currKey == null)
67 continue chars;
68 String key = currKey.toString();
69 if ("name".equals(key.toLowerCase()))
70 buf.append(name);
71 else if ("version".equals(key.toLowerCase()))
72 buf.append(version);
73 else
74 buf.append("%{").append(key).append('}');
75 currKey = null;
76 } else {
77 if (currKey != null)
78 currKey.append(c);
79 else
80 buf.append(c);
81 }
82 }
83 return buf.toString();
84 }
85
86 public Path getSpecFile() {
87 return specFile;
88 }
89
90 public String getName() {
91 return name;
92 }
93
94 public String getVersion() {
95 return version;
96 }
97
98 public String getRelease() {
99 return release;
100 }
101
102 public Map<String, String> getSources() {
103 return sources;
104 }
105
106 public Map<String, String> getPatches() {
107 return patches;
108 }
109
110 }