diff --git a/src/Artemis.Storage/Migrations/M10BetterDataBindings.cs b/src/Artemis.Storage/Migrations/M10BetterDataBindings.cs new file mode 100644 index 000000000..4b7daf20f --- /dev/null +++ b/src/Artemis.Storage/Migrations/M10BetterDataBindings.cs @@ -0,0 +1,55 @@ +using Artemis.Storage.Migrations.Interfaces; +using LiteDB; + +namespace Artemis.Storage.Migrations +{ + public class M10BetterDataBindings : IStorageMigration + { + private void Migrate(BsonValue bsonValue) + { + if (!bsonValue.IsDocument || !bsonValue.AsDocument.TryGetValue("PropertyEntities", out BsonValue propertyEntities)) + return; + + foreach (BsonValue propertyEntity in propertyEntities.AsArray) + { + if (!propertyEntity.AsDocument.TryGetValue("DataBindingEntities", out BsonValue dataBindingEntities)) + continue; + foreach (BsonValue dataBindingEntity in dataBindingEntities.AsArray) + { + if (!dataBindingEntity.AsDocument.TryGetValue("TargetExpression", out BsonValue targetExpression)) + continue; + string value = targetExpression.AsString; + if (value == "value => value" || value == "b => b") + { + dataBindingEntity.AsDocument["Identifier"] = "Value"; + } + else + { + string selector = value.Split("=>")[1]; + string property = selector.Split(".")[1]; + dataBindingEntity.AsDocument["Identifier"] = property; + } + + dataBindingEntity.AsDocument.Remove("TargetExpression"); + } + } + } + + public int UserVersion => 10; + + public void Apply(LiteRepository repository) + { + ILiteCollection collection = repository.Database.GetCollection("ProfileEntity"); + foreach (BsonDocument bsonDocument in collection.FindAll()) + { + foreach (BsonValue bsonLayer in bsonDocument["Layers"].AsArray) + Migrate(bsonLayer); + + foreach (BsonValue bsonLayer in bsonDocument["Folders"].AsArray) + Migrate(bsonLayer); + + collection.Update(bsonDocument); + } + } + } +} \ No newline at end of file