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 InsertEntity(MobeelizerDatabaseContext db, IDictionary <String, object> values) { MobeelizerModelMetadata metadate = new MobeelizerModelMetadata(); metadate.Model = this.Name; var entity = Activator.CreateInstance(this.Type); foreach (KeyValuePair <String, object> value in values) { if (value.Key == "Guid") { metadate.Guid = (String)value.Value; PropertyInfo property = this.Type.GetProperty("Guid"); property.SetValue(entity, value.Value, null); } 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); } } db.GetTable(this.Type).InsertOnSubmit(entity); db.ModelMetadata.InsertOnSubmit(metadate); Log.i("mobeelizermodel", "Add entity from sync " + metadate.Model + ", guid: " + metadate.Guid); }
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 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); }
internal MobeelizerOperationError UpdateFromSync(MobeelizerJsonEntity entity, MobeelizerDatabaseContext db) { var query = from MobeelizerWp7Model e in db.GetTable(this.Type) join MobeelizerModelMetadata m in db.ModelMetadata on e.Guid equals m.Guid where m.Guid == entity.Guid && m.Model == this.Name select new QueryResult() { Entity = e, Metadata = m }; bool exists = true; QueryResult result = null; if (query.Count() == 0) { exists = false; } else { result = query.Single(); } bool modifiedByUser = exists && result.Metadata.ModificationLock == false && result.Entity.Modified; if (modifiedByUser || !exists && entity.IsDeleted) { return(null); } if (entity.ConflictState == MobeelizerJsonEntity.MobeelizerConflictState.NO_IN_CONFLICT && entity.IsDeleted) { if (exists) { var table = db.GetTable(this.Type); table.DeleteAllOnSubmit(from MobeelizerWp7Model record in table where record.Guid == entity.Guid select record); } return(null); } Dictionary <String, object> values = new Dictionary <string, object>(); if (entity.ConflictState == MobeelizerJsonEntity.MobeelizerConflictState.IN_CONFLICT_BECAUSE_OF_YOU || entity.Fields.Count == 0) { PropertyInfo property = this.Type.GetProperty("Conflicted"); PropertyInfo modifiedProperty = this.Type.GetProperty("Modified"); property.SetValue(result.Entity, true, null); modifiedProperty.SetValue(result.Entity, false, null); return(null); } else if (entity.ConflictState == MobeelizerJsonEntity.MobeelizerConflictState.IN_CONFLICT) { values.Add("Conflicted", 1); } else { values.Add("Conflicted", 0); } values.Add("Owner", entity.Owner); values.Add("Modified", 0); try { values.Add("Deleted", entity.IsDeleted ? 1 : 0); } catch (KeyNotFoundException) { values.Add("Deleted", false); } MobeelizerErrorsHolder errors = new MobeelizerErrorsHolder(); foreach (MobeelizerField field in this.Fields) { field.SetValueFromMapToDatabase(values, entity.Fields, errors); } if (!errors.IsValid) { return(MobeelizerOperationError.UpdateFromSyncError(errors)); } if (exists) { UpdateEntity(db, result.Metadata, values, entity.Guid, result.Entity); } else { values.Add("Guid", entity.Guid); InsertEntity(db, values); } return(null); }
internal MobeelizerOperationError UpdateFromSync(MobeelizerJsonEntity entity, MobeelizerDatabaseContext db) { var query = from MobeelizerWp7Model e in db.GetTable(this.Type) join MobeelizerModelMetadata m in db.ModelMetadata on e.Guid equals m.Guid where m.Guid == entity.Guid && m.Model == this.Name select new QueryResult() { Entity = e, Metadata = m }; bool exists = true; QueryResult result = null; if (query.Count() == 0) { exists = false; } else { result = query.Single(); } bool modifiedByUser = exists && result.Metadata.ModificationLock == false && result.Entity.Modified ; if (modifiedByUser || !exists && entity.IsDeleted) { return null; } if (entity.ConflictState == MobeelizerJsonEntity.MobeelizerConflictState.NO_IN_CONFLICT && entity.IsDeleted) { if (exists) { var table = db.GetTable(this.Type); table.DeleteAllOnSubmit(from MobeelizerWp7Model record in table where record.Guid == entity.Guid select record); } return null; } Dictionary<String, object> values = new Dictionary<string, object>(); if (entity.ConflictState == MobeelizerJsonEntity.MobeelizerConflictState.IN_CONFLICT_BECAUSE_OF_YOU || entity.Fields.Count == 0) { PropertyInfo property = this.Type.GetProperty("Conflicted"); PropertyInfo modifiedProperty = this.Type.GetProperty("Modified"); property.SetValue(result.Entity, true, null); modifiedProperty.SetValue(result.Entity, false, null); return null; } else if (entity.ConflictState == MobeelizerJsonEntity.MobeelizerConflictState.IN_CONFLICT) { values.Add("Conflicted", 1); } else { values.Add("Conflicted", 0); } values.Add("Owner", entity.Owner); values.Add("Modified", 0); try { values.Add("Deleted", entity.IsDeleted ? 1 : 0); } catch (KeyNotFoundException) { values.Add("Deleted", false); } MobeelizerErrorsHolder errors = new MobeelizerErrorsHolder(); foreach (MobeelizerField field in this.Fields) { field.SetValueFromMapToDatabase(values, entity.Fields, errors); } if (!errors.IsValid) { return MobeelizerOperationError.UpdateFromSyncError(errors); } if (exists) { UpdateEntity(db, result.Metadata, values, entity.Guid, result.Entity); } else { values.Add("Guid", entity.Guid); InsertEntity(db, values); } return null; }
private void InsertEntity(MobeelizerDatabaseContext db, IDictionary<String, object> values) { MobeelizerModelMetadata metadate = new MobeelizerModelMetadata(); metadate.Model = this.Name; var entity = Activator.CreateInstance(this.Type); foreach (KeyValuePair<String, object> value in values) { if (value.Key == "Guid") { metadate.Guid = (String)value.Value; PropertyInfo property = this.Type.GetProperty("Guid"); property.SetValue(entity, value.Value, null); } 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); } } db.GetTable(this.Type).InsertOnSubmit(entity); db.ModelMetadata.InsertOnSubmit(metadate); Log.i("mobeelizermodel", "Add entity from sync " + metadate.Model + ", guid: "+ metadate.Guid); }
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); }
private void AddFile(String guid, String path, int modificationFlag) { using (MobeelizerDatabaseContext transaction = new MobeelizerDatabaseContext(this.ConnectionString)) { MobeelizerFilesTableEntity entity = new MobeelizerFilesTableEntity(); entity.Guid = guid; entity.Path = path; entity.Modyfied = modificationFlag; transaction.Files.InsertOnSubmit(entity); transaction.SubmitChanges(ConflictMode.FailOnFirstConflict); } }
public MobeelizerSyncEnumerator(MobeelizerDatabase db, IDictionary <String, MobeelizerModel> models) { this.db = new MobeelizerDatabaseContext(db.ConnectionString); this.models = models; enumerator = (from meta in this.db.ModelMetadata where meta.ModificationLock select meta).GetEnumerator(); }
internal MobeelizerOperationError UpdateEntitiesFromSync(IEnumerable<MobeelizerJsonEntity> entities, bool isAllSynchronization) { MobeelizerOperationError transactionErrors = null; using (MobeelizerDatabaseContext dataContext = new MobeelizerDatabaseContext(this.ConnectionString)) { if (isAllSynchronization) { foreach (var model in models.Values) { var table = dataContext.GetTable(model.Type); table.DeleteAllOnSubmit(from MobeelizerWp7Model record in table select record); } dataContext.ModelMetadata.DeleteAllOnSubmit(from m in dataContext.ModelMetadata select m); // TODO: check it //dataContext.Files.DeleteAllOnSubmit(from f in dataContext.Files select f); dataContext.SubmitChanges(); } foreach (MobeelizerJsonEntity entity in entities) { transactionErrors = models[entity.Model].UpdateFromSync(entity, dataContext); if (transactionErrors != null) { break; } } if (transactionErrors == null) { dataContext.SubmitChanges(); } } return transactionErrors; }
internal bool IsFileExists(String guid) { bool fileExists = false; using (MobeelizerDatabaseContext transaction = new MobeelizerDatabaseContext(this.ConnectionString)) { try { var query = from f in transaction.Files where f.Guid == guid select f; var result = query.Single(); if (result != null) { fileExists = true; } } catch { fileExists = false; } } return fileExists; }
internal String GetFilePath(String guid) { String path = null; using (MobeelizerDatabaseContext transaction = new MobeelizerDatabaseContext(this.ConnectionString)) { try { var query = from f in transaction.Files where f.Guid == guid select f; var result = query.Single(); path = result.Path; } catch { } } return path; }
internal bool Exists(string modelName, string guid) { bool exists = true; try { using (MobeelizerDatabaseContext dataContext = new MobeelizerDatabaseContext(this.ConnectionString)) { var table = from MobeelizerWp7Model m in dataContext.GetTable(models[modelName].Type) where m.Guid == guid select m; table.Single(); } } catch(SystemException) { exists = false; } return exists; }
internal void DeleteFileFromSync(String guid) { using (MobeelizerDatabaseContext transaction = new MobeelizerDatabaseContext(this.ConnectionString)) { var query = from f in transaction.Files where f.Guid == guid select f; transaction.Files.DeleteAllOnSubmit(query); transaction.SubmitChanges(); } }