コード例 #1
0
        public void Log131DataAdapter_GetFromStore_Header_Only_No_Data()
        {
            int numRows = 10;

            // Add the Setup Well, Wellbore and Log to the store.
            var logResponse = AddSetupWellWellboreLog(numRows, isDepthLog: true, hasEmptyChannel: false, increasing: true);

            Assert.AreEqual((short)ErrorCodes.Success, logResponse.Result);

            var queryHeaderOnly = DevKit.CreateLog(logResponse.SuppMsgOut, null, Log.UidWell, null, Log.UidWellbore, null);

            // Perform a GetFromStore with multiple log queries
            var result = DevKit.Get <LogList, Log>(
                DevKit.List(queryHeaderOnly),
                ObjectTypes.Log,
                null,
                OptionsIn.ReturnElements.HeaderOnly);

            Assert.AreEqual((short)ErrorCodes.Success, result.Result);

            var logList = EnergisticsConverter.XmlToObject <LogList>(result.XMLout);

            Assert.IsNotNull(logList);
            Assert.AreEqual(1, logList.Log.Count);
            Assert.AreEqual(0, logList.Log[0].LogData.Count);
        }
コード例 #2
0
        public void Well131DataAdapter_GetFromStore_Ignore_Uom_Attributes()
        {
            var well            = DevKit.CreateTestWell();
            var responseAddWell = DevKit.Add <WellList, Well>(well);

            Assert.IsNotNull(responseAddWell);
            Assert.AreEqual((short)ErrorCodes.Success, responseAddWell.Result);

            var uid = responseAddWell.SuppMsgOut;

            string queryIn = @" <wells xmlns=""http://www.witsml.org/schemas/131"" version=""1.3.1.1"">                                
                                <well uid=""" + uid + @""">
                                    <name />
                                    <groundElevation uom=""m"" />
                                    <measuredDepth uom=""ft"" /> 
                                    <waterDepth uom=""ft"" />                               
                                </well>
                                </wells>";

            var response = DevKit.GetFromStore(ObjectTypes.Well, queryIn, null, "");

            Assert.AreEqual((short)ErrorCodes.Success, response.Result);

            var wellListObject = EnergisticsConverter.XmlToObject <WellList>(response.XMLout);

            Assert.IsNotNull(wellListObject);
            Assert.AreEqual(1, wellListObject.Well.Count);
            Assert.AreEqual(uid, wellListObject.Well[0].Uid);
            Assert.AreEqual(well.Name, wellListObject.Well[0].Name);
        }
コード例 #3
0
        /// <summary>
        /// Sets the placement.
        /// </summary>
        /// <param name="window">The window.</param>
        /// <param name="placementXml">The placement XML.</param>
        public static void SetPlacement(this Window window, string placementXml)
        {
            // Ignore missing placement xml
            if (string.IsNullOrWhiteSpace(placementXml))
            {
                return;
            }

            try
            {
                // Load window placement details for previous application session from application settings
                // Note - if window was closed on a monitor that is now disconnected from the computer,
                //        SetWindowPlacement will place the window onto a visible monitor.
                var wp = EnergisticsConverter.XmlToObject <WindowPlacement>(placementXml);
                wp.length  = Marshal.SizeOf(typeof(WindowPlacement));
                wp.flags   = 0;
                wp.showCmd = wp.showCmd == SwShowMinimized ? SwShowNormal : wp.showCmd;

                var hwnd = new WindowInteropHelper(window).Handle;
                SafeNativeMethods.SetWindowPlacement(hwnd, ref wp);
            }
            catch
            {
                // Ignore
            }
        }
コード例 #4
0
        public List <TObject> Query <TList, TObject>(string wmlTypeIn, string queryIn, string capClient = null, string optionsIn = null) where TList : IEnergisticsCollection
        {
            var response = GetFromStore(wmlTypeIn, queryIn, capClient, optionsIn);
            var results  = EnergisticsConverter.XmlToObject <TList>(response.XMLout);

            return((List <TObject>)results.Items);
        }
コード例 #5
0
ファイル: IntegrationTestBase.cs プロジェクト: orri93/witsml
        protected TObject Parse <TObject>(string xml) where TObject : AbstractObject
        {
            var dataObject = EnergisticsConverter.XmlToObject <TObject>(xml);

            Assert.IsNotNull(dataObject);
            return(dataObject);
        }
コード例 #6
0
        public List <TObject> QueryWithErrorCode <TList, TObject>(List <TObject> entities, out short result, string wmlTypeIn = null, string capClient = null, string optionsIn = null) where TList : IEnergisticsCollection
        {
            var response = Get <TList, TObject>(entities, wmlTypeIn, capClient, optionsIn);
            var results  = EnergisticsConverter.XmlToObject <TList>(response.XMLout);

            result = response.Result;

            return((List <TObject>)results.Items);
        }
コード例 #7
0
        public Well GetFullWell()
        {
            var dataDir  = new DirectoryInfo(@".\TestData").FullName;
            var filePath = Path.Combine(dataDir, "Full131Well.xml");

            var xmlin = File.ReadAllText(filePath);
            var wells = EnergisticsConverter.XmlToObject <WellList>(xmlin);

            return(wells.Items[0] as Well);
        }
コード例 #8
0
ファイル: IntegrationTestBase.cs プロジェクト: orri93/witsml
        protected TObject Parse <TList, TObject>(string xml) where TList : IEnergisticsCollection
        {
            var collection = EnergisticsConverter.XmlToObject <TList>(xml);

            Assert.IsNotNull(collection);

            var dataObject = collection.Items.Cast <TObject>().FirstOrDefault();

            Assert.IsNotNull(dataObject);

            return(dataObject);
        }
コード例 #9
0
        public void WitsmlParser_RemoveNaNElements_Removes_NaN_Elements()
        {
            string wellXml = "<wells xmlns=\"http://www.witsml.org/schemas/1series\" version=\"1.4.1.1\">" + Environment.NewLine +
                             "<well>" + Environment.NewLine +
                             "<name>Test Full Well</name>" + Environment.NewLine +
                             "<pcInterest uom=\"%\">NaN</pcInterest>" + Environment.NewLine +
                             "</well>" + Environment.NewLine +
                             "</wells>";

            var document = WitsmlParser.Parse(wellXml);
            var result   = WitsmlParser.RemoveNaNElements <WellList>(document.Root);
            var welllist = EnergisticsConverter.XmlToObject <WellList>(result);

            Assert.IsNull(welllist.Well[0].PercentInterest);
        }
コード例 #10
0
        private void AssertIntervalRangeInclusion(OptionsIn.IntervalRangeInclusion intervalRangeInclusion, string[] expectedIntervals)
        {
            var result = DevKit.GetFromStore(ObjectTypes.MudLog, IntervalRangeQuery, null, intervalRangeInclusion);

            Assert.IsNotNull(result);

            var mudLogList = EnergisticsConverter.XmlToObject <MudLogList>(result.XMLout);

            Assert.IsNotNull(mudLogList);
            Assert.AreEqual(1, mudLogList.MudLog.Count);

            var mudLog = mudLogList.MudLog[0];

            Assert.IsNotNull(mudLogList);
            Assert.AreEqual(expectedIntervals.Length, mudLog.GeologyInterval.Count);

            mudLog.GeologyInterval.ForEach((x, i) => Assert.AreEqual(expectedIntervals[i], x.Uid));
        }
コード例 #11
0
        public void WitsmlParser_RemoveNaNElements_Removes_Nested_NaN_Elements()
        {
            string wellXml = "<wells xmlns=\"http://www.witsml.org/schemas/1series\" version=\"1.4.1.1\">" + Environment.NewLine +
                             "<well>" + Environment.NewLine +
                             "<name>Test Full Well</name>" + Environment.NewLine +
                             "<wellDatum uid=\"KB\">" + Environment.NewLine +
                             "    <name>Kelly Bushing</name>" + Environment.NewLine +
                             "    <code>KB</code>" + Environment.NewLine +
                             "    <elevation uom=\"ft\" datum=\"SL\">NaN</elevation>" + Environment.NewLine +
                             "</wellDatum>" + Environment.NewLine +
                             "</well>" + Environment.NewLine +
                             "</wells>";

            var document = WitsmlParser.Parse(wellXml);
            var result   = WitsmlParser.RemoveNaNElements <WellList>(document.Root);
            var welllist = EnergisticsConverter.XmlToObject <WellList>(result);

            Assert.IsNull(welllist.Well[0].WellDatum[0].Elevation);
        }
コード例 #12
0
        private static void AssertLogParam(Log expectedLog, IndexedObject expectedLogParam, string xmlOut)
        {
            var logList = EnergisticsConverter.XmlToObject <LogList>(xmlOut);

            Assert.IsNotNull(logList);
            Assert.IsTrue(logList.Log.Count > 0);

            var log = logList.Log.FirstOrDefault(x => x.Uid == expectedLog.Uid);

            Assert.IsNotNull(log);

            var logParam = log.LogParam.FirstOrDefault(x => x.Name == expectedLogParam.Name);

            Assert.IsNotNull(logParam);
            Assert.AreEqual(expectedLogParam.Value, logParam.Value);
            Assert.AreEqual(expectedLogParam.Uom, logParam.Uom);
            Assert.AreEqual(expectedLogParam.Description, logParam.Description);
            Assert.AreEqual(expectedLogParam.Index, logParam.Index);
        }
コード例 #13
0
        public async Task MainViewModel_SubmitQuery_Can_GetFromStore_For_Well()
        {
            // The expected result
            var expectedUid = Guid.NewGuid().ToString();

            // Create the view model and initialize data to add a well to the store
            var vm = new MainViewModel(_runtime);

            vm.Model.Connection = new Core.Connections.Connection()
            {
                Uri = _validWitsmlUri
            };
            vm.Proxy.Url = vm.Model.Connection.Uri;
            vm.Model.ReturnElementType = OptionsIn.ReturnElements.All;

            // Add a well to the store
            var xmlIn = string.Format(
                _addWellTemplate,
                expectedUid,
                DateTime.Now.ToString("yyyyMMdd-HHmmss"));

            await vm.SubmitQuery(Functions.AddToStore, xmlIn, vm.GetOptionsIn(Functions.AddToStore));

            // Retrieve the same well from the store
            xmlIn = string.Format(_getWellTemplate, expectedUid);

            var result = await vm.SubmitQuery(Functions.GetFromStore, xmlIn, vm.GetOptionsIn(Functions.GetFromStore));

            var xmlOut = result.XmlOut;

            // The same uid should be returned as the results.
            Assert.IsNotNull(xmlOut);

            var wellList = EnergisticsConverter.XmlToObject <WellList>(xmlOut);

            Assert.IsNotNull(wellList);
            Assert.AreEqual(1, wellList.Items.Count);

            var well = wellList.Items[0] as Well;

            Assert.IsNotNull(well);
            Assert.AreEqual(expectedUid, well.Uid);
        }
コード例 #14
0
        public async Task MainViewModel_SubmitQuery_Can_GetCap()
        {
            var vm = new MainViewModel(_runtime);

            vm.Model.Connection = new Connection {
                Uri = _validWitsmlUri
            };
            vm.Proxy.Url           = vm.Model.Connection.Uri;
            vm.Model.WitsmlVersion = OptionsIn.DataVersion.Version141.Value;

            var result = await vm.SubmitQuery(Functions.GetCap, string.Empty, vm.GetOptionsIn(Functions.GetCap));

            // Test that the xmlOut is a Capserver List
            var capServerList = EnergisticsConverter.XmlToObject <CapServers>(result.XmlOut);

            Assert.IsNotNull(capServerList);

            // Is this the version we're expecting
            Assert.AreEqual(OptionsIn.DataVersion.Version141.Value, capServerList.CapServer.SchemaVersion);
        }
コード例 #15
0
        public void Well131DataAdapter_GetFromStore_Parse_DocumentInfo_Element()
        {
            string queryInWithDocumentInfo =
                @"<wells xmlns=""http://www.witsml.org/schemas/131"" xmlns:xlink=""http://www.w3.org/1999/xlink"" 
                            xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:dc=""http://purl.org/dc/terms/"" 
                            xmlns:gml=""http://www.opengis.net/gml/3.2"" version=""1.3.1.1"" >                      
                        <documentInfo />
                        <well />
                    </wells>";

            var response = DevKit.GetFromStore(ObjectTypes.Well, queryInWithDocumentInfo, null, "");

            Assert.AreEqual((short)ErrorCodes.Success, response.Result);

            var wellListObject = EnergisticsConverter.XmlToObject <WellList>(response.XMLout);

            Assert.IsNotNull(wellListObject);
            Assert.IsNotNull(wellListObject.DocumentInfo);
            Assert.AreEqual(ObjectTypes.Well, wellListObject.DocumentInfo.DocumentName.Value);
        }
コード例 #16
0
ファイル: WitsmlParser.cs プロジェクト: nilsbenson/witsml
        /// <summary>
        /// Parses the specified XML document using the Standards DevKit.
        /// </summary>
        /// <typeparam name="T">The data object type.</typeparam>
        /// <param name="element">The XML element.</param>
        /// <param name="removeNaN">if set to <c>true</c> remove NaN elements.</param>
        /// <returns>The data object instance.</returns>
        /// <exception cref="WitsmlException"></exception>
        public static T Parse <T>(XElement element, bool removeNaN = true)
        {
            _log.DebugFormat("Deserializing XML element for type: {0}", typeof(T).FullName);

            try
            {
                // Create a copy of the element to prevent loss of NaN elements
                var xml = removeNaN
                    ? RemoveNaNElements <T>(new XElement(element))
                    : element.ToString();

                return(EnergisticsConverter.XmlToObject <T>(xml));
            }
            catch (WitsmlException)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new WitsmlException(ErrorCodes.InputTemplateNonConforming, ex);
            }
        }
コード例 #17
0
        /// <summary>
        /// loadInstance is to handle the energistcs data instance.
        /// </summary>
        /// <param name="epcObject"></param>
        /// <returns></returns>
        public static Object loadInstance(EPCObject epcObject)
        {
            if (epcObject == null)
            {
                return(null);
            }
            ObjectHandle demoObject = createInance(epcObject);

            if (demoObject != null)
            {
                string xmlcontent = EPCReader.createInstance().getEPCFIleText(epcObject.PackageFile, epcObject.Uri.ToString());
                // only load the xml , we can confirm the uuid from real document , otherwise it derieves from the filename.
                epcObject.Uuid = getUuid(epcObject.EPCObjectType, xmlcontent);
                // convert the stream to the energistics object.
                Type   type = demoObject.Unwrap().GetType();
                Object partEnergisticsObject = EnergisticsConverter.XmlToObject(type, xmlcontent, Encoding.UTF8);
                return(partEnergisticsObject);
            }
            else
            {
                return(null);
            }
        }
コード例 #18
0
        public void WitsmlParser_RemoveEmptyElements_Removes_Empty_Elements_From_Elements()
        {
            var xdoc = WitsmlParser.Parse(_wellXml);

            Assert.IsNotNull(xdoc.Root);

            var elemPurposeWell     = new XElement(xdoc.Root.GetDefaultNamespace() + "purposeWell");
            var elemStatusWell      = new XElement(xdoc.Root.GetDefaultNamespace() + "statusWell", "plugged and abandoned");
            var elemGroundElevation = new XElement(xdoc.Root.GetDefaultNamespace() + "groundElevation");
            var nil = XNamespace.Get("http://www.w3.org/2001/XMLSchema-instance").GetName("nil");

            elemGroundElevation.Add(new XAttribute(nil, true));

            xdoc.Root.Elements().FirstOrDefault()?.Add(elemPurposeWell);
            xdoc.Root.Elements().FirstOrDefault()?.Add(elemStatusWell);
            xdoc.Root.Elements().FirstOrDefault()?.Add(elemGroundElevation);

            WitsmlParser.RemoveEmptyElements(xdoc.Root);
            var welllist = EnergisticsConverter.XmlToObject <WellList>(xdoc.Root.ToString());

            Assert.IsNotNull(welllist.Well[0].StatusWell);
            Assert.IsNull(welllist.Well[0].PurposeWell);
            Assert.IsNull(welllist.Well[0].GroundElevation);
        }
コード例 #19
0
        private static void AssertAxisDefintion(Log expectedLog, LogCurveInfo curve, string xmlOut, int expectedCurveCount = 2)
        {
            var logList = EnergisticsConverter.XmlToObject <LogList>(xmlOut);

            Assert.IsNotNull(logList);
            Assert.IsTrue(logList.Log.Count > 0);

            var log = logList.Log.FirstOrDefault(x => x.Uid == expectedLog.Uid);

            Assert.IsNotNull(log);
            Assert.AreEqual(expectedCurveCount, log.LogCurveInfo.Count);

            var logCurveInfo = log.LogCurveInfo.FirstOrDefault(x => x.Mnemonic == curve.Mnemonic);

            Assert.IsNotNull(logCurveInfo);
            Assert.IsTrue(logCurveInfo.AxisDefinition.Count > 0);

            var axisDef = logCurveInfo.AxisDefinition.FirstOrDefault();

            Assert.IsNotNull(axisDef);
            Assert.AreEqual(curve.AxisDefinition[0].Uid, axisDef.Uid);
            Assert.AreEqual(curve.AxisDefinition[0].Count, axisDef.Count);
            Assert.AreEqual(curve.AxisDefinition[0].DoubleValues, axisDef.DoubleValues);
        }
コード例 #20
0
        public void Log141Adapter_AddToStore_Can_Add_Data_Chunk_Exceeds_MongoDb_Document_Size()
        {
            var response = _devKit.Add <WellList, Well>(_well);

            // Adjust Points and Nodes for large file
            WitsmlSettings.LogMaxDataPointsAdd = 5000000;
            WitsmlSettings.LogMaxDataNodesAdd  = 15000;
            WitsmlSettings.LogMaxDataPointsGet = 5000000;
            WitsmlSettings.LogMaxDataNodesGet  = 15000;

            _wellbore.UidWell = response.SuppMsgOut;
            response          = _devKit.Add <WellboreList, Wellbore>(_wellbore);

            var xmlfile = Path.Combine(_testDataDir, string.Format(_exceedFileFormat, "log"));
            var xmlin   = File.ReadAllText(xmlfile);

            var logList = EnergisticsConverter.XmlToObject <LogList>(xmlin);

            Assert.IsNotNull(logList);

            var log = logList.Log.FirstOrDefault();

            Assert.IsNotNull(log);

            log.Uid          = null;
            log.UidWell      = _wellbore.UidWell;
            log.UidWellbore  = response.SuppMsgOut;
            log.NameWell     = _well.Name;
            log.NameWellbore = _wellbore.Name;

            var logDataAdded = log.LogData.FirstOrDefault();

            Assert.IsNotNull(logDataAdded);

            response = _devKit.Add <LogList, Log>(log);
            Assert.AreEqual((short)ErrorCodes.Success, response.Result);

            var uidLog = response.SuppMsgOut;

            log.Uid = uidLog;
            var uri = log.GetUri();

            // Query Channel Data Chunk
            var filter     = MongoDbUtility.BuildFilter <ChannelDataChunk>("Uri", uri.ToString());
            var database   = _provider.GetDatabase();
            var collection = database.GetCollection <ChannelDataChunk>("channelDataChunk");
            var chunks     = collection.Find(filter).ToList();

            Assert.IsTrue(chunks.Count > 0);

            // Query Mongo File
            var fileChunks = chunks.Where(c => string.IsNullOrEmpty(c.Data)).ToList();

            Assert.IsTrue(fileChunks.Count > 0);

            var bucket = new GridFSBucket(database, new GridFSBucketOptions
            {
                BucketName     = ChannelDataChunkAdapter.BucketName,
                ChunkSizeBytes = WitsmlSettings.ChunkSizeBytes
            });

            foreach (var fc in fileChunks)
            {
                Assert.IsNull(fc.Data);
                var mongoFileFilter = Builders <GridFSFileInfo> .Filter.Eq(fi => fi.Metadata[ChannelDataChunkAdapter.FileName], fc.Uid);

                var mongoFile = bucket.Find(mongoFileFilter).FirstOrDefault();
                Assert.IsNotNull(mongoFile);
            }

            // Query Log
            var query = new Log
            {
                Uid         = uidLog,
                UidWell     = log.UidWell,
                UidWellbore = log.UidWellbore
            };

            var results = _devKit.Query <LogList, Log>(query, optionsIn: OptionsIn.ReturnElements.All);

            Assert.AreEqual(1, results.Count);

            var result = results.First();

            Assert.IsNotNull(result);

            var logDataReturned = result.LogData.FirstOrDefault();

            Assert.IsNotNull(logDataReturned);

            Assert.AreEqual(logDataAdded.Data.Count, logDataReturned.Data.Count);
        }
コード例 #21
0
        public void Log131DataAdapter_AddToStore_Add_DepthLog_With_Unordered_LogCurveInfo()
        {
            AddParents();

            DevKit.InitHeader(Log, LogIndexType.measureddepth);
            DevKit.InitDataMany(Log, DevKit.Mnemonics(Log), DevKit.Units(Log), 10);

            // Reverse logCurveInfo order
            Log.LogCurveInfo.Reverse();
            DevKit.AddAndAssert(Log);
            var indexCurve = Log.LogCurveInfo.FirstOrDefault(x => x.Mnemonic == Log.IndexCurve.Value);

            // Create two new curves
            var newCurve1 = new LogCurveInfo()
            {
                Mnemonic    = "Test",
                Unit        = "gAPI",
                ColumnIndex = 3,
                NullValue   = "|"
            };
            var newCurve2 = new LogCurveInfo()
            {
                Mnemonic    = "Test2",
                Unit        = "gAPI",
                ColumnIndex = 2,
                NullValue   = "|"
            };

            // Update 2 new curves to the log header
            var update = new Log()
            {
                UidWell      = Log.UidWell,
                UidWellbore  = Log.UidWellbore,
                Uid          = Log.Uid,
                LogCurveInfo = new List <LogCurveInfo>()
                {
                    indexCurve,
                    newCurve1,
                    newCurve2
                }
            };

            DevKit.UpdateAndAssert(update);

            // Add data
            update.LogData = new List <string>();
            for (int i = 1; i < 11; i++)
            {
                var val1 = i % 2 == 0 ? "|" : i.ToString();
                var val2 = i % 2 == 1 ? "|" : i.ToString();
                update.LogData.Add($"{i},{val1},{val2}");
            }
            DevKit.UpdateAndAssert(update);

            // Query by example to get values from the index curve and 2 new curves
            var queryIn = "<logs version=\"1.3.1.1\" xmlns=\"http://www.witsml.org/schemas/131\" > " + Environment.NewLine +
                          $"  <log uidWell=\"{Log.UidWell}\" uidWellbore=\"{Log.UidWellbore}\" uid=\"{Log.Uid}\">" + Environment.NewLine +
                          "    <nameWell />" + Environment.NewLine +
                          "    <nameWellbore />" + Environment.NewLine +
                          "    <name />" + Environment.NewLine +
                          "    <objectGrowing />" + Environment.NewLine +
                          "    <serviceCompany />" + Environment.NewLine +
                          "    <runNumber />" + Environment.NewLine +
                          "    <creationDate />" + Environment.NewLine +
                          "    <indexType />" + Environment.NewLine +
                          "    <startIndex uom=\"\" />" + Environment.NewLine +
                          "    <endIndex uom=\"\" />" + Environment.NewLine +
                          "    <startDateTimeIndex />" + Environment.NewLine +
                          "    <endDateTimeIndex />" + Environment.NewLine +
                          "    <direction />" + Environment.NewLine +
                          "    <indexCurve columnIndex=\"\" />" + Environment.NewLine +
                          "    <logCurveInfo>" + Environment.NewLine +
                          $"      <mnemonic>{indexCurve.Mnemonic}</mnemonic>" + Environment.NewLine +
                          "       <unit />" + Environment.NewLine +
                          "       <columnIndex />" + Environment.NewLine +
                          "    </logCurveInfo>" + Environment.NewLine +
                          "    <logCurveInfo>" + Environment.NewLine +
                          $"      <mnemonic>{newCurve2.Mnemonic}</mnemonic>" + Environment.NewLine +
                          "       <unit />" + Environment.NewLine +
                          "       <columnIndex />" + Environment.NewLine +
                          "    </logCurveInfo>" + Environment.NewLine +
                          "    <logCurveInfo>" + Environment.NewLine +
                          $"      <mnemonic>{newCurve1.Mnemonic}</mnemonic>" + Environment.NewLine +
                          "       <unit />" + Environment.NewLine +
                          "       <columnIndex />" + Environment.NewLine +
                          "    </logCurveInfo>" + Environment.NewLine +
                          "    <logData />" + Environment.NewLine +
                          "  </log>" + Environment.NewLine +
                          "</logs>";

            var result = DevKit.GetFromStore(ObjectTypes.Log, queryIn, null, "returnElements=requested");

            Assert.AreEqual((short)ErrorCodes.Success, result.Result);
            Assert.IsNotNull(result);
            var logs = EnergisticsConverter.XmlToObject <LogList>(result.XMLout);

            Assert.IsNotNull(logs);
            var log = logs.Log.FirstOrDefault();

            Assert.IsNotNull(log);
            Assert.IsNotNull(log.LogData);
            Assert.AreEqual(3, log.LogCurveInfo.Count);
            Assert.AreEqual(10, log.LogData.Count);
            foreach (var lc in log.LogCurveInfo)
            {
                var curve = update.LogCurveInfo.FirstOrDefault(x => x.Mnemonic == lc.Mnemonic);
                Assert.IsNotNull(curve);
                // Ensure that the value from the update matches the response using columnIndex
                for (int i = 0; i < 10; i++)
                {
                    Assert.AreEqual(log.LogData[i].Split(',')[lc.ColumnIndex.Value - 1],
                                    update.LogData[i].Split(',')[curve.ColumnIndex.Value - 1]);
                }
            }
        }
コード例 #22
0
        public async Task CascadedDelete141Tests_Can_Parallel_Delete_Populated_Wellbores()
        {
            DevKit.AddAndAssert(Well);

            // Number of objects to generate
            var numOfObjects = 5;

            // Create logs
            var logs = DevKit.GenerateLogs(Well.Uid, Well.Name, LogIndexType.measureddepth, numOfObjects);

            // Create trajectories
            var trajectories = DevKit.GenerateTrajectories(Well.Uid, Well.Name, numOfObjects);

            // Add 5 wellbores with data objects
            for (var i = 0; i < numOfObjects; i++)
            {
                var wellbore = new Wellbore()
                {
                    Uid = DevKit.Uid(), UidWell = Well.Uid, Name = DevKit.Name(), NameWell = Well.Name
                };
                DevKit.AddAndAssert(wellbore);
                DevKit.AddListOfLogsToWellbore(logs, wellbore);
                DevKit.AddListOfTrajectoriesToWellbore(trajectories, wellbore);
            }

            // Delete well with cascadedDelete options in
            var wellbores = DevKit.Get <WellboreList, Wellbore>(DevKit.List(new Wellbore()
            {
                UidWell = Well.Uid
            }),
                                                                ObjectTypes.Wellbore, string.Empty, OptionsIn.ReturnElements.IdOnly);

            Assert.IsNotNull(wellbores);

            var wellboreList = EnergisticsConverter.XmlToObject <WellboreList>(wellbores.XMLout);

            Assert.IsNotNull(wellboreList);
            Assert.AreEqual(numOfObjects, wellboreList.Wellbore.Count);

            // Delete each wellbore in parallel
            var taskList = new List <Task>();

            wellboreList.Wellbore.ForEach(x =>
            {
                taskList.Add(new Task(() =>
                {
                    var deleteWellbore = new Wellbore {
                        Uid = x.Uid, UidWell = x.UidWell
                    };
                    var result = DevKit.Delete <WellboreList, Wellbore>(deleteWellbore, ObjectTypes.Wellbore,
                                                                        string.Empty, OptionsIn.CascadedDelete.True);
                    Assert.IsNotNull(result);
                    Assert.AreEqual(result.Result, 1);

                    // Ensure wellbore does not exist anymore
                    DevKit.GetAndAssert(deleteWellbore, false);
                }));
            });

            taskList.ForEach(x => x.Start());
            await Task.WhenAll(taskList);

            // Get all wellbores remaining under well
            wellbores = DevKit.Get <WellboreList, Wellbore>(DevKit.List(new Wellbore()
            {
                UidWell = Well.Uid
            }),
                                                            ObjectTypes.Wellbore, string.Empty, OptionsIn.ReturnElements.IdOnly);
            Assert.IsNotNull(wellbores);

            wellboreList = EnergisticsConverter.XmlToObject <WellboreList>(wellbores.XMLout);
            Assert.IsNotNull(wellboreList);
            Assert.AreEqual(0, wellboreList.Wellbore.Count);
        }
コード例 #23
0
        public async Task CascadedDelete141Tests_Can_Parallel_Delete_Well_With_Populated_Wellbores()
        {
            // Number of objects to generate
            var numOfObjects = 5;

            var wellList = new List <Well>();

            for (var i = 0; i < numOfObjects; i++)
            {
                wellList.Add(new Well()
                {
                    Uid = DevKit.Uid(), Name = DevKit.Name(), TimeZone = "-06:00"
                });
            }

            // Add wells
            wellList.ForEach(x => DevKit.AddAndAssert(x));

            foreach (var well in wellList)
            {
                // Create logs
                var logs = DevKit.GenerateLogs(well.Uid, well.Name, LogIndexType.measureddepth, numOfObjects);

                // Create trajectories
                var trajectories = DevKit.GenerateTrajectories(well.Uid, well.Name, numOfObjects);

                // Add 5 wellbores with data objects
                for (var i = 0; i < numOfObjects; i++)
                {
                    var wellbore = new Wellbore()
                    {
                        Uid = DevKit.Uid(), UidWell = well.Uid, Name = DevKit.Name(), NameWell = well.Name
                    };
                    DevKit.AddAndAssert(wellbore);
                    DevKit.AddListOfLogsToWellbore(logs, wellbore);
                    DevKit.AddListOfTrajectoriesToWellbore(trajectories, wellbore);
                }
            }

            // Delete each well in parallel
            var taskList = new List <Task>();

            wellList.ForEach(x =>
            {
                taskList.Add(new Task(() =>
                {
                    var deleteWell = new Well {
                        Uid = x.Uid
                    };
                    var result = DevKit.Delete <WellList, Well>(deleteWell, ObjectTypes.Well,
                                                                string.Empty, OptionsIn.CascadedDelete.True);
                    Assert.IsNotNull(result);
                    Assert.AreEqual(result.Result, 1);

                    // Ensure well does not exist anymore
                    DevKit.GetAndAssert(deleteWell, false);
                }));
            });

            taskList.ForEach(x => x.Start());
            await Task.WhenAll(taskList);

            wellList.ForEach(x =>
            {
                var wells = DevKit.Get <WellList, Well>(DevKit.List(new Well()
                {
                    Uid = x.Uid
                }));
                Assert.IsNotNull(wells);

                var result = EnergisticsConverter.XmlToObject <WellList>(wells.XMLout);
                Assert.IsNotNull(wells);
                Assert.AreEqual(0, result.Well.Count);
            });
        }
コード例 #24
0
        public void Log141Adapter_DeleteFromStore_Can_Delete_Log_With_Data_File()
        {
            // Add log
            AddParents();

            // Adjust Points and Nodes for large file
            WitsmlSettings.LogMaxDataPointsAdd = 5000000;
            WitsmlSettings.LogMaxDataNodesAdd  = 15000;
            WitsmlSettings.LogMaxDataPointsGet = 5000000;
            WitsmlSettings.LogMaxDataNodesGet  = 15000;

            var xmlfile = Path.Combine(_testDataDir, string.Format(_exceedFileFormat, "log"));
            var xmlin   = File.ReadAllText(xmlfile);

            var logList = EnergisticsConverter.XmlToObject <LogList>(xmlin);

            Assert.IsNotNull(logList);

            var log = logList.Log.FirstOrDefault();

            Assert.IsNotNull(log);

            log.Uid          = _devKit.Uid();
            log.UidWell      = _well.Uid;
            log.UidWellbore  = _wellbore.Uid;
            log.NameWell     = _well.Name;
            log.NameWellbore = _wellbore.Name;

            var logDataAdded = log.LogData.FirstOrDefault();

            Assert.IsNotNull(logDataAdded);

            AddLog(log);

            // Query log
            var result   = GetLog(log);
            var logDatas = result.LogData;

            Assert.IsNotNull(logDatas);
            var logData = logDatas.FirstOrDefault();

            Assert.IsNotNull(logData);
            Assert.AreEqual(logDataAdded.Data.Count, logData.Data.Count);

            var uri = log.GetUri();

            // Query Data Chunk
            var chunks = GetDataChunks(uri);

            Assert.IsTrue(chunks.Count > 0);

            // Query Mongo File
            var fileChunks = chunks.Where(c => string.IsNullOrEmpty(c.Data)).ToList();

            Assert.IsTrue(fileChunks.Count > 0);

            var database = _provider.GetDatabase();

            foreach (var fc in fileChunks)
            {
                Assert.IsNull(fc.Data);
                var mongoFile = GetMongoFile(database, fc.Uid);
                Assert.IsNotNull(mongoFile);
            }

            var fileUids = fileChunks.Select(fc => fc.Uid).ToList();

            // Delete log
            DeleteLog(log, string.Empty);

            // Assert log is deleted
            var query   = _devKit.CreateLog(log.Uid, null, log.UidWell, null, log.UidWellbore, null);
            var results = _devKit.Query <LogList, Log>(query, optionsIn: OptionsIn.ReturnElements.All);

            Assert.AreEqual(0, results.Count);

            // Assert Channel Data Chunk is deleted
            chunks = GetDataChunks(uri);
            Assert.IsTrue(chunks.Count == 0);

            // Assert Mongo file is deleted
            foreach (var uid in fileUids)
            {
                var mongoFile = GetMongoFile(database, uid);
                Assert.IsNull(mongoFile);
            }
        }