Exemplo n.º 1
0
        protected override void SynchronizeImpl()
        {
            ISerializableObject source = StateOwner.SourceObject;
            ISerializableObject sink   = StateOwner.SinkSerializer.CreateISerializableObject(StateOwner.SynchronizedType);

            CopyUtils.PlainCopy(StateOwner.SinkSerializer, KeyCarrier, sink, new FieldLock(source.GetType()), true);
            CopyUtils.PlainCopy(StateOwner.SinkSerializer, source, sink, new FieldLock(source.GetType()), false);

            StateOwner.SinkSerializer.Connector.InsertPlain(sink);
            StateOwner.SinkObject = sink;

            SyncItem si1 = StateOwner.SyncSerializer.CreateISerializableObject <SyncItem>();
            SyncItem si2 = StateOwner.SyncSerializer.CreateISerializableObject <SyncItem>();

            si1.SyncGuid = AttributeWorker.RowGuid(source);
            si2.SyncGuid = AttributeWorker.RowGuid(sink);
            si1.ClassID  = source.GetType().Name;
            si2.ClassID  = source.GetType().Name;

            si1.Hashcode = SyncContainer.ComputeHashCode(StateOwner.SourceSerializer.Target, source);
            si2.Hashcode = SyncContainer.ComputeHashCode(StateOwner.SinkSerializer.Target, sink);

            si1.CounterPart = si2;

            StateOwner.SyncSerializer.Connector.Save(si1);
            StateOwner.SyncSerializer.ConnectOneToOne(si1, si2);
            StateOwner.SyncSerializer.Connector.Save(si2);
            StateOwner.SyncSerializer.ConnectOneToOne(si2, si1);
            StateOwner.SyncSerializer.Connector.Save(si1);

            StateOwner.UpdateFieldStates(StateOwner.SourceSerializer.Target, si1, source);//Deaktiviert
            StateOwner.UpdateFieldStates(StateOwner.SinkSerializer.Target, si2, sink);
        }
        private void update(ListContainer sc)
        {
            try
            {
                ISerializableObject sourceObject = sc.iso;
                SyncItem            si           = FetchSyncItem(sourceObject.Rowguid);
                Guid sinkGuid = sourceObject.Rowguid;
                ISerializableObject sinkObject = FetchObject(sinkSerializer, sinkGuid, sourceObject.GetType());
                if (LookupSynchronizationInformation.getImageClasses().Contains(sourceObject.GetType()))
                {
                    //Bilder können nicht aktualisiert werden
                    ignore(sc);
                    return;
                }
                else
                {
                    copyToSinkObject(sourceObject, sinkObject);
                    adjustAutoIncKeys(sinkObject);//Kann man verhindern, dass "richtige" Schlüssel zunächst falsch überschrieben und dann wieder richt zurücküberschrieben werden?
                }
                sinkSerializer.Connector.UpdatePlain(sinkObject);
                syncSerializer.Connector.Save(si);

                sinkObject = FetchObject(sinkSerializer, sinkGuid, sourceObject.GetType());
                sc.State   = SyncStates_Enum.SynchronizedState;
            }
            catch (Exception e)
            {
                MessageBox.Show("Update Failure: " + e.Message);
            }
        }
        public static String ToStringHelper(ISerializableObject iso, int width)
        {
            FieldInfo[]   fis = iso.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance);
            StringBuilder b   = new StringBuilder();

            b.Append(System.Environment.NewLine);
            b.Append("-----------------------------------").Append(System.Environment.NewLine);
            b.Append(iso.GetType().Name).Append(System.Environment.NewLine);
            b.Append("-----------------------------------").Append(System.Environment.NewLine);

            foreach (FieldInfo fi in fis)
            {
                Object tmp = fi.GetValue(iso);
                if (tmp == null)
                {
                    tmp = "null";
                }
                if (AttributeWorker.IsRelationField(fi))
                {
                    continue;
                }
                b.Append(fi.Name).Append(" = ").Append(tmp).Append(System.Environment.NewLine);
            }

            return(b.ToString());
        }
Exemplo n.º 4
0
        internal virtual String Delete(ISerializableObject iso)
        {
            AttributeWorker w   = AttributeWorker.GetInstance(Target);
            StringBuilder   sql = new StringBuilder();

            sql.Append("DELETE FROM ").Append(w.GetTableMapping(iso.GetType(), _praefix));
            sql.Append(" WHERE ");

            FieldInfo[] fis   = AttributeWorker.RetrieveAllFields(iso.GetType());
            bool        start = true;

            foreach (FieldInfo fi in fis)
            {
                if (w.IsID(fi))
                {
                    String col = w.GetColumnMapping(fi);
                    Object val = fi.GetValue(iso);

                    if (val == null)
                    {
                        throw new SerializerException("Not deletable ...");
                    }

                    if (!start)
                    {
                        sql.Append(" AND ");
                    }

                    start = false;
                    sql.Append(col).Append("=").Append(SqlUtil.SqlConvert(val));
                }
            }

            return(sql.ToString());
        }
        public CsvPimaryKey(ISerializableObject iso, String target)
        {
            _type = iso.GetType();

            IDictionary<String, FieldInfo> ids = AttributeWorker.GetInstance(target).GetPrimaryKeyFields(iso.GetType());

            List<String> tmpList = new List<String>(ids.Count);
            StringBuilder csvKey = new StringBuilder();
            String tmp;

            foreach (String id in ids.Keys)
            {
                StringBuilder tmpBuilder = new StringBuilder();

                _fields.Add(ids[id]);
                _values.Add(ids[id].GetValue(iso));

                try
                {
                    //if (ids[id].GetValue(iso) is DateTime)
                    //{
                    //    DateTime dt = (DateTime)ids[id].GetValue(iso);
                    //    tmp = SqlUtil.SqlConvert(dt);
                    //}
                    //else
                    //    tmp = ids[id].GetValue(iso).ToString();
                    tmp = SqlUtil.SqlConvert(ids[id].GetValue(iso)).ToString();
                }
                catch(NullReferenceException ex)
                {
                    throw new KeyNotFoundException("", ex);
                }

                //Maskierung der Kommata
                tmp = tmp.Replace("/", "//");
                tmp = tmp.Replace(";", "/;");
                tmp = tmp.Replace("=", "/=");

                tmpBuilder.Append(id).Append("=");
                tmpBuilder.Append(tmp);
                tmpList.Add(tmpBuilder.ToString());
            }

            tmpList.Sort();

            bool initial = true;
            foreach (String s in tmpList)
            {
                if (!initial)
                {
                    csvKey.Append(";");
                }
                initial = false;
                csvKey.Append(s);
            }

            _csvKey = csvKey.ToString();
        }
Exemplo n.º 6
0
        //Hier Anknüpfungspunkt für Transparent
        internal virtual String SerializeInsert(ISerializableObject iso)
        {
            AttributeWorker w      = AttributeWorker.GetInstance(Target);
            StringBuilder   sql    = new StringBuilder();
            StringBuilder   values = new StringBuilder();

            sql.Append("INSERT INTO ").Append(w.GetTableMapping(iso.GetType(), _praefix));
            sql.Append(" (");

            FieldInfo[] fis = AttributeWorker.RetrieveAllFields(iso.GetType());

            bool start = true;

            foreach (FieldInfo fi in fis)
            {
                if (w.IsAutoincID(fi))
                {
                    continue;
                }

                try
                {
                    String col = w.GetColumnMapping(fi);
                    Object val = fi.GetValue(iso);



                    if (val == null && (w.IsID(fi) && !w.IsAutoincID(fi)))
                    {
                        throw new SerializerException("PRIMARY KEY FIELD NOT SET!!!!!!!!");
                    }

                    if (!start)
                    {
                        sql.Append(", ");
                        values.Append(", ");
                    }
                    else
                    {
                        start = false;
                    }

                    sql.Append(col);
                    values.Append(SqlUtil.SqlConvert(val));
                }
                catch (SerializerException) { }
            }

            sql.Append(") VALUES (");

            sql.Append(values);

            sql.Append(")");

            return(sql.ToString());
        }
        private void analyzeObject(ISerializableObject iso)
        {
            ISerializableObject source = iso;
            ISerializableObject sink;
            Guid     syncGuid = source.Rowguid;
            SyncItem syncItem = FetchSyncItem(syncGuid);

            if (syncItem == null)//In der Synchronisationstabelle gibt es keinen korrepondierenden Eintrag
            {
#if DEBUG
                logger.Debug(source.GetType().Name + ", guid=" + syncGuid + " is not synchronized and will be inserted");
#endif
                analyzedList.Add(new ListContainer(iso, SyncStates_Enum.InsertState));
            }
            else //in der Synchronisationstabelle ist ein Eintrag vorhanden
            {
                sink = FetchObject(sinkSerializer, syncGuid, source.GetType());
                if (sink == null)//Wenn es nicht vorhanden ist wurde es gelöscht
                {
#if DEBUG
                    logger.Debug(syncItem.ClassID + ", guid=" + syncGuid + " does not exist, the conflict has to be resolved");
#endif

                    analyzedList.Add(new ListContainer(iso, SyncStates_Enum.DeletedState));
                }
                else
                {
                    DateTime sinkLogtime = sink.LogTime;
                    if (sinkLogtime > syncItem.LogTime)//Änderung der Daten in der Zieldatenbank--warum ist das schon ein Konflikt?
                    {
#if DEBUG
                        logger.Debug(syncItem.ClassID + ", guid=" + syncGuid + " is involved in a conflict, which has to be resolved");
#endif
                        analyzedList.Add(new ListContainer(iso, SyncStates_Enum.ConflictState));
                    }
                    else //zieldatenbank unverändert
                    {
                        DateTime sourceLogtime = source.LogTime;
                        if (sourceLogtime <= syncItem.LogTime)//Quelldatenbank unverändert
                        {
#if DEBUG
                            logger.Debug(syncItem.ClassID + ", guid=" + syncGuid + " has not changed and will not be synchronized");
#endif
                            analyzedList.Add(new ListContainer(iso, SyncStates_Enum.IgnoreState));
                        }
                        else//Quelldatenbank verändert-Zieldatenbank unverändert ->update
                        {
#if DEBUG
                            logger.Debug(syncItem.ClassID + ", guid=" + syncGuid + " has changed on the sourceside and will be updated");
#endif
                            analyzedList.Add(new ListContainer(iso, SyncStates_Enum.UpdateState));
                        }
                    }
                }
            }
        }
Exemplo n.º 8
0
        public void InsertObject(ISerializableObject iso, DbConnection connection, ISerializerTransaction transaction)
        {
            AttributeWorker w   = AttributeWorker.GetInstance(Target);
            DbCommand       com = connection.CreateCommand();

            com.CommandText = _owner.SerializeInsert(iso);
            transaction.Guard(com);
            //Console.WriteLine(com.CommandText);
            try
            {
                //Console.WriteLine(com.ExecuteNonQuery());
                com.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw new SerializerException("insert failed", ex);
            }



            FieldInfo autoincField;
            Guid      g = AttributeWorker.RowGuid(iso);

            if ((autoincField = w.GetAutoincField(iso.GetType())) != null)
            {
                StringBuilder b = new StringBuilder();

                b.Append("SELECT * FROM ").Append(w.GetTableMapping(iso.GetType(), _owner.Praefix)).Append(" WHERE ");
                b.Append(w.GetColumnMapping(AttributeWorker.RowGuid(iso.GetType()))).Append("='");
                b.Append(g.ToString()).Append("'");

                com.CommandText = b.ToString();
                DbDataReader r = com.ExecuteReader();

                if (r.Read())
                {
                    Object o = r[w.GetColumnMapping(w.GetAutoincField(iso.GetType()))];
                    autoincField.SetValue(iso, o);
                }
                else
                {
                    r.Close();
                    throw new SerializerException("Insert core method failed! error unknown...");
                }

                r.Close();
            }


            GenericWeakReference <ISerializableObject> tmp = new GenericWeakReference <ISerializableObject>(iso);

            _persistentObjects[g] = tmp;
            MemoriseKeys(iso, w, tmp);
        }
        public ConflictHandling(ISerializableObject o1, ISerializableObject o2)
        {
            if (o1 == null || o2 == null)
                throw new Exception("Objects may not be null");

            if(o1.GetType()!=o2.GetType())
                throw new Exception("You can only compare objects of the same type.");
            this.ownerType = o1.GetType();
            this.object1 = o1;
            this.object2 = o2;
            this.conflicts = new List<Conflict>();
        }
        /// <summary>
        /// Returns the table name for the passed object.
        /// </summary>
        /// <param name="data">The ISerializableObject object.</param>
        /// <returns>string</returns>
        public static string GetTableMapping(ISerializableObject data)
        {
            Attribute a   = Attribute.GetCustomAttribute(data.GetType(), typeof(TableAttribute));
            string    ret = null;

            if (a != null)
            {
                ret = ((TableAttribute)a).TableMapping;
            }
            if (ret == null)
            {
                ret = data.GetType().Name;
            }
            return(ret);
        }
Exemplo n.º 11
0
        internal void Delete(ISerializableObject iso, ISerializerTransaction transaction)
        {
            if (!IsManaged(iso))
            {
                return;
            }



            AttributeWorker w = AttributeWorker.GetInstance(Target);


            ResolverData <ISerializableObject> data = new ResolverData <ISerializableObject>();

            data.FieldsToResolve = AttributeWorker.RetrieveAllFields(iso.GetType());
            data.HandledItem     = iso;

            DeleteHandler h = new DeleteHandler(this);
            RelationResolver <ISerializableObject> res = new RelationResolver <ISerializableObject>();

            res.Handler = h;


            h.MODE = DeleteHandler.DOWNMODE;
            res.StartRelationResolving(data);


            _objectPool.DeleteObject(iso, _connection, transaction);

            h.MODE = DeleteHandler.UPMODE;
            res.StartRelationResolving(data);
        }
Exemplo n.º 12
0
        public ISerializableObject CreateISerializableObject(Type type)
        {
            AttributeWorker w = AttributeWorker.GetInstance(Target);

            ISerializableObject iso = null;

            try
            {
                iso = (ISerializableObject)Activator.CreateInstance(type);
            }
            catch (InvalidCastException)
            {
                throw new SerializerException();
            }

            _objectPool.Register(iso);

            ResolverData <ISerializableObject> data = new ResolverData <ISerializableObject>();

            data.FieldsToResolve = AttributeWorker.RetrieveAllFields(iso.GetType());
            data.HandledItem     = iso;
            CreateHandler handler = new CreateHandler(this);
            RelationResolver <ISerializableObject> resolver = new RelationResolver <ISerializableObject>();

            resolver.Handler = handler;
            resolver.StartRelationResolving(data);

            return(iso);
        }
        public ConflictHandling(ISerializableObject o1, ISerializableObject o2)
        {
            if (o1 == null || o2 == null)
            {
                throw new Exception("Objects may not be null");
            }

            if (o1.GetType() != o2.GetType())
            {
                throw new Exception("You can only compare objects of the same type.");
            }
            this.ownerType = o1.GetType();
            this.object1   = o1;
            this.object2   = o2;
            this.conflicts = new List <Conflict>();
        }
        internal void copyToSinkObject(ISerializableObject from, ISerializableObject to)
        {
            AttributeWorker w = AttributeWorker.GetInstance(sinkSerializer.Target);//Am besten durch Kopiervorgang ersetzen, der ohne Attributeworker auskommt.

            FieldInfo[] fis = AttributeWorker.RetrieveAllFields(from.GetType());

            foreach (FieldInfo fi in fis)
            {
                if (w.IsAutoincID(fi))
                {
                    continue;                   //Kann man aus Lookup-Tabelle holen
                }
                if (!w.IsPersistentField(fi))
                {
                    continue;                          //wirklich  nötig?
                }
                //DirectSync wird im Moment nicht unterstützt
                if (AttributeWorker.IsRowGuid(fi))
                {
                    continue;                               //Kann man als Lookup-Tabelle definieren
                }
                Object val = fi.GetValue(from);
                fi.SetValue(to, val);
            }
        }
Exemplo n.º 15
0
        internal static void PlainCopy(Serializer context, ISerializableObject from, ISerializableObject to, FieldLock fieldLock, bool forceForeignKeyCopy)
        {
            AttributeWorker w = AttributeWorker.GetInstance(context.Target);

            FieldInfo[] fis = AttributeWorker.RetrieveAllFields(from.GetType());

            foreach (FieldInfo fi in fis)
            {
                if (fieldLock.IsLocked(fi)) continue;
                if (AttributeWorker.IsRelationField(fi)) continue;
                if (w.IsAutoincID(fi)) continue;
                if (!w.IsPersistentField(fi)) continue;
                if (AttributeWorker.IsRowGuid(fi)) continue;
                if (w.IsForeignKey(context, fi) && !forceForeignKeyCopy)
                {
                    DirectSyncAttribute a = (DirectSyncAttribute)Attribute.GetCustomAttribute(fi, typeof(DirectSyncAttribute));

                    if (a == null) continue;
                }

                Object val = fi.GetValue(from);
                fi.SetValue(to, val);

            }
        }
        private void Serialize(XElement XElement, ISerializableObject SerializableObject)
        {
            System.Runtime.Serialization.SerializationInfo si = new System.Runtime.Serialization.SerializationInfo(SerializableObject.GetType(), new System.Runtime.Serialization.FormatterConverter());

            SerializableObject.Serialize(si);

            XElement elem = new XElement(SerializableObject.SerializationTag.Type);

            elem.Add(new XAttribute("name", SerializableObject.SerializationTag.Name));        

            foreach (System.Runtime.Serialization.SerializationEntry entry in si)
            {
                elem.Add(new XElement(entry.Name, entry.Value));
            }

            if (SerializableObject.ChildrenSerializable != null)
            {
                foreach (ISerializableObject childSerializable in SerializableObject.ChildrenSerializable.Where(p=>p != null))
                {
                    Serialize(elem, childSerializable);
                }
            }

            if (!elem.IsEmpty)
                XElement.Add(elem);
        }
        private void Deserialize(XElement XElement, ISerializableObject SerializableObject)
        {
            System.Runtime.Serialization.SerializationInfo si = new System.Runtime.Serialization.SerializationInfo(SerializableObject.GetType(), new System.Runtime.Serialization.FormatterConverter());

            if (XElement != null)
            {
                foreach (XElement xelem in XElement.Elements())
                {
                    if (!xelem.HasElements && !string.IsNullOrEmpty(xelem.Value))
                    {
                        si.AddValue(xelem.Name.LocalName, xelem.Value);
                    }
                }

                if (SerializableObject.ChildrenSerializable != null)
                {
                    foreach (ISerializableObject childSerializable in SerializableObject.ChildrenSerializable.Where(p=> p!=null && !p.SerializationTag.IsEmpty))
                    {
                        XElement xelem = XElement.Elements().
                            Where(p => p.Name == childSerializable.SerializationTag.Type).
                            Where(p => XmlLinq.GetAttribute(p, "name") == childSerializable.SerializationTag.Name).FirstOrDefault();

                        Deserialize(xelem, childSerializable);
                    }
                }
            }
            
            SerializableObject.Deserialize(si);    
        }
        public CsvPimaryKey(ISerializableObject iso, String target)
        {
            _type = iso.GetType();

            IDictionary <String, FieldInfo> ids = AttributeWorker.GetInstance(target).GetPrimaryKeyFields(iso.GetType());

            List <String> tmpList = new List <String>(ids.Count);
            StringBuilder csvKey  = new StringBuilder();
            String        tmp;

            foreach (String id in ids.Keys)
            {
                StringBuilder tmpBuilder = new StringBuilder();

                _fields.Add(ids[id]);
                _values.Add(ids[id].GetValue(iso));

                try
                {
                    //if (ids[id].GetValue(iso) is DateTime)
                    //{
                    //    DateTime dt = (DateTime)ids[id].GetValue(iso);
                    //    tmp = SqlUtil.SqlConvert(dt);
                    //}
                    //else
                    //    tmp = ids[id].GetValue(iso).ToString();
                    tmp = SqlUtil.SqlConvert(ids[id].GetValue(iso)).ToString();
                }
                catch (NullReferenceException ex)
                {
                    throw new KeyNotFoundException("", ex);
                }

                //Maskierung der Kommata
                tmp = tmp.Replace("/", "//");
                tmp = tmp.Replace(";", "/;");
                tmp = tmp.Replace("=", "/=");

                tmpBuilder.Append(id).Append("=");
                tmpBuilder.Append(tmp);
                tmpList.Add(tmpBuilder.ToString());
            }

            tmpList.Sort();

            bool initial = true;

            foreach (String s in tmpList)
            {
                if (!initial)
                {
                    csvKey.Append(";");
                }
                initial = false;
                csvKey.Append(s);
            }

            _csvKey = csvKey.ToString();
        }
Exemplo n.º 19
0
        public AnalyzeForm(SyncContainer cont)
        {
            InitializeComponent();
            sourceObject = cont.SourceObject;
            sinkObject   = cont.SinkObject;

            if (sourceObject.GetType() != sinkObject.GetType())
            {
                MessageBox.Show("Incompatible Types!");
                this.Close();
            }

            propertyGridRepository.SelectedObject = sourceObject;
            propertyGridMobileDB.SelectedObject   = sinkObject;
            objectType = sourceObject.GetType();
            readType(objectType);
            editObject = (ISerializableObject)objectType.GetConstructor(new Type[] {}).Invoke(new object[] {});//Konstruktor für unbekanntes Objektt
            propertyGridEdit.SelectedObject = editObject;
        }
Exemplo n.º 20
0
        public AnalyzeForm(SyncContainer cont)
        {
            InitializeComponent();
            sourceObject = cont.SourceObject;
            sinkObject = cont.SinkObject;

            if(sourceObject.GetType() != sinkObject.GetType())
            {
                MessageBox.Show("Incompatible Types!");
                this.Close();
            }

            propertyGridRepository.SelectedObject = sourceObject;
            propertyGridMobileDB.SelectedObject = sinkObject;
            objectType =sourceObject.GetType();
            readType(objectType);
            editObject= (ISerializableObject) objectType.GetConstructor(new Type[] {}).Invoke(new object[] {});//Konstruktor für unbekanntes Objektt
            propertyGridEdit.SelectedObject = editObject;
        }
Exemplo n.º 21
0
        internal void Save(ISerializableObject iso, ISerializerTransaction transaction)
        {
            AttributeWorker w = AttributeWorker.GetInstance(Target);

            if (!IsManaged(iso))
            {
//                Console.WriteLine("SERIALIZE");
                _objectPool.InsertObject(iso, _connection, transaction);

                ResolverData <ISerializableObject> rData = new ResolverData <ISerializableObject>();
                rData.HandledItem     = iso;
                rData.FieldsToResolve = AttributeWorker.RetrieveAllFields(iso.GetType());

                LoadHandler handler = new LoadHandler(this);
                RelationResolver <ISerializableObject> res = new RelationResolver <ISerializableObject>();
                res.Handler = handler;
                res.StartRelationResolving(rData);
            }
            else
            {
//                Console.WriteLine("UPDATE");
                UpdateStates state = _objectPool.UpdateObject(iso, _connection, transaction);

                if (state == UpdateStates.NO_ROWS_AFFECTED)
                {
                    throw new SerializerException("entry could not be updated ...");
                }
                else if (state == UpdateStates.PRIMARYKEY_MODIFIED)
                {
                    UpdateEventArgs args = new UpdateEventArgs(state);
                    OnUpdateEvent(args);
                }

                ResolverData <ISerializableObject> data = new ResolverData <ISerializableObject>();
                data.HandledItem     = iso;
                data.FieldsToResolve = AttributeWorker.RetrieveAllFields(iso.GetType());

                RelationResolver <ISerializableObject> res = new RelationResolver <ISerializableObject>();
                res.Handler = new UpdateHandler(this);
                res.StartRelationResolving(data);
            }
        }
Exemplo n.º 22
0
        public void RemoveVirtualKeyFromTarget(ISerializableObject target)
        {
            if (_targetType != target.GetType())
            {
                throw new Serializer.SerializerException();
            }

            foreach (String key in _virtualJoinKeyFields.Keys)
            {
                _virtualJoinKeyFields[key].SetValue(target, null);
            }
        }
Exemplo n.º 23
0
        public void Apply(ISerializableObject iso)
        {
            if (iso.GetType() != _type)
            {
                throw new SerializerException();
            }

            for (int i = 0; i < _fields.Count; i++)
            {
                _fields[i].SetValue(iso, _values[i]);
            }
        }
        private void insert(ListContainer sc)
        {
            ISerializableObject sourceObject = sc.iso;
            ISerializableObject sinkObject   = sinkSerializer.CreateISerializableObject(sourceObject.GetType(), sc.iso.Rowguid);//Hier werden die Relationen mitgefüllt. Eigentlich ist da nicht nötig->Methode ändern? Zeitersparnis?

            //Evtl. Problem, dass nicht alle Beziehungen aufgelöst werden können, weil noch nicht alle Objekte "rübersynchronisert" wurden.
            copyToSinkObject(sourceObject, sinkObject);
            if (LookupSynchronizationInformation.getImageClasses().Contains(sourceObject.GetType()))
            {
                try
                {
                    MessageBox.Show("Insert Picture:" + sinkObject.Rowguid.ToString());
                    if (this.pictrans == null)
                    {
                        throw new TransferException("No TransferService is added");
                    }
                    insertPicture(sinkObject);
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Picture SyncFailure: " + ex.Message);
                    return;
                }
            }
            try
            {
                adjustAutoIncKeys(sinkObject);
                sinkSerializer.Connector.InsertPlain(sinkObject);
                SyncItem si = syncSerializer.CreateISerializableObject <SyncItem>();
                si.SyncGuid = sourceObject.Rowguid;
                si.ClassID  = sourceObject.GetType().Name;
                syncSerializer.Connector.Save(si);
                sinkObject = FetchObject(sinkSerializer, sinkObject.Rowguid, sinkObject.GetType());//Mit angepasstem AutoIncSChlüssel aus der DB holen
                sc.State   = SyncStates_Enum.SynchronizedState;
            }
            catch (Exception e)
            {
                MessageBox.Show("Insert Failure: " + e.Message + " All dependent Insert will also Fail and notice You");
            }
        }
Exemplo n.º 25
0
        private static void MemoriseKeys(ISerializableObject iso, AttributeWorker w, GenericWeakReference <ISerializableObject> gwr)
        {
            IDictionary <String, FieldInfo> pkf = w.GetPrimaryKeyFields(iso.GetType());

            foreach (FieldInfo fi in pkf.Values)
            {
                if (w.IsAutoincID(fi))
                {
                    continue;
                }
                gwr.Properties[fi.Name] = fi.GetValue(iso);
            }
        }
Exemplo n.º 26
0
        //Konstruktor
        internal SyncContainer(ISerializableObject iso, Serializer syncSerializer, Serializer sourceSerializer)
        {
            SyncState = new PrematureState(this);

            _synchronizedType = iso.GetType();
            _sourceGuid       = AttributeWorker.RowGuid(iso);

            _syncSerializer   = syncSerializer;
            _sourceSerializer = sourceSerializer;

            _parents  = new List <SyncContainer>();
            _children = new List <SyncContainer>();
        }
Exemplo n.º 27
0
        internal ISerializableObject Load(Type type, string table, IRestriction restriction, ISerializerTransaction transaction)
        {
            bool found    = false;
            bool multiple = false;
            bool isLoaded = false;


            DbDataReader        reader = CreateDataReader(type, table, restriction, transaction);
            ISerializableObject data   = null;

            if (reader.Read())
            {
                data  = _objectPool.RetrieveObject(type, reader, ref isLoaded);
                found = true;
            }



            if (reader.Read())
            {
                multiple = true;
            }
            reader.Close();

            if (multiple)
            {
                throw new MultipleResultException("More than one Result found for the given Restriction ...");
            }

            if (data == null)
            {
                return(null);
            }

            bool doRelationLoading = found && isLoaded;


            if (doRelationLoading)
            {
                ResolverData <ISerializableObject> rData = new ResolverData <ISerializableObject>();
                rData.HandledItem     = data;
                rData.FieldsToResolve = AttributeWorker.RetrieveAllFields(data.GetType());

                LoadHandler handler = new LoadHandler(this);
                RelationResolver <ISerializableObject> res = new RelationResolver <ISerializableObject>();
                res.Handler = handler;
                res.StartRelationResolving(rData);
            }

            return(data);
        }
Exemplo n.º 28
0
        public void ApplyVirtualKeyToTarget(ISerializableObject target)
        {
            if (_targetType != target.GetType())
            {
                throw new Serializer.SerializerException();
            }

            foreach (String key in _virtualKeyValues.Keys)
            {
                Object val          = _virtualKeyValues[key];
                String tranlatedKey = _keyTranslation[key];
                _virtualJoinKeyFields[tranlatedKey].SetValue(target, val);
            }
        }
Exemplo n.º 29
0
        internal void InitSyncContainer(IDictionary <Guid, SyncContainer> pooledObjects)
        {
            ResolverData <ISerializableObject> data = new ResolverData <ISerializableObject>();

            ISerializableObject iso = FetchObject(_sourceSerializer, _sourceGuid);

            data.HandledItem     = iso;
            data.FieldsToResolve = AttributeWorker.RetrieveAllFields(iso.GetType());//Sind alle nötig?

            DependencyRelationHandler h = new DependencyRelationHandler(this, pooledObjects);
            RelationResolver <ISerializableObject> r = new RelationResolver <ISerializableObject>();

            r.Handler = h;
            r.StartRelationResolving(data);
        }
        /// <summary>
        /// Gets the AutoIncPrimaryKey setter.
        /// </summary>
        /// <param name="data">The ISerializableObject object.</param>
        /// <returns>MethodInfo</returns>
        public static MethodInfo GetAutoIncPrimaryKeySetter(ISerializableObject data)
        {
            PropertyInfo[] properties = data.GetType().GetProperties();

            foreach (PropertyInfo p in properties)
            {
                ColumnAttribute attribute = GetColumnAttribute(p);

                if (attribute != null && attribute is AutoIncPrimaryKeyAttribute)
                {
                    return p.GetSetMethod();
                }
            }

            return null;
        }
        /// <summary>
        /// Determines whether the ISerializableObject object contains an AutoIncPrimaryKey.
        /// </summary>
        /// <param name="data">The ISerializableObject object.</param>
        /// <returns>
        ///     <c>true</c> if the ISerializableObject object contains an AutoIncPrimaryKey; otherwise, <c>false</c>.
        /// </returns>
        public static bool ContainsAutoIncPrimaryKey(ISerializableObject data)
        {
            PropertyInfo[] properties = data.GetType().GetProperties();

            foreach (PropertyInfo p in properties)
            {
                ColumnAttribute attribute = GetColumnAttribute(p);

                if (attribute != null && attribute is AutoIncPrimaryKeyAttribute)
                {
                    return(true);
                }
            }

            return(false);
        }
        /// <summary>
        /// Determines whether the ISerializableObject object contains an AutoIncPrimaryKey.
        /// </summary>
        /// <param name="data">The ISerializableObject object.</param>
        /// <returns>
        /// 	<c>true</c> if the ISerializableObject object contains an AutoIncPrimaryKey; otherwise, <c>false</c>.
        /// </returns>
        public static bool ContainsAutoIncPrimaryKey(ISerializableObject data)
        {
            PropertyInfo[] properties = data.GetType().GetProperties();

            foreach (PropertyInfo p in properties)
            {
                ColumnAttribute attribute = GetColumnAttribute(p);

                if (attribute != null && attribute is AutoIncPrimaryKeyAttribute)
                {
                    return true;
                }
            }

            return false;
        }
Exemplo n.º 33
0
        internal static void ForeignKeyCopy(Serializer context, ISerializableObject from, ISerializableObject to, FieldLock fieldLock)
        {
            AttributeWorker w = AttributeWorker.GetInstance(context.Target);

            FieldInfo[] fis = AttributeWorker.RetrieveAllFields(from.GetType());

            foreach (FieldInfo fi in fis)
            {
                if (fieldLock.IsLocked(fi)) continue;
                if (!w.IsForeignKey(context, fi)) continue;

                Object val = fi.GetValue(from);
                fi.SetValue(to, val);

            }
        }
        /// <summary>
        /// Gets the AutoIncPrimaryKey setter.
        /// </summary>
        /// <param name="data">The ISerializableObject object.</param>
        /// <returns>MethodInfo</returns>
        public static MethodInfo GetAutoIncPrimaryKeySetter(ISerializableObject data)
        {
            PropertyInfo[] properties = data.GetType().GetProperties();

            foreach (PropertyInfo p in properties)
            {
                ColumnAttribute attribute = GetColumnAttribute(p);

                if (attribute != null && attribute is AutoIncPrimaryKeyAttribute)
                {
                    return(p.GetSetMethod());
                }
            }

            return(null);
        }
Exemplo n.º 35
0
        protected List <String> GetConstrainingAttributes(String op)
        {
            List <string> list = new List <string>();

            PropertyInfo[] properties = data.GetType().GetProperties();
            foreach (PropertyInfo property in properties)
            {
                ColumnAttribute attribute =
                    (ColumnAttribute)Attribute.GetCustomAttribute(property, typeof(ColumnAttribute));


                if (attribute != null)
                {
                    MethodInfo method = property.GetGetMethod();
                    Object     ret    = method.Invoke(data, null);
                    SqlConvert(ref ret);
                    if (data.ContainsConstrainingAttribute(QueryStrategyConfiguration.PRIMARYKEY) && attribute is IPrimaryKeyAttribute)
                    {
                        StringBuilder tmp   = new StringBuilder().Append(AttributeUtilities.GetColumnMapping(property));
                        string        equal = " " + op + " ";
                        if (ret.ToString().Equals("NULL"))
                        {
                            equal = " IS ";
                        }

                        tmp.Append(equal).Append(ret.ToString());
                        list.Add(tmp.ToString());
                    }
                    else if (
                        data.ContainsConstrainingAttribute(property.Name) ||
                        data.ContainsConstrainingAttribute(AttributeUtilities.GetColumnMapping(property))
                        )
                    {
                        StringBuilder tmp   = new StringBuilder().Append(AttributeUtilities.GetColumnMapping(property));
                        string        equal = " " + op + " ";
                        if (ret.ToString().Equals("NULL"))
                        {
                            equal = " IS ";
                        }

                        tmp.Append(equal).Append(ret.ToString());
                        list.Add(tmp.ToString());
                    }
                }
            }
            return(list);
        }
        public String ComputeObjectState(ISerializableObject iso)
        {
            StringBuilder objectState = new StringBuilder();

            FieldInfo[] fis = RetrieveAllFields(iso.GetType());

            foreach (FieldInfo fi in fis)
            {
                if (IsPersistentField(fi))
                {
                    Object val = fi.GetValue(iso);
                    objectState.Append(val);
                }
            }

            return(objectState.ToString());
        }
Exemplo n.º 37
0
        internal static void PlainCopy(Serializer context, ISerializableObject from, ISerializableObject to, FieldLock fieldLock, bool forceForeignKeyCopy)
        {
            AttributeWorker w = AttributeWorker.GetInstance(context.Target);

            FieldInfo[] fis = AttributeWorker.RetrieveAllFields(from.GetType());

            foreach (FieldInfo fi in fis)
            {
                if (fieldLock.IsLocked(fi))
                {
                    continue;
                }
                if (AttributeWorker.IsRelationField(fi))
                {
                    continue;
                }
                if (w.IsAutoincID(fi))
                {
                    continue;
                }
                if (!w.IsPersistentField(fi))
                {
                    continue;
                }
                if (AttributeWorker.IsRowGuid(fi))
                {
                    continue;
                }
                if (w.IsForeignKey(context, fi) && !forceForeignKeyCopy)
                {
                    DirectSyncAttribute a = (DirectSyncAttribute)Attribute.GetCustomAttribute(fi, typeof(DirectSyncAttribute));

                    if (a == null)
                    {
                        continue;
                    }
                }


                Object val = fi.GetValue(from);
                fi.SetValue(to, val);
            }
        }
        public int ComputeHashCode(ISerializableObject iso)
        {
            int hashCode = 0;

            FieldInfo[] fis = RetrieveAllFields(iso.GetType());

            foreach (FieldInfo fi in fis)
            {
                if (IsPersistentField(fi))
                {
                    Object val = fi.GetValue(iso);
                    if (val != null)
                    {
                        hashCode = hashCode ^ val.GetHashCode();
                    }
                }
            }

            return(hashCode);
        }
 public static bool isRoot(ISerializableObject iso)
 {
     if (iso != null)
     {
         if (iso.GetType().Equals(typeof(CollectionEventSeries)))
             return true;
         else if (iso.GetType().Equals(typeof(CollectionEvent)))
         {
             CollectionEvent ce = (CollectionEvent)iso;
             if (ce.SeriesID == null)
                 return true;
         }
         else if (iso.GetType().Equals(typeof(CollectionSpecimen)))
         {
             CollectionSpecimen spec = (CollectionSpecimen)iso;
             if (spec.CollectionEventID == null)
                 return true;
         }
     }
     return false;
 }
Exemplo n.º 40
0
        internal static void ForeignKeyCopy(Serializer context, ISerializableObject from, ISerializableObject to, FieldLock fieldLock)
        {
            AttributeWorker w = AttributeWorker.GetInstance(context.Target);

            FieldInfo[] fis = AttributeWorker.RetrieveAllFields(from.GetType());

            foreach (FieldInfo fi in fis)
            {
                if (fieldLock.IsLocked(fi))
                {
                    continue;
                }
                if (!w.IsForeignKey(context, fi))
                {
                    continue;
                }

                Object val = fi.GetValue(from);
                fi.SetValue(to, val);
            }
        }
        internal void copyToSinkObject(ISerializableObject from, ISerializableObject to)
        {
            AttributeWorker w = AttributeWorker.GetInstance(sinkSerializer.Target);//Am besten durch Kopiervorgang ersetzen, der ohne Attributeworker auskommt.
            FieldInfo[] fis = AttributeWorker.RetrieveAllFields(from.GetType());

            foreach (FieldInfo fi in fis)
            {
                if (w.IsAutoincID(fi)) continue;//Kann man aus Lookup-Tabelle holen
                if (!w.IsPersistentField(fi)) continue;//wirklich  nötig?
                //DirectSync wird im Moment nicht unterstützt
                if (AttributeWorker.IsRowGuid(fi)) continue;//Kann man als Lookup-Tabelle definieren
                Object val = fi.GetValue(from);
                fi.SetValue(to, val);
            }
        }
 private void bottomUp(ISerializableObject iso, List<ISerializableObject> parents)
 {
     if (iso.GetType().Equals(typeof(IdentificationUnitAnalysis)))
     {
         IdentificationUnitAnalysis iua = (IdentificationUnitAnalysis)iso;
         IdentificationUnit iu = iua.IdentificationUnit;
         if (iu != null)
         {
             parents.Add(iu);
             bottomUp(iu, parents);
         }
         else throw new Exception();
     }
     else if (iso.GetType().Equals(typeof(IdentificationUnit)))
     {
         IdentificationUnit iu = (IdentificationUnit)iso;
         /*
         IDirectAccessIterator<Identification> identifications = iu.Identifications;
         short i = 0;
         Identification ident = null;
         foreach (Identification id in identifications)
         {
             if (id.IdentificationSequence != null && id.IdentificationSequence > i)
             {
                 i = (short)id.IdentificationSequence;
                 ident = id;
             }
         }
         if (ident != null)
             parents.Add(ident);*/
         IdentificationUnit relatedUnit = iu.RelatedUnit;
         if (relatedUnit != null)
         {
             parents.Add(relatedUnit);
             bottomUp(relatedUnit, parents);
         }
         else
         {
             CollectionSpecimen spec = iu.CollectionSpecimen;
             if (spec != null)
             {
                 parents.Add(spec);
                 bottomUp(spec, parents);
             }
             else
                 throw new Exception();
         }
     }
     else if (iso.GetType().Equals(typeof(CollectionSpecimen)))
     {
         CollectionSpecimen spec = (CollectionSpecimen)iso;
         CollectionAgent ca = spec.CollectionAgent.First();
         if (ca != null)
             parents.Add(ca);
         CollectionEvent ce = spec.CollectionEvent;
         if (ce != null)
         {
             parents.Add(ce);
             bottomUp(ce, parents);
         }
         else this.root = spec; ;//Warnung dass das Specimen nicht angezeigt werden kann
     }
     else if (iso.GetType().Equals(typeof(CollectionEvent)))
     {
         CollectionEvent ce = (CollectionEvent)iso;
         IDirectAccessIterator<CollectionEventLocalisation> locations = ce.CollectionEventLocalisation;
         foreach (CollectionEventLocalisation loc in locations)
         {
             parents.Add(loc);
         }
         IDirectAccessIterator<CollectionEventProperty> properties = ce.CollectionEventProperties;
         foreach (CollectionEventProperty prop in properties)
         {
             parents.Add(prop);
         }
         CollectionEventSeries cs = ce.CollectionEventSeries;
         if (cs != null)
         {
             parents.Add(cs);
             this.root = cs;
         }
         else this.root = ce;
     }
     else if (iso.GetType().Equals(typeof(CollectionEventSeries)))
     {
         CollectionEventSeries cs = (CollectionEventSeries)iso;
         this.root = cs;
     }
 }
        public void Apply(ISerializableObject iso)
        {
            if (iso.GetType() != _type)
            {
                throw new SerializerException();
            }

            for (int i = 0; i < _fields.Count; i++)
            {
                _fields[i].SetValue(iso, _values[i]);
            }
        }
 public TreeNode displayListTopDown(List<ISerializableObject> objects, ISerializableObject root)
 {
     TreeNode tn = new TreeNode();
     if (root != null)
     {
         if (root.GetType().Equals(typeof(CollectionEventSeries)))
         {
             CollectionEventSeries cs = (CollectionEventSeries)root;
             parametrizeEventSeriesNode(cs, tn);
             foreach (ISerializableObject iso in objects)
             {
                 if (iso != null)
                 {
                     if (iso.GetType().Equals(typeof(CollectionEvent)))
                     {
                         tn.Nodes.Add(displayListTopDown(objects, iso));
                     }
                 }
             }
         }
         if (root.GetType().Equals(typeof(CollectionEvent)))
         {
             CollectionEvent ce = (CollectionEvent)root;
             parametrizeEventNode(ce, tn, objects);
             foreach (ISerializableObject iso in objects)
             {
                 if (iso != null)
                 {
                     if (iso.GetType().Equals(typeof(CollectionSpecimen)))
                         tn.Nodes.Add(displayListTopDown(objects, iso));
                 }
             }
         }
         if (root.GetType().Equals(typeof(CollectionSpecimen)))
         {
             CollectionSpecimen spec = (CollectionSpecimen)root;
             parametrizeSpecimenNode(spec, tn, objects);
             foreach (ISerializableObject iso in objects)
             {
                 if (iso != null)
                 {
                     if (iso.GetType().Equals(typeof(IdentificationUnit)))
                     {
                         IdentificationUnit iu = (IdentificationUnit)iso;
                         if (iu.CollectionSpecimenID == spec.CollectionSpecimenID && iu.RelatedUnitID == null)
                             tn.Nodes.Add(displayListTopDown(objects, iu));
                     }
                 }
             }
         }
         if (root.GetType().Equals(typeof(IdentificationUnit)))
         {
             IdentificationUnit iu = (IdentificationUnit)root;
             parametrizeIUNode(iu, tn);//Muss nicht auf die Liste angewendet werden, da weder ein Iterator verwendet wird noch auf die DB zugegriffen wird)
             foreach (ISerializableObject iso in objects)
             {
                 if (iso != null)
                 {
                     /*if (iso.GetType().Equals(typeof(IdentificationUnitAnalysis)))
                     {
                         IdentificationUnitAnalysis iua = (IdentificationUnitAnalysis)iso;
                         if (iua.IdentificationUnitID == iu.IdentificationUnitID)
                         {
                             TreeNode analysisNode = new TreeNode();
                             parametrizeIUANode(iua, analysisNode);
                             tn.Nodes.Add(analysisNode);
                         }
                     }
                     else*/ if (iso.GetType().Equals(typeof(IdentificationUnit)))
                     {
                         IdentificationUnit childUnit = (IdentificationUnit)iso;
                         if (childUnit.RelatedUnitID == iu.IdentificationUnitID)
                         {
                             tn.Nodes.Add(displayListTopDown(objects, childUnit));
                         }
                     }
                 }
             }
         }
     }
     return tn;
 }
 protected QueryStrategy(ISerializableObject data)
 {
     this.data = data;
     table = AttributeUtilities.GetTableMapping(data);
     properties = data.GetType().GetProperties();
 }
 private void topDown(ISerializableObject iso, List<ISerializableObject> children)
 {
     if (iso.GetType().Equals(typeof(CollectionEventSeries)))
     {
         CollectionEventSeries cs = (CollectionEventSeries)iso;
         IDirectAccessIterator<CollectionEvent> events = cs.CollectionEvents;
         foreach (CollectionEvent ce in events)
         {
             children.Add(ce);
             topDown(ce, children);
         }
     }
     if (iso.GetType().Equals(typeof(CollectionEvent)))
     {
         CollectionEvent ce = (CollectionEvent)iso;
         IDirectAccessIterator<CollectionEventLocalisation> locations = ce.CollectionEventLocalisation;
         foreach (CollectionEventLocalisation loc in locations)
         {
             children.Add(loc);
         }
         IDirectAccessIterator<CollectionEventProperty> properties = ce.CollectionEventProperties;
         foreach (CollectionEventProperty prop in properties)
         {
             children.Add(prop);
         }
         IDirectAccessIterator<CollectionSpecimen> specimen = ce.CollectionSpecimen;
         foreach (CollectionSpecimen spec in specimen)
         {
             children.Add(spec);
             topDown(spec, children);
         }
     }
     if (iso.GetType().Equals(typeof(CollectionSpecimen)))
     {
         CollectionSpecimen spec = (CollectionSpecimen)iso;
         CollectionAgent ca = spec.CollectionAgent.First();
         if (ca != null)
             children.Add(ca);
         IDirectAccessIterator<CollectionProject> projects = spec.CollectionProject;
         foreach (CollectionProject pr in projects)
         {
             children.Add(pr);
         }
         IDirectAccessIterator<IdentificationUnit> units = spec.IdentificationUnits;
         foreach (IdentificationUnit iu in units)
         {
             if (iu.RelatedUnit == null)//Hier kann der Aufwand optimiert werden indem gleich alle IdentificationUnits angehängt werden, alerdings muss dann der Fall von einer IU als Startpunkt gesondert behandelt werden
             {
                 children.Add(iu);
                 topDown(iu, children);
             }
         }
     }
     if (iso.GetType().Equals(typeof(IdentificationUnit)))
     {
         IdentificationUnit iu = (IdentificationUnit)iso;
         IDirectAccessIterator<IdentificationUnitAnalysis> analyses = iu.IdentificationUnitAnalysis;
         IDirectAccessIterator<IdentificationUnitGeoAnalysis> geoAnalyses = iu.IdentificationUnitGeoAnalysis;
         IDirectAccessIterator<Identification> ids = iu.Identifications;
         foreach (IdentificationUnitAnalysis iua in analyses)
         {
             children.Add(iua);
         }
         foreach (IdentificationUnitGeoAnalysis iuga in geoAnalyses)
         {
             children.Add(iuga);
         }
         foreach (Identification id in ids)
         {
             children.Add(id);
         }
         IDirectAccessIterator<IdentificationUnit> units = iu.ChildUnits;
         foreach (IdentificationUnit childUnit in units)
         {
             children.Add(childUnit);
             topDown(childUnit, children);
         }
     }
 }
        private static void MemoriseKeys(ISerializableObject iso, AttributeWorker w, GenericWeakReference<ISerializableObject> gwr)
        {
            IDictionary<String, FieldInfo> pkf = w.GetPrimaryKeyFields(iso.GetType());

            foreach (FieldInfo fi in pkf.Values)
            {
                if (w.IsAutoincID(fi)) continue;
                gwr.Properties[fi.Name] = fi.GetValue(iso);
            }
        }
 private void adjustAutoIncKeys(ISerializableObject manipulatedObject)
 {
     try
     {
         Type t = manipulatedObject.GetType();
         //1.Abhängigkeiten aus Liste holen <eigenes Feld,Klasse>
         Dictionary<String, Type> foreignKeys = LookupSynchronizationInformation.getDeterminingFields(t);
         foreach (KeyValuePair<String, Type> fk in foreignKeys)
         {
             FieldInfo foreignAutoInc = t.GetField(fk.Key, BindingFlags.NonPublic | BindingFlags.Instance);//Enthält die Information darüber in welchem Feld das manipulatedObject einen fremden AutoInc-Key stehen hat.
             if (foreignAutoInc.GetValue(manipulatedObject) != null)
             {
                 //2.AutoincFeld der PartnerKlasse holen
                 String autoInc = LookupSynchronizationInformation.getAutoIncFields()[fk.Value];
                 //3.In der QuelldatenBank nach dem referenzierten AutoincSchlüssel suchen und das entsprechnde Objekt laden.
                 IRestriction r = RestrictionFactory.Eq(fk.Value, autoInc, foreignAutoInc.GetValue(manipulatedObject));
                 ISerializableObject parent = sourceSerializer.Connector.Load(fk.Value, r);
                 Guid g = parent.Rowguid;
                 //4. synchronisierten Partner in der Zieldatenbank über Guid holen
                 ISerializableObject parentPartner = FetchObject(sinkSerializer, g, fk.Value);
                 FieldInfo partnerField = fk.Value.GetField(autoInc, BindingFlags.Instance | BindingFlags.NonPublic);
                 //5. Werte anpassen
                 foreignAutoInc.SetValue(manipulatedObject, partnerField.GetValue(parentPartner));
             }
         }
     }
     catch (Exception e)
     {
         MessageBox.Show("KeyAdjustmentError: " + e.Message);
         if (e.InnerException != null)
             MessageBox.Show(e.InnerException.Message);
         throw new SerializerException("KeyAdjustmentError: " + e.Message);
     }
 }
 /// <summary>
 /// Returns the table name for the passed object.
 /// </summary>
 /// <param name="data">The ISerializableObject object.</param>
 /// <returns>string</returns>
 public static string GetTableMapping(ISerializableObject data)
 {
     Attribute a = Attribute.GetCustomAttribute(data.GetType(), typeof(TableAttribute));
     string ret = null;
     if (a != null) ret = ((TableAttribute)a).TableMapping;
     if (ret == null) ret = data.GetType().Name;
     return ret;
 }
 public void Remove(ISerializableObject iso)
 {
     if (iso != null)
     {
         try
         {
             con.Delete(iso);
         }
         catch (Exception)
         {
             throw new DataFunctionsException("Object (" + iso.GetType().Name + ") couldn't be removed.");
         }
     }
 }
        public static String ComputeHashCode(String target, ISerializableObject iso)
        {
            AttributeWorker w = AttributeWorker.GetInstance(target);

            FieldInfo[] fis = AttributeWorker.RetrieveAllFields(iso.GetType());

            StringBuilder b = new StringBuilder();
            foreach (FieldInfo fi in fis)
            {
                if (w.IsPersistentField(fi) && !w.IsID(fi))
                {
                    Object val = fi.GetValue(iso);
                    b.Append(val);
                }
            }

            System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
            Byte[] tmp = encoding.GetBytes(b.ToString());

            return BitConverter.ToString(new MD5CryptoServiceProvider().ComputeHash(tmp)).Replace("-", "").ToLower();
        }
        public void InsertObject(ISerializableObject iso, DbConnection connection, ISerializerTransaction transaction, string table)
        {
            AttributeWorker w = AttributeWorker.GetInstance(Target);
            DbCommand com = connection.CreateCommand();
            com.CommandText = _owner.SerializeInsert(iso,table);
            transaction.Guard(com);
            //Console.WriteLine(com.CommandText);
            try
            {
                //Console.WriteLine(com.ExecuteNonQuery());
                com.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw new SerializerException("insert failed", ex);
            }




            FieldInfo autoincField;
            Guid g = AttributeWorker.RowGuid(iso);

            if ((autoincField = w.GetAutoincField(iso.GetType())) != null)
            {
                StringBuilder b = new StringBuilder();

                b.Append("SELECT * FROM ").Append(w.GetTableMapping(iso.GetType(),_owner.Praefix)).Append(" WHERE ");
                b.Append(w.GetColumnMapping(AttributeWorker.RowGuid(iso.GetType()))).Append("='");
                b.Append(g.ToString()).Append("'");

                com.CommandText = b.ToString();
                DbDataReader r = com.ExecuteReader();

                if (r.Read())
                {
                    Object o = r[w.GetColumnMapping(w.GetAutoincField(iso.GetType()))];
                    autoincField.SetValue(iso, o);
                }
                else
                {
                    r.Close();
                    throw new SerializerException("Insert core method failed! error unknown...");
                }

                r.Close();

                /*com.CommandText = "SELECT @@IDENTITY";
                    Object o = com.ExecuteScalar();
                    Console.WriteLine("---->"+o);
                    if (o is DBNull)
                    {
                        throw new SerializerException();
                    }
                    
                    autoincField.SetValue(iso, Decimal.ToInt32((Decimal)o));
                 */


            }


            GenericWeakReference<ISerializableObject> tmp = new GenericWeakReference<ISerializableObject>(iso);
            _persistentObjects[g] = tmp;
            MemoriseKeys(iso, w, tmp);
        }
        public void transferPicture(ISerializableObject iso)
        {
            resetInformation();

            _service = new DiversityMediaServiceClient();

            if (_service.State != System.ServiceModel.CommunicationState.Opened)
            {
                try
                {
                    _service.Open();
                }
                catch (Exception e)
                {
                    StringBuilder sb = new StringBuilder("Cant Open Connection: ").Append(e.Message);
                    if (e.InnerException != null)
                    {
                        sb.Append(",");
                        sb.Append(e.InnerException.Message);
                    }

                    throw new Exception(sb.ToString());
                }
            }
            _author = this._userName;
            _projectId = this._project;
            //Fallunterscheidung nach ImageTypeClasse um benötigte informationen zu bekommen
            try
            {
                if (iso is CollectionEventImage)
                {
                    CollectionEventImage cei = (CollectionEventImage)iso;
                    _rowGuid = cei.Rowguid.ToString();
                    string pureFileName = System.IO.Path.GetFileName(cei.URI);
                    string path = System.IO.Directory.GetCurrentDirectory();
                    StringBuilder sb = new StringBuilder(_pictureDirectory);
                    sb.Append("\\");
                    sb.Append(pureFileName);
                    _pathName = sb.ToString();
                    _type = cei.ImageType;
                    IRestriction re = RestrictionFactory.Eq(typeof(CollectionEvent), "_CollectionEventID", cei.CollectionEventID);
                    CollectionEvent ce = _sourceSerializer.Connector.Load<CollectionEvent>(re);
                    IRestriction r1 = RestrictionFactory.Eq(typeof(CollectionEventLocalisation), "_CollectionEventID", cei.CollectionEventID);
                    IRestriction r2 = RestrictionFactory.Eq(typeof(CollectionEventLocalisation), "_LocalisationSystemID", 8);
                    IRestriction r = RestrictionFactory.And().Add(r1).Add(r2);
                    CollectionEventLocalisation cel = _sourceSerializer.Connector.Load<CollectionEventLocalisation>(r);
                    if (cel != null)
                    {
                        if (cel.AverageAltitudeCache != null)
                            _longitude = (float)cel.AverageLongitudeCache;
                        if (cel.AverageLatitudeCache != null)
                            _latitude = (float)cel.AverageLatitudeCache;
                        if (cel.AverageLongitudeCache != null)
                            _altitude = (float)cel.AverageAltitudeCache;
                    }
                    _timestamp = cei.LogTime.ToString();
                }
                else if (iso.GetType().Equals(typeof(CollectionSpecimenImage)))
                {
                    CollectionSpecimenImage csi = (CollectionSpecimenImage)iso;
                    _rowGuid = csi.Rowguid.ToString();
                    string pureFileName = System.IO.Path.GetFileName(csi.URI);
                    string path = System.IO.Directory.GetCurrentDirectory();
                    StringBuilder sb = new StringBuilder(_pictureDirectory);
                    sb.Append("\\");
                    sb.Append(pureFileName);
                    _pathName = sb.ToString();
                    _type = csi.ImageType;
                    IRestriction re = RestrictionFactory.Eq(typeof(CollectionSpecimen), "_CollectionSpecimenID", csi.CollectionSpecimenID);
                    CollectionSpecimen cs = _sourceSerializer.Connector.Load<CollectionSpecimen>(re);
                    CollectionEvent ce = cs.CollectionEvent;
                    IRestriction r1 = RestrictionFactory.Eq(typeof(CollectionEventLocalisation), "_CollectionEventID", ce.CollectionEventID);
                    IRestriction r2 = RestrictionFactory.Eq(typeof(CollectionEventLocalisation), "_LocalisationSystemID", 8);
                    IRestriction r = RestrictionFactory.And().Add(r1).Add(r2);
                    CollectionEventLocalisation cel = _sourceSerializer.Connector.Load<CollectionEventLocalisation>(r);
                    if (cel != null)
                    {
                        if (cel.AverageAltitudeCache != null)
                            _longitude = (float)cel.AverageLongitudeCache;
                        else
                            _longitude = 0;
                        if (cel.AverageLatitudeCache != null)
                            _latitude = (float)cel.AverageLatitudeCache;
                        else
                            _latitude = 0;
                        if (cel.AverageLongitudeCache != null)
                            _altitude = (float)cel.AverageAltitudeCache;
                        else
                            _altitude = 0;
                    }
                    else
                    {
                        _latitude = _longitude = _altitude = 0;
                    }
                    _timestamp = csi.LogTime.ToString();
                }
                else
                {
                    throw new TransferException("ImageClass not Supported");
                }
            }
            catch (Exception e)
            {
                StringBuilder sb = new StringBuilder("Corresponding data not found: ").Append(e.Message);
                if (e.InnerException != null)
                {
                    sb.Append(",");
                    sb.Append(e.InnerException.Message);
                }

                throw new Exception(sb.ToString());
            }
            FileStream fileStrm = null;
            BinaryReader rdr = null;
            byte[] data = null;
            DateTime start = DateTime.Now;
            String retString = String.Empty;
            try
            {
                // Create stream and reader for file data
                fileStrm = new FileStream(_pathName, FileMode.Open, FileAccess.Read);
                rdr = new BinaryReader(fileStrm);

            }
            catch(Exception e)
            {

                StringBuilder sb = new StringBuilder("Picture not found: ").Append(e.Message);
                if (e.InnerException != null)
                {
                    sb.Append(",");
                    sb.Append(e.InnerException.Message);
                }
                if (rdr != null)
                    rdr.Close();
                throw new Exception(sb.ToString());
            }
            try
            {
                // Number of bytes to be transferred
                long numBytes = fileStrm.Length;

                // Package counter
                int count = 0;
                // Return string
                _fileName = Path.GetFileName(_pathName);

                if (numBytes > 0)
                {
                    data = rdr.ReadBytes((int)numBytes);
                    count++;
                    //retString = f.ReadFileAndTransfer(pathName);
                    retString = _service.Submit(_fileName, _fileName, _type, _latitude, _longitude, _altitude, _author, _timestamp, _projectId, data); // IDs 372, 373, 374
                }
                TimeSpan dif = DateTime.Now - start;

                if (retString.StartsWith("http"))
                {
                    MessageBox.Show(retString);
                    MessageBox.Show(dif.ToString() + " msec  -  " + count.ToString() + " packets transmitted");
                }
                else
                {
                    MessageBox.Show("ERROR: " + retString);
                }

                // Close reader and stream
                rdr.Close();
                fileStrm.Close();
            }
            catch (Exception e)
            {
                StringBuilder sb = new StringBuilder("Transfer Error: ").Append(e.Message);
                if (e.InnerException != null)
                {
                    sb.Append(",");
                    sb.Append(e.InnerException.Message);
                }
                if (rdr != null)
                    rdr.Close();
                if (fileStrm != null)
                    fileStrm.Close();
                throw new Exception(sb.ToString());
            }
            finally
            {
                // Abort faulted proxy
                if (_service.State == System.ServiceModel.CommunicationState.Faulted)
                {
                    // Webservice method call
                    // proxy.Rollback();
                    _service.Abort();
                }
                // Close proxy
                else if (_service.State == System.ServiceModel.CommunicationState.Opened)
                {
                    _service.Close();
                }
            }
            if (iso.GetType().Equals(typeof(CollectionEventImage)))
            {
                CollectionEventImage cei = (CollectionEventImage)iso;
                cei.URI = retString;
            }
            if (iso.GetType().Equals(typeof(CollectionSpecimenImage)))
            {
                CollectionSpecimenImage csi = (CollectionSpecimenImage)iso;
                csi.URI = retString;
            }
            // Close reader and stream
            rdr.Close();
            fileStrm.Close();
        }