Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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;
        }
Beispiel #4
0
 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);
 }
Beispiel #5
0
        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);
        }
Beispiel #6
0
        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;
        }
Beispiel #7
0
        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);
        }
Beispiel #8
0
 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);
     }
 }
Beispiel #10
0
 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();
     }
 }