public void SetUp()
        {
            RxApp.MainThreadScheduler = Scheduler.CurrentThread;

            this.uri = new Uri("http://www.rheageoup.com");
            this.SetupRecognizePackUir();

            this.assembler = new Assembler(this.uri);

            this.session = new Mock <ISession>();

            var dtos = new List <CDP4Common.DTO.Thing>();

            var siteDirectory = new CDP4Common.DTO.SiteDirectory(Guid.NewGuid(), 0);

            dtos.Add(siteDirectory);
            var engineeringModel = new CDP4Common.DTO.EngineeringModel(Guid.NewGuid(), 0);

            dtos.Add(engineeringModel);
            var iteration = new CDP4Common.DTO.Iteration(Guid.NewGuid(), 0);

            engineeringModel.Iteration.Add(iteration.Iid);
            dtos.Add(iteration);

            this.assembler.Synchronize(dtos);

            this.session.Setup(x => x.DataSourceUri).Returns("test");
            this.session.Setup(x => x.Assembler).Returns(this.assembler);

            this.panelNavigationService       = new Mock <IPanelNavigationService>();
            this.thingDialogNavigationService = new Mock <IThingDialogNavigationService>();
            this.dialogNavigationService      = new Mock <IDialogNavigationService>();
            this.serviceLocator = new Mock <IServiceLocator>();

            this.excelQuery = new Mock <IExcelQuery>();
            this.excelQuery.Setup(x => x.IsActiveWorkbookAvailable(It.IsAny <NetOffice.ExcelApi.Application>())).Returns(true);
            this.officeApplicationWrapper = new Mock <IOfficeApplicationWrapper>();

            this.permittingPermissionService = new Mock <IPermissionService>();
            this.permittingPermissionService.Setup(x => x.CanRead(It.IsAny <Thing>())).Returns(true);
            this.permittingPermissionService.Setup(x => x.CanWrite(It.IsAny <Thing>())).Returns(true);

            this.pluginSettingsService = new Mock <IPluginSettingsService>();

            this.amountOfRibbonControls = 10;
            this.order = 1;

            this.ribbonPart = new ParameterSheetGeneratorRibbonPart(this.order, this.panelNavigationService.Object, this.thingDialogNavigationService.Object, this.dialogNavigationService.Object, this.pluginSettingsService.Object, this.officeApplicationWrapper.Object);

            ServiceLocator.SetLocatorProvider(() => this.serviceLocator.Object);
            this.serviceLocator.Setup(x => x.GetInstance <IThingDialogNavigationService>())
            .Returns(this.thingDialogNavigationService.Object);
        }
        /// <summary>
        /// Instantiate and deserialize the properties of a <paramref name="EngineeringModel"/>
        /// </summary>
        /// <param name="jObject">The <see cref="JObject"/> containing the data</param>
        /// <returns>The <see cref="EngineeringModel"/> to instantiate</returns>
        public static CDP4Common.DTO.EngineeringModel FromJsonObject(JObject jObject)
        {
            var iid              = jObject["iid"].ToObject <Guid>();
            var revisionNumber   = jObject["revisionNumber"].IsNullOrEmpty() ? 0 : jObject["revisionNumber"].ToObject <int>();
            var engineeringModel = new CDP4Common.DTO.EngineeringModel(iid, revisionNumber);

            if (!jObject["book"].IsNullOrEmpty())
            {
                engineeringModel.Book.AddRange(jObject["book"].ToOrderedItemCollection());
            }

            if (!jObject["commonFileStore"].IsNullOrEmpty())
            {
                engineeringModel.CommonFileStore.AddRange(jObject["commonFileStore"].ToObject <IEnumerable <Guid> >());
            }

            if (!jObject["engineeringModelSetup"].IsNullOrEmpty())
            {
                engineeringModel.EngineeringModelSetup = jObject["engineeringModelSetup"].ToObject <Guid>();
            }

            if (!jObject["excludedDomain"].IsNullOrEmpty())
            {
                engineeringModel.ExcludedDomain.AddRange(jObject["excludedDomain"].ToObject <IEnumerable <Guid> >());
            }

            if (!jObject["excludedPerson"].IsNullOrEmpty())
            {
                engineeringModel.ExcludedPerson.AddRange(jObject["excludedPerson"].ToObject <IEnumerable <Guid> >());
            }

            if (!jObject["genericNote"].IsNullOrEmpty())
            {
                engineeringModel.GenericNote.AddRange(jObject["genericNote"].ToObject <IEnumerable <Guid> >());
            }

            if (!jObject["iteration"].IsNullOrEmpty())
            {
                engineeringModel.Iteration.AddRange(jObject["iteration"].ToObject <IEnumerable <Guid> >());
            }

            if (!jObject["lastModifiedOn"].IsNullOrEmpty())
            {
                engineeringModel.LastModifiedOn = jObject["lastModifiedOn"].ToObject <DateTime>();
            }

            if (!jObject["logEntry"].IsNullOrEmpty())
            {
                engineeringModel.LogEntry.AddRange(jObject["logEntry"].ToObject <IEnumerable <Guid> >());
            }

            if (!jObject["modellingAnnotation"].IsNullOrEmpty())
            {
                engineeringModel.ModellingAnnotation.AddRange(jObject["modellingAnnotation"].ToObject <IEnumerable <Guid> >());
            }

            if (!jObject["modifiedOn"].IsNullOrEmpty())
            {
                engineeringModel.ModifiedOn = jObject["modifiedOn"].ToObject <DateTime>();
            }

            if (!jObject["thingPreference"].IsNullOrEmpty())
            {
                engineeringModel.ThingPreference = jObject["thingPreference"].ToObject <string>();
            }

            return(engineeringModel);
        }