public MobeelizerJsonEntity GetJsonEntity(MobeelizerModelMetadata metadata, MobeelizerDatabaseContext db) { MobeelizerJsonEntity entity = new MobeelizerJsonEntity(); entity.Model = metadata.Model; entity.Guid = metadata.Guid; entity.Fields = new Dictionary <string, string>(); var result = from MobeelizerWp7Model model in db.GetTable(this.Type) where model.Guid == metadata.Guid select model; MobeelizerWp7Model modelObject = result.Single(); entity.Owner = modelObject.Owner; entity.Fields.Add("s_deleted", modelObject.Deleted.ToString().ToLower()); foreach (MobeelizerField field in this.Fields) { object value = null; PropertyInfo property = modelObject.GetType().GetProperty(field.Accessor.Name); if (property == null) { throw new ConfigurationException("There is no property " + field.Accessor.Name + " in " + entity.Model + " class."); } value = property.GetValue(modelObject, null); entity.Fields.Add(field.Name, field.FieldType.SetValueFromDatabaseToMap(value)); } return(entity); }
private void MapEntityToDictionary(MobeelizerWp7Model model, Dictionary <String, object> values) { Type type = model.GetType(); foreach (var filed in Fields) { PropertyInfo info = type.GetProperty(filed.Accessor.Name); values.Add(info.Name, info.GetValue(model, null)); } }
internal bool Validate(MobeelizerWp7Model insert, MobeelizerErrorsHolder errors) { Dictionary <String, object> values = new Dictionary <string, object>(); MapEntityToDictionary(insert, values); foreach (MobeelizerField field in this.Fields) { field.Validate(values, errors); } if (!errors.IsValid) { return(false); } return(true); }
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { MobeelizerWp7Model item = value as MobeelizerWp7Model; if (item.Conflicted) { return("#4BED0000"); } else if (item.Modified) { return("#4C2D8000"); } else { return("#4C000000"); } }
private void UpdateEntity(MobeelizerDatabaseContext db, MobeelizerModelMetadata metadate, IDictionary <String, object> values, String guid, MobeelizerWp7Model entity) { foreach (KeyValuePair <String, object> value in values) { if (value.Key == "Conflicted" || value.Key == "Deleted" || value.Key == "Modified") { PropertyInfo property = this.Type.GetProperty(value.Key); property.SetValue(entity, ((Int32)value.Value == 1) ? true : false, null); } else { PropertyInfo property = this.Type.GetProperty(value.Key); property.SetValue(entity, value.Value, null); } } Log.i("mobeelizermodel", "Upadate entity from sync " + metadate.Model + ", guid: " + metadate.Guid); }
public void SubmitChanges() { ChangeSet set = dataContext.GetChangeSet(); IList <MobeelizerModelMetadata> metadataToAdd = new List <MobeelizerModelMetadata>(); foreach (var insert in set.Inserts) { if (insert is MobeelizerWp7Model) { MobeelizerWp7Model modelObject = insert as MobeelizerWp7Model; MobeelizerErrorsHolder errors = new MobeelizerErrorsHolder(); if (!db.ValidateEntity(modelObject, errors)) { throw new ArgumentException(errors.GetErrorsSymmary()); } String model = insert.GetType().Name; String guid = Guid.NewGuid().ToString(); String owner = db.User; modelObject.Guid = guid; modelObject.Owner = owner; modelObject.Conflicted = false; modelObject.Deleted = false; modelObject.Modified = true; MobeelizerModelMetadata metadata = new MobeelizerModelMetadata() { Model = model, Guid = guid, ModificationLock = false }; metadataToAdd.Add(metadata); } } foreach (var update in set.Updates) { if (update is MobeelizerWp7Model) { MobeelizerErrorsHolder errors = new MobeelizerErrorsHolder(); if (!db.ValidateEntity(update as MobeelizerWp7Model, errors)) { throw new InvalidOperationException(errors.GetErrorsSymmary()); } String model = update.GetType().Name; String guid = (update as MobeelizerWp7Model).Guid; var query = from meta in dataContext.ModelMetadata where meta.Model == model && meta.Guid == guid select meta; MobeelizerModelMetadata metadata = query.Single(); if (metadata.ModificationLock) { throw new InvalidOperationException("Entity is locked by synchronization process, wait until synchronization finishes."); } (update as MobeelizerWp7Model).Modified = true; } else if (update is MobeelizerModelMetadata) { MobeelizerModelMetadata metadata = update as MobeelizerModelMetadata; if ((update as MobeelizerWp7Model).Deleted && metadata.ModificationLock) { throw new InvalidOperationException("Entity is locked by synchronization process, wait until synchronization finishes."); } } } foreach (MobeelizerModelMetadata metadata in metadataToAdd) { dataContext.ModelMetadata.InsertOnSubmit(metadata); } this.dataContext.SubmitChanges(); }
internal bool ValidateEntity(MobeelizerWp7Model insert, MobeelizerErrorsHolder errors) { String model = insert.GetType().Name; return(models[model].Validate(insert, errors)); }