Пример #1
0
        private void writePowierzchniaToDB(ModelBundle modelDataBundle)
        {
            Model2D model      = modelDataBundle.models[0];         //każda paczka zawiera tylko jeden model
            int     newModelId = 0;

            modelIdsAfterRestoreDict.TryGetValue(model.idModel, out newModelId);
            model.setNewModelIdInPowierzchnia(newModelId);

            uint   maxPowId  = 0;
            string tableName = dbConnector.getTableNameFromQuery(SqlQueries.getPowierzchnieNoBlob);

            for (int i = 0; i < model.powierzchnieList.Count; i++)
            {
                ModelPowierzchnia pow = model.powierzchnieList[i];

                dbWriter.writeBulkDataToDB(pow.powDataTable, tableName);

                if (i == 0)       //analogicznie jak w przypadku wpisywania deklaracji modeli, po dodaniu pierwszej powierzchni odczytuję jej ID z bazy
                {
                    maxPowId = getMaxPowierzchniaIdFromDB();
                }
                else            //kolejne ID tworzę sam
                {
                    maxPowId++;
                }
                //w każdej powierzchni, w danych składowych tj trójkątów, punktów itd  zmieniam ID powierzchni na nowy, w nowej bazie danych
                pow.idPow = maxPowId;
                //mając id aktualizuję PowObrys
                dbWriter.executeQuery("Update DefPowierzchni set PowObrys = '" + pow.powObrys + "'" + SqlQueries.getPowierzchnie_byIdPowFilter + pow.idPow);

                //zapisuję dane szczegółowe każdej powierzchni do bazy, tj. punkty, trójkąty itd
                //writePowierzchniaDataToDB(pow);
            }
        }
Пример #2
0
        private void writeModelDeclarationsToDB(MyEventArgs args, ModelBundle modelDeclarationsFromFileBundle)
        {
            List <Model2D> models = modelDeclarationsFromFileBundle.models;
            Dictionary <string, ModelDirectory> checkedDirectories = modelDeclarationsFromFileBundle.checkedDirectories;

            int    maxModelIdInDB       = 0;
            string newDirectoryId       = "";
            string newIdWlasciciel      = args.selectedUserId;
            bool   restoreDirectoryTree = args.restoreDirectoryTree;

            string newCzyArch = "0";        //wczytywane modele nie będą archiwalne
            string newIdUzytk = "null";     //wczytywane modele nie będą oznaczone jako wczytane do pamięci

            dbWriter = new DBWriter(dbConnection);
            DBValueTypeConverter converter = new DBValueTypeConverter();

            if (restoreDirectoryTree && checkedDirectories.Count > 0)
            {
                writeDirectoryTreeToDB(checkedDirectories, args.selectedDirectoryId);
            }


            //po kolei wpisuję deklaracje wszystkich modeli, po jednym, do tabeli DefModel2D
            int loopNumber = 0;

            foreach (Model2D model in models)
            {
                string nazwaModel = converter.getConvertedValue(model.nazwaModel, model.nazwaModel_dataType);
                string opisModel  = converter.getConvertedValue(model.opisModel, model.opisModel_dataType);
                string dataModel  = converter.getConvertedValue(model.dataModel, model.dataModel_dataType);

                if (restoreDirectoryTree && checkedDirectories.Count > 0)
                {
                    newDirectoryId = model.modelDir.newId;
                }
                else
                {
                    newDirectoryId = args.selectedDirectoryId;
                }

                string query = SqlQueries.insertModel.Replace("@nazwaModel", nazwaModel).Replace("@opisModel", opisModel).Replace("@dataModel", dataModel).Replace("@idUzytk", newIdUzytk).Replace("@czyArch", newCzyArch).Replace("@directoryId", newDirectoryId).Replace("@idWlasciciel", newIdWlasciciel);
                dbWriter.executeQuery(query);

                if (loopNumber == 0)         //wpis modelu robię przez insert, baza danych automatycznie nadaje mu ID, które teraz odczytuję
                {
                    maxModelIdInDB = getMaxModelIdFromDB();
                }
                else
                {
                    maxModelIdInDB++;       //kolejne modele będą miały kolejne ID, nie muszę za każdym razem czytać tylko inkrementuję
                }

                //w każdym modelu w powierzchniach zmieniam Id modelu na nowy, w nowej bazie danych
                model.IdModelAfterRestore = maxModelIdInDB;
                modelIdsAfterRestoreDict.Add(model.idModel, model.IdModelAfterRestore);
                loopNumber++;
            }
        }
Пример #3
0
        //tworzy plik a następnie zapisuje strukturę danych, tj deklaracje modeli i słownik katalogów
        private void initializeFile(string serializationFile)
        {
            ModelBundle modelBundle = new ModelBundle();

            modelBundle.models             = selectedModelDeclarations;
            modelBundle.checkedDirectories = directoryTreeControl1.checkedDirectories;

            try
            {
                //serialize
                using (FileStream stream = new FileStream(serializationFile, FileMode.Create))
                {
                    MemoryStream originalMemoryStream   = new MemoryStream();
                    MemoryStream compressedMemoryStream = new MemoryStream();

                    BinaryFormatter formatter = new BinaryFormatter();
                    formatter.Serialize(originalMemoryStream, modelBundle);

                    using (GZipStream gzipStream = new GZipStream(compressedMemoryStream, CompressionMode.Compress))
                    {
                        originalMemoryStream.WriteTo(gzipStream);
                    }

                    byte[] buffer     = compressedMemoryStream.ToArray();
                    int    bufferSize = buffer.Length;
                    compressedMemoryStream.Close();
                    originalMemoryStream.Close();

                    using (BinaryWriter binWriter = new BinaryWriter(stream))
                    {
                        binWriter.Write(bufferSize);            //pierwsze 4 bajty
                        binWriter.Write(buffer);
                    }
                }
            }
            catch (OutOfMemoryException exc)
            {
                MyMessageBox.display(exc.Message + "\r\nwriteModelsToFile");
            }
        }
Пример #4
0
        private void addModelToFile(string serializationFile, Model2D model)
        {
            ModelBundle modelDataBundle = new ModelBundle();

            modelDataBundle.addModel(model);
            try
            {
                //serialize
                using (FileStream stream = new FileStream(serializationFile, FileMode.Open))
                {
                    MemoryStream originalMemoryStream   = new MemoryStream();
                    MemoryStream compressedMemoryStream = new MemoryStream();

                    BinaryFormatter formatter = new BinaryFormatter();
                    formatter.Serialize(originalMemoryStream, modelDataBundle);

                    using (GZipStream gzipStream = new GZipStream(compressedMemoryStream, CompressionMode.Compress))
                    {
                        originalMemoryStream.WriteTo(gzipStream);
                        originalMemoryStream.Close();
                    }

                    byte[] buffer     = compressedMemoryStream.ToArray();
                    int    bufferSize = buffer.Length;
                    compressedMemoryStream.Close();

                    using (BinaryWriter binWriter = new BinaryWriter(stream))
                    {
                        stream.Position = stream.Length;
                        binWriter.Write(bufferSize);            //pierwsze 4 bajty
                        binWriter.Write(buffer);
                    }
                }
            }
            catch (OutOfMemoryException exc)
            {
                MyMessageBox.display(exc.Message + "\r\nwriteModelsToFile", MessageBoxType.Error);
            }
        }
Пример #5
0
        //metoda uruchamiana w osobnym wątku
        private void writeModelsFromFileToDB(MyEventArgs args)
        {
            int         streamPosition       = 0;
            int         dataPacketNumber     = 0;
            int         totalNumberOfPackets = 0;           //do paska postępu
            ModelBundle modelDataBundle      = new ModelBundle();

            try
            {
                do
                {
                    //deserialize
                    using (FileStream stream = new FileStream(args.fileName, FileMode.Open))
                    {
                        int    dataPacketLength = 0;
                        byte[] buffer;
                        using (BinaryReader bReader = new BinaryReader(stream))
                        {
                            stream.Position  = streamPosition;
                            dataPacketLength = bReader.ReadInt32();        //najpierw wpis 4 bajty określa długość paczki, która po nim następuje
                            buffer           = new byte[dataPacketLength];
                            bReader.Read(buffer, 0, dataPacketLength);
                        }
                        MemoryStream compressedStream   = new MemoryStream(buffer);
                        MemoryStream decompressedStream = new MemoryStream();

                        using (GZipStream gzipStream = new GZipStream(compressedStream, CompressionMode.Decompress))
                        {
                            gzipStream.CopyTo(decompressedStream);
                            compressedStream.Close();
                        }
                        decompressedStream.Position = 0;
                        BinaryFormatter bformatter = new BinaryFormatter();
                        modelDataBundle = (ModelBundle)bformatter.Deserialize(decompressedStream);

                        if (dataPacketNumber == 0)
                        {
                            totalNumberOfPackets = modelDataBundle.models.Count;
                            if (modelDataBundle.checkedDirectories.Count == 0 && args.selectedDirectoryId == "")
                            {
                                MyMessageBox.display("Nie można odtworzyć modeli gdyż nie wybrano katalogu docelowego \r\na modele w pliku źródłowym wczytane zostały bez katalogu.\r\nSpróbuj wczytać ponownie wybierając katalog docelowy", MessageBoxType.Error);
                                break;
                            }
                            else
                            {
                                writeModelDeclarationsToDB(args, modelDataBundle);
                            }
                        }
                        else
                        {
                            showProgress(dataPacketNumber, totalNumberOfPackets, modelDataBundle.models[0].nazwaModel.ToString());       //pasek postępu
                            writePowierzchniaToDB(modelDataBundle);
                        }
                        decompressedStream.Close();
                        streamPosition += dataPacketLength + 4;     //tj. przesuwam o nagłówek (int czyli 4 bajty) i długość właśnie przeczytanego pakietu
                        modelDataBundle.clear();
                        dataPacketNumber++;
                    }
                }while (dataPacketNumber <= totalNumberOfPackets);

                if (dataPacketNumber >= totalNumberOfPackets)       //komunikat o sukcesie tylko wtedy, gdy cała pętla przeszła
                {
                    MyMessageBox.displayAndClose("Modele wczytane", 1);
                }

                hideProgressItems();         //delegat
                refreshDirectoryTree();      //delegat
            }
            catch (ArgumentException ex)
            {
                MyMessageBox.display(ex.Message, MessageBoxType.Error);
            }
            catch (OutOfMemoryException exc)
            {
                MyMessageBox.display(exc.Message + "\r\nwriteModelsFromFileToDB", MessageBoxType.Error);
            }
            catch (EndOfStreamException exce)
            {
                MyMessageBox.display(exce.Message + "\r\nwriteModelsFromFileToDB \r\nPlik jest uszkodzony");
            }
        }