|
@@ -0,0 +1,74 @@
|
|
|
+using Invercargill;
|
|
|
+using InvercargillJson;
|
|
|
+
|
|
|
+namespace Usm {
|
|
|
+
|
|
|
+ public class TransactionRecord {
|
|
|
+
|
|
|
+ public Vector<PackageState> state_changes { get; set; }
|
|
|
+ public DateTime transaction_start { get; set; }
|
|
|
+ public DateTime transaction_end { get; set; }
|
|
|
+
|
|
|
+ public static PropertyMapper<TransactionRecord> get_mapper() {
|
|
|
+ return PropertyMapper.build_for<TransactionRecord>(cfg => {
|
|
|
+ cfg.map<string>("transaction_start", r => r.transaction_start.format_iso8601(), (r, v) => r.transaction_start = new DateTime.from_iso8601(v, null));
|
|
|
+ cfg.map<string>("transaction_end", r => r.transaction_end.format_iso8601(), (r, v) => r.transaction_end = new DateTime.from_iso8601(v, null));
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ public void stream_out(OutputStream stream) throws Error {
|
|
|
+ var jsonl_stream = new JsonlOutputStream(stream);
|
|
|
+ var mapper = PackageState.get_mapper();
|
|
|
+ foreach (var state in state_changes) {
|
|
|
+ jsonl_stream.write_object(mapper.map_from(state));
|
|
|
+ }
|
|
|
+ jsonl_stream.flush();
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ public class PackageState {
|
|
|
+
|
|
|
+ public PackageStateType state { get; set; }
|
|
|
+ public PackageDeliveryType delivery { get; set; }
|
|
|
+ public Manifest manifest { get; set; }
|
|
|
+ public string package_path { get; set; }
|
|
|
+
|
|
|
+ public static PropertyMapper<PackageState> get_mapper() {
|
|
|
+ return PropertyMapper.build_for<PackageState>(cfg => cfg
|
|
|
+ .map<string>("package_path", o => o.package_path, (o, v) => o.package_path = v)
|
|
|
+ .map_properties_with<Manifest>("manifest", o => o.manifest, (o, v) => o.manifest = v, Manifest.get_mapper())
|
|
|
+ .map_with<PackageStateType, string>("state", o => o.state, (o, v) => o.state = v, PackageStateType.get_mapper())
|
|
|
+ .map_with<PackageDeliveryType, string>("state", o => o.delivery, (o, v) => o.delivery = v, PackageDeliveryType.get_mapper())
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ public enum PackageStateType {
|
|
|
+ INSTALLED,
|
|
|
+ REMOVED;
|
|
|
+
|
|
|
+ public static ValueMapper<PackageStateType, string> get_mapper() {
|
|
|
+ return ValueMapper.build_for<PackageStateType, string>(cfg => cfg
|
|
|
+ .map(PackageStateType.INSTALLED, "installed")
|
|
|
+ .map(PackageStateType.REMOVED, "removed")
|
|
|
+ );
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public enum PackageDeliveryType {
|
|
|
+ REPOSITORY,
|
|
|
+ BUNDLE,
|
|
|
+ MANIFEST;
|
|
|
+
|
|
|
+ public static ValueMapper<PackageDeliveryType, string> get_mapper() {
|
|
|
+ return ValueMapper.build_for<PackageDeliveryType, string>(cfg => cfg
|
|
|
+ .map(PackageDeliveryType.REPOSITORY, "repository")
|
|
|
+ .map(PackageDeliveryType.BUNDLE, "bundle")
|
|
|
+ .map(PackageDeliveryType.MANIFEST, "manifest")
|
|
|
+ );
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+}
|