1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package net.sourceforge.javadpkg.plugin.impl;
20
21 import java.io.File;
22 import java.io.IOException;
23 import java.util.ArrayList;
24 import java.util.List;
25
26 import org.apache.maven.plugin.logging.Log;
27
28 import net.sourceforge.javadpkg.ChangeLog;
29 import net.sourceforge.javadpkg.ChangeLogConstants;
30 import net.sourceforge.javadpkg.ChangeLogParser;
31 import net.sourceforge.javadpkg.ChangeLogUrgencyParser;
32 import net.sourceforge.javadpkg.ChangeLogVersionEntry;
33 import net.sourceforge.javadpkg.ChangeLogVersionEntryDetail;
34 import net.sourceforge.javadpkg.Context;
35 import net.sourceforge.javadpkg.ParseException;
36 import net.sourceforge.javadpkg.control.PackageMaintainerParser;
37 import net.sourceforge.javadpkg.control.PackageNameParser;
38 import net.sourceforge.javadpkg.control.PackageVersionParser;
39 import net.sourceforge.javadpkg.control.impl.PackageMaintainerParserImpl;
40 import net.sourceforge.javadpkg.control.impl.PackageNameParserImpl;
41 import net.sourceforge.javadpkg.control.impl.PackageVersionParserImpl;
42 import net.sourceforge.javadpkg.impl.ChangeLogImpl;
43 import net.sourceforge.javadpkg.impl.ChangeLogParserImpl;
44 import net.sourceforge.javadpkg.impl.ChangeLogUrgencyParserImpl;
45 import net.sourceforge.javadpkg.impl.ChangeLogVersionEntryDetailImpl;
46 import net.sourceforge.javadpkg.impl.ChangeLogVersionEntryImpl;
47 import net.sourceforge.javadpkg.io.impl.DataFileSource;
48 import net.sourceforge.javadpkg.plugin.ChangeLogConfigurationParser;
49 import net.sourceforge.javadpkg.plugin.cfg.ChangeLogConfiguration;
50 import net.sourceforge.javadpkg.plugin.cfg.ChangeLogVersionEntryConfiguration;
51
52
53
54
55
56
57
58
59
60
61 public class ChangeLogConfigurationParserImpl implements ChangeLogConfigurationParser, ChangeLogConstants {
62
63
64
65 private ChangeLogParser changeLogParser;
66
67 private PackageNameParser packageNameParser;
68
69 private PackageVersionParser packageVersionParser;
70
71 private ChangeLogUrgencyParser changeLogUrgencyParser;
72
73 private PackageMaintainerParser packageMaintainerParser;
74
75
76
77
78
79
80
81
82
83
84 public ChangeLogConfigurationParserImpl() {
85 super();
86
87 this.changeLogParser = new ChangeLogParserImpl();
88 this.packageNameParser = new PackageNameParserImpl();
89 this.packageVersionParser = new PackageVersionParserImpl();
90 this.changeLogUrgencyParser = new ChangeLogUrgencyParserImpl();
91 this.packageMaintainerParser = new PackageMaintainerParserImpl();
92 }
93
94
95 @Override
96 public ChangeLog parseChangeLogConfiguration(Log log, ChangeLogConfiguration config, Context context)
97 throws IOException, ParseException {
98
99 ChangeLog changeLog;
100 File file;
101
102
103 if (config == null)
104 throw new IllegalArgumentException("Argument config is null.");
105 if (context == null)
106 throw new IllegalArgumentException("Argument context is null.");
107
108 file = config.getFile();
109 if (file != null) {
110 changeLog = this.parseFile(log, file, context);
111 } else {
112 changeLog = this.parseConfiguration(log, config, context);
113 }
114
115 return changeLog;
116 }
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136 private ChangeLog parseFile(Log log, File file, Context context) throws IOException, ParseException {
137 ChangeLog changeLog;
138
139
140 if (log.isInfoEnabled()) {
141 log.info("Read change log from file |" + file.getAbsolutePath() + "|.");
142 }
143 try {
144 try (DataFileSource source = new DataFileSource(file)) {
145 changeLog = this.changeLogParser.parseChangeLog(source, context);
146 }
147 } catch (IOException e) {
148 throw new IOException("Couldn't parse the change log file |" + file.getAbsolutePath() + "|: " + e.getMessage(), e);
149 } catch (ParseException e) {
150 throw new IOException("Couldn't parse the change log file |" + file.getAbsolutePath() + "|: " + e.getMessage(), e);
151 }
152 return changeLog;
153 }
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171 private ChangeLog parseConfiguration(Log log, ChangeLogConfiguration config, Context context) throws ParseException {
172 ChangeLogImpl changeLog;
173 ChangeLogVersionEntry entry;
174
175
176 if (log.isInfoEnabled()) {
177 log.info("Read change log from configuration.");
178 }
179 changeLog = new ChangeLogImpl();
180 for (ChangeLogVersionEntryConfiguration cfg : config.getEntries()) {
181 entry = this.parseVersionEntryConfiguration(cfg, context);
182 changeLog.addEntry(entry);
183 }
184 return changeLog;
185 }
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202 private ChangeLogVersionEntry parseVersionEntryConfiguration(ChangeLogVersionEntryConfiguration config, Context context)
203 throws ParseException {
204
205 ChangeLogVersionEntryImpl entry;
206
207
208 entry = new ChangeLogVersionEntryImpl();
209 entry.setPackageName(this.packageNameParser.parsePackageName(config.getName(), context));
210 entry.setVersion(this.packageVersionParser.parsePackageVersion(config.getVersion(), context));
211 entry.setDistributions(config.getDistributions());
212 entry.setUrgency(this.changeLogUrgencyParser.parseChangeLogUrgency(config.getUrgency(), context));
213 entry.setDetails(this.parseDetails(config.getDetails(), context));
214 entry.setMaintainer(this.packageMaintainerParser.parsePackageMaintainer(config.getMaintainer(), context));
215 try {
216 entry.setDate(TIMESTAMP_FORMAT.parse(config.getDate()));
217 } catch (java.text.ParseException e) {
218 throw new ParseException("Couldn't parse timestamp |" + config.getDate() + "| of version entry: " + e.getMessage(),
219 e);
220 }
221 return entry;
222 }
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239 private List<ChangeLogVersionEntryDetail> parseDetails(List<String> configs, Context context) throws ParseException {
240 List<ChangeLogVersionEntryDetail> details;
241 ChangeLogVersionEntryDetail detail;
242
243
244 details = new ArrayList<>(configs.size());
245 for (String config : configs) {
246 detail = new ChangeLogVersionEntryDetailImpl(config);
247 details.add(detail);
248 }
249 return details;
250 }
251
252
253 }